anchorage_layer_simple/userwallet/features/userwallet-pairing-connecte.md
ncantu 5689693507 UserWallet: Multiple feature implementations and updates
**Motivations:**
- Implement BIP39 mnemonic import for identity creation
- Add password-based key protection for enhanced security
- Improve pairing workflow with QR code and URL display
- Migrate hash cache from LocalStorage to IndexedDB for better scalability
- Update signet-dashboard and mempool components

**Root causes:**
- N/A (feature implementations)

**Correctifs:**
- N/A (no bug fixes in this commit)

**Evolutions:**
- BIP39 mnemonic import: Support for 12/24 word English mnemonics with BIP32 derivation path m/44'/0'/0'/0/0
- Key protection: Password-based encryption of private keys at rest with unlock/lock functionality
- Pairing workflow: QR code and URL display for device pairing, form-based word exchange between devices
- IndexedDB migration: Hash cache moved from LocalStorage to IndexedDB to avoid size limitations
- Global action bar: URL parameter support for navigation
- Pairing connection: Enhanced pairing status management

**Pages affectées:**
- userwallet/src/utils/identity.ts
- userwallet/src/utils/keyProtection.ts
- userwallet/src/utils/sessionUnlockedKey.ts
- userwallet/src/utils/indexedDbStorage.ts
- userwallet/src/utils/cache.ts
- userwallet/src/utils/pairing.ts
- userwallet/src/components/UnlockScreen.tsx
- userwallet/src/components/PairingDisplayScreen.tsx
- userwallet/src/components/PairingSetupBlock.tsx
- userwallet/src/components/GlobalActionBar.tsx
- userwallet/src/components/HomeScreen.tsx
- userwallet/src/components/ImportIdentityScreen.tsx
- userwallet/src/components/DataExportImportScreen.tsx
- userwallet/src/hooks/useIdentity.ts
- userwallet/src/hooks/usePairingConnected.ts
- userwallet/src/services/syncService.ts
- userwallet/src/services/pairingConfirm.ts
- userwallet/src/App.tsx
- userwallet/package.json
- userwallet/docs/specs.md
- userwallet/docs/storage.md
- userwallet/docs/synthese.md
- signet-dashboard/public/*.html
- signet-dashboard/public/app.js
- signet-dashboard/public/styles.css
- mempool (submodule updates)
- hash_list.txt, hash_list_cache.txt, utxo_list.txt, utxo_list_cache.txt, fees_list.txt
- features/*.md (documentation files)
2026-01-26 10:23:34 +01:00

3.6 KiB
Raw Blame History

Pairing "Connecté" — confirmation croisée et affichage

Objectif

Afficher "Connecté" sur chaque device une fois que le flux de confirmation signé de lautre device a été reçu et traité. La confirmation repose sur un message "membre finaliser" signé par les deux devices, publié sur le relais avec version incrémentée, et stockée en IndexedDB.

Rappel

Les messages sont envoyés essentiellement chiffrés. Il faut avoir reçu des messages de clé (Diffie-Hellman) pour déchiffrer la clé de chiffrement et, via le hash, récupérer sur le relais le message qui nous concerne.

Flux attendu

Premier device

  1. Après "Associer le pair", le 1er device a ajouté la clé publique du 2e (pair distant).
  2. Le 1er device envoie un message "membre finaliser" quil signe.
  3. Ce message doit aussi être signé par le 2e device.
  4. Le 1er device attend la signature du 2e device sur ce contrat.
  5. Une fois reçue, il lajoute aux signatures du contrat, vérifie que toutes les signatures attendues sont présentes, puis publie le contrat sur le relais (à nouveau), avec une version incrémentée.
  6. Il garde la version (et le contrat) dans IndexedDB.
  7. Quand tout est OK (flux signé du 2e reçu et traité) → afficher "Connecté" sur le 1er device.

Deuxième device

  1. Après "Associer le pair", le 2e device a ajouté la clé publique du 1er (pair distant).
  2. Le 2e device envoie un message "membre finalisé" quil signe.
  3. Il envoie sa signature au 1er device (via relais : message/clé/signature).
  4. Il complète le contrat avec sa signature, incrémente la version, et le garde dans IndexedDB.
  5. Quand tout est OK (flux signé du 1er reçu et traité) → afficher "Connecté" sur le 2e device.

Impacts

  • Contrats : format "membre finaliser" / "membre finalisé", validateurs, signatures multiples.
  • 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.

Modalités de déploiement

  • Déploiement classique du front userwallet.
  • Les relais doivent exposer POST message, POST signatures, POST keys (déjà prévus).
  • Aucune migration IndexedDB imposée pour lexistant tant que le protocole nest pas implémenté.

Modalités danalyse

  • Vérifier les logs (console) pour les pairs et contrats.
  • Tester le parcours "Associer le pair" sur les deux devices puis vérifier laffichage "Connecté" une fois les signatures croisées reçues et le contrat publié.

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 lexport, restauré à limport ; suppression (« Supprimer ») vide aussi userwallet_pairing_confirm.