From ad6ac28782450c3b6f55fd7ae3c7a96b9a667b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Wed, 16 Apr 2014 00:18:00 +0200 Subject: Fix SIGNATURE_UNKNOWN_PUB_KEY --- .../pgp/OpenPgpSignatureResultBuilder.java | 25 +++++++++------------- .../keychain/pgp/PgpDecryptVerify.java | 14 ++++++------ 2 files changed, 16 insertions(+), 23 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java index 550b5088c..5e49497c0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java @@ -27,7 +27,6 @@ import org.sufficientlysecure.keychain.util.Log; */ public class OpenPgpSignatureResultBuilder { // OpenPgpSignatureResult - private int mStatus = OpenPgpSignatureResult.SIGNATURE_ERROR; private boolean mSignatureOnly = false; private String mUserId; private long mKeyId; @@ -39,10 +38,6 @@ public class OpenPgpSignatureResultBuilder { private boolean mValidKeyBinding = false; private boolean mIsSignatureKeyCertified = false; - public void status(int status) { - this.mStatus = status; - } - public void signatureOnly(boolean signatureOnly) { this.mSignatureOnly = signatureOnly; } @@ -80,9 +75,9 @@ public class OpenPgpSignatureResultBuilder { OpenPgpSignatureResult result = new OpenPgpSignatureResult(); result.setSignatureOnly(mSignatureOnly); - if (mValidKeyBinding && mValidSignature) { - // valid sig! - if (mKnownKey) { + // valid sig! + if (mKnownKey) { + if (mValidKeyBinding && mValidSignature) { result.setKeyId(mKeyId); result.setUserId(mUserId); @@ -94,15 +89,15 @@ public class OpenPgpSignatureResultBuilder { result.setStatus(OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED); } } else { - result.setKeyId(mKeyId); - - Log.d(Constants.TAG, "SIGNATURE_UNKNOWN_PUB_KEY"); - result.setStatus(OpenPgpSignatureResult.SIGNATURE_UNKNOWN_PUB_KEY); + Log.d(Constants.TAG, "Error!\nvalidKeyBinding: " + mValidKeyBinding + + "\nvalidSignature: " + mValidSignature); + result.setStatus(OpenPgpSignatureResult.SIGNATURE_ERROR); } } else { - Log.d(Constants.TAG, "Error!\nvalidKeyBinding: " + mValidKeyBinding - + "\nvalidSignature: " + mValidSignature); - result.setStatus(OpenPgpSignatureResult.SIGNATURE_ERROR); + result.setKeyId(mKeyId); + + Log.d(Constants.TAG, "SIGNATURE_UNKNOWN_PUB_KEY"); + result.setStatus(OpenPgpSignatureResult.SIGNATURE_UNKNOWN_PUB_KEY); } return result; 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 b3572d4a2..a9ad04108 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -405,8 +405,6 @@ public class PgpDecryptVerify { if (dataChunk instanceof PGPOnePassSignatureList) { updateProgress(R.string.progress_processing_signature, currentProgress, 100); - signatureResultBuilder.signatureAvailable(true); - PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) dataChunk; // go through all signatures @@ -439,6 +437,7 @@ public class PgpDecryptVerify { // get the subkey which has been used to generate this signature signatureKey = publicKeyRing.getPublicKey(signature.getKeyID()); + signatureResultBuilder.signatureAvailable(true); signatureResultBuilder.knownKey(true); // TODO: uses the first pubkey for information signatureResultBuilder.userId(PgpKeyHelper.getMainUserId(publicKeyRing.getPublicKey())); @@ -458,9 +457,9 @@ public class PgpDecryptVerify { signatureResultBuilder.signatureKeyCertified(isSignatureKeyCertified); } else { // no key in our database -> return "unknown pub key" status including the first key id - signatureResultBuilder.knownKey(false); - if (!sigList.isEmpty()) { + signatureResultBuilder.signatureAvailable(true); + signatureResultBuilder.knownKey(false); signatureResultBuilder.keyId(sigList.get(0).getKeyID()); } } @@ -606,8 +605,6 @@ public class PgpDecryptVerify { throw new InvalidDataException(); } - signatureResultBuilder.signatureAvailable(true); - // go through all signatures // and find out for which signature we have a key in our database Long masterKeyId = null; @@ -641,6 +638,7 @@ public class PgpDecryptVerify { // get the subkey which has been used to generate this signature signatureKey = publicKeyRing.getPublicKey(signature.getKeyID()); + signatureResultBuilder.signatureAvailable(true); signatureResultBuilder.knownKey(true); // TODO: uses the first pubkey for information signatureResultBuilder.userId(PgpKeyHelper.getMainUserId(publicKeyRing.getPublicKey())); @@ -660,9 +658,9 @@ public class PgpDecryptVerify { signatureResultBuilder.signatureKeyCertified(isSignatureKeyCertified); } else { // no key in our database -> return "unknown pub key" status including the first key id - signatureResultBuilder.knownKey(false); - if (!sigList.isEmpty()) { + signatureResultBuilder.signatureAvailable(true); + signatureResultBuilder.knownKey(false); signatureResultBuilder.keyId(sigList.get(0).getKeyID()); } } -- cgit v1.2.3