From ad69622b6983d139e2cef1380f502edef19d2180 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 1 Apr 2015 00:38:01 +0200 Subject: fix Decrypt*Fragment for RequiredInputParcel (except decryptOriginalFilename) --- ...NfcSyncPublicKeyDataDecryptorFactoryBuilder.java | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'OpenKeychain/src/main/java/org/spongycastle/openpgp/operator/jcajce') diff --git a/OpenKeychain/src/main/java/org/spongycastle/openpgp/operator/jcajce/NfcSyncPublicKeyDataDecryptorFactoryBuilder.java b/OpenKeychain/src/main/java/org/spongycastle/openpgp/operator/jcajce/NfcSyncPublicKeyDataDecryptorFactoryBuilder.java index ffa154876..067bb3e19 100644 --- a/OpenKeychain/src/main/java/org/spongycastle/openpgp/operator/jcajce/NfcSyncPublicKeyDataDecryptorFactoryBuilder.java +++ b/OpenKeychain/src/main/java/org/spongycastle/openpgp/operator/jcajce/NfcSyncPublicKeyDataDecryptorFactoryBuilder.java @@ -15,7 +15,10 @@ import org.spongycastle.openpgp.PGPPublicKey; import org.spongycastle.openpgp.operator.PGPDataDecryptor; import org.spongycastle.openpgp.operator.PublicKeyDataDecryptorFactory; +import java.nio.ByteBuffer; import java.security.Provider; +import java.util.Map; + /** * This class is based on JcePublicKeyDataDecryptorFactoryBuilder @@ -88,7 +91,7 @@ public class NfcSyncPublicKeyDataDecryptorFactoryBuilder return this; } - public PublicKeyDataDecryptorFactory build(final byte[] nfcDecrypted) { + public PublicKeyDataDecryptorFactory build(final Map nfcDecryptedMap) { return new PublicKeyDataDecryptorFactory() { public byte[] recoverSessionData(int keyAlgorithm, byte[][] secKeyData) @@ -99,7 +102,7 @@ public class NfcSyncPublicKeyDataDecryptorFactoryBuilder throw new PGPException("ECDH not supported!"); } - return decryptSessionData(keyAlgorithm, secKeyData, nfcDecrypted); + return decryptSessionData(keyAlgorithm, secKeyData, nfcDecryptedMap); } public PGPDataDecryptor createDataDecryptor(boolean withIntegrityPacket, int encAlgorithm, byte[] key) @@ -197,8 +200,9 @@ public class NfcSyncPublicKeyDataDecryptorFactoryBuilder // } // } - private byte[] decryptSessionData(int keyAlgorithm, byte[][] secKeyData, byte[] nfcDecrypted) - throws PGPException + private byte[] decryptSessionData(int keyAlgorithm, byte[][] secKeyData, + Map nfcDecryptedMap) + throws PGPException { // Cipher c1 = helper.createPublicKeyCipher(keyAlgorithm); // @@ -214,15 +218,14 @@ public class NfcSyncPublicKeyDataDecryptorFactoryBuilder if (keyAlgorithm == PGPPublicKey.RSA_ENCRYPT || keyAlgorithm == PGPPublicKey.RSA_GENERAL) { - byte[] bi = secKeyData[0]; // encoded MPI + ByteBuffer bi = ByteBuffer.wrap(secKeyData[0]); // encoded MPI - if (nfcDecrypted != null) { - // we already have the decrypted bytes from a previous execution, return this! - return nfcDecrypted; + if (nfcDecryptedMap.containsKey(bi)) { + return nfcDecryptedMap.get(bi); } else { // catch this when decryptSessionData() is executed and divert digest to card, // when doing the operation again reuse nfcDecrypted - throw new NfcInteractionNeeded(bi); + throw new NfcInteractionNeeded(bi.array()); } // c1.update(bi, 2, bi.length - 2); -- cgit v1.2.3