Seed: 'length' -> 'bitlen'; new 'byte_len' property

This commit is contained in:
The MMGen Project 2019-06-12 14:46:54 +00:00
commit 665da1a27c
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
2 changed files with 24 additions and 24 deletions

View file

@ -61,9 +61,13 @@ class SeedBase(MMGenObject):
self.sid = SeedID(seed=self)
@property
def length(self):
def bitlen(self):
return len(self.data) * 8
@property
def byte_len(self):
return len(self.data)
@property
def hexdata(self):
return self.data.hex()
@ -188,7 +192,7 @@ class SubSeedList(MMGenObject):
fs1 = '{:>18} {:>18}\n'
fs2 = '{i:>7}L: {:8} {i:>7}S: {:8}\n'
hdr = '{:>16} {} ({} bits)\n\n'.format('Parent Seed:',self.parent_seed.sid.hl(),self.parent_seed.length)
hdr = '{:>16} {} ({} bits)\n\n'.format('Parent Seed:',self.parent_seed.sid.hl(),self.parent_seed.bitlen)
hdr += fs1.format('Long Subseeds','Short Subseeds')
hdr += fs1.format('-------------','--------------')
@ -225,9 +229,9 @@ class Seed(SeedBase):
def add_share(ss):
if d.slen:
assert ss.length == d.slen,'Seed length mismatch! {} != {}'.format(ss.length,d.slen)
assert ss.bitlen == d.slen,'Seed length mismatch! {} != {}'.format(ss.bitlen,d.slen)
else:
d.slen = ss.length
d.slen = ss.bitlen
d.ret ^= int(ss.data.hex(),16)
d.count += 1
@ -265,8 +269,7 @@ class SubSeed(SeedBase):
scramble_key = idx.to_bytes(4,'big',signed=False) + \
nonce.to_bytes(2,'big',signed=False) + \
short.to_bytes(1,'big',signed=False)
byte_len = 16 if short else seed.length // 8
return scramble_seed(seed.data,scramble_key)[:byte_len]
return scramble_seed(seed.data,scramble_key)[:16 if short else seed.byte_len]
class SeedShareList(SubSeedList):
master_share = None
@ -335,7 +338,7 @@ class SeedShareList(SubSeedList):
mfs1,mfs2 = (' with master share #{} ({})',' master #{} ({})')
midx,msid = (self.master_share.idx,self.master_share.sid)
hdr = ' {} {} ({} bits)\n'.format('Seed:',self.parent_seed.sid.hl(),self.parent_seed.length)
hdr = ' {} {} ({} bits)\n'.format('Seed:',self.parent_seed.sid.hl(),self.parent_seed.bitlen)
hdr += ' {} {c}-of-{c} (XOR){m}\n'.format('Split Type:',c=self.count,m=mfs1.format(midx,msid))
hdr += ' {} {}\n\n'.format('ID String:',self.id_str.hl())
hdr += fs1.format('Shares')
@ -361,8 +364,7 @@ class SeedShare(SubSeed):
nonce.to_bytes(2,'big',signed=False)
if parent_list.master_share:
scramble_key += b':master:' + parent_list.master_share.idx.to_bytes(2,'big',signed=False)
byte_len = seed.length // 8
return scramble_seed(seed.data,scramble_key)[:byte_len]
return scramble_seed(seed.data,scramble_key)[:seed.byte_len]
class SeedShareLast(SeedBase):
@ -383,7 +385,7 @@ class SeedShareLast(SeedBase):
for ss in seed_list:
ret ^= int(ss.data.hex(),16)
return ret.to_bytes(seed.length // 8,'big')
return ret.to_bytes(seed.byte_len,'big')
class SeedShareMaster(SeedBase):
@ -401,14 +403,12 @@ class SeedShareMaster(SeedBase):
seed = self.parent_list.parent_seed
# field maximums: idx: 65535 (1024)
scramble_key = b'master:' + self.idx.to_bytes(2,'big',signed=False)
byte_len = seed.length // 8
return scramble_seed(seed.data,scramble_key)[:byte_len]
return scramble_seed(seed.data,scramble_key)[:seed.byte_len]
def make_derived_seed_bin(self,id_str,count):
# field maximums: id_str: none (256 chars), count: 65535 (1024)
scramble_key = id_str.encode() + b':' + count.to_bytes(2,'big',signed=False)
byte_len = self.length // 8
return scramble_seed(self.data,scramble_key)[:byte_len]
return scramble_seed(self.data,scramble_key)[:self.byte_len]
class SeedShareMasterJoining(SeedShareMaster):
@ -501,7 +501,7 @@ class SeedSource(MMGenObject):
self._deformat_retry()
self._decrypt_retry()
m = ('',', seed length {}'.format(self.seed.length))[self.seed.length!=256]
m = ('',', seed length {}'.format(self.seed.bitlen))[self.seed.bitlen!=256]
qmsg('Valid {} for Seed ID {}{}'.format(self.desc,self.seed.sid.hl(),m))
def _get_data(self):
@ -608,7 +608,7 @@ class SeedSourceUnenc(SeedSource):
s = self.seed
return '{}[{}]{x}.{}'.format(
s.sid,
s.length,
s.bitlen,
self.ext,
x='' if g.debug_utf8 else '')
@ -860,7 +860,7 @@ class Mnemonic (SeedSourceUnenc):
self.seed = Seed(bytes.fromhex(hexseed))
self.ssdata.mnemonic = mn
check_usr_seed_len(self.seed.length)
check_usr_seed_len(self.seed.bitlen)
return True
@ -910,7 +910,7 @@ class SeedFile (SeedSourceUnenc):
self.ssdata.chksum = a
self.ssdata.b58seed = b
check_usr_seed_len(self.seed.length)
check_usr_seed_len(self.seed.bitlen)
return True
@ -958,7 +958,7 @@ class HexSeedFile(SeedSourceUnenc):
self.ssdata.chksum = chk
self.ssdata.hexseed = hstr
check_usr_seed_len(self.seed.length)
check_usr_seed_len(self.seed.bitlen)
return True
@ -1022,7 +1022,7 @@ class Wallet (SeedSourceEnc):
lines = (
d.label,
'{} {} {} {} {}'.format(s.sid.lower(), d.key_id.lower(),
s.length, d.pw_status, d.timestamp),
s.bitlen, d.pw_status, d.timestamp),
'{}: {} {} {}'.format(d.hash_preset,*get_hash_params(d.hash_preset)),
'{} {}'.format(make_chksum_6(slt_fmt),split_into_cols(4,slt_fmt)),
'{} {}'.format(make_chksum_6(es_fmt), split_into_cols(4,es_fmt))
@ -1118,7 +1118,7 @@ class Wallet (SeedSourceEnc):
return '{}-{}[{},{}]{x}.{}'.format(
s.sid,
d.key_id,
s.length,
s.bitlen,
d.hash_preset,
self.ext,
x='' if g.debug_utf8 else '')
@ -1233,7 +1233,7 @@ to exit and re-run the program with the '--old-incog-fmt' option.
d.wrapper_key = make_key(d.passwd, d.iv, d.hash_preset, 'incog wrapper key')
d.key_id = make_chksum_8(d.wrapper_key)
vmsg('Key ID: {}'.format(d.key_id))
d.target_data_len = self._get_incog_data_len(self.seed.length)
d.target_data_len = self._get_incog_data_len(self.seed.bitlen)
def _format(self):
d = self.ssdata
@ -1246,7 +1246,7 @@ to exit and re-run the program with the '--old-incog-fmt' option.
s.sid,
d.key_id,
d.iv_id,
s.length,
s.bitlen,
d.hash_preset,
self.ext,
x='' if g.debug_utf8 else '')

View file

@ -30,7 +30,7 @@ class unit_test(object):
assert subseed.sid == d, subseed.sid
subseed = seed.subseed_by_seed_id(e)
assert subseed.length == f, subseed.length
assert subseed.bitlen == f, subseed.bitlen
assert subseed.sid == e, subseed.sid
assert subseed.idx == 10, subseed.idx
assert subseed.ss_idx == h, subseed.ss_idx