URI: 
       tkeystore bip39: minor clean-up - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit e2eb051eed67d0c8f404fe69d94b28b33f8d6d98
   DIR parent c8562f53622309a736c0be51449db13b3a403d3e
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Wed, 13 Feb 2019 15:03:32 +0100
       
       keystore bip39: minor clean-up
       
       Diffstat:
         M electrum/keystore.py                |      20 ++++++++++----------
       
       1 file changed, 10 insertions(+), 10 deletions(-)
       ---
   DIR diff --git a/electrum/keystore.py b/electrum/keystore.py
       t@@ -26,7 +26,7 @@
        
        from unicodedata import normalize
        import hashlib
       -import binascii
       +from typing import Tuple
        
        from . import bitcoin, ecc, constants, bip32
        from .bitcoin import (deserialize_privkey, serialize_privkey,
       t@@ -601,14 +601,15 @@ def bip39_to_seed(mnemonic, passphrase):
            return hashlib.pbkdf2_hmac('sha512', mnemonic.encode('utf-8'),
                b'mnemonic' + passphrase.encode('utf-8'), iterations = PBKDF2_ROUNDS)
        
       -# returns tuple (is_checksum_valid, is_wordlist_valid)
       -def bip39_is_checksum_valid(mnemonic):
       +
       +def bip39_is_checksum_valid(mnemonic: str) -> Tuple[bool, bool]:
       +    """Test checksum of bip39 mnemonic assuming English wordlist.
       +    Returns tuple (is_checksum_valid, is_wordlist_valid)
       +    """
            words = [ normalize('NFKD', word) for word in mnemonic.split() ]
            words_len = len(words)
            wordlist = load_wordlist("english.txt")
            n = len(wordlist)
       -    checksum_length = 11*words_len//33
       -    entropy_length = 32*checksum_length
            i = 0
            words.reverse()
            while words:
       t@@ -620,13 +621,12 @@ def bip39_is_checksum_valid(mnemonic):
                i = i*n + k
            if words_len not in [12, 15, 18, 21, 24]:
                return False, True
       +    checksum_length = 11 * words_len // 33  # num bits
       +    entropy_length = 32 * checksum_length  # num bits
            entropy = i >> checksum_length
            checksum = i % 2**checksum_length
       -    h = '{:x}'.format(entropy)
       -    while len(h) < entropy_length/4:
       -        h = '0'+h
       -    b = bytearray.fromhex(h)
       -    hashed = int(binascii.hexlify(sha256(b)), 16)
       +    entropy_bytes = int.to_bytes(entropy, length=entropy_length//8, byteorder="big")
       +    hashed = int.from_bytes(sha256(entropy_bytes), byteorder="big")
            calculated_checksum = hashed >> (256 - checksum_length)
            return checksum == calculated_checksum, True