aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2014-04-09 15:36:34 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2014-04-09 15:39:50 +0200
commita0a51c9f929b90327feb117d7ba01544aee4f50b (patch)
tree9668ec28a405763fd0a9652f2189446c3438cb37 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service
parent27eb7c0f1be4c3633dc72f4dba199ce971b12aea (diff)
downloadopen-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')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java38
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java6
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);