tPermit empty passphrases when creating HW wallet - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit db1aa1301525c9982def0e64d9ee883f24657edc DIR parent 18b7337aeaa96af20b4440eb1d203dae4c0124f7 HTML Author: Neil Booth <kyuupichan@gmail.com> Date: Sat, 7 May 2016 10:40:12 +0900 Permit empty passphrases when creating HW wallet They used to be confused as a user cancel. Fixes #1788 Also fix Cancel pressed in passphrase dialog when *restoring* a hardware wallet in install wizard; it used to be taken as an empty passphrase. Like the password dialog it now cancels the wizard. Diffstat: M gui/qt/installwizard.py | 14 ++++++++------ M gui/qt/password_dialog.py | 6 +++++- M lib/wizard.py | 6 +++--- M plugins/hw_wallet/plugin.py | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) --- DIR diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py t@@ -208,13 +208,15 @@ class InstallWizard(QDialog, MessageBoxMixin, WizardBase): self.set_main_layout(playout.layout()) return playout.new_password() - def request_passphrase(self, device_text, restore=True): - """Request a passphrase for a wallet from the given device and - confirm it. restore is True if restoring a wallet. Should return + def request_passphrase(self, device_text): + """When restoring a wallet, request the passphrase that was used for + the wallet on the given device and confirm it. Should return a unicode string.""" - if restore: - msg = MSG_RESTORE_PASSPHRASE % device_text - return unicode(self.pw_layout(msg, PW_PASSPHRASE) or '') + phrase = self.pw_layout(MSG_RESTORE_PASSPHRASE % device_text, + PW_PASSPHRASE) + if phrase is None: + raise UserCancelled + return phrase def request_password(self, msg=None): """Request the user enter a new password and confirm it. Return DIR diff --git a/gui/qt/password_dialog.py b/gui/qt/password_dialog.py t@@ -146,7 +146,11 @@ class PasswordLayout(object): return None def new_password(self): - return unicode(self.new_pw.text()) or None + pw = unicode(self.new_pw.text()) + # Empty passphrases are fine and returned empty. + if pw == "" and self.kind != PW_PASSPHRASE: + pw = None + return pw class PasswordDialog(WindowModalDialog): DIR diff --git a/lib/wizard.py b/lib/wizard.py t@@ -98,9 +98,9 @@ class WizardBase(PrintError): True on success.""" raise NotImplementedError - def request_passphrase(self, device_text, restore=True): - """Request a passphrase for a wallet from the given device and - confirm it. restore is True if restoring a wallet. Should return + def request_passphrase(self, device_text): + """When restoring a wallet, request the passphrase that was used for + the wallet on the given device and confirm it. Should return a unicode string.""" raise NotImplementedError DIR diff --git a/plugins/hw_wallet/plugin.py b/plugins/hw_wallet/plugin.py t@@ -62,7 +62,7 @@ class HW_PluginBase(BasePlugin): wallet.storage.put('wallet_type', wallet_class.wallet_type) wallet = wallet_class(wallet.storage) - passphrase = wizard.request_passphrase(self.device, restore=True) + passphrase = wizard.request_passphrase(self.device) password = wizard.request_password() wallet.add_seed(seed, password) wallet.add_xprv_from_seed(seed, 'x/', password, passphrase)