diff options
| author | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-08-01 09:34:10 +0200 | 
|---|---|---|
| committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-08-01 09:34:10 +0200 | 
| commit | 6ab19ca363d59e5a4f9e3b700c6813f77de909c5 (patch) | |
| tree | f0092e93642bcf90a6b6ac7675ef428c4089e0d3 /OpenKeychain | |
| parent | d2f50eb60f38a52df272522e2b1fef57928d691d (diff) | |
| parent | 13a85e570242b3b320b976f037c877ccd2b225f8 (diff) | |
| download | open-keychain-6ab19ca363d59e5a4f9e3b700c6813f77de909c5.tar.gz open-keychain-6ab19ca363d59e5a4f9e3b700c6813f77de909c5.tar.bz2 open-keychain-6ab19ca363d59e5a4f9e3b700c6813f77de909c5.zip | |
Merge branch 'master' of github.com:open-keychain/open-keychain
Diffstat (limited to 'OpenKeychain')
3 files changed, 72 insertions, 15 deletions
| 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 7eb78a3d6..aa0207a6a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java @@ -1,5 +1,6 @@  package org.sufficientlysecure.keychain.provider; +import android.database.Cursor;  import android.net.Uri;  import org.sufficientlysecure.keychain.Constants; @@ -33,6 +34,7 @@ public class CachedPublicKeyRing extends KeyRing {          mUri = uri;      } +    @Override      public long getMasterKeyId() throws PgpGeneralException {          try {              Object data = mProviderHelper.getGenericData(mUri, @@ -59,6 +61,17 @@ public class CachedPublicKeyRing extends KeyRing {          return getMasterKeyId();      } +    public byte[] getFingerprint() throws PgpGeneralException { +        try { +            Object data = mProviderHelper.getGenericData(mUri, +                    KeychainContract.KeyRings.FINGERPRINT, ProviderHelper.FIELD_TYPE_BLOB); +            return (byte[]) data; +        } catch (ProviderHelper.NotFoundException e) { +            throw new PgpGeneralException(e); +        } +    } + +    @Override      public String getPrimaryUserId() throws PgpGeneralException {          try {              Object data = mProviderHelper.getGenericData(mUri, @@ -74,6 +87,7 @@ public class CachedPublicKeyRing extends KeyRing {          return getPrimaryUserId();      } +    @Override      public boolean isRevoked() throws PgpGeneralException {          try {              Object data = mProviderHelper.getGenericData(mUri, @@ -85,6 +99,7 @@ public class CachedPublicKeyRing extends KeyRing {          }      } +    @Override      public boolean canCertify() throws PgpGeneralException {          try {              Object data = mProviderHelper.getGenericData(mUri, @@ -96,21 +111,32 @@ public class CachedPublicKeyRing extends KeyRing {          }      } +    @Override      public long getEncryptId() throws PgpGeneralException {          try { -            Object data = mProviderHelper.getGenericData(mUri, -                    KeychainContract.KeyRings.MASTER_KEY_ID, // TODO -                    ProviderHelper.FIELD_TYPE_INTEGER); -            return (Long) data; -        } catch(ProviderHelper.NotFoundException e) { +            Cursor subkeys = getSubkeys(); +            if (subkeys != null) { +                try { +                    while (subkeys.moveToNext()) { +                        if (subkeys.getInt(subkeys.getColumnIndexOrThrow(KeychainContract.Keys.CAN_ENCRYPT)) != 0) { +                            return subkeys.getLong(subkeys.getColumnIndexOrThrow(KeychainContract.Keys.KEY_ID)); +                        } +                    } +                } finally { +                    subkeys.close(); +                } +            } +        } catch(Exception e) {              throw new PgpGeneralException(e);          } +        throw new PgpGeneralException("No encrypt key found");      } +    @Override      public boolean hasEncrypt() throws PgpGeneralException {          try {              Object data = mProviderHelper.getGenericData(mUri, -                    KeychainContract.KeyRings.CAN_ENCRYPT, // TODO +                    KeychainContract.KeyRings.HAS_ENCRYPT,                      ProviderHelper.FIELD_TYPE_INTEGER);              return (Long) data > 0;          } catch(ProviderHelper.NotFoundException e) { @@ -118,21 +144,32 @@ public class CachedPublicKeyRing extends KeyRing {          }      } +    @Override      public long getSignId() throws PgpGeneralException {          try { -            Object data = mProviderHelper.getGenericData(mUri, -                    KeychainContract.KeyRings.MASTER_KEY_ID, // TODO -                    ProviderHelper.FIELD_TYPE_INTEGER); -            return (Long) data; -        } catch(ProviderHelper.NotFoundException e) { +            Cursor subkeys = getSubkeys(); +            if (subkeys != null) { +                try { +                    while (subkeys.moveToNext()) { +                        if (subkeys.getInt(subkeys.getColumnIndexOrThrow(KeychainContract.Keys.CAN_SIGN)) != 0) { +                            return subkeys.getLong(subkeys.getColumnIndexOrThrow(KeychainContract.Keys.KEY_ID)); +                        } +                    } +                } finally { +                    subkeys.close(); +                } +            } +        } catch(Exception e) {              throw new PgpGeneralException(e);          } +        throw new PgpGeneralException("No sign key found");      } +    @Override      public boolean hasSign() throws PgpGeneralException {          try {              Object data = mProviderHelper.getGenericData(mUri, -                    KeychainContract.KeyRings.CAN_SIGN, // TODO +                    KeychainContract.KeyRings.HAS_SIGN,                      ProviderHelper.FIELD_TYPE_INTEGER);              return (Long) data > 0;          } catch(ProviderHelper.NotFoundException e) { @@ -140,6 +177,7 @@ public class CachedPublicKeyRing extends KeyRing {          }      } +    @Override      public int getVerified() throws PgpGeneralException {          try {              Object data = mProviderHelper.getGenericData(mUri, @@ -160,6 +198,10 @@ public class CachedPublicKeyRing extends KeyRing {          } catch(ProviderHelper.NotFoundException e) {              throw new PgpGeneralException(e);          } +    } +    private Cursor getSubkeys() throws PgpGeneralException { +        Uri keysUri = KeychainContract.Keys.buildKeysUri(Long.toString(extractOrGetMasterKeyId())); +        return mProviderHelper.getContentResolver().query(keysUri, null, null, null, null);      }  } 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 9b35903f6..aa85577e0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -1024,4 +1024,8 @@ public class ProviderHelper {              }          }      } + +    public ContentResolver getContentResolver() { +        return mContentResolver; +    }  } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index 0ebf84241..bcc042146 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -135,6 +135,9 @@ public class KeychainIntentService extends IntentService      // delete file securely      public static final String DELETE_FILE = "deleteFile"; +    // import key +    public static final String IMPORT_KEY_LIST = "import_key_list"; +      // export key      public static final String EXPORT_OUTPUT_STREAM = "export_output_stream";      public static final String EXPORT_FILENAME = "export_filename"; @@ -384,9 +387,15 @@ public class KeychainIntentService extends IntentService              }          } else if (ACTION_IMPORT_KEYRING.equals(action)) {              try { -                // get entries from cached file -                FileImportCache cache = new FileImportCache(this); -                List<ParcelableKeyRing> entries = cache.readCache(); +                List<ParcelableKeyRing> entries; +                if (data.containsKey(IMPORT_KEY_LIST)) { +                    // get entries from intent +                    entries = data.getParcelableArrayList(IMPORT_KEY_LIST); +                } else { +                    // get entries from cached file +                    FileImportCache cache = new FileImportCache(this); +                    entries = cache.readCache(); +                }                  PgpImportExport pgpImportExport = new PgpImportExport(this, this);                  ImportKeyResult result = pgpImportExport.importKeyRings(entries); @@ -520,6 +529,8 @@ public class KeychainIntentService extends IntentService                  FileImportCache cache = new FileImportCache(this);                  cache.writeCache(keyRings);                  Bundle importData = new Bundle(); +                // This is not going through binder, nothing to fear of +                importData.putParcelableArrayList(IMPORT_KEY_LIST, keyRings);                  importIntent.putExtra(EXTRA_DATA, importData);                  importIntent.putExtra(EXTRA_MESSENGER, mMessenger); | 
