From 19d04546df1380a8bfd7e302f4e55fc7062dc486 Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Mon, 12 Oct 2020 15:31:06 +0200 Subject: [PATCH] Replace from_bip39_seed() with from_bip43_rootseed(). --- electrum/base_wizard.py | 13 +++++++------ electrum/keystore.py | 5 ++--- electrum/tests/test_wallet_vertical.py | 15 ++++++++++----- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/electrum/base_wizard.py b/electrum/base_wizard.py index ac400249a..fbf168bf8 100644 --- a/electrum/base_wizard.py +++ b/electrum/base_wizard.py @@ -517,7 +517,9 @@ class BaseWizard(Logger): def on_restore_seed(self, seed, is_bip39, is_ext): self.seed_type = 'bip39' if is_bip39 else mnemonic.seed_type(seed) if self.seed_type == 'bip39': - f = lambda passphrase: self.run('on_restore_bip39', seed, passphrase) + def f(passphrase): + root_seed = bip39_to_seed(seed, passphrase) + self.on_restore_bip43(root_seed) self.passphrase_dialog(run_next=f, is_restoring=True) if is_ext else f('') elif self.seed_type in ['standard', 'segwit']: f = lambda passphrase: self.run('create_keystore', seed, passphrase) @@ -530,13 +532,12 @@ class BaseWizard(Logger): else: raise Exception('Unknown seed type', self.seed_type) - def on_restore_bip39(self, seed, passphrase): + def on_restore_bip43(self, root_seed): def f(derivation, script_type): derivation = normalize_bip32_derivation(derivation) - self.run('on_bip43', seed, passphrase, derivation, script_type) + self.run('on_bip43', root_seed, derivation, script_type) if self.wallet_type == 'standard': def get_account_xpub(account_path): - root_seed = bip39_to_seed(seed, passphrase) root_node = BIP32Node.from_rootseed(root_seed, xtype="standard") account_node = root_node.subkey_at_private_derivation(account_path) account_xpub = account_node.to_xpub() @@ -551,8 +552,8 @@ class BaseWizard(Logger): self.data['lightning_xprv'] = k.get_lightning_xprv(None) self.on_keystore(k) - def on_bip43(self, seed, passphrase, derivation, script_type): - k = keystore.from_bip39_seed(seed, passphrase, derivation, xtype=script_type) + def on_bip43(self, root_seed, derivation, script_type): + k = keystore.from_bip43_rootseed(root_seed, derivation, xtype=script_type) self.on_keystore(k) def get_script_type_of_wallet(self) -> Optional[str]: diff --git a/electrum/keystore.py b/electrum/keystore.py index 32c833475..0765809c5 100644 --- a/electrum/keystore.py +++ b/electrum/keystore.py @@ -911,12 +911,11 @@ def bip39_is_checksum_valid( return checksum == calculated_checksum, True -def from_bip39_seed(seed, passphrase, derivation, xtype=None): +def from_bip43_rootseed(root_seed, derivation, xtype=None): k = BIP32_KeyStore({}) - bip32_seed = bip39_to_seed(seed, passphrase) if xtype is None: xtype = xtype_from_derivation(derivation) - k.add_xprv_from_seed(bip32_seed, xtype, derivation) + k.add_xprv_from_seed(root_seed, xtype, derivation) return k diff --git a/electrum/tests/test_wallet_vertical.py b/electrum/tests/test_wallet_vertical.py index bdf4b4647..cc214e756 100644 --- a/electrum/tests/test_wallet_vertical.py +++ b/electrum/tests/test_wallet_vertical.py @@ -275,7 +275,8 @@ class TestWalletKeystoreAddressIntegrityForMainnet(ElectrumTestCase): seed_words = 'treat dwarf wealth gasp brass outside high rent blood crowd make initial' self.assertEqual(keystore.bip39_is_checksum_valid(seed_words), (True, True)) - ks = keystore.from_bip39_seed(seed_words, '', "m/44'/0'/0'") + root_seed = keystore.bip39_to_seed(seed_words, '') + ks = keystore.from_bip43_rootseed(root_seed, "m/44'/0'/0'") self.assertTrue(isinstance(ks, keystore.BIP32_KeyStore)) @@ -293,7 +294,8 @@ class TestWalletKeystoreAddressIntegrityForMainnet(ElectrumTestCase): seed_words = 'treat dwarf wealth gasp brass outside high rent blood crowd make initial' self.assertEqual(keystore.bip39_is_checksum_valid(seed_words), (True, True)) - ks = keystore.from_bip39_seed(seed_words, UNICODE_HORROR, "m/44'/0'/0'") + root_seed = keystore.bip39_to_seed(seed_words, UNICODE_HORROR) + ks = keystore.from_bip43_rootseed(root_seed, "m/44'/0'/0'") self.assertTrue(isinstance(ks, keystore.BIP32_KeyStore)) @@ -311,7 +313,8 @@ class TestWalletKeystoreAddressIntegrityForMainnet(ElectrumTestCase): seed_words = 'treat dwarf wealth gasp brass outside high rent blood crowd make initial' self.assertEqual(keystore.bip39_is_checksum_valid(seed_words), (True, True)) - ks = keystore.from_bip39_seed(seed_words, '', "m/49'/0'/0'") + root_seed = keystore.bip39_to_seed(seed_words, '') + ks = keystore.from_bip43_rootseed(root_seed, "m/49'/0'/0'") self.assertTrue(isinstance(ks, keystore.BIP32_KeyStore)) @@ -330,7 +333,8 @@ class TestWalletKeystoreAddressIntegrityForMainnet(ElectrumTestCase): seed_words = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about' self.assertEqual(keystore.bip39_is_checksum_valid(seed_words), (True, True)) - ks = keystore.from_bip39_seed(seed_words, '', "m/84'/0'/0'") + root_seed = keystore.bip39_to_seed(seed_words, '') + ks = keystore.from_bip43_rootseed(root_seed, "m/84'/0'/0'") self.assertTrue(isinstance(ks, keystore.BIP32_KeyStore)) @@ -392,7 +396,8 @@ class TestWalletKeystoreAddressIntegrityForMainnet(ElectrumTestCase): seed_words = 'treat dwarf wealth gasp brass outside high rent blood crowd make initial' self.assertEqual(keystore.bip39_is_checksum_valid(seed_words), (True, True)) - ks1 = keystore.from_bip39_seed(seed_words, '', "m/45'/0") + root_seed = keystore.bip39_to_seed(seed_words, '') + ks1 = keystore.from_bip43_rootseed(root_seed, "m/45'/0") self.assertTrue(isinstance(ks1, keystore.BIP32_KeyStore)) self.assertEqual(ks1.xprv, 'xprv9vyEFyXf7pYVv4eDU3hhuCEAHPHNGuxX73nwtYdpbLcqwJCPwFKknAK8pHWuHHBirCzAPDZ7UJHrYdhLfn1NkGp9rk3rVz2aEqrT93qKRD9') self.assertEqual(ks1.xpub, 'xpub69xafV4YxC6o8Yiga5EiGLAtqR7rgNgNUGiYgw3S9g9pp6XYUne1KxdcfYtxwmA3eBrzMFuYcNQKfqsXCygCo4GxQFHfywxpUbKNfYvGJka')