Refactored to reduce coupling between ChangeUnlockParcel and SaveKeyringParcel
This commit is contained in:
@@ -33,6 +33,10 @@ public class ChangeUnlockParcel implements Parcelable {
|
||||
// The new passphrase to use
|
||||
public final Passphrase mNewPassphrase;
|
||||
|
||||
public ChangeUnlockParcel(Passphrase newPassphrase) {
|
||||
mNewPassphrase = newPassphrase;
|
||||
}
|
||||
|
||||
public ChangeUnlockParcel(Long masterKeyId, byte[] fingerprint, Passphrase newPassphrase) {
|
||||
if (newPassphrase == null) {
|
||||
throw new AssertionError("newPassphrase must be non-null. THIS IS A BUG!");
|
||||
|
||||
@@ -103,11 +103,15 @@ public class SaveKeyringParcel implements Parcelable {
|
||||
mKeyserver = keysever;
|
||||
}
|
||||
|
||||
public void setNewUnlock(Passphrase passphrase) {
|
||||
mNewUnlock = new ChangeUnlockParcel(mMasterKeyId, mFingerprint, passphrase);
|
||||
public void setNewUnlock(ChangeUnlockParcel parcel) {
|
||||
mNewUnlock = parcel;
|
||||
}
|
||||
|
||||
public ChangeUnlockParcel getChangeUnlockParcel() {
|
||||
if(mNewUnlock != null) {
|
||||
mNewUnlock.mMasterKeyId = mMasterKeyId;
|
||||
mNewUnlock.mFingerprint = mFingerprint;
|
||||
}
|
||||
return mNewUnlock;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
|
||||
import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||
import org.sufficientlysecure.keychain.service.ChangeUnlockParcel;
|
||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
|
||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.Algorithm;
|
||||
import org.sufficientlysecure.keychain.service.UploadKeyringParcel;
|
||||
@@ -288,7 +289,7 @@ public class CreateKeyFinalFragment extends Fragment {
|
||||
2048, null, KeyFlags.AUTHENTICATION, 0L));
|
||||
|
||||
// use empty passphrase
|
||||
saveKeyringParcel.setNewUnlock(new Passphrase());
|
||||
saveKeyringParcel.setNewUnlock(new ChangeUnlockParcel(new Passphrase()));
|
||||
} else {
|
||||
saveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA,
|
||||
3072, null, KeyFlags.CERTIFY_OTHER, 0L));
|
||||
@@ -298,7 +299,7 @@ public class CreateKeyFinalFragment extends Fragment {
|
||||
3072, null, KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE, 0L));
|
||||
|
||||
if(createKeyActivity.mPassphrase != null) {
|
||||
saveKeyringParcel.setNewUnlock(createKeyActivity.mPassphrase);
|
||||
saveKeyringParcel.setNewUnlock(new ChangeUnlockParcel(createKeyActivity.mPassphrase));
|
||||
}
|
||||
}
|
||||
String userId = KeyRing.createUserId(
|
||||
|
||||
@@ -50,6 +50,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
|
||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||
import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException;
|
||||
import org.sufficientlysecure.keychain.service.ChangeUnlockParcel;
|
||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
|
||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyChange;
|
||||
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
||||
@@ -338,8 +339,8 @@ public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyring
|
||||
Bundle data = message.getData();
|
||||
|
||||
// cache new returned passphrase!
|
||||
mSaveKeyringParcel.setNewUnlock(
|
||||
(Passphrase) data.getParcelable(SetPassphraseDialogFragment.MESSAGE_NEW_PASSPHRASE));
|
||||
mSaveKeyringParcel.setNewUnlock(new ChangeUnlockParcel(
|
||||
(Passphrase) data.getParcelable(SetPassphraseDialogFragment.MESSAGE_NEW_PASSPHRASE)));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -84,7 +84,7 @@ public class CertifyOperationTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDH, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.ENCRYPT_COMMS, 0L));
|
||||
parcel.mAddUserIds.add("derp");
|
||||
parcel.setNewUnlock(mKeyPhrase1);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(mKeyPhrase1));
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
Assert.assertTrue("initial test key creation must succeed", result.success());
|
||||
@@ -108,7 +108,7 @@ public class CertifyOperationTest {
|
||||
parcel.mAddUserAttribute.add(
|
||||
WrappedUserAttribute.fromSubpacket(random.nextInt(100)+1, uatdata));
|
||||
|
||||
parcel.setNewUnlock(mKeyPhrase2);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(mKeyPhrase2));
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
Assert.assertTrue("initial test key creation must succeed", result.success());
|
||||
|
||||
@@ -106,7 +106,7 @@ public class ExportTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDH, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.ENCRYPT_COMMS, 0L));
|
||||
parcel.mAddUserIds.add("snips");
|
||||
parcel.setNewUnlock(mKeyPhrase1);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(mKeyPhrase1));
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
assertTrue("initial test key creation must succeed", result.success());
|
||||
@@ -124,7 +124,7 @@ public class ExportTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDH, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.ENCRYPT_COMMS, 0L));
|
||||
parcel.mAddUserIds.add("snails");
|
||||
parcel.setNewUnlock(new Passphrase("1234"));
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(new Passphrase("1234")));
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
assertTrue("initial test key creation must succeed", result.success());
|
||||
|
||||
@@ -80,7 +80,7 @@ public class PromoteKeyOperationTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDH, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.ENCRYPT_COMMS, 0L));
|
||||
parcel.mAddUserIds.add("derp");
|
||||
parcel.setNewUnlock(mKeyPhrase1);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(mKeyPhrase1));
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
Assert.assertTrue("initial test key creation must succeed", result.success());
|
||||
|
||||
@@ -103,7 +103,7 @@ public class PgpEncryptDecryptTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDH, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.ENCRYPT_COMMS, 0L));
|
||||
parcel.mAddUserIds.add("bloom");
|
||||
parcel.setNewUnlock(mKeyPhrase1);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(mKeyPhrase1));
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
Assert.assertTrue("initial test key creation must succeed", result.success());
|
||||
@@ -121,7 +121,7 @@ public class PgpEncryptDecryptTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDH, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.ENCRYPT_COMMS, 0L));
|
||||
parcel.mAddUserIds.add("belle");
|
||||
parcel.setNewUnlock(mKeyPhrase2);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(mKeyPhrase2));
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
Assert.assertTrue("initial test key creation must succeed", result.success());
|
||||
|
||||
@@ -109,7 +109,7 @@ public class PgpKeyOperationTest {
|
||||
parcel.mAddUserAttribute.add(uat);
|
||||
}
|
||||
|
||||
parcel.setNewUnlock(passphrase);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(passphrase));
|
||||
PgpKeyOperation op = new PgpKeyOperation(null);
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
@@ -149,7 +149,7 @@ public class PgpKeyOperationTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.RSA, new Random().nextInt(256)+255, null, KeyFlags.CERTIFY_OTHER, 0L));
|
||||
parcel.mAddUserIds.add("shy");
|
||||
parcel.setNewUnlock(passphrase);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(passphrase));
|
||||
|
||||
assertFailure("creating ring with < 2048 bit keysize should fail", parcel,
|
||||
LogType.MSG_CR_ERROR_KEYSIZE_2048);
|
||||
@@ -160,7 +160,7 @@ public class PgpKeyOperationTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ELGAMAL, 2048, null, KeyFlags.CERTIFY_OTHER, 0L));
|
||||
parcel.mAddUserIds.add("shy");
|
||||
parcel.setNewUnlock(passphrase);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(passphrase));
|
||||
|
||||
assertFailure("creating ring with ElGamal master key should fail", parcel,
|
||||
LogType.MSG_CR_ERROR_FLAGS_ELGAMAL);
|
||||
@@ -171,7 +171,7 @@ public class PgpKeyOperationTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDSA, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.CERTIFY_OTHER, null));
|
||||
parcel.mAddUserIds.add("lotus");
|
||||
parcel.setNewUnlock(passphrase);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(passphrase));
|
||||
|
||||
assertFailure("creating master key with null expiry should fail", parcel,
|
||||
LogType.MSG_CR_ERROR_NULL_EXPIRY);
|
||||
@@ -182,7 +182,7 @@ public class PgpKeyOperationTest {
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDSA, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.SIGN_DATA, 0L));
|
||||
parcel.mAddUserIds.add("shy");
|
||||
parcel.setNewUnlock(passphrase);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(passphrase));
|
||||
|
||||
assertFailure("creating ring with non-certifying master key should fail", parcel,
|
||||
LogType.MSG_CR_ERROR_NO_CERTIFY);
|
||||
@@ -192,7 +192,7 @@ public class PgpKeyOperationTest {
|
||||
parcel.reset();
|
||||
parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(
|
||||
Algorithm.ECDSA, 0, SaveKeyringParcel.Curve.NIST_P256, KeyFlags.CERTIFY_OTHER, 0L));
|
||||
parcel.setNewUnlock(passphrase);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(passphrase));
|
||||
|
||||
assertFailure("creating ring without user ids should fail", parcel,
|
||||
LogType.MSG_CR_ERROR_NO_USER_ID);
|
||||
@@ -201,7 +201,7 @@ public class PgpKeyOperationTest {
|
||||
{
|
||||
parcel.reset();
|
||||
parcel.mAddUserIds.add("shy");
|
||||
parcel.setNewUnlock(passphrase);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(passphrase));
|
||||
|
||||
assertFailure("creating ring with no master key should fail", parcel,
|
||||
LogType.MSG_CR_ERROR_NO_MASTER);
|
||||
@@ -841,7 +841,7 @@ public class PgpKeyOperationTest {
|
||||
|
||||
parcelKey.mAddUserIds.add("yubikey");
|
||||
|
||||
parcelKey.setNewUnlock(passphrase);
|
||||
parcelKey.setNewUnlock(new ChangeUnlockParcel(passphrase));
|
||||
PgpKeyOperation opSecurityToken = new PgpKeyOperation(null);
|
||||
|
||||
PgpEditKeyResult resultSecurityToken = opSecurityToken.createSecretKeyRing(parcelKey);
|
||||
@@ -1156,7 +1156,7 @@ public class PgpKeyOperationTest {
|
||||
public void testPassphraseChange() throws Exception {
|
||||
|
||||
// change passphrase to empty
|
||||
parcel.setNewUnlock(new Passphrase());
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(new Passphrase()));
|
||||
// note that canonicalization here necessarily strips the empty notation packet
|
||||
UncachedKeyRing modified = applyModificationWithChecks(parcel, ring, onlyA, onlyB, cryptoInput);
|
||||
|
||||
@@ -1171,7 +1171,7 @@ public class PgpKeyOperationTest {
|
||||
// modify keyring, change to non-empty passphrase
|
||||
Passphrase otherPassphrase = TestingUtils.genPassphrase(true);
|
||||
CryptoInputParcel otherCryptoInput = new CryptoInputParcel(otherPassphrase);
|
||||
parcel.setNewUnlock(otherPassphrase);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(otherPassphrase));
|
||||
modified = applyModificationWithChecks(parcel, modified, onlyA, onlyB,
|
||||
new CryptoInputParcel(new Date(), new Passphrase()));
|
||||
|
||||
@@ -1197,7 +1197,7 @@ public class PgpKeyOperationTest {
|
||||
PacketTags.SECRET_SUBKEY, sKeyNoPassphrase.tag);
|
||||
|
||||
Passphrase otherPassphrase2 = TestingUtils.genPassphrase(true);
|
||||
parcel.setNewUnlock(otherPassphrase2);
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(otherPassphrase2));
|
||||
{
|
||||
// if we replace a secret key with one without passphrase
|
||||
modified = KeyringTestingHelper.removePacket(modified, sKeyNoPassphrase.position);
|
||||
|
||||
@@ -117,7 +117,7 @@ public class UncachedKeyringCanonicalizeTest {
|
||||
}
|
||||
|
||||
// passphrase is tested in PgpKeyOperationTest, just use empty here
|
||||
parcel.setNewUnlock(new Passphrase());
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(new Passphrase()));
|
||||
PgpKeyOperation op = new PgpKeyOperation(null);
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
|
||||
@@ -114,7 +114,7 @@ public class UncachedKeyringMergeTest {
|
||||
}
|
||||
|
||||
// passphrase is tested in PgpKeyOperationTest, just use empty here
|
||||
parcel.setNewUnlock(new Passphrase());
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(new Passphrase()));
|
||||
PgpKeyOperation op = new PgpKeyOperation(null);
|
||||
|
||||
OperationResult.OperationLog log = new OperationResult.OperationLog();
|
||||
@@ -131,7 +131,7 @@ public class UncachedKeyringMergeTest {
|
||||
|
||||
parcel.mAddUserIds.add("shy");
|
||||
// passphrase is tested in PgpKeyOperationTest, just use empty here
|
||||
parcel.setNewUnlock(new Passphrase());
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(new Passphrase()));
|
||||
PgpKeyOperation op = new PgpKeyOperation(null);
|
||||
|
||||
OperationResult.OperationLog log = new OperationResult.OperationLog();
|
||||
|
||||
@@ -78,7 +78,7 @@ public class UncachedKeyringTest {
|
||||
parcel.mAddUserAttribute.add(uat);
|
||||
}
|
||||
// passphrase is tested in PgpKeyOperationTest, just use empty here
|
||||
parcel.setNewUnlock(new Passphrase());
|
||||
parcel.setNewUnlock(new ChangeUnlockParcel(new Passphrase()));
|
||||
PgpKeyOperation op = new PgpKeyOperation(null);
|
||||
|
||||
PgpEditKeyResult result = op.createSecretKeyRing(parcel);
|
||||
|
||||
Reference in New Issue
Block a user