URI: 
       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)