Browse Source

wizard: skip/hide passphrase option for 'old' and '2fa' seeds (see #4326)

master
Sander van Grieken 2 years ago
parent
commit
8ce1e6453b
No known key found for this signature in database
GPG Key ID: 9BCF8209EA402EBA
  1. 44
      electrum/gui/qml/components/wizard/WCHaveSeed.qml
  2. 5
      electrum/gui/qml/qewizard.py
  3. 6
      electrum/gui/qt/wizard/wallet.py
  4. 5
      electrum/wizard.py

44
electrum/gui/qml/components/wizard/WCHaveSeed.qml

@ -20,20 +20,23 @@ WizardComponent {
property string _seedType
property string _validationMessage
property bool _canPassphrase
property bool _seedValid
function apply() {
var seed_extend = extendcb.checked && _canPassphrase
if (cosigner) {
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed'] = seedtext.text
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_variant'] = seed_variant_cb.currentValue
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_type'] = _seedType
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_extend'] = extendcb.checked
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_extra_words'] = extendcb.checked ? customwordstext.text : ''
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_extend'] = seed_extend
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_extra_words'] = seed_extend ? customwordstext.text : ''
} else {
wizard_data['seed'] = seedtext.text
wizard_data['seed_variant'] = seed_variant_cb.currentValue
wizard_data['seed_type'] = _seedType
wizard_data['seed_extend'] = extendcb.checked
wizard_data['seed_extra_words'] = extendcb.checked ? customwordstext.text : ''
wizard_data['seed_extend'] = seed_extend
wizard_data['seed_extra_words'] = seed_extend ? customwordstext.text : ''
// determine script type from electrum seed type
// (used to limit script type options for bip39 cosigners)
@ -69,19 +72,16 @@ WizardComponent {
function checkValid() {
valid = false
_validationMessage = ''
if (extendcb.checked && customwordstext.text == '')
return
_seedValid = false
var verifyResult = wiz.verifySeed(seedtext.text, seed_variant_cb.currentValue, wizard_data['wallet_type'])
_validationMessage = verifyResult.message
_seedType = verifyResult.type
_canPassphrase = verifyResult.can_passphrase
if (!cosigner || !verifyResult.valid) {
valid = verifyResult.valid
return
_seedValid = verifyResult.valid
} else {
// bip39 validate after derivation path is known
if (seed_variant_cb.currentValue == 'electrum') {
@ -93,12 +93,19 @@ WizardComponent {
validationtext.text = qsTr('Error: master public key types do not match')
return
} else {
valid = true
_seedValid = true
}
} else {
valid = true
_seedValid = true
}
}
if (_canPassphrase && extendcb.checked && customwordstext.text == '') {
valid = false
return
}
valid = _seedValid
}
Flickable {
@ -202,16 +209,14 @@ WizardComponent {
placeholderText: cosigner ? qsTr('Enter cosigner seed') : qsTr('Enter your seed')
indicatorValid: root.valid
indicatorValid: root._seedValid
? root._seedType == 'bip39' && root._validationMessage
? false
: root.valid
: root.valid
indicatorText: root.valid
? root._validationMessage
: root._seedValid
: root._seedValid
indicatorText: root._validationMessage
? root._validationMessage
: root._seedType
: ''
onTextChanged: {
startValidationTimer()
}
@ -221,13 +226,14 @@ WizardComponent {
id: extendcb
Layout.columnSpan: 2
Layout.fillWidth: true
visible: _canPassphrase
text: qsTr('Extend seed with custom words')
onCheckedChanged: startValidationTimer()
}
TextField {
id: customwordstext
visible: extendcb.checked
visible: extendcb.checked && extendcb.visible
Layout.fillWidth: true
Layout.columnSpan: 2
placeholderText: qsTr('Enter your custom word(s)')

5
electrum/gui/qml/qewizard.py

@ -111,11 +111,12 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard):
@pyqtSlot(str, str, str, result='QVariantMap')
def verifySeed(self, seed, seed_variant, wallet_type='standard'):
seed_valid, seed_type, validation_message = self.validate_seed(seed, seed_variant, wallet_type)
seed_valid, seed_type, validation_message, can_passphrase = self.validate_seed(seed, seed_variant, wallet_type)
return {
'valid': seed_valid,
'type': seed_type,
'message': validation_message
'message': validation_message,
'can_passphrase': can_passphrase
}
def _wallet_path_from_wallet_name(self, wallet_name: str) -> str:

6
electrum/gui/qt/wizard/wallet.py

@ -612,6 +612,8 @@ class WCHaveSeed(WalletWizardComponent, Logger):
self.next_button = Hack()
self.can_passphrase = True
def on_ready(self):
options = ['ext'] if self.wizard_data['wallet_type'] == '2fa' else ['ext', 'bip39', 'slip39']
self.slayout = SeedLayout(
@ -640,7 +642,7 @@ class WCHaveSeed(WalletWizardComponent, Logger):
seed = self.slayout.get_seed()
seed_variant = self.slayout.seed_type
wallet_type = self.wizard_data['wallet_type']
seed_valid, seed_type, validation_message = self.wizard.validate_seed(seed, seed_variant, wallet_type) #
seed_valid, seed_type, validation_message, self.can_passphrase = self.wizard.validate_seed(seed, seed_variant, wallet_type)
is_cosigner = self.wizard_data['wallet_type'] == 'multisig' and 'multisig_current_cosigner' in self.wizard_data
@ -664,7 +666,7 @@ class WCHaveSeed(WalletWizardComponent, Logger):
cosigner_data['seed_type'] = mnemonic.seed_type(self.slayout.get_seed())
else:
cosigner_data['seed_type'] = self.slayout.seed_type
cosigner_data['seed_extend'] = self.slayout.is_ext
cosigner_data['seed_extend'] = self.slayout.is_ext if self.can_passphrase else False
cosigner_data['seed_extra_words'] = '' # empty default

5
electrum/wizard.py

@ -486,11 +486,14 @@ class NewWalletWizard(AbstractWizard):
seed_type = ''
seed_valid = False
validation_message = ''
can_passphrase = True
if seed_variant == 'electrum':
seed_type = mnemonic.seed_type(seed)
if seed_type != '':
seed_valid = True
if seed_type in ['old', '2fa']:
can_passphrase = False
elif seed_variant == 'bip39':
is_checksum, is_wordlist = keystore.bip39_is_checksum_valid(seed)
validation_message = ('' if is_checksum else _('BIP39 checksum failed')) if is_wordlist else _('Unknown BIP39 wordlist')
@ -520,7 +523,7 @@ class NewWalletWizard(AbstractWizard):
self._logger.debug(f'seed verified: {seed_valid}, type={seed_type}, validation_message={validation_message}')
return seed_valid, seed_type, validation_message
return seed_valid, seed_type, validation_message, can_passphrase
def create_storage(self, path: str, data: dict):
assert data['wallet_type'] in ['standard', '2fa', 'imported', 'multisig']

Loading…
Cancel
Save