bip39: add tobytes(), frombytes() methods; Seed: remove hexdata attr
This commit is contained in:
parent
12b830a104
commit
faf28879f6
5 changed files with 19 additions and 24 deletions
|
|
@ -68,13 +68,10 @@ class bip39(baseconv):
|
|||
except Exception as e:
|
||||
raise ValueError(f'{seed_bits!r}: invalid seed length for BIP39 mnemonic') from e
|
||||
|
||||
def tobytes(self,*args,**kwargs):
|
||||
raise NotImplementedError('Method not supported')
|
||||
def tohex(self, words_arg, pad=None):
|
||||
return self.tobytes(words_arg, pad=pad).hex()
|
||||
|
||||
def frombytes(self,*args,**kwargs):
|
||||
raise NotImplementedError('Method not supported')
|
||||
|
||||
def tohex(self,words_arg,pad=None):
|
||||
def tobytes(self,words_arg,pad=None):
|
||||
assert isinstance(words_arg,(list,tuple)),'words_arg must be list or tuple'
|
||||
assert pad in (None,'seed'), f"{pad}: invalid 'pad' argument (must be None or 'seed')"
|
||||
|
||||
|
|
@ -106,15 +103,17 @@ class bip39(baseconv):
|
|||
if chk_bin != chk_bin_chk:
|
||||
die( 'MnemonicError', f'invalid BIP39 seed phrase checksum ({chk_bin} != {chk_bin_chk})' )
|
||||
|
||||
return seed_hex
|
||||
return seed_bytes
|
||||
|
||||
def fromhex(self,hexstr,pad=None,tostr=False):
|
||||
def fromhex(self, hexstr, pad=None, tostr=False):
|
||||
assert is_hex_str(hexstr),'seed data not a hexadecimal string'
|
||||
return self.frombytes(bytes.fromhex(hexstr), pad=pad, tostr=tostr)
|
||||
|
||||
def frombytes(self, seed_bytes, pad=None, tostr=False):
|
||||
assert tostr is False,"'tostr' must be False for 'bip39'"
|
||||
assert pad in (None,'seed'), f"{pad}: invalid 'pad' argument (must be None or 'seed')"
|
||||
|
||||
wl = self.digits
|
||||
seed_bytes = bytes.fromhex(hexstr)
|
||||
bitlen = len(seed_bytes) * 8
|
||||
|
||||
assert bitlen in self.constants, f'{bitlen}: invalid seed bit length'
|
||||
|
|
@ -122,7 +121,7 @@ class bip39(baseconv):
|
|||
|
||||
chk_hex = sha256(seed_bytes).hexdigest()
|
||||
|
||||
seed_bin = f'{int(hexstr,16):0{bitlen}b}'
|
||||
seed_bin = f'{int(seed_bytes.hex(),16):0{bitlen}b}'
|
||||
chk_bin = f'{int(chk_hex,16):0256b}'
|
||||
|
||||
res = seed_bin + chk_bin
|
||||
|
|
|
|||
|
|
@ -77,10 +77,6 @@ class SeedBase(MMGenObject):
|
|||
def byte_len(self):
|
||||
return len(self.data)
|
||||
|
||||
@property
|
||||
def hexdata(self):
|
||||
return self.data.hex()
|
||||
|
||||
@property
|
||||
def fn_stem(self):
|
||||
return self.sid
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ class wallet(wallet):
|
|||
desc = 'hexadecimal seed data with checksum'
|
||||
|
||||
def _format(self):
|
||||
h = self.seed.hexdata
|
||||
h = self.seed.data.hex()
|
||||
self.ssdata.chksum = make_chksum_6(h)
|
||||
self.fmt_data = f'{self.ssdata.chksum} {split_into_cols(4,h)}\n'
|
||||
|
||||
|
|
|
|||
|
|
@ -43,14 +43,14 @@ class wallet(wallet):
|
|||
|
||||
def _format(self):
|
||||
|
||||
hexseed = self.seed.hexdata
|
||||
seed = self.seed.data
|
||||
|
||||
bc = self.conv_cls(self.wl_id)
|
||||
mn = bc.fromhex( hexseed, 'seed' )
|
||||
rev = bc.tohex( mn, 'seed' )
|
||||
mn = bc.frombytes(seed, 'seed')
|
||||
rev = bc.tobytes(mn, 'seed')
|
||||
|
||||
# Internal error, so just die on fail
|
||||
self.cfg._util.compare_or_die( rev, 'recomputed seed', hexseed, 'original', e='Internal error' )
|
||||
self.cfg._util.compare_or_die(rev, 'recomputed seed', seed, 'original seed', e='Internal error')
|
||||
|
||||
self.ssdata.mnemonic = mn
|
||||
self.fmt_data = ' '.join(mn) + '\n'
|
||||
|
|
@ -71,10 +71,10 @@ class wallet(wallet):
|
|||
msg(f'Invalid mnemonic: word #{n} is not in the {self.wl_id.upper()} wordlist')
|
||||
return False
|
||||
|
||||
hexseed = bc.tohex( mn, 'seed' )
|
||||
rev = bc.fromhex( hexseed, 'seed' )
|
||||
seed = bc.tobytes(mn, 'seed')
|
||||
rev = bc.frombytes(seed, 'seed')
|
||||
|
||||
if len(hexseed) * 4 not in Seed.lens:
|
||||
if len(seed) * 8 not in Seed.lens:
|
||||
msg('Invalid mnemonic (produces too large a number)')
|
||||
return False
|
||||
|
||||
|
|
@ -86,7 +86,7 @@ class wallet(wallet):
|
|||
desc2 = 'original mnemonic',
|
||||
e = 'Internal error' )
|
||||
|
||||
self.seed = Seed( self.cfg, bytes.fromhex(hexseed) )
|
||||
self.seed = Seed(self.cfg, seed)
|
||||
self.ssdata.mnemonic = mn
|
||||
|
||||
self.check_usr_seed_len()
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ class wallet(wallet):
|
|||
desc = 'plain hexadecimal seed data'
|
||||
|
||||
def _format(self):
|
||||
self.fmt_data = self.seed.hexdata + '\n'
|
||||
self.fmt_data = self.seed.data.hex() + '\n'
|
||||
|
||||
def _deformat(self):
|
||||
desc = self.desc
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue