aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2014-10-08 18:31:31 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2014-10-08 18:31:31 +0200
commit0d6d4653b43fcf1389b470afd7364854505d96c2 (patch)
treeba42b4d9c4f960036a4ff80b800bd66743e893f8 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp
parent2eb776594f378ac7a14ea716f0a7470d34230ec2 (diff)
downloadopen-keychain-0d6d4653b43fcf1389b470afd7364854505d96c2.tar.gz
open-keychain-0d6d4653b43fcf1389b470afd7364854505d96c2.tar.bz2
open-keychain-0d6d4653b43fcf1389b470afd7364854505d96c2.zip
Big error screen if signature is invalid or key is revoked/expired, also fixes signature status for expired and revoked keys
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedKeyRing.java11
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java11
2 files changed, 19 insertions, 3 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedKeyRing.java
index 905cae17e..b1e7eaeb5 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedKeyRing.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedKeyRing.java
@@ -25,6 +25,7 @@ import org.sufficientlysecure.keychain.util.IterableIterator;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
+import java.util.Date;
/** A generic wrapped PGPKeyRing object.
*
@@ -76,6 +77,16 @@ public abstract class CanonicalizedKeyRing extends KeyRing {
return getRing().getPublicKey().isRevoked();
}
+ public boolean isExpired() throws PgpGeneralException {
+ // Is the master key expired?
+ Date creationDate = getRing().getPublicKey().getCreationTime();
+ Date expiryDate = getRing().getPublicKey().getValidSeconds() > 0
+ ? new Date(creationDate.getTime() + getRing().getPublicKey().getValidSeconds() * 1000) : null;
+
+ Date now = new Date();
+ return creationDate.after(now) || (expiryDate != null && expiryDate.before(now));
+ }
+
public boolean canCertify() throws PgpGeneralException {
return getRing().getPublicKey().isEncryptionKey();
}
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 3d41c928b..c7241c723 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java
@@ -103,9 +103,14 @@ public class OpenPgpSignatureResultBuilder {
Log.d(Constants.TAG, "signingRing.getUnorderedUserIds(): " + signingRing.getUnorderedUserIds());
setUserIds(signingRing.getUnorderedUserIds());
- // from KEY
- setKeyExpired(signingKey.isExpired());
- setKeyRevoked(signingKey.isRevoked());
+ // either master key is expired/revoked or this specific subkey is expired/revoked
+ try {
+ setKeyExpired(signingRing.isExpired() || signingKey.isExpired());
+ setKeyRevoked(signingRing.isRevoked() || signingKey.isRevoked());
+ } catch (PgpGeneralException e) {
+ Log.e(Constants.TAG, "shouldn't happen!");
+ setKeyRevoked(true);
+ }
}
public OpenPgpSignatureResult build() {