tmnemonic.make_seed: de-duplicate num_bits default magic number - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 933d8861ce2538c21d26a1e1f6c4d48f31044a93 DIR parent 376ee395f867466d207747f36c0064e069ea9d24 HTML Author: SomberNight <somber.night@protonmail.com> Date: Tue, 8 Dec 2020 10:00:34 +0100 mnemonic.make_seed: de-duplicate num_bits default magic number Diffstat: M electrum/base_wizard.py | 2 +- M electrum/commands.py | 4 ++-- M electrum/mnemonic.py | 13 +++++++------ M electrum/plugins/trustedcoin/trust… | 2 +- M electrum/tests/test_mnemonic.py | 2 +- M electrum/wallet.py | 2 +- 6 files changed, 13 insertions(+), 12 deletions(-) --- DIR diff --git a/electrum/base_wizard.py b/electrum/base_wizard.py t@@ -707,7 +707,7 @@ class BaseWizard(Logger): def create_seed(self, seed_type): from . import mnemonic self.seed_type = seed_type - seed = mnemonic.Mnemonic('en').make_seed(self.seed_type) + seed = mnemonic.Mnemonic('en').make_seed(seed_type=self.seed_type) self.opt_bip39 = False f = lambda x: self.request_passphrase(seed, x) self.show_seed_dialog(run_next=f, seed_text=seed) DIR diff --git a/electrum/commands.py b/electrum/commands.py t@@ -318,10 +318,10 @@ class Commands: return self.config.get_ssl_domain() @command('') - async def make_seed(self, nbits=132, language=None, seed_type=None): + async def make_seed(self, nbits=None, language=None, seed_type=None): """Create a seed""" from .mnemonic import Mnemonic - s = Mnemonic(language).make_seed(seed_type, num_bits=nbits) + s = Mnemonic(language).make_seed(seed_type=seed_type, num_bits=nbits) return s @command('n') DIR diff --git a/electrum/mnemonic.py b/electrum/mnemonic.py t@@ -187,19 +187,20 @@ class Mnemonic(Logger): i = i*n + k return i - def make_seed(self, seed_type=None, *, num_bits=132) -> str: + def make_seed(self, *, seed_type=None, num_bits=None) -> str: if seed_type is None: seed_type = 'segwit' + if num_bits is None: + num_bits = 132 prefix = version.seed_prefix(seed_type) # increase num_bits in order to obtain a uniform distribution for the last word bpw = math.log(len(self.wordlist), 2) - # rounding - n = int(math.ceil(num_bits/bpw) * bpw) - self.logger.info(f"make_seed. prefix: '{prefix}', entropy: {n} bits") + num_bits = int(math.ceil(num_bits/bpw) * bpw) + self.logger.info(f"make_seed. prefix: '{prefix}', entropy: {num_bits} bits") entropy = 1 - while entropy < pow(2, n - bpw): + while entropy < pow(2, num_bits - bpw): # try again if seed would not contain enough words - entropy = randrange(pow(2, n)) + entropy = randrange(pow(2, num_bits)) nonce = 0 while True: nonce += 1 DIR diff --git a/electrum/plugins/trustedcoin/trustedcoin.py b/electrum/plugins/trustedcoin/trustedcoin.py t@@ -524,7 +524,7 @@ class TrustedCoinPlugin(BasePlugin): def make_seed(self, seed_type): if not is_any_2fa_seed_type(seed_type): raise Exception(f'unexpected seed type: {seed_type}') - return Mnemonic('english').make_seed(seed_type=seed_type, num_bits=128) + return Mnemonic('english').make_seed(seed_type=seed_type) @hook def do_clear(self, window): DIR diff --git a/electrum/tests/test_mnemonic.py b/electrum/tests/test_mnemonic.py t@@ -120,7 +120,7 @@ class Test_NewMnemonic(ElectrumTestCase): iters = 10 m = mnemonic.Mnemonic(lang='en') for _ in range(iters): - seed = m.make_seed("standard") + seed = m.make_seed(seed_type="standard") i = m.mnemonic_decode(seed) self.assertEqual(m.mnemonic_encode(i), seed) DIR diff --git a/electrum/wallet.py b/electrum/wallet.py t@@ -2800,7 +2800,7 @@ def create_new_wallet(*, path, config: SimpleConfig, passphrase=None, password=N raise Exception("Remove the existing wallet first!") db = WalletDB('', manual_upgrades=False) - seed = Mnemonic('en').make_seed(seed_type) + seed = Mnemonic('en').make_seed(seed_type=seed_type) k = keystore.from_seed(seed, passphrase) db.put('keystore', k.dump()) db.put('wallet_type', 'standard')