From 5e416d6ae523dbf192fc59e7b1012cc7c2baf31d Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Thu, 23 Nov 2017 10:55:42 +0100 Subject: [PATCH] collect all potential keys before asking for passphrase --- .../pgp/PgpDecryptVerifyOperation.java | 12 +++- .../service/input/RequiredInputParcel.java | 68 ++++++++++++++----- 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerifyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerifyOperation.java index f7f31f903..8057f82a8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerifyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerifyOperation.java @@ -80,6 +80,7 @@ import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; +import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.RequireAnyDecryptPassphraseBuilder; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.CharsetVerifier; import org.sufficientlysecure.keychain.util.FileHelper; @@ -583,6 +584,8 @@ public class PgpDecryptVerifyOperation extends BaseOperation it = enc.getEncryptedDataObjects(); + RequireAnyDecryptPassphraseBuilder requirePassphraseBuilder = new RequireAnyDecryptPassphraseBuilder(); + // go through all objects and find one we can decrypt while (it.hasNext()) { Object obj = it.next(); @@ -662,9 +665,8 @@ public class PgpDecryptVerifyOperation extends BaseOperation masterKeyIds = new ArrayList<>(); + private final ArrayList subKeyIds = new ArrayList<>(); + + public RequiredInputParcel build() { + int numIds = masterKeyIds.size(); + long[] masterKeyIdsArr = new long[numIds]; + long[] subKeyIdsArr = new long[numIds]; + for (int i = 0; i < numIds; i++) { + masterKeyIdsArr[i] = masterKeyIds.get(i); + subKeyIdsArr[i] = subKeyIds.get(i); + } + + return new RequiredInputParcel(RequiredInputType.PASSPHRASE, + null, null, null, masterKeyIdsArr, subKeyIdsArr); + } + + public void add(long masterKeyId, long subKeyId) { + masterKeyIds.add(masterKeyId); + subKeyIds.add(subKeyId); + } + + public boolean isEmpty() { + return masterKeyIds.isEmpty(); + } + } }