aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2014-04-17 17:55:52 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2014-04-17 17:55:52 +0200
commita67854ca6ae6be262726e989bf9a79da32dcdd1d (patch)
treeb304210142c109211fffe0657aac59c3d936810d /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp
parent15b9789b976df256cff51461662225f04bf69c4b (diff)
parent8714f56cdc71aec3d3df0a350c085b236cb11921 (diff)
downloadopen-keychain-a67854ca6ae6be262726e989bf9a79da32dcdd1d.tar.gz
open-keychain-a67854ca6ae6be262726e989bf9a79da32dcdd1d.tar.bz2
open-keychain-a67854ca6ae6be262726e989bf9a79da32dcdd1d.zip
Merge branch 'master' of github.com:open-keychain/open-keychain
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java59
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java32
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java7
3 files changed, 46 insertions, 52 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..8d228ec96 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
@@ -608,12 +620,19 @@ 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;
int signatureIndex = 0;
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!");
@@ -640,9 +659,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()
@@ -650,11 +668,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..77a11165d 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java
@@ -225,38 +225,6 @@ public class PgpKeyHelper {
return signingKeys.get(0);
}
- @SuppressWarnings("unchecked")
- public static String getMainUserId(PGPPublicKey key) {
- for (String userId : new IterableIterator<String>(key.getUserIDs())) {
- return userId;
- }
- return null;
- }
-
- @SuppressWarnings("unchecked")
- public static String getMainUserId(PGPSecretKey key) {
- for (String userId : new IterableIterator<String>(key.getUserIDs())) {
- return userId;
- }
- 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("")) {
- userId = context.getString(R.string.user_id_no_name);
- }
- return userId;
- }
-
public static int getKeyUsage(PGPSecretKey key) {
return getKeyUsage(key.getPublicKey());
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java
index c61223fe2..2437cb0f0 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java
@@ -42,6 +42,7 @@ import org.spongycastle.openpgp.operator.jcajce.JcePGPDataEncryptorBuilder;
import org.spongycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
@@ -281,9 +282,12 @@ public class PgpSignEncrypt {
PGPSecretKey signingKey = null;
PGPSecretKeyRing signingKeyRing = null;
PGPPrivateKey signaturePrivateKey = null;
+ String signingUserId = null;
if (enableSignature) {
try {
signingKeyRing = mProviderHelper.getPGPSecretKeyRing(mSignatureMasterKeyId);
+ signingUserId = (String) mProviderHelper.getUnifiedData(mSignatureMasterKeyId,
+ KeychainContract.KeyRings.USER_ID, ProviderHelper.FIELD_TYPE_STRING);
} catch (ProviderHelper.NotFoundException e) {
throw new NoSigningKeyException();
}
@@ -369,9 +373,8 @@ public class PgpSignEncrypt {
signatureGenerator = new PGPSignatureGenerator(contentSignerBuilder);
signatureGenerator.init(signatureType, signaturePrivateKey);
- String userId = PgpKeyHelper.getMainUserId(signingKeyRing.getSecretKey());
PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator();
- spGen.setSignerUserID(false, userId);
+ spGen.setSignerUserID(false, signingUserId);
signatureGenerator.setHashedSubpackets(spGen.generate());
}
}