From 41d2d17b51ade633749dcc1da4679d458af6b6c7 Mon Sep 17 00:00:00 2001 From: MMGen Date: Thu, 17 Oct 2019 11:42:13 +0000 Subject: [PATCH] test.py: split ref3 cmd group into ref3, ref3_addr --- test/test.py | 7 + test/test_py_d/ts_ref_3seed.py | 285 +++++++++++++++++---------------- 2 files changed, 156 insertions(+), 136 deletions(-) diff --git a/test/test.py b/test/test.py index 76c78f5a..844ce99a 100755 --- a/test/test.py +++ b/test/test.py @@ -323,12 +323,17 @@ cfgs = { # addr_idx_lists (except 31,32,33,34) must contain exactly 8 addresses }, '22': {}, '23': {}, + # 26,27,28 are taken '31': {}, '32': {}, '33': {}, '34': {}, } +for k in ('6','7','8'): + cfgs['2'+k] = {} + cfgs['2'+k].update(cfgs[k]) + for k in cfgs: cfgs[k]['tmpdir'] = os.path.join('test','tmp{}'.format(k)) cfgs[k]['segwit'] = randbool() if opt.segwit_random else bool(opt.segwit or opt.bech32) @@ -447,6 +452,7 @@ class CmdGroupMgr(object): 'main': ('TestSuiteMain',{'full_data':True}), 'conv': ('TestSuiteWalletConv',{'is3seed':True,'modname':'wallet'}), 'ref3': ('TestSuiteRef3Seed',{'is3seed':True,'modname':'ref_3seed'}), + 'ref3_addr': ('TestSuiteRef3Addr',{'is3seed':True,'modname':'ref_3seed'}), 'ref': ('TestSuiteRef',{}), 'ref_altcoin': ('TestSuiteRefAltcoin',{}), 'seedsplit': ('TestSuiteSeedSplit',{}), @@ -467,6 +473,7 @@ class CmdGroupMgr(object): 'conv', 'ref', 'ref3', + 'ref3_addr', 'ref_altcoin', 'tool', 'input', diff --git a/test/test_py_d/ts_ref_3seed.py b/test/test_py_d/ts_ref_3seed.py index 19c181d2..4c244ec1 100755 --- a/test/test_py_d/ts_ref_3seed.py +++ b/test/test_py_d/ts_ref_3seed.py @@ -37,6 +37,145 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared): tmpdir_nums = [6,7,8] addr_idx_list_in = '1010,500-501,31-33,1,33,500,1011' pass_idx_list_in = '1,4,9-11,1100' + chk_data = { + 'lens': (128, 192, 256), + 'sids': ('FE3C6545', '1378FC64', '98831F3A'), + } + cmd_group = ( + # reading + ('ref_wallet_chk', ([],'saved reference wallet')), + ('ref_seed_chk', ([],'saved seed file')), + ('ref_hex_chk', ([],'saved mmhex file')), + ('ref_mn_chk', ([],'saved native MMGen mnemonic file')), + ('ref_bip39_chk', ([],'saved BIP39 mnemonic file')), + ('ref_hincog_chk', ([],'saved hidden incog reference wallet')), + ('ref_brain_chk', ([],'saved brainwallet')), # in ts_shared + # generating new reference ('abc' brainwallet) files: + ('ref_walletgen_brain', ([],'generating new reference wallet + filename check (brain)')), + ('ref_walletconv_words', (['mmdat',pwfile],'wallet filename (native mnemonic)')), + ('ref_walletconv_bip39', (['mmdat',pwfile],'wallet filename (bip39)')), + ('ref_walletconv_seed', (['mmdat',pwfile],'wallet filename (seed)')), + ('ref_walletconv_hexseed',(['mmdat',pwfile],'wallet filename (hex seed)')), + ('ref_walletconv_incog', (['mmdat',pwfile],'wallet filename (incog)')), + ('ref_walletconv_xincog', (['mmdat',pwfile],'wallet filename (hex incog)')), + ) + + def __init__(self,trunner,cfgs,spawn): + for k,j in self.cmd_group: + for n in (1,2,3): # 128,192,256 bits + setattr(self,'{}_{}'.format(k,n),getattr(self,k)) + if cfgs: + for n in self.tmpdir_nums: + cfgs[str(n)]['addr_idx_list'] = self.addr_idx_list_in + cfgs[str(n)]['pass_idx_list'] = self.pass_idx_list_in + return TestSuiteBase.__init__(self,trunner,cfgs,spawn) + + def ref_wallet_chk(self): + wf = joinpath(ref_dir,TestSuiteWalletConv.sources[str(self.seed_len)]['ref_wallet']) + return self.walletchk(wf,pf=None,pw=True,sid=self.seed_id) + + def ref_ss_chk(self,ss=None): + wf = joinpath(ref_dir,'{}.{}'.format(self.seed_id,ss.ext)) + return self.walletchk(wf,pf=None,desc=ss.desc,sid=self.seed_id) + + def ref_seed_chk(self): + from mmgen.seed import SeedFile + return self.ref_ss_chk(ss=SeedFile) + + def ref_hex_chk(self): + from mmgen.seed import HexSeedFile + return self.ref_ss_chk(ss=HexSeedFile) + + def ref_mn_chk(self): + from mmgen.seed import MMGenMnemonic + return self.ref_ss_chk(ss=MMGenMnemonic) + + def ref_bip39_chk(self): + from mmgen.seed import BIP39Mnemonic + return self.ref_ss_chk(ss=BIP39Mnemonic) + + def ref_hincog_chk(self,desc='hidden incognito data'): + source = TestSuiteWalletConv.sources[str(self.seed_len)] + for wtype,edesc,of_arg in ('hic_wallet','',[]), \ + ('hic_wallet_old','(old format)',['-O']): + ic_arg = ['-H{},{}'.format(joinpath(ref_dir,source[wtype]),ref_wallet_incog_offset)] + slarg = ['-l{} '.format(self.seed_len)] + hparg = ['-p1'] + if wtype == 'hic_wallet_old' and opt.profile: msg('') + t = self.spawn('mmgen-walletchk', + slarg + hparg + of_arg + ic_arg, + extra_desc=edesc) + t.passphrase(desc,self.wpasswd) + if wtype == 'hic_wallet_old': + t.expect('Is the Seed ID correct? (Y/n): ','\n') + chk = t.expect_getend('Seed ID: ') + t.close() + cmp_or_die(self.seed_id,chk) + ok_msg() + t.skip_ok = True + return t + + def ref_walletgen_brain(self): + sl_arg = '-l{}'.format(self.seed_len) + hp_arg = '-p{}'.format(ref_wallet_hash_preset) + label = "test.py ref. wallet (pw '{}', seed len {}) α".format(ref_wallet_brainpass,self.seed_len) + bf = 'ref.mmbrain' + args = ['-d',self.tmpdir,hp_arg,sl_arg,'-ib','-L',label] + self.write_to_tmpfile(bf,ref_wallet_brainpass) + self.write_to_tmpfile(pwfile,self.wpasswd) + t = self.spawn('mmgen-walletconv', args + [self.usr_rand_arg]) + t.license() + t.expect('Enter brainwallet: ', ref_wallet_brainpass+'\n') + t.passphrase_new('new MMGen wallet',self.wpasswd) + t.usr_rand(self.usr_rand_chars) + fn = os.path.split(t.written_to_file('MMGen wallet'))[-1] + import re + idx = int(self.test_name[-1]) - 1 + pat = r'{}-[0-9A-F]{{8}}\[{},1\].mmdat'.format( + self.chk_data['sids'][idx], + self.chk_data['lens'][idx] ) + assert re.match(pat,fn) + sid = os.path.basename(fn.split('-')[0]) + cmp_or_die(sid,self.seed_id,desc='Seed ID') + return t + + def ref_walletconv(self,fn,pf,ofmt,desc,ext,extra_args=[],re_pat=None): + t = self.spawn('mmgen-walletconv',extra_args+['-d','test/trash','-o',ofmt,'-P'+pf,fn]) + fn = os.path.split(t.written_to_file(desc))[-1] + idx = int(self.test_name[-1]) - 1 + sid = self.chk_data['sids'][idx] + slen = self.chk_data['lens'][idx] + if re_pat: + import re + assert re.match(re_pat.format(sid,slen),fn) + else: + cmp_or_die('{}[{}].{}'.format(sid,slen,ext),fn) + return t + + def ref_walletconv_words(self,fn,pf): + return self.ref_walletconv(fn,pf,ofmt='mn',desc='MMGen native mnemonic data',ext='mmwords') + + def ref_walletconv_bip39(self,fn,pf): + return self.ref_walletconv(fn,pf,ofmt='bip39',desc='BIP39 mnemonic data',ext='bip39') + + def ref_walletconv_seed(self,fn,pf): + return self.ref_walletconv(fn,pf,ofmt='mmseed',desc='Seed data',ext='mmseed') + + def ref_walletconv_hexseed(self,fn,pf): + return self.ref_walletconv(fn,pf,ofmt='mmhex',desc='Hexadecimal seed data',ext='mmhex') + + def ref_walletconv_incog(self,fn,pf,desc='Incognito data',ofmt='incog',ext='mmincog'): + args = ['-r0','-p1'] + pat = r'{}-[0-9A-F]{{8}}-[0-9A-F]{{8}}\[{},1\].' + ext + return self.ref_walletconv(fn,pf,ofmt=ofmt,desc=desc,ext=ext,extra_args=args,re_pat=pat) + + def ref_walletconv_xincog(self,fn,pf): + return self.ref_walletconv_incog(fn,pf,desc='Hex incognito data',ofmt='incog_hex',ext='mmincox') + +class TestSuiteRef3Addr(TestSuiteRef3Seed): + 'generated reference address, key and passwd files for 128-, 192- and 256-bit seeds' + tmpdir_nums = [26,27,28] + chk_data = { 'lens': (128, 192, 256), 'sids': ('FE3C6545', '1378FC64', '98831F3A'), @@ -164,31 +303,9 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared): 'ref_bip39_24_passwdgen_3': 'EBE8 2A8F 8F8C 7DBD', 'ref_hex2bip39_24_passwdgen_3': '93FA 5EFD 33F3 760E', } + cmd_group = ( - # reading - ('ref_wallet_chk', ([],'saved reference wallet')), - ('ref_seed_chk', ([],'saved seed file')), - ('ref_hex_chk', ([],'saved mmhex file')), - ('ref_mn_chk', ([],'saved native MMGen mnemonic file')), - ('ref_bip39_chk', ([],'saved BIP39 mnemonic file')), - ('ref_hincog_chk', ([],'saved hidden incog reference wallet')), - ('ref_brain_chk', ([],'saved brainwallet')), # in ts_shared - # generating new reference ('abc' brainwallet) files: - ('ref_walletgen_brain', ([],'generating new reference wallet + filename check (brain)')), - ('ref_walletconv_words', (['mmdat',pwfile],'wallet filename (native mnemonic)')), - ('ref_walletconv_bip39', (['mmdat',pwfile],'wallet filename (bip39)')), - ('ref_walletconv_seed', (['mmdat',pwfile],'wallet filename (seed)')), - ('ref_walletconv_hexseed',(['mmdat',pwfile],'wallet filename (hex seed)')), - ('ref_walletconv_incog', (['mmdat',pwfile],'wallet filename (incog)')), - ('ref_walletconv_xincog', (['mmdat',pwfile],'wallet filename (hex incog)')), - ('refaddrgen_legacy', (['mmdat',pwfile],'new refwallet addr chksum (uncompressed)')), - ('refaddrgen_compressed', (['mmdat',pwfile],'new refwallet addr chksum (compressed)')), - ('refaddrgen_segwit', (['mmdat',pwfile],'new refwallet addr chksum (segwit)')), - ('refaddrgen_bech32', (['mmdat',pwfile],'new refwallet addr chksum (bech32)')), - ('refkeyaddrgen_legacy', (['mmdat',pwfile],'new refwallet key-addr chksum (uncompressed)')), - ('refkeyaddrgen_compressed', (['mmdat',pwfile],'new refwallet key-addr chksum (compressed)')), - ('refkeyaddrgen_segwit', (['mmdat',pwfile],'new refwallet key-addr chksum (segwit)')), - ('refkeyaddrgen_bech32', (['mmdat',pwfile],'new refwallet key-addr chksum (bech32)')), + ('ref_walletgen_brain', ([],'generating new reference wallet + filename check (brain)')), ('refpasswdgen', (['mmdat',pwfile],'new refwallet passwd file chksum')), ('refpasswdgen_half', (['mmdat',pwfile],'new refwallet passwd file chksum (half-length)')), ('ref_b32passwdgen', (['mmdat',pwfile],'new refwallet passwd file chksum (base32)')), @@ -198,120 +315,16 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared): ('ref_bip39_18_passwdgen',(['mmdat',pwfile],'new refwallet passwd file chksum (BIP39, up to 18 words)')), ('ref_bip39_24_passwdgen',(['mmdat',pwfile],'new refwallet passwd file chksum (BIP39, up to 24 words)')), ('ref_hex2bip39_24_passwdgen',(['mmdat',pwfile],'new refwallet passwd file chksum (hex-to-BIP39, up to 24 words)')), + ('refaddrgen_legacy', (['mmdat',pwfile],'new refwallet addr chksum (uncompressed)')), + ('refaddrgen_compressed', (['mmdat',pwfile],'new refwallet addr chksum (compressed)')), + ('refaddrgen_segwit', (['mmdat',pwfile],'new refwallet addr chksum (segwit)')), + ('refaddrgen_bech32', (['mmdat',pwfile],'new refwallet addr chksum (bech32)')), + ('refkeyaddrgen_legacy', (['mmdat',pwfile],'new refwallet key-addr chksum (uncompressed)')), + ('refkeyaddrgen_compressed', (['mmdat',pwfile],'new refwallet key-addr chksum (compressed)')), + ('refkeyaddrgen_segwit', (['mmdat',pwfile],'new refwallet key-addr chksum (segwit)')), + ('refkeyaddrgen_bech32', (['mmdat',pwfile],'new refwallet key-addr chksum (bech32)')), ) - def __init__(self,trunner,cfgs,spawn): - for k,j in self.cmd_group: - for n in (1,2,3): # 128,192,256 bits - setattr(self,'{}_{}'.format(k,n),getattr(self,k)) - if cfgs: - for n in self.tmpdir_nums: - cfgs[str(n)]['addr_idx_list'] = self.addr_idx_list_in - cfgs[str(n)]['pass_idx_list'] = self.pass_idx_list_in - return TestSuiteBase.__init__(self,trunner,cfgs,spawn) - - def ref_wallet_chk(self): - wf = joinpath(ref_dir,TestSuiteWalletConv.sources[str(self.seed_len)]['ref_wallet']) - return self.walletchk(wf,pf=None,pw=True,sid=self.seed_id) - - def ref_ss_chk(self,ss=None): - wf = joinpath(ref_dir,'{}.{}'.format(self.seed_id,ss.ext)) - return self.walletchk(wf,pf=None,desc=ss.desc,sid=self.seed_id) - - def ref_seed_chk(self): - from mmgen.seed import SeedFile - return self.ref_ss_chk(ss=SeedFile) - - def ref_hex_chk(self): - from mmgen.seed import HexSeedFile - return self.ref_ss_chk(ss=HexSeedFile) - - def ref_mn_chk(self): - from mmgen.seed import MMGenMnemonic - return self.ref_ss_chk(ss=MMGenMnemonic) - - def ref_bip39_chk(self): - from mmgen.seed import BIP39Mnemonic - return self.ref_ss_chk(ss=BIP39Mnemonic) - - def ref_hincog_chk(self,desc='hidden incognito data'): - source = TestSuiteWalletConv.sources[str(self.seed_len)] - for wtype,edesc,of_arg in ('hic_wallet','',[]), \ - ('hic_wallet_old','(old format)',['-O']): - ic_arg = ['-H{},{}'.format(joinpath(ref_dir,source[wtype]),ref_wallet_incog_offset)] - slarg = ['-l{} '.format(self.seed_len)] - hparg = ['-p1'] - if wtype == 'hic_wallet_old' and opt.profile: msg('') - t = self.spawn('mmgen-walletchk', - slarg + hparg + of_arg + ic_arg, - extra_desc=edesc) - t.passphrase(desc,self.wpasswd) - if wtype == 'hic_wallet_old': - t.expect('Is the Seed ID correct? (Y/n): ','\n') - chk = t.expect_getend('Seed ID: ') - t.close() - cmp_or_die(self.seed_id,chk) - ok_msg() - t.skip_ok = True - return t - - def ref_walletgen_brain(self): - sl_arg = '-l{}'.format(self.seed_len) - hp_arg = '-p{}'.format(ref_wallet_hash_preset) - label = "test.py ref. wallet (pw '{}', seed len {}) α".format(ref_wallet_brainpass,self.seed_len) - bf = 'ref.mmbrain' - args = ['-d',self.tmpdir,hp_arg,sl_arg,'-ib','-L',label] - self.write_to_tmpfile(bf,ref_wallet_brainpass) - self.write_to_tmpfile(pwfile,self.wpasswd) - t = self.spawn('mmgen-walletconv', args + [self.usr_rand_arg]) - t.license() - t.expect('Enter brainwallet: ', ref_wallet_brainpass+'\n') - t.passphrase_new('new MMGen wallet',self.wpasswd) - t.usr_rand(self.usr_rand_chars) - fn = os.path.split(t.written_to_file('MMGen wallet'))[-1] - import re - idx = int(self.test_name[-1]) - 1 - pat = r'{}-[0-9A-F]{{8}}\[{},1\].mmdat'.format( - self.chk_data['sids'][idx], - self.chk_data['lens'][idx] ) - assert re.match(pat,fn) - sid = os.path.basename(fn.split('-')[0]) - cmp_or_die(sid,self.seed_id,desc='Seed ID') - return t - - def ref_walletconv(self,fn,pf,ofmt,desc,ext,extra_args=[],re_pat=None): - t = self.spawn('mmgen-walletconv',extra_args+['-d','test/trash','-o',ofmt,'-P'+pf,fn]) - fn = os.path.split(t.written_to_file(desc))[-1] - idx = int(self.test_name[-1]) - 1 - sid = self.chk_data['sids'][idx] - slen = self.chk_data['lens'][idx] - if re_pat: - import re - assert re.match(re_pat.format(sid,slen),fn) - else: - cmp_or_die('{}[{}].{}'.format(sid,slen,ext),fn) - return t - - def ref_walletconv_words(self,fn,pf): - return self.ref_walletconv(fn,pf,ofmt='mn',desc='MMGen native mnemonic data',ext='mmwords') - - def ref_walletconv_bip39(self,fn,pf): - return self.ref_walletconv(fn,pf,ofmt='bip39',desc='BIP39 mnemonic data',ext='bip39') - - def ref_walletconv_seed(self,fn,pf): - return self.ref_walletconv(fn,pf,ofmt='mmseed',desc='Seed data',ext='mmseed') - - def ref_walletconv_hexseed(self,fn,pf): - return self.ref_walletconv(fn,pf,ofmt='mmhex',desc='Hexadecimal seed data',ext='mmhex') - - def ref_walletconv_incog(self,fn,pf,desc='Incognito data',ofmt='incog',ext='mmincog'): - args = ['-r0','-p1'] - pat = r'{}-[0-9A-F]{{8}}-[0-9A-F]{{8}}\[{},1\].' + ext - return self.ref_walletconv(fn,pf,ofmt=ofmt,desc=desc,ext=ext,extra_args=args,re_pat=pat) - - def ref_walletconv_xincog(self,fn,pf): - return self.ref_walletconv_incog(fn,pf,desc='Hex incognito data',ofmt='incog_hex',ext='mmincox') - def refaddrgen_legacy(self,wf,pf): return self.addrgen(wf,pf=pf,check_ref=True,mmtype='legacy')