From c34a159cae783178b692022a584e1f937cc652ca Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sun, 28 Sep 2014 15:17:09 +0200 Subject: fix method visibility for tests --- .../pgp/UncachedKeyringCanonicalizeTest.java | 2 -- .../keychain/provider/ProviderHelperSaveTest.java | 3 ++ .../keychain/pgp/CanonicalizedPublicKey.java | 37 ++++------------------ .../keychain/pgp/UncachedPublicKey.java | 33 +++++++++++++++++-- 4 files changed, 40 insertions(+), 35 deletions(-) diff --git a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/UncachedKeyringCanonicalizeTest.java b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/UncachedKeyringCanonicalizeTest.java index e8232a934..fd0bdab0b 100644 --- a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/UncachedKeyringCanonicalizeTest.java +++ b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/UncachedKeyringCanonicalizeTest.java @@ -370,8 +370,6 @@ public class UncachedKeyringCanonicalizeTest { @Test public void testSubkeyBindingNoPKB() throws Exception { UncachedPublicKey pKey = KeyringTestingHelper.getNth(ring.getPublicKeys(), 1); - Assert.assertTrue("second subkey must be able to sign", pKey.canSign()); - PGPSignature sig; subHashedPacketsGen.setKeyFlags(false, KeyFlags.SIGN_DATA); diff --git a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/provider/ProviderHelperSaveTest.java b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/provider/ProviderHelperSaveTest.java index be97e5440..3dc107daa 100644 --- a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/provider/ProviderHelperSaveTest.java +++ b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/provider/ProviderHelperSaveTest.java @@ -32,6 +32,7 @@ import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKeyRing; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; +import org.sufficientlysecure.keychain.service.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.service.results.SaveKeyringResult; import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.ProgressScaler; @@ -80,6 +81,8 @@ public class ProviderHelperSaveTest { UncachedKeyRing pub = readRingFromResource("/test-keys/mailvelope_07_no_key_flags.asc"); long keyId = pub.getMasterKeyId(); + Assert.assertNull("key flags should be null", + pub.canonicalize(new OperationLog(), 0).getPublicKey().getKeyUsage()); mProviderHelper.savePublicKeyRing(pub); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKey.java index d0808d446..8fb3402b2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKey.java @@ -18,11 +18,8 @@ package org.sufficientlysecure.keychain.pgp; -import org.spongycastle.bcpg.SignatureSubpacketTags; import org.spongycastle.bcpg.sig.KeyFlags; import org.spongycastle.openpgp.PGPPublicKey; -import org.spongycastle.openpgp.PGPSignature; -import org.spongycastle.openpgp.PGPSignatureSubpacketVector; import org.spongycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator; import org.sufficientlysecure.keychain.util.IterableIterator; @@ -40,7 +37,6 @@ public class CanonicalizedPublicKey extends UncachedPublicKey { // this is the parent key ring final KeyRing mRing; - private Integer mCacheUsage = null; CanonicalizedPublicKey(KeyRing ring, PGPPublicKey key) { super(key); @@ -52,7 +48,7 @@ public class CanonicalizedPublicKey extends UncachedPublicKey { } JcePublicKeyKeyEncryptionMethodGenerator getPubKeyEncryptionGenerator() { - return new JcePublicKeyKeyEncryptionMethodGenerator(mPublicKey); + return new JcePublicKeyKeyEncryptionMethodGenerator(mPublicKey); } public boolean canSign() { @@ -68,32 +64,6 @@ public class CanonicalizedPublicKey extends UncachedPublicKey { return false; } - /** - * Get all key usage flags. - * If at least one key flag subpacket is present return these. - * If no subpacket is present it returns null. - */ - @SuppressWarnings("unchecked") - public Integer getKeyUsage() { - if (mCacheUsage == null) { - for (PGPSignature sig : new IterableIterator(mPublicKey.getSignatures())) { - if (mPublicKey.isMasterKey() && sig.getKeyID() != mPublicKey.getKeyID()) { - continue; - } - - PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets(); - if (hashed != null && hashed.getSubpacket(SignatureSubpacketTags.KEY_FLAGS) != null) { - // init if at least one key flag subpacket has been found - if (mCacheUsage == null) { - mCacheUsage = 0; - } - mCacheUsage |= hashed.getKeyFlags(); - } - } - } - return mCacheUsage; - } - public boolean canCertify() { // if key flags subpacket is available, honor it! if (getKeyUsage() != null) { @@ -129,4 +99,9 @@ public class CanonicalizedPublicKey extends UncachedPublicKey { return false; } + + /** Same method as superclass, but we make it public. */ + public Integer getKeyUsage() { + return super.getKeyUsage(); + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java index 345c00579..bb9c7d51c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java @@ -39,6 +39,7 @@ import java.util.Iterator; public class UncachedPublicKey { protected final PGPPublicKey mPublicKey; + private Integer mCacheUsage = null; public UncachedPublicKey(PGPPublicKey key) { mPublicKey = key; @@ -231,9 +232,8 @@ public class UncachedPublicKey { return mPublicKey.getFingerprint(); } - // TODO This method should have package visibility - no access outside the pgp package! // (It's still used in ProviderHelper at this point) - public PGPPublicKey getPublicKey() { + PGPPublicKey getPublicKey() { return mPublicKey; } @@ -271,4 +271,33 @@ public class UncachedPublicKey { } } + /** Get all key usage flags. + * If at least one key flag subpacket is present return these. If no + * subpacket is present it returns null. + * + * Note that this method has package visiblity because it is used in test + * cases. Certificates of UncachedPublicKey instances can NOT be assumed to + * be verified, so the result of this method should not be used in other + * places! + */ + @SuppressWarnings("unchecked") + Integer getKeyUsage() { + if (mCacheUsage == null) { + for (PGPSignature sig : new IterableIterator(mPublicKey.getSignatures())) { + if (mPublicKey.isMasterKey() && sig.getKeyID() != mPublicKey.getKeyID()) { + continue; + } + + PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets(); + if (hashed != null && hashed.getSubpacket(SignatureSubpacketTags.KEY_FLAGS) != null) { + // init if at least one key flag subpacket has been found + if (mCacheUsage == null) { + mCacheUsage = 0; + } + mCacheUsage |= hashed.getKeyFlags(); + } + } + } + return mCacheUsage; + } } -- cgit v1.2.3