From 6e8f55437191161ce36afad5ffbf94e537071d35 Mon Sep 17 00:00:00 2001 From: ncantu Date: Mon, 26 Jan 2026 12:59:31 +0100 Subject: [PATCH] UserWallet: Finalisation du pairing avec mots uniquement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations:** - Finaliser l'implémentation du pairing avec mots uniquement - Mettre à jour la documentation du pairing connecté **Root causes:** - N/A (évolution fonctionnelle) **Correctifs:** - N/A **Evolutions:** - Finalisation du pairing avec mots uniquement - Mise à jour de la documentation **Pages affectées:** - features/userwallet-pairing-words-only-finalise.md - userwallet/features/userwallet-pairing-connecte.md --- features/userwallet-pairing-words-only-finalise.md | 11 +++++++++++ userwallet/features/userwallet-pairing-connecte.md | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 features/userwallet-pairing-words-only-finalise.md diff --git a/features/userwallet-pairing-words-only-finalise.md b/features/userwallet-pairing-words-only-finalise.md new file mode 100644 index 0000000..f93e382 --- /dev/null +++ b/features/userwallet-pairing-words-only-finalise.md @@ -0,0 +1,11 @@ +# Pairing mots seuls — finalisation + +**Objectif :** Finaliser le pairing 8 mots sans échange de clé publique : suppression de `validatePublicKeyHex`, mise à jour de la doc, cohérence avec WordInputGrid et confirmation (plaintext si pas de `remotePublicKey`). + +**Modifications :** +- `pairing.ts` : suppression de `validatePublicKeyHex` et des constantes `PUBKEY_HEX_LEN` / `PUBKEY_PREFIX`. Commentaire `addRemotePairFromWords` précisant que `remotePublicKey` est optionnel. +- `userwallet-pairing-connecte.md` : flux 1er/2e device décrit en « pair distant (8 mots BIP32-style) » ; « membre finalisé » → « membre finaliser » ; Statut mis à jour (pairing 8 mots uniquement, chiffrement optionnel via `PairConfig.publicKey`, sinon base64) ; Impacts (contrats) alignés sur un seul type « membre finaliser ». + +**Impacts :** Aucun sur le comportement actuel. Les écrans utilisent déjà `WordInputGrid`, `addRemotePairFromWords(parsed, [], undefined)` et la confirmation avec `remote.publicKey` optionnel. + +**Lint :** Le projet userwallet signale `ERR_MODULE_NOT_FOUND` pour `typescript-eslint` dans la config ESLint. `npm run type-check` et les lints IDE sur les fichiers modifiés sont OK. diff --git a/userwallet/features/userwallet-pairing-connecte.md b/userwallet/features/userwallet-pairing-connecte.md index 6ecd9c9..c8e492c 100644 --- a/userwallet/features/userwallet-pairing-connecte.md +++ b/userwallet/features/userwallet-pairing-connecte.md @@ -30,7 +30,7 @@ Les messages sont envoyés essentiellement chiffrés. Il faut avoir reçu des me ## Impacts -- **Contrats** : format "membre finaliser" / "membre finalisé", validateurs, signatures multiples. +- **Contrats** : format "membre finaliser", validateurs, signatures multiples (les deux devices signent le même message). - **Relais** : publication message + signatures + clés (chiffrement, DH). - **IndexedDB** : stockage des versions et des contrats signés. - **Sync** : récupération des messages chiffrés, clés DH, déchiffrement, mise à jour du graphe et détection des confirmations croisées. @@ -49,4 +49,4 @@ Les messages sont envoyés essentiellement chiffrés. Il faut avoir reçu des me ## Statut - **Documentation** : présente. -- **Implémentation** : faite (message "membre finaliser", échange de signatures, publication relais, stockage IndexedDB, affichage "Connecté"). Version incrémentée : device 1 re-publie M2 (version "2") après réception de la signature du 2e. Détection au Sync : si device 1 a timeout au poll, un « Synchroniser maintenant » vérifie messages + signatures et enregistre la confirmation. **Chiffrement ECDH** : échange de clés publiques (QR/URL `pubkey`, formulaire « Clé du 2e »), `PairConfig.publicKey`, chiffrement `encryptWithECDH`, POST `MsgCle` (algo `AES-GCM-ECDH`, `df_ecdh_scannable` = clé du signataire), déchiffrement au fetch. Type "membre finalisé" (device 2) : non implémenté, les deux signent le même "membre finaliser". **Export/import** : `pairing_confirm` inclus dans l’export, restauré à l’import ; suppression (« Supprimer ») vide aussi `userwallet_pairing_confirm`. +- **Implémentation** : faite (message "membre finaliser", échange de signatures, publication relais, stockage IndexedDB, affichage "Connecté"). Version incrémentée : device 1 re-publie M2 (version "2") après réception de la signature du 2e. Détection au Sync : si device 1 a timeout au poll, un « Synchroniser maintenant » vérifie messages + signatures et enregistre la confirmation. **Pairing** : uniquement par 8 mots (BIP32-style) ; pas d'échange de clé publique dans les formulaires. **Chiffrement** : si `PairConfig.publicKey` est fourni (optionnel), ECDH `encryptWithECDH` / POST `MsgCle` ; sinon message en clair (base64). **Export/import** : `pairing_confirm` inclus dans l’export, restauré à l’import ; suppression (« Supprimer ») vide aussi `userwallet_pairing_confirm`.