# 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)