aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java32
1 files changed, 14 insertions, 18 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java
index c954e6465..03483575c 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java
@@ -30,11 +30,11 @@ import android.widget.TextView;
import com.beardedhen.androidbootstrap.BootstrapButton;
-import org.spongycastle.openpgp.PGPSecretKey;
-import org.spongycastle.openpgp.PGPSecretKeyRing;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
+import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
+import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.util.Log;
@@ -144,20 +144,17 @@ public class EncryptAsymmetricFragment extends Fragment {
*/
private void preselectKeys(long preselectedSignatureKeyId, long[] preselectedEncryptionKeyIds,
ProviderHelper providerHelper) {
+ // TODO all of this works under the assumption that the first suitable subkey is always used!
+ // not sure if we need to distinguish between different subkeys here?
if (preselectedSignatureKeyId != 0) {
- // TODO: don't use bouncy castle objects!
try {
- PGPSecretKeyRing keyRing = providerHelper.getPGPSecretKeyRingWithKeyId(
- preselectedSignatureKeyId);
-
- PGPSecretKey masterKey = keyRing.getSecretKey();
- if (masterKey != null) {
- PGPSecretKey signKey = PgpKeyHelper.getFirstSigningSubkey(keyRing);
- if (signKey != null) {
- setSignatureKeyId(masterKey.getKeyID());
- }
+ CachedPublicKeyRing keyring =
+ providerHelper.getCachedPublicKeyRing(
+ KeyRings.buildUnifiedKeyRingUri(preselectedSignatureKeyId));
+ if(keyring.hasAnySecret()) {
+ setSignatureKeyId(keyring.getMasterKeyId());
}
- } catch (ProviderHelper.NotFoundException e) {
+ } catch (PgpGeneralException e) {
Log.e(Constants.TAG, "key not found!", e);
}
}
@@ -165,14 +162,13 @@ public class EncryptAsymmetricFragment extends Fragment {
if (preselectedEncryptionKeyIds != null) {
Vector<Long> goodIds = new Vector<Long>();
for (int i = 0; i < preselectedEncryptionKeyIds.length; ++i) {
- // TODO One query per selected key?! wtf
try {
- long id = providerHelper.getMasterKeyId(
+ long id = providerHelper.getCachedPublicKeyRing(
KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(
- Long.toString(preselectedEncryptionKeyIds[i]))
- );
+ preselectedEncryptionKeyIds[i])
+ ).getMasterKeyId();
goodIds.add(id);
- } catch (ProviderHelper.NotFoundException e) {
+ } catch (PgpGeneralException e) {
Log.e(Constants.TAG, "key not found!", e);
}
}