UserWallet: Finalisation du pairing avec mots uniquement

**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
This commit is contained in:
ncantu 2026-01-26 12:59:31 +01:00
parent 46bf9676a0
commit 6e8f554371
2 changed files with 13 additions and 2 deletions

View File

@ -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.

View File

@ -30,7 +30,7 @@ Les messages sont envoyés essentiellement chiffrés. Il faut avoir reçu des me
## Impacts ## 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). - **Relais** : publication message + signatures + clés (chiffrement, DH).
- **IndexedDB** : stockage des versions et des contrats signés. - **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. - **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 ## Statut
- **Documentation** : présente. - **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 lexport, restauré à limport ; 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 lexport, restauré à limport ; suppression (« Supprimer ») vide aussi `userwallet_pairing_confirm`.