diff --git a/mainApk.pas b/mainApk.pas index 2ff8e21..a433d55 100644 --- a/mainApk.pas +++ b/mainApk.pas @@ -2604,11 +2604,32 @@ begin // Ecrit APRES un dechiffrement reussi seulement, et avec son ETag : // les deux doivent rester coherents. + // AUCUNE PROTECTION ICI VEUT DIRE AUCUNE, ET C'EST TROP. + // + // Sans biometrie utilisable et sans code pose, le cache s'ouvrait sans + // rien demander - or il CONTIENT le mot de passe de sync. Qui tient le + // telephone deverrouille obtenait donc le coffre ET le secret du depot. + // + // On le scelle sous le mot de passe qui vient de rapporter le coffre : + // il est deja dans ce fichier, donc cela n'expose rien de neuf, et + // l'utilisateur le connait puisqu'il vient de le taper. C'est aussi la + // seule forme de cache qui survive a une reinitialisation du + // verrouillage d'ecran. + // + // PAS quand l'appareil sait authentifier : VER_PIN et VER_WRAP + // s'excluent, et imposer une frappe a qui a une empreinte serait un + // recul. Retirable en deux appuis depuis les reglages. + var LSeal := FPinSealed; + if (not LCanAuth) and (LSeal = '') then LSeal := APwd; try // Le mot de passe part avec le coffre : c'est lui qui permettra au // prochain lancement de rafraichir sans rien demander. - SaveVault(LPlain, FETag, APwd, LCanAuth, False, FPinSealed, + SaveVault(LPlain, FETag, APwd, LCanAuth and (LSeal = ''), False, LSeal, FKey, FKeySalt, FKeyIters); + // SANS CETTE LIGNE LES ECRITURES SUIVANTES SERAIENT REFUSEES : le + // garde de SaveVault interdit de resceller un cache a code sans le + // code, et il le lirait ici comme absent. + if VaultNeedsPin then FPinSealed := LSeal; Log(' cache now holds sha: ' + FETag); if VaultNeedsAuth then Log(' cache written - protected by biometrics/PIN')