aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2014-11-22 00:29:14 +0100
committerDominik Schürmann <dominik@dominikschuermann.de>2014-11-22 00:29:14 +0100
commitbbbc45e4e9909806a91afe415265b507533f7556 (patch)
tree8ce585a6f9930b231c8270e1e38977154e547832 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java
parentfd60d49d262a7920279a0f87060c7084069165e2 (diff)
downloadopen-keychain-bbbc45e4e9909806a91afe415265b507533f7556.tar.gz
open-keychain-bbbc45e4e9909806a91afe415265b507533f7556.tar.bz2
open-keychain-bbbc45e4e9909806a91afe415265b507533f7556.zip
Dont accept signatures by expired or revoked subkeys
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java15
1 files changed, 11 insertions, 4 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 b094208a5..ea9e165ba 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.webkit.MimeTypeMap;
import org.openintents.openpgp.OpenPgpMetadata;
+import org.openintents.openpgp.OpenPgpSignatureResult;
import org.spongycastle.bcpg.ArmoredInputStream;
import org.spongycastle.openpgp.PGPCompressedData;
import org.spongycastle.openpgp.PGPEncryptedData;
@@ -332,7 +333,10 @@ public class PgpDecryptVerify extends BaseOperation {
}
signatureResultBuilder.setValidSignature(validSignature);
- if (!signatureResultBuilder.isValidSignature()) {
+ OpenPgpSignatureResult signatureResult = signatureResultBuilder.build();
+
+ if (signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED
+ || signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) {
log.add(LogType.MSG_VL_ERROR_INTEGRITY_CHECK, indent);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
}
@@ -344,7 +348,7 @@ public class PgpDecryptVerify extends BaseOperation {
// Return a positive result, with metadata and verification info
DecryptVerifyResult result =
new DecryptVerifyResult(DecryptVerifyResult.RESULT_OK, log);
- result.setSignatureResult(signatureResultBuilder.build());
+ result.setSignatureResult(signatureResult);
return result;
}
@@ -773,6 +777,8 @@ public class PgpDecryptVerify extends BaseOperation {
metadata = null;
}
+ OpenPgpSignatureResult signatureResult = signatureResultBuilder.build();
+
if (encryptedData.isIntegrityProtected()) {
updateProgress(R.string.progress_verifying_integrity, 95, 100);
@@ -786,7 +792,8 @@ public class PgpDecryptVerify extends BaseOperation {
// If no valid signature is present:
// Handle missing integrity protection like failed integrity protection!
// The MDC packet can be stripped by an attacker!
- if (!signatureResultBuilder.isValidSignature()) {
+ if (signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED
+ || signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) {
log.add(LogType.MSG_DC_ERROR_INTEGRITY_CHECK, indent);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
}
@@ -800,7 +807,7 @@ public class PgpDecryptVerify extends BaseOperation {
DecryptVerifyResult result =
new DecryptVerifyResult(DecryptVerifyResult.RESULT_OK, log);
result.setDecryptMetadata(metadata);
- result.setSignatureResult(signatureResultBuilder.build());
+ result.setSignatureResult(signatureResult);
return result;
}