diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-10-03 02:20:38 +0200 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-10-03 02:20:38 +0200 |
commit | ef7eab2c8bf7eda281849d66f201070f5e142304 (patch) | |
tree | bf21540073f932b9e6d5c083af7569ddb58f1d5c /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKeyRing.java | |
parent | b9dc21969faa7c4cd7b10638a629690d0df20cf4 (diff) | |
parent | 4b4e885e55f788bd2cf05f3c83f5a4bccb6cd0c0 (diff) | |
download | open-keychain-ef7eab2c8bf7eda281849d66f201070f5e142304.tar.gz open-keychain-ef7eab2c8bf7eda281849d66f201070f5e142304.tar.bz2 open-keychain-ef7eab2c8bf7eda281849d66f201070f5e142304.zip |
Merge branch 'master' of github.com:open-keychain/open-keychain
Conflicts:
OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKeyRing.java')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKeyRing.java | 47 |
1 files changed, 12 insertions, 35 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKeyRing.java index 48a2aaeb6..e20155cc6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKeyRing.java @@ -30,6 +30,8 @@ import org.spongycastle.openpgp.operator.PBESecretKeyDecryptor; import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; +import org.sufficientlysecure.keychain.provider.KeychainContract; +import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.Log; @@ -74,43 +76,18 @@ public class CanonicalizedSecretKeyRing extends CanonicalizedKeyRing { return new CanonicalizedSecretKey(this, mRing.getSecretKey(id)); } - /** Getter that returns the subkey that should be used for signing. */ - CanonicalizedSecretKey getSigningSubKey() throws PgpGeneralException { - PGPSecretKey key = mRing.getSecretKey(getSignId()); - if(key != null) { - CanonicalizedSecretKey cKey = new CanonicalizedSecretKey(this, key); - if(!cKey.canSign()) { - throw new PgpGeneralException("key error"); + /** Returns the key id which should be used for signing. + * + * This method returns keys which are actually available (ie. secret available, and not stripped, + * revoked, or expired), hence only works on keyrings where a secret key is available! + */ + public long getSecretSignId() throws PgpGeneralException { + for(CanonicalizedSecretKey key : secretKeyIterator()) { + if (key.canSign() && key.isValid() && key.getSecretKeyType().isUsable()) { + return key.getKeyId(); } - return cKey; - } - // TODO handle with proper exception - throw new PgpGeneralException("no signing key available"); - } - - public boolean hasPassphrase() { - PGPSecretKey secretKey = null; - boolean foundValidKey = false; - for (Iterator keys = mRing.getSecretKeys(); keys.hasNext(); ) { - secretKey = (PGPSecretKey) keys.next(); - if (!secretKey.isPrivateKeyEmpty()) { - foundValidKey = true; - break; - } - } - if(!foundValidKey) { - return false; - } - - try { - PBESecretKeyDecryptor keyDecryptor = new JcePBESecretKeyDecryptorBuilder() - .setProvider("SC").build("".toCharArray()); - PGPPrivateKey testKey = secretKey.extractPrivateKey(keyDecryptor); - return testKey == null; - } catch(PGPException e) { - // this means the crc check failed -> passphrase required - return true; } + throw new PgpGeneralException("no valid signing key available"); } public IterableIterator<CanonicalizedSecretKey> secretKeyIterator() { |