From d5b40de70a9a53372a3c538ad4ec2656a63b7984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 11 Aug 2014 17:29:41 +0200 Subject: [PATCH] Decrypt metadata api --- .../keychain/pgp/PgpDecryptVerify.java | 12 +++++------ .../keychain/remote/OpenPgpService.java | 20 ++++++++++++++++--- .../service/KeychainIntentService.java | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java index 2ab93ca41..5a5e51f99 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -71,7 +71,7 @@ public class PgpDecryptVerify { private boolean mAllowSymmetricDecryption; private String mPassphrase; private Set mAllowedKeyIds; - private boolean mReturnMetadataOnly; + private boolean mDecryptMetadataOnly; private PgpDecryptVerify(Builder builder) { // private Constructor can only be called from Builder @@ -84,7 +84,7 @@ public class PgpDecryptVerify { this.mAllowSymmetricDecryption = builder.mAllowSymmetricDecryption; this.mPassphrase = builder.mPassphrase; this.mAllowedKeyIds = builder.mAllowedKeyIds; - this.mReturnMetadataOnly = builder.mReturnMetadataOnly; + this.mDecryptMetadataOnly = builder.mDecryptMetadataOnly; } public static class Builder { @@ -99,7 +99,7 @@ public class PgpDecryptVerify { private boolean mAllowSymmetricDecryption = true; private String mPassphrase = null; private Set mAllowedKeyIds = null; - private boolean mReturnMetadataOnly = false; + private boolean mDecryptMetadataOnly = false; public Builder(ProviderHelper providerHelper, PassphraseCache passphraseCache, InputData data, OutputStream outStream) { @@ -137,8 +137,8 @@ public class PgpDecryptVerify { * If enabled, the actual decryption/verification of the content will not be executed. * The metadata only will be decrypted and returned. */ - public Builder setReturnMetadataOnly(boolean returnMetadataOnly) { - mReturnMetadataOnly = returnMetadataOnly; + public Builder setDecryptMetadataOnly(boolean decryptMetadataOnly) { + mDecryptMetadataOnly = decryptMetadataOnly; return this; } @@ -470,7 +470,7 @@ public class PgpDecryptVerify { Log.d(Constants.TAG, "metadata: " + metadata); // return here if we want to decrypt the metadata only - if (mReturnMetadataOnly) { + if (mDecryptMetadataOnly) { return result; } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index d3a38c5d7..5c94f4796 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -25,6 +25,7 @@ import android.os.IBinder; import android.os.ParcelFileDescriptor; import org.openintents.openpgp.IOpenPgpService; +import org.openintents.openpgp.OpenPgpDecryptMetadata; import org.openintents.openpgp.OpenPgpError; import org.openintents.openpgp.OpenPgpSignatureResult; import org.openintents.openpgp.util.OpenPgpApi; @@ -326,7 +327,8 @@ public class OpenPgpService extends RemoteService { } private Intent decryptAndVerifyImpl(Intent data, ParcelFileDescriptor input, - ParcelFileDescriptor output, Set allowedKeyIds) { + ParcelFileDescriptor output, Set allowedKeyIds, + boolean decryptMetadataOnly) { try { // Get Input- and OutputStream from ParcelFileDescriptor InputStream is = new ParcelFileDescriptor.AutoCloseInputStream(input); @@ -353,7 +355,8 @@ public class OpenPgpService extends RemoteService { builder.setAllowSymmetricDecryption(false) // no support for symmetric encryption .setAllowedKeyIds(allowedKeyIds) // allow only private keys associated with // accounts of this app - .setPassphrase(passphrase); + .setPassphrase(passphrase) + .setDecryptMetadataOnly(decryptMetadataOnly); PgpDecryptVerifyResult decryptVerifyResult; try { @@ -403,6 +406,11 @@ public class OpenPgpService extends RemoteService { } } + OpenPgpDecryptMetadata metadata = decryptVerifyResult.getDecryptMetadata(); + if (metadata != null) { + result.putExtra(OpenPgpApi.RESULT_METADATA, metadata); + } + } finally { is.close(); os.close(); @@ -561,7 +569,13 @@ public class OpenPgpService extends RemoteService { Set allowedKeyIds = mProviderHelper.getAllKeyIdsForApp( ApiAccounts.buildBaseUri(currentPkg)); - return decryptAndVerifyImpl(data, input, output, allowedKeyIds); + return decryptAndVerifyImpl(data, input, output, allowedKeyIds, false); + } else if (OpenPgpApi.ACTION_DECRYPT_METADATA.equals(action)) { + String currentPkg = getCurrentCallingPackage(); + Set allowedKeyIds = + mProviderHelper.getAllKeyIdsForApp( + ApiAccounts.buildBaseUri(currentPkg)); + return decryptAndVerifyImpl(data, input, output, allowedKeyIds, true); } else if (OpenPgpApi.ACTION_GET_KEY.equals(action)) { return getKeyImpl(data); } else if (OpenPgpApi.ACTION_GET_KEY_IDS.equals(action)) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index 680f2fb27..54895973b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -361,7 +361,7 @@ public class KeychainIntentService extends IntentService builder.setProgressable(this) .setAllowSymmetricDecryption(true) .setPassphrase(passphrase) - .setReturnMetadataOnly(true); + .setDecryptMetadataOnly(true); PgpDecryptVerifyResult decryptVerifyResult = builder.build().execute();