diff --git a/android-client/PMA.Store.pas b/android-client/PMA.Store.pas index 9073b83..821ed40 100644 --- a/android-client/PMA.Store.pas +++ b/android-client/PMA.Store.pas @@ -476,15 +476,32 @@ begin Result.load(nil); // le magasin Android ne prend pas de flux end; -/// Parametres OAEP explicites. Sans eux, le Keystore et le fournisseur par -/// defaut ne s'accordent pas sur le MGF1 - SHA-1 d'un cote, SHA-256 de -/// l'autre - et le dechiffrement echoue sur un chiffre pourtant valide. +/// Parametres OAEP explicites, identiques au chiffrement et au dechiffrement. +/// +/// DEUX DIGESTS DIFFERENTS, ET C'EST VOULU : SHA-256 pour le message, SHA-1 +/// pour le MGF1. +/// +/// setDigests() n'autorise que le digest DU MESSAGE. Celui du MGF1 relevait +/// d'une autorisation distincte, dont le defaut est SHA-1 et le reste tant +/// qu'on n'appelle pas setMgf1Digests (API 31+). Demander MGF1-SHA-256 au +/// dechiffrement donne donc une cle qui refuse : +/// +/// KeymasterUtils: rsp_header->status: -28 +/// javax.crypto.IllegalBlockSizeException +/// +/// Le chiffrement, lui, passait : la cle publique reconstruite est servie par +/// le fournisseur logiciel, qui accepte n'importe quel MGF1. D'ou un chiffre +/// parfaitement valide que le materiel refuse de lire - le pire des symptomes, +/// puisqu'il n'apparait qu'a la relecture. +/// +/// SHA-1 en MGF1 n'affaiblit pas OAEP : la fonction de masque n'a pas besoin +/// de resistance aux collisions. function OaepParams: JAlgorithmParameterSpecX; begin Result := TJOAEPParameterSpec.JavaClass.init( StringToJString('SHA-256'), StringToJString('MGF1'), - TJMGF1ParameterSpec.JavaClass.init(StringToJString('SHA-256')), + TJMGF1ParameterSpec.JavaClass.init(StringToJString('SHA-1')), TJPSource_PSpecified.JavaClass.DEFAULT); end;