diff options
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java | 45 | ||||
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java | 8 |
2 files changed, 31 insertions, 22 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 8b18f3fe2..96ab0404d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -67,6 +67,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.security.SignatureException; import java.util.Iterator; +import java.util.Map; import java.util.Set; /** @@ -410,11 +411,18 @@ public class PgpDecryptVerify { // go through all signatures // and find out for which signature we have a key in our database Long masterKeyId = null; + String primaryUserId = null; for (int i = 0; i < sigList.size(); ++i) { try { Uri uri = KeyRings.buildUnifiedKeyRingsFindBySubkeyUri( Long.toString(sigList.get(i).getKeyID())); - masterKeyId = mProviderHelper.getMasterKeyId(uri); + Map<String, Object> data = mProviderHelper.getGenericData(uri, + new String[] { KeyRings.MASTER_KEY_ID, KeyRings.USER_ID }, + new int[] { ProviderHelper.FIELD_TYPE_INTEGER, + ProviderHelper.FIELD_TYPE_STRING } + ); + masterKeyId = (Long) data.get(KeyRings.MASTER_KEY_ID); + primaryUserId = (String) data.get(KeyRings.USER_ID); signatureIndex = i; } catch (ProviderHelper.NotFoundException e) { Log.d(Constants.TAG, "key not found!"); @@ -439,9 +447,8 @@ public class PgpDecryptVerify { signatureResultBuilder.signatureAvailable(true); signatureResultBuilder.knownKey(true); - // TODO: uses the first user id not primary user id - signatureResultBuilder.userId(PgpKeyHelper.getMainUserId(publicKeyRing.getPublicKey())); - signatureResultBuilder.keyId(publicKeyRing.getPublicKey().getKeyID()); + signatureResultBuilder.userId(primaryUserId); + signatureResultBuilder.keyId(masterKeyId); JcaPGPContentVerifierBuilderProvider contentVerifierBuilderProvider = new JcaPGPContentVerifierBuilderProvider() @@ -449,11 +456,16 @@ public class PgpDecryptVerify { signature.init(contentVerifierBuilderProvider, signatureKey); // get certification status of this key - Object data = mProviderHelper.getGenericData( - KeychainContract.KeyRings.buildUnifiedKeyRingUri(Long.toString(masterKeyId)), - KeyRings.VERIFIED, - ProviderHelper.FIELD_TYPE_INTEGER); - boolean isSignatureKeyCertified = ((Long) data > 0); + boolean isSignatureKeyCertified; + try { + Object data = mProviderHelper.getGenericData( + KeychainContract.KeyRings.buildUnifiedKeyRingUri(Long.toString(masterKeyId)), + KeyRings.VERIFIED, + ProviderHelper.FIELD_TYPE_INTEGER); + isSignatureKeyCertified = ((Long) data > 0); + } catch (ProviderHelper.NotFoundException e) { + isSignatureKeyCertified = false; + } signatureResultBuilder.signatureKeyCertified(isSignatureKeyCertified); } else { // no key in our database -> return "unknown pub key" status including the first key id @@ -650,11 +662,16 @@ public class PgpDecryptVerify { signature.init(contentVerifierBuilderProvider, signatureKey); // get certification status of this key - Object data = mProviderHelper.getGenericData( - KeychainContract.KeyRings.buildUnifiedKeyRingUri(Long.toString(masterKeyId)), - KeyRings.VERIFIED, - ProviderHelper.FIELD_TYPE_INTEGER); - boolean isSignatureKeyCertified = ((Long) data > 0); + boolean isSignatureKeyCertified; + try { + Object data = mProviderHelper.getGenericData( + KeychainContract.KeyRings.buildUnifiedKeyRingUri(Long.toString(masterKeyId)), + KeyRings.VERIFIED, + ProviderHelper.FIELD_TYPE_INTEGER); + isSignatureKeyCertified = ((Long) data > 0); + } catch (ProviderHelper.NotFoundException e) { + isSignatureKeyCertified = false; + } signatureResultBuilder.signatureKeyCertified(isSignatureKeyCertified); } else { // no key in our database -> return "unknown pub key" status including the first key id diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java index 6450ad63d..a467a4105 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java @@ -241,14 +241,6 @@ public class PgpKeyHelper { return null; } - public static String getMainUserIdSafe(Context context, PGPPublicKey key) { - String userId = getMainUserId(key); - if (userId == null || userId.equals("")) { - userId = context.getString(R.string.user_id_no_name); - } - return userId; - } - public static String getMainUserIdSafe(Context context, PGPSecretKey key) { String userId = getMainUserId(key); if (userId == null || userId.equals("")) { |