From 7dbb7cf1e1fd4de1098d4a2207a90ddc680598ed Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 9 Sep 2014 22:41:24 +0200 Subject: jury-rig broken sign mechanism Should improve situation on #811 --- .../keychain/service/KeychainIntentService.java | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java') 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 08f51d692..f085c8582 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -50,6 +50,7 @@ import org.sufficientlysecure.keychain.pgp.Progressable; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralMsgIdException; +import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRingData; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainDatabase; @@ -128,7 +129,7 @@ public class KeychainIntentService extends IntentService implements Progressable public static final String SELECTED_URI = "selected_uri"; // encrypt - public static final String ENCRYPT_SIGNATURE_KEY_ID = "secret_key_id"; + public static final String ENCRYPT_SIGNATURE_MASTER_ID = "secret_key_id"; public static final String ENCRYPT_USE_ASCII_ARMOR = "use_ascii_armor"; public static final String ENCRYPT_ENCRYPTION_KEYS_IDS = "encryption_keys_ids"; public static final String ENCRYPT_COMPRESSION_ID = "compression_id"; @@ -251,7 +252,7 @@ public class KeychainIntentService extends IntentService implements Progressable int source = data.get(SOURCE) != null ? data.getInt(SOURCE) : data.getInt(TARGET); Bundle resultData = new Bundle(); - long signatureKeyId = data.getLong(ENCRYPT_SIGNATURE_KEY_ID); + long sigMasterKeyId = data.getLong(ENCRYPT_SIGNATURE_MASTER_ID); String symmetricPassphrase = data.getString(ENCRYPT_SYMMETRIC_PASSPHRASE); boolean useAsciiArmor = data.getBoolean(ENCRYPT_USE_ASCII_ARMOR); @@ -280,14 +281,20 @@ public class KeychainIntentService extends IntentService implements Progressable .setOriginalFilename(originalFilename); try { - builder.setSignatureMasterKeyId(signatureKeyId) - .setSignaturePassphrase( - PassphraseCacheService.getCachedPassphrase(this, signatureKeyId)) + CachedPublicKeyRing signingRing = + new ProviderHelper(this).getCachedPublicKeyRing(sigMasterKeyId); + long sigSubKeyId = signingRing.getSignId(); + // It is assumed that the passphrase was cached prior to the service call. + String passphrase = PassphraseCacheService.getCachedPassphrase(this, sigSubKeyId); + builder.setSignatureMasterKeyId(sigMasterKeyId) + .setSignatureSubKeyId(sigSubKeyId) + .setSignaturePassphrase(passphrase) .setSignatureHashAlgorithm( Preferences.getPreferences(this).getDefaultHashAlgorithm()) - .setAdditionalEncryptId(signatureKeyId); - } catch (PassphraseCacheService.KeyNotFoundException e) { + .setAdditionalEncryptId(sigMasterKeyId); + } catch (PgpGeneralException e) { // encrypt-only + // TODO Just silently drop the requested signature? Shouldn't we throw here? } // this assumes that the bytes are cleartext (valid for current implementation!) -- cgit v1.2.3