anchorage_layer_simple/features/userwallet-collecte-distante-2-devices.md
ncantu 5de870fa13 Update login state machine and add new login components
**Motivations:**
- Continue implementation of login state machine
- Add new login components for collect, share and sign screens
- Add utilities for login signing, validation, and publishing
- Update documentation for CNIL compliance and login workflow
- Add features for timeouts, backoff, and validator acceptance

**Root causes:**
- N/A (feature additions and improvements)

**Correctifs:**
- Update login state machine implementation
- Update graph resolver and sync service

**Evolutions:**
- Add LoginCollectShare and LoginSignScreen components
- Add useSignAndPostLogin hook
- Add login utilities: loginSign, loginPublish, loginValidation, collectSignatures
- Add sync utilities: syncUpdateGraph, syncValidate
- Add validatorsAccept utility
- Update App.tsx and LoginScreen.tsx
- Update loginBuilder and loginStateMachine services
- Add documentation for CNIL compliance, remote collection, timeouts, and validator acceptance
- Update identity types

**Pages affectées:**
- userwallet/src/App.tsx
- userwallet/src/components/LoginScreen.tsx
- userwallet/src/components/LoginCollectShare.tsx (new)
- userwallet/src/components/LoginSignScreen.tsx (new)
- userwallet/src/hooks/useSignAndPostLogin.ts (new)
- userwallet/src/services/graphResolver.ts
- userwallet/src/services/loginBuilder.ts
- userwallet/src/services/loginStateMachine.ts
- userwallet/src/services/syncService.ts
- userwallet/src/services/syncUpdateGraph.ts (new)
- userwallet/src/services/syncValidate.ts (new)
- userwallet/src/types/identity.ts
- userwallet/src/utils/relay.ts
- userwallet/src/utils/collectSignatures.ts (new)
- userwallet/src/utils/loginPublish.ts (new)
- userwallet/src/utils/loginSign.ts (new)
- userwallet/src/utils/loginValidation.ts (new)
- userwallet/src/utils/validatorsAccept.ts (new)
- userwallet/docs/synthese.md
- userwallet/docs/specs-champs-obligatoires-cnil.md
- userwallet/features/userwallet-acceptation-version-validateurs.md (new)
- userwallet/features/userwallet-dh-systematique-scan-fetch.md (new)
- features/userwallet-contrat-login-reste-a-faire.md
- features/userwallet-login-state-machine.md
- features/userwallet-validation-conformite.md
- features/userwallet-champs-obligatoires-cnil.md (new)
- features/userwallet-collecte-distante-2-devices.md (new)
- features/userwallet-timeouts-backoff.md (new)
- mempool (submodule)
- hash_list.txt
- hash_list_cache.txt
2026-01-26 15:04:07 +01:00

2.9 KiB
Raw Blame History

UserWallet Collecte distante (2 devices)

Author: Équipe 4NK
Date: 2026-01-26

Objectif

Supporter cardinalite_minimale > 1 avec deux appareils : signature locale sur le 1ᵉʳ, signature sur le 2ᵉ, récupération des sigs via les relais, puis publication de la preuve lorsque toutes les sigs requises sont réunies.

Flux

  1. Device 1 : construire le challenge, signer localement (pairs locaux du membre), publier message + sigs locales sur les relais.
  2. Device 1 : boucle de collecte — fetch des sigs par hash sur les relais, merge avec les sigs locales, dédup par pair. Dès que hasEnoughSignatures (assez de pairs distincts par membre par rapport à cardinalite_minimale), on arrête.
  3. Device 2 : obtenir hash et nonce (lien ou QR émis par Device 1 pendant la collecte). Ouvrir /login-sign?hash=...&nonce=..., signer hash-nonce avec la clé du pair local, poster la signature sur les relais.
  4. Device 1 : une fois assez de sigs (dont celle du 2ᵉ), vérification (dépendances, clés autorisées, strict), marquage du nonce, envoi de la preuve au parent (iframe).

Modifications

  • loginBuilder.signChallenge : signature de hash-nonce uniquement (plus pairUuid), pour alignement vérif + relais.
  • loginValidation : requiredSigsPerMember, hasEnoughSignatures (pairs distincts par membre). Suppression du refus systématique cardinalite > 1.
  • collectSignatures : fetchSignaturesForHash, buildPairToMembers, buildPubkeyToPair, mapMsgSignaturesToProofFormat, runCollectLoop (poll + timeout).
  • loginPublish : publishMessageAndSigs (message + sigs locales vers relais).
  • LoginScreen : signature pour les pairs locaux du membre uniquement ; après publication, boucle de collecte si loginPath ; vérification et envoi de la preuve après collecte. Affichage « En attente des signatures des autres appareils… » + LoginCollectShare (lien + QR vers /login-sign).
  • LoginSignScreen : route /login-sign?hash=...&nonce=... ; signature et publication de la sig sur les relais.
  • LoginCollectShare : lien et QR vers /login-sign?hash=...&nonce=... pendant la collecte.

Modalités de déploiement

Déploiement classique du front userwallet. Aucune évolution côte relais.

Modalités danalyse

  • Device 1 : construction du chemin, challenge, publication → collecte → affichage du lien/QR. Ouvrir le lien sur le 2ᵉ appareil, signer → retour sur le 1ᵉʳ, la collecte doit finir et la preuve être envoyée.
  • Device 2 : aller sur /login-sign?hash=...&nonce=... (ou scanner le QR), vérifier « Signature publiée ».
  • Vérifier timeout de collecte (5 min) si le 2ᵉ ne signe pas.

Références

  • features/userwallet-validation-conformite.md (§ Cardinalite_minimale)
  • userwallet/docs/specs.md (collecte signatures mFA, S_LOGIN_COLLECT_SIGNATURES)