aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java57
1 files changed, 55 insertions, 2 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java
index 390efddce..1f7a0eb0d 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java
@@ -42,6 +42,7 @@ import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;
import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.SingletonResult;
+import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
@@ -65,6 +66,8 @@ import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase;
+import java.nio.ByteBuffer;
+
public class EditKeyFragment extends CryptoOperationFragment implements
LoaderManager.LoaderCallbacks<Cursor> {
@@ -415,15 +418,65 @@ public class EditKeyFragment extends CryptoOperationFragment implements
mSaveKeyringParcel.mRevokeSubKeys.add(keyId);
}
break;
- case EditSubkeyDialogFragment.MESSAGE_STRIP:
+ case EditSubkeyDialogFragment.MESSAGE_STRIP: {
+ SecretKeyType secretKeyType = mSubkeysAdapter.getSecretKeyType(position);
+ if (secretKeyType == SecretKeyType.GNU_DUMMY) {
+ // Key is already stripped; this is a no-op.
+ break;
+ }
+
SubkeyChange change = mSaveKeyringParcel.getSubkeyChange(keyId);
if (change == null) {
- mSaveKeyringParcel.mChangeSubKeys.add(new SubkeyChange(keyId, true, null));
+ mSaveKeyringParcel.mChangeSubKeys.add(new SubkeyChange(keyId, true, false));
break;
}
// toggle
change.mDummyStrip = !change.mDummyStrip;
+ if (change.mDummyStrip && change.mMoveKeyToCard) {
+ // User had chosen to divert key, but now wants to strip it instead.
+ change.mMoveKeyToCard = false;
+ }
break;
+ }
+ case EditSubkeyDialogFragment.MESSAGE_KEYTOCARD: {
+ Activity activity = EditKeyFragment.this.getActivity();
+ SecretKeyType secretKeyType = mSubkeysAdapter.getSecretKeyType(position);
+ if (secretKeyType == SecretKeyType.DIVERT_TO_CARD ||
+ secretKeyType == SecretKeyType.GNU_DUMMY) {
+ Notify.create(activity, R.string.edit_key_error_bad_nfc_stripped, Notify.Style.ERROR)
+ .show((ViewGroup) activity.findViewById(R.id.import_snackbar));
+ break;
+ }
+ int algorithm = mSubkeysAdapter.getAlgorithm(position);
+ // these are the PGP constants for RSA_GENERAL, RSA_ENCRYPT and RSA_SIGN
+ if (algorithm != 1 && algorithm != 2 && algorithm != 3) {
+ Notify.create(activity, R.string.edit_key_error_bad_nfc_algo, Notify.Style.ERROR)
+ .show((ViewGroup) activity.findViewById(R.id.import_snackbar));
+ break;
+ }
+ if (mSubkeysAdapter.getKeySize(position) != 2048) {
+ Notify.create(activity, R.string.edit_key_error_bad_nfc_size, Notify.Style.ERROR)
+ .show((ViewGroup) activity.findViewById(R.id.import_snackbar));
+ break;
+ }
+
+
+ SubkeyChange change;
+ change = mSaveKeyringParcel.getSubkeyChange(keyId);
+ if (change == null) {
+ mSaveKeyringParcel.mChangeSubKeys.add(
+ new SubkeyChange(keyId, false, true)
+ );
+ break;
+ }
+ // toggle
+ change.mMoveKeyToCard = !change.mMoveKeyToCard;
+ if (change.mMoveKeyToCard && change.mDummyStrip) {
+ // User had chosen to strip key, but now wants to divert it.
+ change.mDummyStrip = false;
+ }
+ break;
+ }
}
getLoaderManager().getLoader(LOADER_ID_SUBKEYS).forceLoad();
}