diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/RequiredInputParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/RequiredInputParcel.java index 99f4fa069..28f53892c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/RequiredInputParcel.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/RequiredInputParcel.java @@ -90,6 +90,14 @@ public class RequiredInputParcel implements Parcelable { return mSubKeyIds == null ? null : mSubKeyIds[0]; } + public long[] getMasterKeyIds() { + return mMasterKeyIds; + } + + public long[] getSubKeyIds() { + return mSubKeyIds; + } + public static RequiredInputParcel createRetryUploadOperation() { return new RequiredInputParcel(RequiredInputType.UPLOAD_FAIL_RETRY, null, null, null, 0L, 0L); diff --git a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/PgpEncryptDecryptTest.java b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/PgpEncryptDecryptTest.java index 2fa7e3895..943446728 100644 --- a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/PgpEncryptDecryptTest.java +++ b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/PgpEncryptDecryptTest.java @@ -58,6 +58,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRingData; import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyChange; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; +import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.RequiredInputType; import org.sufficientlysecure.keychain.support.KeyringTestingHelper; import org.sufficientlysecure.keychain.support.KeyringTestingHelper.RawPacket; @@ -1064,6 +1065,25 @@ public class PgpEncryptDecryptTest { Assert.assertEquals(1024, encryptionKeySecurityProblem.bitStrength); } + @Test + public void testDecryptForTwoKeys() throws Exception { + InputStream in = getResourceAsStream("/test-ciphertexts/two_keys.asc"); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + InputData data = new InputData(in, in.available()); + + PgpDecryptVerifyOperation op = operationWithFakePassphraseCache(null, null, null); + PgpDecryptVerifyInputParcel input = PgpDecryptVerifyInputParcel.builder().build(); + DecryptVerifyResult result = op.execute(input, CryptoInputParcel.createCryptoInputParcel(), data, out); + + RequiredInputParcel requiredInputParcel = result.getRequiredInputParcel(); + Assert.assertNotNull(requiredInputParcel); + Assert.assertEquals(3, requiredInputParcel.getMasterKeyIds().length); + Assert.assertEquals(mStaticRing1.getMasterKeyId(), requiredInputParcel.getMasterKeyIds()[0]); + Assert.assertEquals(mStaticRing1.getMasterKeyId(), requiredInputParcel.getMasterKeyIds()[1]); + Assert.assertEquals(mStaticRing2.getMasterKeyId(), requiredInputParcel.getMasterKeyIds()[2]); + } + private PgpDecryptVerifyOperation operationWithFakePassphraseCache( final Passphrase passphrase, final Long checkMasterKeyId, final Long checkSubKeyId) { diff --git a/OpenKeychain/src/test/resources/test-ciphertexts/two_keys.asc b/OpenKeychain/src/test/resources/test-ciphertexts/two_keys.asc new file mode 100644 index 000000000..9c7b345cb Binary files /dev/null and b/OpenKeychain/src/test/resources/test-ciphertexts/two_keys.asc differ