diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-07-07 23:41:44 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2015-07-07 23:41:44 +0200 |
commit | 895d1fbef65b1247ac9f08ccb50d1a42b0ca86a4 (patch) | |
tree | a0165b097a36e425ba41f57ce7b34b4ed543e152 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java | |
parent | 65362beaf9f976d6d6e6da6a4ef41adeec8ca43b (diff) | |
download | open-keychain-895d1fbef65b1247ac9f08ccb50d1a42b0ca86a4.tar.gz open-keychain-895d1fbef65b1247ac9f08ccb50d1a42b0ca86a4.tar.bz2 open-keychain-895d1fbef65b1247ac9f08ccb50d1a42b0ca86a4.zip |
try cache in certify operation (fixes #1242)
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java index 318eee6ba..d0377cc24 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java @@ -29,6 +29,7 @@ import org.sufficientlysecure.keychain.operations.results.SaveKeyringResult; import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKeyRing; +import org.sufficientlysecure.keychain.pgp.PassphraseCacheInterface; import org.sufficientlysecure.keychain.pgp.PgpCertifyOperation; import org.sufficientlysecure.keychain.pgp.PgpCertifyOperation.PgpCertifyResult; import org.sufficientlysecure.keychain.pgp.Progressable; @@ -90,14 +91,21 @@ public class CertifyOperation extends BaseOperation<CertifyActionsParcel> { case PIN: case PATTERN: case PASSPHRASE: - if (!cryptoInput.hasPassphrase()) { + passphrase = cryptoInput.getPassphrase(); + if (passphrase == null) { + try { + passphrase = getCachedPassphrase(certificationKey.getKeyId(), certificationKey.getKeyId()); + } catch (PassphraseCacheInterface.NoSecretKeyException ignored) { + // treat as a cache miss for error handling purposes + } + } + + if (passphrase == null) { return new CertifyResult(log, RequiredInputParcel.createRequiredSignPassphrase( certificationKey.getKeyId(), certificationKey.getKeyId(), null) ); } - // certification is always with the master key id, so use that one - passphrase = cryptoInput.getPassphrase(); break; case PASSPHRASE_EMPTY: @@ -105,6 +113,7 @@ public class CertifyOperation extends BaseOperation<CertifyActionsParcel> { break; case DIVERT_TO_CARD: + // the unlock operation will succeed for passphrase == null in a divertToCard key passphrase = null; break; |