anchorage_layer_simple/features/userwallet-anti-rejeu-etats-visibles-bloom.md
ncantu c3c11f0ef0 Update userwallet components, services and documentation
**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
2026-01-26 14:00:32 +01:00

48 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# UserWallet Anti-rejeu, états visibles, Bloom
**Author:** Équipe 4NK
**Date:** 2026-01-26
## Objectif
Implémenter les éléments « reste à faire » contrat/login (3.3, 3.4, 3.6) : anti-rejeu (nonce, timestamp), états visibles (indéchiffrable, non validé, statut relais), API Bloom.
## Impacts
- **Login** : vérification timestamp et nonce avant publication ; erreurs `X_NONCE_REUSED`, `X_TIMESTAMP_OUT_OF_WINDOW` ; persistance des nonces utilisés (IndexedDB).
- **Sync** : compteurs `indechiffrable`, `nonValide`, statut par relais (ok / indisponible) ; affichage dans SyncScreen.
- **Relais** : `getBloom(relay)` pour consommation optionnelle du Bloom filter.
## Modifications
**Fichiers ajoutés** : `utils/nonceStore.ts`, `services/syncLoop.ts`.
**3.4 Anti-rejeu**
- `utils/nonceStore.ts` : `init()`, `hasUsed(nonce)`, `markUsed(nonce, timestamp)`. IndexedDB `userwallet_nonce_cache`, TTL 1 h.
- `LoginScreen` : avant publish, `verifyTimestamp(proof.challenge.timestamp)` → sinon `X_TIMESTAMP_OUT_OF_WINDOW` ; `nonceStore.init()` puis `hasUsed(nonce)` → sinon `X_NONCE_REUSED` ; après publish réussi, `markUsed(nonce, timestamp)`.
**3.3 États visibles**
- `SyncService.sync()` : retourne en plus `indechiffrable` (nouveaux messages sans clé), `nonValide` (déchiffrés mais non validés), `relayStatus` (endpoint + ok par relais). Refactor : `processNewMessage`, `processMessageBatch`, `syncOneRelay`, `runSyncLoop` (dans `syncLoop.ts`) pour respecter max-lines / max-params.
- `SyncScreen` : affiche « Indéchiffrables (clé manquante) », « Non validés (ex. signature manquante) », « Statut relais » (OK / indisponible par relais).
**3.6 Bloom**
- `utils/relay.ts` : `getBloom(relay)``GET /bloom`, retourne le JSON. Pas dusage dans le sync pour linstant (optionnel).
## Modalités de déploiement
Déploiement classique du front userwallet. Aucune migration IndexedDB imposée : `userwallet_nonce_cache` est créé au premier `init()`.
## Modalités danalyse
- **Anti-rejeu** : construire un challenge, publier, puis tenter de republier la même preuve → `X_NONCE_REUSED`. Construire un challenge, attendre > 5 min, publier → `X_TIMESTAMP_OUT_OF_WINDOW` si fenêtre par défaut.
- **États visibles** : lancer une sync avec relais mixte (OK / KO) et messages éventuels non déchiffrables ou non validés → vérifier les compteurs et le statut relais dans SyncScreen.
- **Bloom** : `getBloom(endpoint)` sur un relais avec `/bloom` → objet JSON.
## Références
- `features/userwallet-contrat-login-reste-a-faire.md`
- `userwallet/docs/specs.md` (anti-rejeu, états)