16fd4c8c36
Lecteur d'histoires cadenassé pour le coucher (Android/Flutter). - CLAUDE.md : principes craftsmanship/TDD/clean code/clean archi + decisions techniques - ROADMAP.md : suivi haut niveau des 7 jalons, a tenir a jour par etape - docs/specs/ : specs completes decoupees par jalon, etapes en sous-fichiers - .gitignore Flutter (pubspec.lock versionne, projet applicatif) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1.9 KiB
1.9 KiB
5.2 — Stockage sécurisé & vérification
Objectif
Implémenter ParentalCodeRepository : stocker le code de façon sûre (haché, jamais
en clair) et vérifier une saisie.
Périmètre & hors-périmètre
- Inclus : hachage du code, stockage via
flutter_secure_storage, vérification. - Exclus : écrans (5.1/5.3).
Dépendances
5.1 (interface + ParentalCode).
Conception
- Data (
features/parental/data/) :SecureParentalCodeRepository implements ParentalCodeRepository.- Stocke un hachage du code (+ sel) dans
flutter_secure_storage— jamais la valeur en clair.- Pour 4 chiffres, l'espace est petit (10 000 combinaisons) : le hachage protège contre la lecture directe du stockage, sans prétendre à une résistance forte au brute-force hors-ligne. C'est cohérent avec le modèle de menace (garde-fou enfant, cf. CLAUDE.md §1). Documenter ce choix.
isConfigured()= présence de la clé ;verify(code)= comparaison des hachages (comparaison à temps constant si simple à faire).
- DI :
parentalCodeRepositoryProvider.
Plan TDD
- Red :
secure_parental_code_repository_test.dart— avec unflutter_secure_storagemocké :setCodeécrit une valeur différente du code en clair (hachée).verifyrenvoietruepour le bon code,falsesinon.isConfiguredreflète la présence de la clé.
- Green : implémenter hachage + repository.
- Refactor.
Definition of Done
- Tests verts ; aucune écriture du code en clair (vérifié par le test).
tool/check.shpasse ; étape 5.2 cochée dansROADMAP.md; choix du modèle de menace consigné.
Risques / notes
flutter_secure_storages'appuie sur le Keystore Android : tester aussi le cas « valeur absente » au premier lancement.- Ne pas réinventer de crypto : utiliser une fonction de hachage standard de
crypto.