URI: 
       tPassphrase-related fixes - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit f3e6bf0280fd666b0dd059ee53480318353c692d
   DIR parent 4fe01cb8d3f695b90ed854889b75ca52a3699725
  HTML Author: Neil Booth <kyuupichan@gmail.com>
       Date:   Sun,  3 Jan 2016 09:03:07 +0900
       
       Passphrase-related fixes
       
       Move normalize code to one place on the wallet
       Passphrases don't have password strength meter
       
       Diffstat:
         M gui/qt/password_dialog.py           |      10 ++++++----
         M lib/wallet.py                       |       6 +++++-
         M plugins/trezor/plugin.py            |       9 +++------
         M plugins/trezor/qt_generic.py        |       3 ++-
       
       4 files changed, 16 insertions(+), 12 deletions(-)
       ---
   DIR diff --git a/gui/qt/password_dialog.py b/gui/qt/password_dialog.py
       t@@ -100,9 +100,12 @@ class PasswordDialog(WindowModalDialog):
                vbox.addLayout(grid)
        
                # Password Strength Label
       -        self.pw_strength = QLabel()
       -        grid.addWidget(self.pw_strength, 3, 0, 1, 2)
       -        self.new_pw.textChanged.connect(self.pw_changed)
       +        if kind != self.PW_PASSPHRASE:
       +            self.pw_strength = QLabel()
       +            grid.addWidget(self.pw_strength, 3, 0, 1, 2)
       +            self.new_pw.textChanged.connect(self.pw_changed)
       +
       +        self.new_pw.textChanged.connect(self.check_OKButton)
                self.conf_pw.textChanged.connect(self.check_OKButton)
        
                self.OKButton = OkButton(self)
       t@@ -121,7 +124,6 @@ class PasswordDialog(WindowModalDialog):
                else:
                    label = ""
                self.pw_strength.setText(label)
       -        self.check_OKButton()
        
            def check_OKButton(self):
                self.OKButton.setEnabled(self.new_pw.text() == self.conf_pw.text())
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -1739,12 +1739,16 @@ class BIP44_Wallet(BIP32_HD_Wallet):
                return self.address_derivation(acc_id, change, address_index)
        
            @staticmethod
       +    def normalize_passphrase(passphrase):
       +        return normalize('NFKD', unicode(passphrase or ''))
       +
       +    @staticmethod
            def mnemonic_to_seed(mnemonic, passphrase):
                # See BIP39
                import pbkdf2, hashlib, hmac
                PBKDF2_ROUNDS = 2048
                mnemonic = normalize('NFKD', ' '.join(mnemonic.split()))
       -        passphrase = normalize('NFKD', passphrase)
       +        passphrase = BIP44_Wallet.normalize_passphrase(passphrase)
                return pbkdf2.PBKDF2(mnemonic, 'mnemonic' + passphrase,
                                     iterations = PBKDF2_ROUNDS, macmodule = hmac,
                                     digestmodule = hashlib.sha512).read(64)
   DIR diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py
       t@@ -3,7 +3,6 @@ import time
        
        from binascii import unhexlify
        from struct import pack
       -from unicodedata import normalize
        
        from electrum.account import BIP32_Account
        from electrum.bitcoin import (bc_address_to_hash_160, xpub_from_pubkey,
       t@@ -154,8 +153,10 @@ class TrezorCompatiblePlugin(BasePlugin):
        
            @hook
            def timer_actions(self):
       +        # Scan connected devices every second.  The test for libraries
       +        # available is necessary to recover wallets on machines without
       +        # libraries
                if self.libraries_available:
       -            # Scan connected devices every second
                    now = time.time()
                    if now > self.last_scan + 1:
                        self.last_scan = now
       t@@ -294,10 +295,6 @@ class TrezorCompatiblePlugin(BasePlugin):
            def is_enabled(self):
                return self.libraries_available
        
       -    @staticmethod
       -    def normalize_passphrase(self, passphrase):
       -        return normalize('NFKD', unicode(passphrase or ''))
       -
            def on_restore_wallet(self, wallet, wizard):
                assert isinstance(wallet, self.wallet_class)
        
   DIR diff --git a/plugins/trezor/qt_generic.py b/plugins/trezor/qt_generic.py
       t@@ -11,6 +11,7 @@ from plugin import TrezorCompatiblePlugin
        from electrum.i18n import _
        from electrum.plugins import hook
        from electrum.util import PrintError
       +from electrum.wallet import BIP44_Wallet
        
        
        # By far the trickiest thing about this handler is the window stack;
       t@@ -75,7 +76,7 @@ class QtHandler(PrintError):
                                   PasswordDialog.PW_PASSPHRASE)
                confirmed, p, passphrase = d.run()
                if confirmed:
       -            passphrase = TrezorCompatiblePlugin.normalize_passphrase(passphrase)
       +            passphrase = BIP44_Wallet.normalize_passphrase(passphrase)
                self.passphrase = passphrase
                self.done.set()