diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2014-09-03 01:22:31 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2014-09-03 02:43:06 +0200 |
commit | e9b14585f5eecddf8c22b2e68aa1a0500682ba3a (patch) | |
tree | 14b8c72cc6bb912e670ea6254a2076f869d27532 | |
parent | 35962cd2546da025116a0adb4c4025ee00f1e7a3 (diff) | |
download | open-keychain-e9b14585f5eecddf8c22b2e68aa1a0500682ba3a.tar.gz open-keychain-e9b14585f5eecddf8c22b2e68aa1a0500682ba3a.tar.bz2 open-keychain-e9b14585f5eecddf8c22b2e68aa1a0500682ba3a.zip |
add getSecretKeyType method to CachedPublicKeyRing
3 files changed, 46 insertions, 17 deletions
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 d117f2103..44918c5fb 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 @@ -29,7 +29,10 @@ 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.pgp.UncachedPublicKey; +import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.service.OperationResults.SaveKeyringResult; +import org.sufficientlysecure.keychain.support.KeyringTestingHelper; import org.sufficientlysecure.keychain.util.ProgressScaler; import java.io.IOException; @@ -39,6 +42,8 @@ import java.util.Iterator; @org.robolectric.annotation.Config(emulateSdk = 18) // Robolectric doesn't yet support 19 public class ProviderHelperSaveTest { + ProviderHelper mProviderHelper = new ProviderHelper(Robolectric.application); + @BeforeClass public static void setUpOnce() throws Exception { ShadowLog.stream = System.out; @@ -81,27 +86,21 @@ public class ProviderHelperSaveTest { SaveKeyringResult result; // insert both keys, second should fail - result = new ProviderHelper(Robolectric.application).savePublicKeyRing(pub); + result = mProviderHelper.savePublicKeyRing(pub); Assert.assertTrue("import of public keyring should succeed", result.success()); - result = new ProviderHelper(Robolectric.application).saveSecretKeyRing(sec, - new ProgressScaler()); + result = mProviderHelper.saveSecretKeyRing(sec, new ProgressScaler()); Assert.assertTrue("import of secret keyring should succeed", result.success()); - CanonicalizedSecretKeyRing secRing = - new ProviderHelper(Robolectric.application).getCanonicalizedSecretKeyRing(keyId); + // make sure both the CanonicalizedSecretKeyRing as well as the CachedPublicKeyRing correctly + // indicate the secret key type + CachedPublicKeyRing cachedRing = mProviderHelper.getCachedPublicKeyRing(keyId); + CanonicalizedSecretKeyRing secRing = mProviderHelper.getCanonicalizedSecretKeyRing(keyId); for (CanonicalizedSecretKey key : secRing.secretKeyIterator()) { - Assert.assertEquals("all subkeys should be divert-to-key", - SecretKeyType.DIVERT_TO_CARD, key.getSecretKeyType()); - } - - /* - CachedPublicKeyRing cachedRing = - new ProviderHelper(Robolectric.application).getCachedPublicKeyRing(keyId); - for (CanonicalizedSecretKey key : cachedRing.()) { - Assert.assertEquals("all subkeys should be divert-to-key", + Assert.assertEquals("all subkeys from CanonicalizedSecretKeyRing should be divert-to-key", SecretKeyType.DIVERT_TO_CARD, key.getSecretKeyType()); + Assert.assertEquals("all subkeys from CachedPublicKeyRing should be divert-to-key", + SecretKeyType.DIVERT_TO_CARD, cachedRing.getSecretKeyType(key.getKeyId())); } - */ } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java index 21f0dddf6..18b02156d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java @@ -22,8 +22,11 @@ import android.database.Cursor; import android.net.Uri; import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; +import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; +import org.sufficientlysecure.keychain.provider.KeychainContract.Keys; import org.sufficientlysecure.keychain.util.Log; /** This implementation of KeyRing provides a cached view of PublicKeyRing @@ -222,4 +225,17 @@ public class CachedPublicKeyRing extends KeyRing { Uri keysUri = KeychainContract.Keys.buildKeysUri(extractOrGetMasterKeyId()); return mProviderHelper.getContentResolver().query(keysUri, null, null, null, null); } + + public SecretKeyType getSecretKeyType(long keyId) throws PgpGeneralException { + try { + Object data = mProviderHelper.getGenericData(Keys.buildKeysUri(mUri), + KeyRings.HAS_SECRET, + ProviderHelper.FIELD_TYPE_INTEGER, + KeyRings.KEY_ID + " = " + Long.toString(keyId)); + return SecretKeyType.fromNum(((Long) data).intValue()); + } catch(ProviderHelper.NotFoundException e) { + throw new PgpGeneralException(e); + } + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java index e1dae55ad..bfa95280e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -141,12 +141,22 @@ public class ProviderHelper { public static final int FIELD_TYPE_BLOB = 5; public Object getGenericData(Uri uri, String column, int type) throws NotFoundException { - return getGenericData(uri, new String[]{column}, new int[]{type}).get(column); + return getGenericData(uri, new String[]{column}, new int[]{type}, null).get(column); + } + + public Object getGenericData(Uri uri, String column, int type, String selection) + throws NotFoundException { + return getGenericData(uri, new String[]{column}, new int[]{type}, selection).get(column); } public HashMap<String, Object> getGenericData(Uri uri, String[] proj, int[] types) + throws NotFoundException { + return getGenericData(uri, proj, types, null); + } + + public HashMap<String, Object> getGenericData(Uri uri, String[] proj, int[] types, String selection) throws NotFoundException { - Cursor cursor = mContentResolver.query(uri, proj, null, null, null); + Cursor cursor = mContentResolver.query(uri, proj, selection, null, null); try { HashMap<String, Object> result = new HashMap<String, Object>(proj.length); @@ -223,6 +233,10 @@ public class ProviderHelper { return new CachedPublicKeyRing(this, queryUri); } + public CachedPublicKeyRing getCachedPublicKeyRing(long id) { + return new CachedPublicKeyRing(this, KeyRings.buildUnifiedKeyRingUri(id)); + } + public CanonicalizedPublicKeyRing getCanonicalizedPublicKeyRing(long id) throws NotFoundException { return (CanonicalizedPublicKeyRing) getCanonicalizedKeyRing(KeyRings.buildUnifiedKeyRingUri(id), false); } |