aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CachedPublicKeyRing.java
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-05-04 12:55:22 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2014-05-04 13:22:35 +0200
commit411b4cfeb2caa1d7d1c33129711bc1cd617778cf (patch)
treea4311e00e9aa3be412e1528eeebd0bed370dc70c /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CachedPublicKeyRing.java
parentd0e3af505cb0bd1405fac9f28ec32a404a8b0751 (diff)
downloadopen-keychain-411b4cfeb2caa1d7d1c33129711bc1cd617778cf.tar.gz
open-keychain-411b4cfeb2caa1d7d1c33129711bc1cd617778cf.tar.bz2
open-keychain-411b4cfeb2caa1d7d1c33129711bc1cd617778cf.zip
wrapped-key-ring: redesign underlying CachedKeyRing
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CachedPublicKeyRing.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CachedPublicKeyRing.java80
1 files changed, 36 insertions, 44 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CachedPublicKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CachedPublicKeyRing.java
index 8970d18ec..bbce42f86 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CachedPublicKeyRing.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CachedPublicKeyRing.java
@@ -23,14 +23,14 @@ public class CachedPublicKeyRing extends CachedKeyRing {
private PGPPublicKeyRing mRing;
private final byte[] mPubKey;
- public CachedPublicKeyRing(long masterKeyId, int keySize, boolean isRevoked,
- boolean canCertify, long creation, long expiry, int algorithm,
- byte[] fingerprint, String userId, int verified, boolean hasSecret,
- byte[] pubkey)
+ public CachedPublicKeyRing(long masterKeyId, String userId, boolean hasAnySecret,
+ boolean isRevoked, boolean canCertify, long hasEncryptId, long hasSignId,
+ int verified, byte[] blob)
{
- super(masterKeyId, canCertify, fingerprint, userId, verified, hasSecret);
+ super(masterKeyId, userId, hasAnySecret, isRevoked, canCertify,
+ hasEncryptId, hasSignId, verified);
- mPubKey = pubkey;
+ mPubKey = blob;
}
PGPPublicKeyRing getRing() {
@@ -52,46 +52,18 @@ public class CachedPublicKeyRing extends CachedKeyRing {
return new CachedPublicKey(this, getRing().getPublicKey(id));
}
- public CachedPublicKey getFirstSignSubkey() throws PgpGeneralException {
- // only return master key if no other signing key is available
- CachedPublicKey masterKey = null;
- for (PGPPublicKey k : new IterableIterator<PGPPublicKey>(getRing().getPublicKeys())) {
- CachedPublicKey key = new CachedPublicKey(this, k);
- if (key.isRevoked() || key.canSign() || key.isExpired()) {
- continue;
+ /** Getter that returns the subkey that should be used for signing. */
+ CachedPublicKey getEncryptionSubKey() throws PgpGeneralException {
+ PGPPublicKey key = getRing().getPublicKey(getEncryptId());
+ if(key != null) {
+ CachedPublicKey cKey = new CachedPublicKey(this, key);
+ if(!cKey.canEncrypt()) {
+ throw new PgpGeneralException("key error");
}
- if (key.isMasterKey()) {
- masterKey = key;
- } else {
- return key;
- }
- }
- if(masterKey == null) {
- // TODO proper exception
- throw new PgpGeneralException("key not found");
- }
- return masterKey;
- }
-
- public CachedPublicKey getFirstEncryptSubkey() throws PgpGeneralException {
- // only return master key if no other encryption key is available
- CachedPublicKey masterKey = null;
- for (PGPPublicKey k : new IterableIterator<PGPPublicKey>(getRing().getPublicKeys())) {
- CachedPublicKey key = new CachedPublicKey(this, k);
- if (key.isRevoked() || key.canEncrypt() || key.isExpired()) {
- continue;
- }
- if (key.isMasterKey()) {
- masterKey = key;
- } else {
- return key;
- }
- }
- if(masterKey == null) {
- // TODO proper exception
- throw new PgpGeneralException("key not found");
+ return cKey;
}
- return masterKey;
+ // TODO handle with proper exception
+ throw new PgpGeneralException("no encryption key available");
}
public boolean verifySubkeyBinding(CachedPublicKey cachedSubkey) {
@@ -189,4 +161,24 @@ public class CachedPublicKeyRing extends CachedKeyRing {
return validPrimaryKeyBinding;
}
+ public IterableIterator<CachedPublicKey> iterator() {
+ final Iterator<PGPPublicKey> it = getRing().getPublicKeys();
+ return new IterableIterator<CachedPublicKey>(new Iterator<CachedPublicKey>() {
+ @Override
+ public boolean hasNext() {
+ return it.hasNext();
+ }
+
+ @Override
+ public CachedPublicKey next() {
+ return new CachedPublicKey(CachedPublicKeyRing.this, it.next());
+ }
+
+ @Override
+ public void remove() {
+ it.remove();
+ }
+ });
+ }
+
} \ No newline at end of file