diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-04-09 15:36:34 +0200 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-04-09 15:39:50 +0200 |
commit | a0a51c9f929b90327feb117d7ba01544aee4f50b (patch) | |
tree | 9668ec28a405763fd0a9652f2189446c3438cb37 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service | |
parent | 27eb7c0f1be4c3633dc72f4dba199ce971b12aea (diff) | |
download | open-keychain-a0a51c9f929b90327feb117d7ba01544aee4f50b.tar.gz open-keychain-a0a51c9f929b90327feb117d7ba01544aee4f50b.tar.bz2 open-keychain-a0a51c9f929b90327feb117d7ba01544aee4f50b.zip |
Fix save keyring, improve signature verification
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service')
2 files changed, 25 insertions, 19 deletions
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 a663e6a12..0fb28ed1c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -480,9 +480,9 @@ public class KeychainIntentService extends IntentService } else if (ACTION_SAVE_KEYRING.equals(action)) { try { /* Input */ - SaveKeyringParcel saveParams = data.getParcelable(SAVE_KEYRING_PARCEL); - String oldPassphrase = saveParams.oldPassphrase; - String newPassphrase = saveParams.newPassphrase; + SaveKeyringParcel saveParcel = data.getParcelable(SAVE_KEYRING_PARCEL); + String oldPassphrase = saveParcel.oldPassphrase; + String newPassphrase = saveParcel.newPassphrase; boolean canSign = true; if (data.containsKey(SAVE_KEYRING_CAN_SIGN)) { @@ -493,7 +493,7 @@ public class KeychainIntentService extends IntentService newPassphrase = oldPassphrase; } - long masterKeyId = saveParams.keys.get(0).getKeyID(); + long masterKeyId = saveParcel.keys.get(0).getKeyID(); /* Operation */ if (!canSign) { @@ -506,10 +506,16 @@ public class KeychainIntentService extends IntentService setProgress(R.string.progress_done, 100, 100); } else { PgpKeyOperation keyOperations = new PgpKeyOperation(new ProgressScaler(this, 0, 90, 100)); - PGPSecretKeyRing privkey = ProviderHelper.getPGPSecretKeyRing(this, masterKeyId); - PGPPublicKeyRing pubkey = ProviderHelper.getPGPPublicKeyRing(this, masterKeyId); - PgpKeyOperation.Pair<PGPSecretKeyRing,PGPPublicKeyRing> pair = - keyOperations.buildSecretKey(privkey, pubkey, saveParams); + PgpKeyOperation.Pair<PGPSecretKeyRing, PGPPublicKeyRing> pair; + try { + PGPSecretKeyRing privkey = ProviderHelper.getPGPSecretKeyRing(this, masterKeyId); + PGPPublicKeyRing pubkey = ProviderHelper.getPGPPublicKeyRing(this, masterKeyId); + + pair = keyOperations.buildSecretKey(privkey, pubkey, saveParcel); // edit existing + } catch (ProviderHelper.NotFoundException e) { + pair = keyOperations.buildNewSecretKey(saveParcel); //new Keyring + } + setProgress(R.string.progress_saving_key_ring, 90, 100); // save the pair ProviderHelper.saveKeyRing(this, pair.second, pair.first); @@ -654,16 +660,16 @@ public class KeychainIntentService extends IntentService ArrayList<Long> secretMasterKeyIds = new ArrayList<Long>(); String selection = null; - if(!exportAll) { + if (!exportAll) { selection = KeychainDatabase.Tables.KEYS + "." + KeyRings.MASTER_KEY_ID + " IN( "; - for(long l : masterKeyIds) { + for (long l : masterKeyIds) { selection += Long.toString(l) + ","; } - selection = selection.substring(0, selection.length()-1) + " )"; + selection = selection.substring(0, selection.length() - 1) + " )"; } Cursor cursor = getContentResolver().query(KeyRings.buildUnifiedKeyRingsUri(), - new String[]{ KeyRings.MASTER_KEY_ID, KeyRings.HAS_SECRET }, + new String[]{KeyRings.MASTER_KEY_ID, KeyRings.HAS_SECRET}, selection, null, null); try { cursor.moveToFirst(); @@ -671,9 +677,9 @@ public class KeychainIntentService extends IntentService // export public either way publicMasterKeyIds.add(cursor.getLong(0)); // add secret if available (and requested) - if(exportSecret && cursor.getInt(1) != 0) + if (exportSecret && cursor.getInt(1) != 0) secretMasterKeyIds.add(cursor.getLong(0)); - } while(cursor.moveToNext()); + } while (cursor.moveToNext()); } finally { cursor.close(); } @@ -757,13 +763,13 @@ public class KeychainIntentService extends IntentService // verify downloaded key by comparing fingerprints if (entry.getFingerPrintHex() != null) { String downloadedKeyFp = PgpKeyHelper.convertFingerprintToHex( - downloadedKey.getPublicKey().getFingerprint()); + downloadedKey.getPublicKey().getFingerprint()); if (downloadedKeyFp.equals(entry.getFingerPrintHex())) { Log.d(Constants.TAG, "fingerprint of downloaded key is the same as " + "the requested fingerprint!"); } else { throw new PgpGeneralException("fingerprint of downloaded key is " + - "NOT the same as the requested fingerprint!"); + "NOT the same as the requested fingerprint!"); } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java index 7c2dcf2c1..11b1ec978 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java @@ -29,7 +29,7 @@ import java.util.GregorianCalendar; public class SaveKeyringParcel implements Parcelable { - public ArrayList<String> userIDs; + public ArrayList<String> userIds; public ArrayList<String> originalIDs; public ArrayList<String> deletedIDs; public boolean[] newIDs; @@ -47,7 +47,7 @@ public class SaveKeyringParcel implements Parcelable { public SaveKeyringParcel() {} private SaveKeyringParcel(Parcel source) { - userIDs = (ArrayList<String>) source.readSerializable(); + userIds = (ArrayList<String>) source.readSerializable(); originalIDs = (ArrayList<String>) source.readSerializable(); deletedIDs = (ArrayList<String>) source.readSerializable(); newIDs = source.createBooleanArray(); @@ -70,7 +70,7 @@ public class SaveKeyringParcel implements Parcelable { @Override public void writeToParcel(Parcel destination, int flags) { - destination.writeSerializable(userIDs); //might not be the best method to store. + destination.writeSerializable(userIds); //might not be the best method to store. destination.writeSerializable(originalIDs); destination.writeSerializable(deletedIDs); destination.writeBooleanArray(newIDs); |