Files
Vincent Bourdon 16fd4c8c36 docs: cadrage initial Storytime (specs par jalon, roadmap, CLAUDE.md)
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>
2026-06-19 17:03:33 +02:00

37 lines
1.9 KiB
Markdown

# 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
1. **Red** : `secure_parental_code_repository_test.dart` — avec un `flutter_secure_storage` mocké :
- `setCode` écrit une valeur **différente** du code en clair (hachée).
- `verify` renvoie `true` pour le bon code, `false` sinon.
- `isConfigured` reflète la présence de la clé.
2. **Green** : implémenter hachage + repository.
3. **Refactor**.
## Definition of Done
- Tests verts ; aucune écriture du code en clair (vérifié par le test).
- `tool/check.sh` passe ; étape 5.2 cochée dans `ROADMAP.md` ; choix du modèle de menace consigné.
## Risques / notes
- `flutter_secure_storage` s'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`.