From 94693efbe56a7786cc468e061e5647e2a423cf1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 26 Oct 2014 00:18:45 +0200 Subject: [PATCH] Fail on unknown key ids on API, Key item design consistency for API --- .../keychain/pgp/PgpSignEncrypt.java | 14 ++++++++++++++ .../keychain/remote/OpenPgpService.java | 1 + .../keychain/ui/SelectPublicKeyFragment.java | 3 ++- .../ui/adapter/SelectKeyCursorAdapter.java | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java index 8aeae3e9b..f89027a19 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java @@ -80,6 +80,7 @@ public class PgpSignEncrypt extends BaseOperation { private long mAdditionalEncryptId; private boolean mCleartextInput; private String mOriginalFilename; + private boolean mFailOnMissingEncryptionKeyIds; private byte[] mNfcSignedHash = null; private Date mNfcCreationTimestamp = null; @@ -116,6 +117,7 @@ public class PgpSignEncrypt extends BaseOperation { this.mNfcSignedHash = builder.mNfcSignedHash; this.mNfcCreationTimestamp = builder.mNfcCreationTimestamp; this.mOriginalFilename = builder.mOriginalFilename; + this.mFailOnMissingEncryptionKeyIds = builder.mFailOnMissingEncryptionKeyIds; } public static class Builder { @@ -142,6 +144,7 @@ public class PgpSignEncrypt extends BaseOperation { private String mOriginalFilename = ""; private byte[] mNfcSignedHash = null; private Date mNfcCreationTimestamp = null; + private boolean mFailOnMissingEncryptionKeyIds = false; public Builder(Context context, ProviderHelper providerHelper, Progressable progressable, InputData data, OutputStream outStream) { @@ -203,6 +206,11 @@ public class PgpSignEncrypt extends BaseOperation { return this; } + public Builder setFailOnMissingEncryptionKeyIds(boolean failOnMissingEncryptionKeyIds) { + mFailOnMissingEncryptionKeyIds = failOnMissingEncryptionKeyIds; + return this; + } + /** * Also encrypt with the signing keyring * @@ -380,9 +388,15 @@ public class PgpSignEncrypt extends BaseOperation { } catch (PgpKeyNotFoundException e) { log.add(LogType.MSG_SE_KEY_WARN, indent + 1, KeyFormattingUtils.convertKeyIdToHex(id)); + if (mFailOnMissingEncryptionKeyIds) { + return new SignEncryptResult(SignEncryptResult.RESULT_ERROR, log); + } } catch (ProviderHelper.NotFoundException e) { log.add(LogType.MSG_SE_KEY_UNKNOWN, indent + 1, KeyFormattingUtils.convertKeyIdToHex(id)); + if (mFailOnMissingEncryptionKeyIds) { + return new SignEncryptResult(SignEncryptResult.RESULT_ERROR, log); + } } } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index f77328d34..a5813567a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -379,6 +379,7 @@ public class OpenPgpService extends RemoteService { .setCompressionId(accSettings.getCompression()) .setSymmetricEncryptionAlgorithm(accSettings.getEncryptionAlgorithm()) .setEncryptionMasterKeyIds(keyIds) + .setFailOnMissingEncryptionKeyIds(true) .setOriginalFilename(originalFilename) .setAdditionalEncryptId(accSettings.getKeyId()); // add acc key for encryption diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyFragment.java index 621b6b7e1..af583bf89 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyFragment.java @@ -384,7 +384,8 @@ public class SelectPublicKeyFragment extends ListFragmentWorkaround implements T KeyFormattingUtils.setStatusImage(mContext, h.statusIcon, KeyFormattingUtils.STATE_VERIFIED); enabled = true; } else { - h.statusIcon.setVisibility(View.GONE); + h.statusIcon.setVisibility(View.VISIBLE); + KeyFormattingUtils.setStatusImage(mContext, h.statusIcon, KeyFormattingUtils.STATE_UNVERIFIED); enabled = true; } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SelectKeyCursorAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SelectKeyCursorAdapter.java index 34d40c80e..60c130969 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SelectKeyCursorAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SelectKeyCursorAdapter.java @@ -133,11 +133,11 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter { boolean enabled; if (cursor.getInt(mIndexIsRevoked) != 0) { h.statusIcon.setVisibility(View.VISIBLE); - KeyFormattingUtils.setStatusImage(mContext, h.statusIcon, KeyFormattingUtils.STATE_REVOKED); + KeyFormattingUtils.setStatusImage(mContext, h.statusIcon, null, KeyFormattingUtils.STATE_REVOKED, true); enabled = false; } else if (cursor.getInt(mIndexIsExpiry) != 0) { h.statusIcon.setVisibility(View.VISIBLE); - KeyFormattingUtils.setStatusImage(mContext, h.statusIcon, KeyFormattingUtils.STATE_EXPIRED); + KeyFormattingUtils.setStatusImage(mContext, h.statusIcon, null, KeyFormattingUtils.STATE_EXPIRED, true); enabled = false; } else { h.statusIcon.setVisibility(View.GONE);