**Motivations:** - Add new features and fixes for userwallet application - Update documentation for pairing, login state machine, and sync - Add new utilities for bloom filters, nonce store, and contract versioning - Fix mempool websocket offline issues **Root causes:** - N/A (feature additions and improvements) **Correctifs:** - Fix mempool websocket offline handling - Update ESLint configuration **Evolutions:** - Add login state machine service and hook - Add sync loop service - Add bloom filter utilities for anti-replay and state visibility - Add nonce store and contract version utilities - Update pairing confirmation and graph resolver services - Add new documentation for features and fixes - Update userwallet components (LoginScreen, SyncScreen) - Update types for contract, identity, and messages **Pages affectées:** - userwallet/src/components/LoginScreen.tsx - userwallet/src/components/SyncScreen.tsx - userwallet/src/hooks/useChannel.ts - userwallet/src/hooks/useLoginStateMachine.ts (new) - userwallet/src/services/graphResolver.ts - userwallet/src/services/pairingConfirm.ts - userwallet/src/services/syncService.ts - userwallet/src/services/syncLoop.ts (new) - userwallet/src/services/loginStateMachine.ts (new) - userwallet/src/types/contract.ts - userwallet/src/types/identity.ts - userwallet/src/types/message.ts - userwallet/src/utils/canonical.ts - userwallet/src/utils/identity.ts - userwallet/src/utils/indexedDbStorage.ts - userwallet/src/utils/relay.ts - userwallet/src/utils/verification.ts - userwallet/src/utils/bloom.ts (new) - userwallet/src/utils/contractVersion.ts (new) - userwallet/src/utils/nonceStore.ts (new) - userwallet/eslint.config.mjs - userwallet/package.json - userwallet/package-lock.json - userwallet/docs/synthese.md - userwallet/docs/specs-champs-obligatoires-cnil.md (new) - api-relay/README.md - features/userwallet-pairing-words-only-finalise.md - features/userwallet-anti-rejeu-etats-visibles-bloom.md (new) - features/userwallet-bloom-usage-sync.md (new) - features/userwallet-contrat-login-reste-a-faire.md (new) - features/userwallet-ecrans-login-a-valider.md (new) - features/userwallet-eslint-fix.md (new) - features/userwallet-login-state-machine.md (new) - features/userwallet-validation-conformite.md (new) - fixKnowledge/mempool-websocket-offline-fix.md (new) - mempool (submodule) - hash_list.txt - hash_list_cache.txt
43 lines
2.2 KiB
Markdown
43 lines
2.2 KiB
Markdown
# UserWallet – Validation et conformité (3.5)
|
||
|
||
**Author:** Équipe 4NK
|
||
**Date:** 2026-01-26
|
||
|
||
## Objectif
|
||
|
||
Renforcer la validation : validateurs stricts, clé autorisée, version des contrats (specs).
|
||
|
||
## Impacts
|
||
|
||
- **Clé autorisée** : vérification stricte des signatures avant publication login ; rejet si `cle_publique` non autorisée par les validateurs (X_PUBKEY_NOT_AUTHORIZED).
|
||
- **Version contrats** : contrats en version non supportée exclus du graphe (sync) ; affichage de la version dans le chemin login.
|
||
|
||
## Modifications
|
||
|
||
**Vérification stricte**
|
||
|
||
- `utils/verification.ts` : `filterSignaturesByAuthorizedPubkeys`, `verifyMessageSignaturesStrict`. Garde `verifyMessageSignatures` (crypto seule) pour usage générique.
|
||
- `LoginScreen` : avant publish, si `loginPath.signatures_requises` comporte des `cle_publique`, construction de `allowedPubkeys` ; appel à `verifyMessageSignaturesStrict` sur la preuve ; si aucune signature autorisée ou présence de non autorisées → erreur X_PUBKEY_NOT_AUTHORIZED, pas de publication.
|
||
|
||
**Version contrats**
|
||
|
||
- `utils/contractVersion.ts` : `SUPPORTED_CONTRACT_VERSIONS` (ex. `['1.0']`), `isContractVersionSupported(version)`.
|
||
- `SyncService.updateGraph` : pour chaque message de type contrat, test `isContractVersionSupported` ; si non supporté, log warning et skip (contrat isolé, non ajouté au graphe).
|
||
- `LoginPath` : ajout de `contrat_version?: string`. `GraphResolver.resolveLoginPath` renseigne `contrat_version` dès qu’un contrat est résolu.
|
||
- `LoginScreen` : affichage « Version contrat » dans la section chemin lorsque `contrat_version` est défini.
|
||
|
||
## Modalités de déploiement
|
||
|
||
Déploiement classique du front userwallet.
|
||
|
||
## Modalités d’analyse
|
||
|
||
- Contrat en base avec `version` non supportée → sync : log « Contrat … version … not supported, skipped », absent du graphe.
|
||
- Login path résolu avec contrat → « Version contrat » affiché.
|
||
- Preuve avec signature dont `cle_publique` hors validateurs (si `cle_publique` dans requirements) → X_PUBKEY_NOT_AUTHORIZED avant publish.
|
||
|
||
## Références
|
||
|
||
- `features/userwallet-contrat-login-reste-a-faire.md` (§ 3.5)
|
||
- `userwallet/docs/specs.md` (validateurs, version)
|