mv "electrum seed" stuff from bitcoin.py to mnemonic.py
This commit is contained in:
@@ -2,11 +2,11 @@ import base64
|
||||
import sys
|
||||
|
||||
from electrum.bitcoin import (public_key_to_p2pkh, address_from_private_key,
|
||||
is_address, is_private_key, is_new_seed, is_old_seed,
|
||||
is_address, is_private_key,
|
||||
var_int, _op_push, address_to_script,
|
||||
deserialize_privkey, serialize_privkey, is_segwit_address,
|
||||
is_b58_address, address_to_scripthash, is_minikey,
|
||||
is_compressed_privkey, seed_type, EncodeBase58Check,
|
||||
is_compressed_privkey, EncodeBase58Check,
|
||||
script_num_to_hex, push_script, add_number_to_script, int_to_hex,
|
||||
opcodes)
|
||||
from electrum.bip32 import (bip32_root, bip32_public_derivation, bip32_private_derivation,
|
||||
@@ -719,49 +719,3 @@ class Test_keyImport(SequentialTestCase):
|
||||
for priv_details in self.priv_pub_addr:
|
||||
self.assertEqual(priv_details['compressed'],
|
||||
is_compressed_privkey(priv_details['priv']))
|
||||
|
||||
|
||||
class Test_seeds(SequentialTestCase):
|
||||
""" Test old and new seeds. """
|
||||
|
||||
mnemonics = {
|
||||
('cell dumb heartbeat north boom tease ship baby bright kingdom rare squeeze', 'old'),
|
||||
('cell dumb heartbeat north boom tease ' * 4, 'old'),
|
||||
('cell dumb heartbeat north boom tease ship baby bright kingdom rare badword', ''),
|
||||
('cElL DuMb hEaRtBeAt nOrTh bOoM TeAsE ShIp bAbY BrIgHt kInGdOm rArE SqUeEzE', 'old'),
|
||||
(' cElL DuMb hEaRtBeAt nOrTh bOoM TeAsE ShIp bAbY BrIgHt kInGdOm rArE SqUeEzE ', 'old'),
|
||||
# below seed is actually 'invalid old' as it maps to 33 hex chars
|
||||
('hurry idiot prefer sunset mention mist jaw inhale impossible kingdom rare squeeze', 'old'),
|
||||
('cram swing cover prefer miss modify ritual silly deliver chunk behind inform able', 'standard'),
|
||||
('cram swing cover prefer miss modify ritual silly deliver chunk behind inform', ''),
|
||||
('ostrich security deer aunt climb inner alpha arm mutual marble solid task', 'standard'),
|
||||
('OSTRICH SECURITY DEER AUNT CLIMB INNER ALPHA ARM MUTUAL MARBLE SOLID TASK', 'standard'),
|
||||
(' oStRiCh sEcUrItY DeEr aUnT ClImB InNeR AlPhA ArM MuTuAl mArBlE SoLiD TaSk ', 'standard'),
|
||||
('x8', 'standard'),
|
||||
('science dawn member doll dutch real can brick knife deny drive list', '2fa'),
|
||||
('science dawn member doll dutch real ca brick knife deny drive list', ''),
|
||||
(' sCience dawn member doll Dutch rEAl can brick knife deny drive lisT', '2fa'),
|
||||
('frost pig brisk excite novel report camera enlist axis nation novel desert', 'segwit'),
|
||||
(' fRoSt pig brisk excIte novel rePort CamEra enlist axis nation nOVeL dEsert ', 'segwit'),
|
||||
('9dk', 'segwit'),
|
||||
}
|
||||
|
||||
def test_new_seed(self):
|
||||
seed = "cram swing cover prefer miss modify ritual silly deliver chunk behind inform able"
|
||||
self.assertTrue(is_new_seed(seed))
|
||||
|
||||
seed = "cram swing cover prefer miss modify ritual silly deliver chunk behind inform"
|
||||
self.assertFalse(is_new_seed(seed))
|
||||
|
||||
def test_old_seed(self):
|
||||
self.assertTrue(is_old_seed(" ".join(["like"] * 12)))
|
||||
self.assertFalse(is_old_seed(" ".join(["like"] * 18)))
|
||||
self.assertTrue(is_old_seed(" ".join(["like"] * 24)))
|
||||
self.assertFalse(is_old_seed("not a seed"))
|
||||
|
||||
self.assertTrue(is_old_seed("0123456789ABCDEF" * 2))
|
||||
self.assertTrue(is_old_seed("0123456789ABCDEF" * 4))
|
||||
|
||||
def test_seed_type(self):
|
||||
for seed_words, _type in self.mnemonics:
|
||||
self.assertEqual(_type, seed_type(seed_words), msg=seed_words)
|
||||
|
||||
@@ -4,7 +4,7 @@ from electrum import keystore
|
||||
from electrum import mnemonic
|
||||
from electrum import old_mnemonic
|
||||
from electrum.util import bh2u, bfh
|
||||
from electrum.bitcoin import is_new_seed
|
||||
from electrum.mnemonic import is_new_seed, is_old_seed, seed_type
|
||||
from electrum.version import SEED_PREFIX_SW, SEED_PREFIX
|
||||
|
||||
from . import SequentialTestCase
|
||||
@@ -134,6 +134,7 @@ class Test_OldMnemonic(SequentialTestCase):
|
||||
self.assertEqual(result, words.split())
|
||||
self.assertEqual(old_mnemonic.mn_decode(result), seed)
|
||||
|
||||
|
||||
class Test_BIP39Checksum(SequentialTestCase):
|
||||
|
||||
def test(self):
|
||||
@@ -141,3 +142,49 @@ class Test_BIP39Checksum(SequentialTestCase):
|
||||
is_checksum_valid, is_wordlist_valid = keystore.bip39_is_checksum_valid(mnemonic)
|
||||
self.assertTrue(is_wordlist_valid)
|
||||
self.assertTrue(is_checksum_valid)
|
||||
|
||||
|
||||
class Test_seeds(SequentialTestCase):
|
||||
""" Test old and new seeds. """
|
||||
|
||||
mnemonics = {
|
||||
('cell dumb heartbeat north boom tease ship baby bright kingdom rare squeeze', 'old'),
|
||||
('cell dumb heartbeat north boom tease ' * 4, 'old'),
|
||||
('cell dumb heartbeat north boom tease ship baby bright kingdom rare badword', ''),
|
||||
('cElL DuMb hEaRtBeAt nOrTh bOoM TeAsE ShIp bAbY BrIgHt kInGdOm rArE SqUeEzE', 'old'),
|
||||
(' cElL DuMb hEaRtBeAt nOrTh bOoM TeAsE ShIp bAbY BrIgHt kInGdOm rArE SqUeEzE ', 'old'),
|
||||
# below seed is actually 'invalid old' as it maps to 33 hex chars
|
||||
('hurry idiot prefer sunset mention mist jaw inhale impossible kingdom rare squeeze', 'old'),
|
||||
('cram swing cover prefer miss modify ritual silly deliver chunk behind inform able', 'standard'),
|
||||
('cram swing cover prefer miss modify ritual silly deliver chunk behind inform', ''),
|
||||
('ostrich security deer aunt climb inner alpha arm mutual marble solid task', 'standard'),
|
||||
('OSTRICH SECURITY DEER AUNT CLIMB INNER ALPHA ARM MUTUAL MARBLE SOLID TASK', 'standard'),
|
||||
(' oStRiCh sEcUrItY DeEr aUnT ClImB InNeR AlPhA ArM MuTuAl mArBlE SoLiD TaSk ', 'standard'),
|
||||
('x8', 'standard'),
|
||||
('science dawn member doll dutch real can brick knife deny drive list', '2fa'),
|
||||
('science dawn member doll dutch real ca brick knife deny drive list', ''),
|
||||
(' sCience dawn member doll Dutch rEAl can brick knife deny drive lisT', '2fa'),
|
||||
('frost pig brisk excite novel report camera enlist axis nation novel desert', 'segwit'),
|
||||
(' fRoSt pig brisk excIte novel rePort CamEra enlist axis nation nOVeL dEsert ', 'segwit'),
|
||||
('9dk', 'segwit'),
|
||||
}
|
||||
|
||||
def test_new_seed(self):
|
||||
seed = "cram swing cover prefer miss modify ritual silly deliver chunk behind inform able"
|
||||
self.assertTrue(is_new_seed(seed))
|
||||
|
||||
seed = "cram swing cover prefer miss modify ritual silly deliver chunk behind inform"
|
||||
self.assertFalse(is_new_seed(seed))
|
||||
|
||||
def test_old_seed(self):
|
||||
self.assertTrue(is_old_seed(" ".join(["like"] * 12)))
|
||||
self.assertFalse(is_old_seed(" ".join(["like"] * 18)))
|
||||
self.assertTrue(is_old_seed(" ".join(["like"] * 24)))
|
||||
self.assertFalse(is_old_seed("not a seed"))
|
||||
|
||||
self.assertTrue(is_old_seed("0123456789ABCDEF" * 2))
|
||||
self.assertTrue(is_old_seed("0123456789ABCDEF" * 4))
|
||||
|
||||
def test_seed_type(self):
|
||||
for seed_words, _type in self.mnemonics:
|
||||
self.assertEqual(_type, seed_type(seed_words), msg=seed_words)
|
||||
|
||||
@@ -11,6 +11,7 @@ from electrum.address_synchronizer import TX_HEIGHT_UNCONFIRMED, TX_HEIGHT_UNCON
|
||||
from electrum.wallet import sweep, Multisig_Wallet, Standard_Wallet, Imported_Wallet
|
||||
from electrum.util import bfh, bh2u
|
||||
from electrum.transaction import TxOutput
|
||||
from electrum.mnemonic import seed_type
|
||||
|
||||
from electrum.plugins.trustedcoin import trustedcoin
|
||||
|
||||
@@ -80,7 +81,7 @@ class TestWalletKeystoreAddressIntegrityForMainnet(SequentialTestCase):
|
||||
@mock.patch.object(storage.WalletStorage, '_write')
|
||||
def test_electrum_seed_standard(self, mock_write):
|
||||
seed_words = 'cycle rocket west magnet parrot shuffle foot correct salt library feed song'
|
||||
self.assertEqual(bitcoin.seed_type(seed_words), 'standard')
|
||||
self.assertEqual(seed_type(seed_words), 'standard')
|
||||
|
||||
ks = keystore.from_seed(seed_words, '', False)
|
||||
|
||||
@@ -100,7 +101,7 @@ class TestWalletKeystoreAddressIntegrityForMainnet(SequentialTestCase):
|
||||
@mock.patch.object(storage.WalletStorage, '_write')
|
||||
def test_electrum_seed_segwit(self, mock_write):
|
||||
seed_words = 'bitter grass shiver impose acquire brush forget axis eager alone wine silver'
|
||||
self.assertEqual(bitcoin.seed_type(seed_words), 'segwit')
|
||||
self.assertEqual(seed_type(seed_words), 'segwit')
|
||||
|
||||
ks = keystore.from_seed(seed_words, '', False)
|
||||
|
||||
@@ -120,7 +121,7 @@ class TestWalletKeystoreAddressIntegrityForMainnet(SequentialTestCase):
|
||||
@mock.patch.object(storage.WalletStorage, '_write')
|
||||
def test_electrum_seed_segwit_passphrase(self, mock_write):
|
||||
seed_words = 'bitter grass shiver impose acquire brush forget axis eager alone wine silver'
|
||||
self.assertEqual(bitcoin.seed_type(seed_words), 'segwit')
|
||||
self.assertEqual(seed_type(seed_words), 'segwit')
|
||||
|
||||
ks = keystore.from_seed(seed_words, UNICODE_HORROR, False)
|
||||
|
||||
@@ -140,7 +141,7 @@ class TestWalletKeystoreAddressIntegrityForMainnet(SequentialTestCase):
|
||||
@mock.patch.object(storage.WalletStorage, '_write')
|
||||
def test_electrum_seed_old(self, mock_write):
|
||||
seed_words = 'powerful random nobody notice nothing important anyway look away hidden message over'
|
||||
self.assertEqual(bitcoin.seed_type(seed_words), 'old')
|
||||
self.assertEqual(seed_type(seed_words), 'old')
|
||||
|
||||
ks = keystore.from_seed(seed_words, '', False)
|
||||
|
||||
@@ -159,7 +160,7 @@ class TestWalletKeystoreAddressIntegrityForMainnet(SequentialTestCase):
|
||||
@mock.patch.object(storage.WalletStorage, '_write')
|
||||
def test_electrum_seed_2fa_legacy(self, mock_write):
|
||||
seed_words = 'kiss live scene rude gate step hip quarter bunker oxygen motor glove'
|
||||
self.assertEqual(bitcoin.seed_type(seed_words), '2fa')
|
||||
self.assertEqual(seed_type(seed_words), '2fa')
|
||||
|
||||
xprv1, xpub1, xprv2, xpub2 = trustedcoin.TrustedCoinPlugin.xkeys_from_seed(seed_words, '')
|
||||
|
||||
@@ -194,7 +195,7 @@ class TestWalletKeystoreAddressIntegrityForMainnet(SequentialTestCase):
|
||||
@mock.patch.object(storage.WalletStorage, '_write')
|
||||
def test_electrum_seed_2fa_segwit(self, mock_write):
|
||||
seed_words = 'universe topic remind silver february ranch shine worth innocent cattle enhance wise'
|
||||
self.assertEqual(bitcoin.seed_type(seed_words), '2fa_segwit')
|
||||
self.assertEqual(seed_type(seed_words), '2fa_segwit')
|
||||
|
||||
xprv1, xpub1, xprv2, xpub2 = trustedcoin.TrustedCoinPlugin.xkeys_from_seed(seed_words, '')
|
||||
|
||||
@@ -306,7 +307,7 @@ class TestWalletKeystoreAddressIntegrityForMainnet(SequentialTestCase):
|
||||
@mock.patch.object(storage.WalletStorage, '_write')
|
||||
def test_electrum_multisig_seed_standard(self, mock_write):
|
||||
seed_words = 'blast uniform dragon fiscal ensure vast young utility dinosaur abandon rookie sure'
|
||||
self.assertEqual(bitcoin.seed_type(seed_words), 'standard')
|
||||
self.assertEqual(seed_type(seed_words), 'standard')
|
||||
|
||||
ks1 = keystore.from_seed(seed_words, '', True)
|
||||
WalletIntegrityHelper.check_seeded_keystore_sanity(self, ks1)
|
||||
@@ -329,7 +330,7 @@ class TestWalletKeystoreAddressIntegrityForMainnet(SequentialTestCase):
|
||||
@mock.patch.object(storage.WalletStorage, '_write')
|
||||
def test_electrum_multisig_seed_segwit(self, mock_write):
|
||||
seed_words = 'snow nest raise royal more walk demise rotate smooth spirit canyon gun'
|
||||
self.assertEqual(bitcoin.seed_type(seed_words), 'segwit')
|
||||
self.assertEqual(seed_type(seed_words), 'segwit')
|
||||
|
||||
ks1 = keystore.from_seed(seed_words, '', True)
|
||||
WalletIntegrityHelper.check_seeded_keystore_sanity(self, ks1)
|
||||
|
||||
Reference in New Issue
Block a user