diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/remote/OpenPgpService.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/remote/OpenPgpService.java index 0f5aa9e3b..b1635ec10 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/remote/OpenPgpService.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/remote/OpenPgpService.java @@ -141,7 +141,12 @@ public class OpenPgpService extends RemoteService { private Bundle signImpl(Bundle params, ParcelFileDescriptor input, ParcelFileDescriptor output, AppSettings appSettings) { try { // get passphrase from cache, if key has "no" passphrase, this returns an empty String - String passphrase = PassphraseCacheService.getCachedPassphrase(getContext(), appSettings.getKeyId()); + String passphrase; + if (params.containsKey(OpenPgpConstants.PARAMS_PASSPHRASE)) { + passphrase = params.getString(OpenPgpConstants.PARAMS_PASSPHRASE); + } else { + passphrase = PassphraseCacheService.getCachedPassphrase(getContext(), appSettings.getKeyId()); + } if (passphrase == null) { // get PendingIntent for passphrase input, add it to given params and return to client Bundle passphraseBundle = getPassphraseBundleIntent(params, appSettings.getKeyId()); @@ -212,8 +217,13 @@ public class OpenPgpService extends RemoteService { PgpOperation operation = new PgpOperation(getContext(), null, inputData, os); if (sign) { - String passphrase = PassphraseCacheService.getCachedPassphrase(getContext(), - appSettings.getKeyId()); + String passphrase; + if (params.containsKey(OpenPgpConstants.PARAMS_PASSPHRASE)) { + passphrase = params.getString(OpenPgpConstants.PARAMS_PASSPHRASE); + } else { + passphrase = PassphraseCacheService.getCachedPassphrase(getContext(), + appSettings.getKeyId()); + } if (passphrase == null) { // get PendingIntent for passphrase input, add it to given params and return to client Bundle passphraseBundle = getPassphraseBundleIntent(params, appSettings.getKeyId()); @@ -335,7 +345,12 @@ public class OpenPgpService extends RemoteService { // Log.d(Constants.TAG, "secretKeyId " + secretKeyId); // NOTE: currently this only gets the passphrase for the saved key - String passphrase = PassphraseCacheService.getCachedPassphrase(getContext(), appSettings.getKeyId()); + String passphrase; + if (params.containsKey(OpenPgpConstants.PARAMS_PASSPHRASE)) { + passphrase = params.getString(OpenPgpConstants.PARAMS_PASSPHRASE); + } else { + passphrase = PassphraseCacheService.getCachedPassphrase(getContext(), appSettings.getKeyId()); + } if (passphrase == null) { // get PendingIntent for passphrase input, add it to given params and return to client Bundle passphraseBundle = getPassphraseBundleIntent(params, appSettings.getKeyId()); diff --git a/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/util/OpenPgpConstants.java b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/util/OpenPgpConstants.java index 229c8d42a..263b42aaa 100644 --- a/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/util/OpenPgpConstants.java +++ b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/util/OpenPgpConstants.java @@ -32,6 +32,8 @@ public class OpenPgpConstants { // (for encrypt method) public static final String PARAMS_USER_IDS = "user_ids"; public static final String PARAMS_KEY_IDS = "key_ids"; + // optional parameter: + public static final String PARAMS_PASSPHRASE = "passphrase"; /* Service Bundle returns */ public static final String RESULT_CODE = "result_code";