From f916c8f5af5fd46037dd7d4be28155dac67b1634 Mon Sep 17 00:00:00 2001 From: Ashley Hughes Date: Sun, 2 Feb 2014 10:24:03 +0000 Subject: update hasPassphrase for subkey only keyrings --- .../keychain/service/PassphraseCacheService.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'OpenPGP-Keychain/src/main/java') diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java index 08b9c26e6..abd2320e3 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java @@ -19,6 +19,7 @@ package org.sufficientlysecure.keychain.service; import java.util.Date; import java.util.HashMap; +import java.util.Iterator; import org.spongycastle.openpgp.PGPException; import org.spongycastle.openpgp.PGPPrivateKey; @@ -210,8 +211,21 @@ public class PassphraseCacheService extends Service { public static boolean hasPassphrase(Context context, long secretKeyId) { // check if the key has no passphrase try { - PGPSecretKey secretKey = PgpKeyHelper.getMasterKey(ProviderHelper - .getPGPSecretKeyRingByKeyId(context, secretKeyId)); + PGPSecretKeyRing secRing = ProviderHelper + .getPGPSecretKeyRingByKeyId(context, secretKeyId); + PGPSecretKey secretKey = null; + boolean foundValidKey = false; + for (Iterator keys = secRing.getSecretKeys(); keys.hasNext();) { + secretKey = (PGPSecretKey)keys.next(); + if (!secretKey.isPrivateKeyEmpty()) { + foundValidKey = true; + break; + } + } + + if (!foundValidKey) + return false; + PBESecretKeyDecryptor keyDecryptor = new JcePBESecretKeyDecryptorBuilder().setProvider( "SC").build("".toCharArray()); PGPPrivateKey testKey = secretKey.extractPrivateKey(keyDecryptor); -- cgit v1.2.3