Fix caching of empty passphrase before moving keys to card

This commit is contained in:
Dominik Schürmann 2015-07-03 02:48:54 +02:00
parent f10785ec5a
commit d6b4d4b4f2
3 changed files with 24 additions and 14 deletions

View file

@ -131,13 +131,22 @@ public class EditKeyOperation extends BaseOperation<SaveKeyringParcel> {
// There is a new passphrase - cache it // There is a new passphrase - cache it
if (saveParcel.mNewUnlock != null) { if (saveParcel.mNewUnlock != null) {
log.add(LogType.MSG_ED_CACHING_NEW, 1); log.add(LogType.MSG_ED_CACHING_NEW, 1);
PassphraseCacheService.addCachedPassphrase(mContext,
ring.getMasterKeyId(), // NOTE: Don't cache empty passphrases! Important for MOVE_KEY_TO_CARD
ring.getMasterKeyId(), if (saveParcel.mNewUnlock.mNewPassphrase != null
saveParcel.mNewUnlock.mNewPassphrase != null && ( ! saveParcel.mNewUnlock.mNewPassphrase.isEmpty())) {
? saveParcel.mNewUnlock.mNewPassphrase PassphraseCacheService.addCachedPassphrase(mContext,
: saveParcel.mNewUnlock.mNewPin, ring.getMasterKeyId(),
ring.getPublicKey().getPrimaryUserIdWithFallback()); ring.getMasterKeyId(),
saveParcel.mNewUnlock.mNewPassphrase,
ring.getPublicKey().getPrimaryUserIdWithFallback());
} else if (saveParcel.mNewUnlock.mNewPin != null) {
PassphraseCacheService.addCachedPassphrase(mContext,
ring.getMasterKeyId(),
ring.getMasterKeyId(),
saveParcel.mNewUnlock.mNewPin,
ring.getPublicKey().getPrimaryUserIdWithFallback());
}
} }
updateProgress(R.string.progress_done, 100, 100); updateProgress(R.string.progress_done, 100, 100);

View file

@ -41,7 +41,6 @@ import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.dialog.AddEmailDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.AddEmailDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.widget.EmailEditText; import org.sufficientlysecure.keychain.ui.widget.EmailEditText;
import org.sufficientlysecure.keychain.util.Passphrase;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -239,9 +238,6 @@ public class CreateKeyEmailFragment extends Fragment {
if (createKeyActivity.mCreateYubiKey) { if (createKeyActivity.mCreateYubiKey) {
hideKeyboard(); hideKeyboard();
// set empty passphrase
createKeyActivity.mPassphrase = new Passphrase();
CreateYubiKeyPinFragment frag = CreateYubiKeyPinFragment.newInstance(); CreateYubiKeyPinFragment frag = CreateYubiKeyPinFragment.newInstance();
mCreateKeyActivity.loadFragment(frag, FragAction.TO_RIGHT); mCreateKeyActivity.loadFragment(frag, FragAction.TO_RIGHT);
} else { } else {

View file

@ -47,6 +47,7 @@ import org.sufficientlysecure.keychain.service.SaveKeyringParcel.ChangeUnlockPar
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import java.util.Iterator; import java.util.Iterator;
@ -187,6 +188,9 @@ public class CreateKeyFinalFragment extends Fragment {
2048, null, KeyFlags.AUTHENTICATION, 0L)); 2048, null, KeyFlags.AUTHENTICATION, 0L));
mEditText.setText(R.string.create_key_custom); mEditText.setText(R.string.create_key_custom);
mEditButton.setEnabled(false); mEditButton.setEnabled(false);
// use empty passphrase
mSaveKeyringParcel.mNewUnlock = new ChangeUnlockParcel(new Passphrase(), null);
} else { } else {
mSaveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA, mSaveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA,
4096, null, KeyFlags.CERTIFY_OTHER, 0L)); 4096, null, KeyFlags.CERTIFY_OTHER, 0L));
@ -194,6 +198,10 @@ public class CreateKeyFinalFragment extends Fragment {
4096, null, KeyFlags.SIGN_DATA, 0L)); 4096, null, KeyFlags.SIGN_DATA, 0L));
mSaveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA, mSaveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA,
4096, null, KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE, 0L)); 4096, null, KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE, 0L));
mSaveKeyringParcel.mNewUnlock = createKeyActivity.mPassphrase != null
? new ChangeUnlockParcel(createKeyActivity.mPassphrase, null)
: null;
} }
String userId = KeyRing.createUserId( String userId = KeyRing.createUserId(
new KeyRing.UserId(createKeyActivity.mName, createKeyActivity.mEmail, null) new KeyRing.UserId(createKeyActivity.mName, createKeyActivity.mEmail, null)
@ -209,9 +217,6 @@ public class CreateKeyFinalFragment extends Fragment {
mSaveKeyringParcel.mAddUserIds.add(thisUserId); mSaveKeyringParcel.mAddUserIds.add(thisUserId);
} }
} }
mSaveKeyringParcel.mNewUnlock = createKeyActivity.mPassphrase != null
? new ChangeUnlockParcel(createKeyActivity.mPassphrase, null)
: null;
} }
} }