Tags: gitubpatrice/pass_tech
Tags
Pass Tech 2.7.0 — five languages, and what translating exposed German, Italian and Spanish join English and French: 551 strings x 5, picked in Settings independently of the device language. The defects translating surfaced matter more than the localisation: - 24 French strings hardcoded outside the l10n system, found only by a third detector that gave up filtering and read every literal containing a space. - An Android resource filter listing only en and fr, which would have stripped three of the five languages from the APK with no error. Caught by the artifact: aapt2 reported locales 'fr' on a build shipping five. - The panic-mode disguise hardcoded to "Calculatrice" — a French label among German app names points at the app instead of hiding it. - An in-app privacy policy declaring a CAMERA permission removed in 2.6.0, and legal documents picked by a binary test that sent every non-English reader to French. - A passphrase generator promising memorable phrases while drawing from a French word list, with no locale branch. Decoy vault: biometrics opened the MAIN vault with the prompt firing on its own, so under coercion the decoy was bypassed without anyone needing to know it existed. The exclusion now works both ways and lives in the service. Certificate identical to v2.6.1, four permissions unchanged, 185 tests, validated on a Galaxy S9 and a Galaxy S24 with a real fingerprint. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chore: v2.6.0 (versionCode 39) Mineure et non corrective : le comportement visible change. - Le score de l audit est recalcule sur un autre modele. Il baissera chez les utilisateurs de petits coffres, non par regression mais parce qu il ne plafonne plus la penalite. - La politique de mot de passe change : 12 caracteres, symboles et chiffres ne sont plus exiges. - Google est retire de l application : plus aucune bibliotheque ni service Google embarque. Pass Tech lit sa version via PackageInfo : il n existe AUCUNE constante statique a bumper, contrairement a PDF Tech et Notes Tech. Verifie — les occurrences de 2.5.4 dans le code sont toutes des marqueurs SEC en commentaire. Changelogs fastlane FR 470 et EN 429 caracteres, sous le plafond F-Droid de 500. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
v2.5.0 : audit expert post-v2.4.5 — 13 corrections F1-F15 sécu+perf+UX Sécurité (F1, F2, F6, F7, F12, F15) : - F1 _heirFailCount migré SharedPreferences → FlutterSecureStorage (clé pt_heir_fail_count, migration one-shot) - F2 note UI biométrie post-réenrôlement empreinte Settings + i18n FR/EN + ROADMAP_HARDENING M-6 - F6 HeritageService.setupOrUpdateSnapshot : ordre fichier→sel→enabled + rollback explicite si write fail - F7 SECURITY.md M-4 étendu (Strings Dart non zeroizables, importEncrypted, TOTP wall-clock) + M-6 ajouté - F12 permission USE_FINGERPRINT retirée Manifest (obsolète API 28+) - F15 vault_crypto v3 legacy : try/catch best-effort autour SecretBytes.wipe (Uint8List FFI non-modifiable) UI/UX Material 3 (F4a, F4b, F4c, F11, F14) : - F4a audit_screen colors hardcodées → tokens M3 (cs.tertiary/error/primary/outline + Colors.amber.shade700/deepOrange pour warning) - F4b entry_detail_screen gradient carte bancaire documenté intentionnel (rendu CB physique) - F4c settings_screen 4× Colors.green → cs.primary (statuts actifs) - F11 dialog intégrité root/emu : "Quitter" FilledButton autofocus primary, "Continuer quand même" TextButton cs.error (anti-clic réflexe sur action risquée) - F14 audit_screen jaune 0xFFFDD835 → Colors.amber.shade700 (contraste WCAG AA garanti light+dark) Cohérence (F1-coh) : - 30 SnackBar inline settings_screen migrés vers SnackUtils.showInfo/showError/showSuccess (messengers capturés AVANT await, hideCurrentSnackBar uniforme, errorContainer M3 sur erreurs) Performance (F3, F9) : - F3 home_screen cache _filtered : signature length×31 ^ max(updatedAt) (résout stale data sur update sans changement de count) - F9 _checkForUpdate guard static _updateCheckedThisSession (anti requêtes HTTP répétées sur lock/unlock rapide) Tests : - test/audit_v2_4_5_test.dart créé : 12 groupes garde pour chaque finding (markers + tests purs sur TotpService) - 72/72 tests verts (incluant les nouveaux) Validations : - flutter analyze : 0 issue - dart format : clean - Build APK release splits OK (arm64 26 Mo, armeabi 22 Mo, x86_64 28 Mo) Build infra (orthogonal) : - android/gradle.properties : org.gradle.configuration-cache=false (workaround AGP 8.x + Kotlin lazy services incompatibles configuration-cache) Skip justifié : F13 pbkdf2Worker doit rester top-level pour compute() Flutter isolate worker. Score audit projeté : 88/100 → 96+/100. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
v2.4.5 — Signature visuelle Files Tech : splash de bienvenue 1er lanc… …ement Feature unique : splash de présentation Files Tech joué uniquement au tout premier lancement après install (ou après "Effacer données"). Mécanique animée identique à SMS Tech v1.3.7 (Kotlin natif) et aux 4 autres ports Flutter (Notes Tech, AI Tech, PDF Tech, Read Files Tech) pour cimenter la cohérence visuelle de l'écosystème Files Tech. Slogan FR : "La protection maximale\npour vos mots de passe." Slogan EN : "Maximum protection\nfor your passwords." Architecture (vigilance max, zéro régression) : * lib/services/first_launch_flag.dart (nouveau) — flag persistant booléen `splash_shown_v1` via SharedPreferences, idempotent. * lib/screens/splash_screen.dart (nouveau) — SplashScreen + SplashGate : 3 AnimationController (logo 900ms scale+fade, tagline 800ms+700ms delay, hint 500ms+2500ms delay), auto-dismiss 5500ms, tap-skip + back-skip, garde idempotence `_fired` boolean anti-race tap/back/auto-dismiss. * lib/main.dart — lecture flag AVANT runApp + propagation à PassTechApp. SecureWindow.init() reste appelé avant runApp → splash hérite FLAG_SECURE. Routing existant (OnboardingScreen / UnlockScreen / SetupScreen) préservé dans SplashGate.nextChild après dismissal. * 4 clés i18n FR+EN (splashTagline, splashSkipHint, splashLogoContentDescription, splashSemanticsLabel) avec parité complète. * Le splash ne touche jamais au vault, n'introduit aucune surface réseau ni I/O fichier, hérite du FLAG_SECURE déjà posé. Audit final mobile-quality-auditor : APPROUVÉ (0 critical, 0 high, 2 medium non bloquants documentés). flutter analyze 0 issue, 60/60 tests verts (aucune régression). APK arm64 split 26.0 Mo (inchangé). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v2.4.4 : audit expert post-v2.4.3 — 22 corrections F2-F12+F15 / P1+P3… …+P5+P6 / U2-U11 SÉCURITÉ (12 fixes, 0 vulnérabilité, 0 faille — objectif explicite user) : - F2 : `_unlockWithBiometricInternal` valide longueur (32B) AVANT pose en `_key`. Wipe + deleteBiometricKey + biometricInvalidated si invalide. - F3 : `_v4Unlock` rendu PUR (record finalKey+entries+cache méta) ; `_unlockInternal` réécrit pour itérer 2 slots déni plausible SANS mutation latente — winner appliqué après loop. Plus de fenêtre RAM d'exposition decoy entries si user a réutilisé même password. - F4 : `passwordMatchesPrimary` partage `_unlockGate` (mutex global). - F5 : `BreachService._userAgent` const banal `Mozilla/5.0 (compatible)` au lieu de pool rotatif tiré au démarrage — anti-fingerprinting HIBP. - F6 : compteur d'échecs clamp(0, 1000) (anti pollution NAND). - F7 : `_TotpCard` code masqué par défaut (••• •••) + toggle oeil. - F8/U1 : `_HeirPasswordDialog` TextField brut → PasswordTextField (autofillHints=[]+enableInteractiveSelection=show, régression v2.4.3 U1). - F9 : `.ptbak` v1/v2 mac.length != 32 refusé AVANT compute (évite PBKDF2 600k pour rien sur fichier forgé). - F10 : `MonotonicClock.nowMs()` sérialisée via Future cache (anti-race read→max→write). - F11/F12 : `_extractTotpSecret` scheme=otpauth+host=totp strict + cap rawValue 2048 octets (anti QR malicieux). - F15 : `PanicService.panic()` reset pt_fail_count + pt_lockout_until (état post-panic indistinguable d'un boot frais). PERFORMANCE (4 fixes) : - P1 : `HomeScreen._filtered` mémoïsé (gain 25-50 ms / rebuild sur 500 entries, 150 ms sur 1000). - P3 : `_TotpCardState` cache (code, validUntilEpoch) — HMAC-SHA1 tourne 1×/30s au lieu de 1×/s (économie batterie). - P5 : SetupScreen jauge force isolée `ValueListenableBuilder` (plus de rebuild plein écran à chaque frappe master password). - P6 : `AuditScreen._analyze` single-pass (1 boucle remplit 4 listes + 4 compteurs vs 8 passes `where().toList()`). UX / a11y (10 fixes) : - U2 : 4 dialogs destructifs (entry delete, decoy delete, heritage disable, export plain, deleteAll vault) alignés pattern v2.4.3 U10 (autofocus Cancel + FilledButton.tonal cs.errorContainer). - U3 : `_Badge` about_screen texte en cs.onSurface (WCAG AA ~13:1 vs ~2.5:1 mesuré sur badges colorés). - U4 : `_scoreIcon()` audit_screen icône daltonien-safe + Semantics. - U5 : HeirViewScreen tooltips IconButton copy + cs.onSurfaceVariant au lieu de Colors.grey hardcodé. - U6 : entry_edit_screen username + URL avec autocorrect=false + enableSuggestions=false + textCapitalization=none. - U7 : about_screen `Image.asset` cacheWidth=160 + cacheHeight=160. - U8 : `LinearProgressIndicator` audit HIBP + setup jauge avec semanticsLabel + semanticsValue % pour TalkBack. - U9 : `HapticFeedback` save (selectionClick), lock + delete entry (mediumImpact), panic + deleteAll (heavyImpact). - U10 : Onboarding dots `Semantics(label: 'X / Y')`. - U11 : `snackBarTheme: floating` ajouté aux 2 themes globaux. QUALITÉ : - +12 tests garde (7 dans v2_4_4_guards_test, 5 dans audit_v2_4_4_test). - flutter analyze : 0 issue (incl. info-only). - 60/60 tests verts (48 historique + 12 nouveaux). - dart format clean. LIVRAISON : - APK arm64 27 Mo (vs 27 Mo v2.4.3 — split-per-abi maintenu). - Cert SHA-256 `733cf8b4…35794` stable. - firstInstallTime préservé via `adb install -r` (data utilisateur intacte, vault/biométrie/decoy conservés). - Aucun changement format `.enc` v4, `.ptbak` v3 ni `.pt_heir` v2. - Fastlane FR+EN changelogs 31.txt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PreviousNext