From c7dbdfe756d68c795aea8ae4a569b1fd714b1fbb Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Tue, 9 Jun 2020 09:20:17 +0000 Subject: [PATCH] rewrite tool API test --- test/misc/tool_api_test.py | 100 ++++++++++++++++++++++++------------- test/test_py_d/ts_tool.py | 2 +- 2 files changed, 66 insertions(+), 36 deletions(-) diff --git a/test/misc/tool_api_test.py b/test/misc/tool_api_test.py index 3b5d9486..9069dda7 100755 --- a/test/misc/tool_api_test.py +++ b/test/misc/tool_api_test.py @@ -10,6 +10,12 @@ tool_api_test.py: test the MMGen suite tool API import sys,os os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(os.path.dirname(sys.argv[0]))))) sys.path[0] = os.curdir +from mmgen.obj import PrivKey,CoinAddr + +keys = [ + '118089d66b4a5853765e94923abdd5de4616c6e5118089d66b4a5853765e9492', + 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef', + ] def check_equal(a,b): assert a == b, f'{a} != {b}' @@ -17,15 +23,45 @@ def check_equal(a,b): def msg(*args,**kwargs): print(*args,**kwargs,file=sys.stdout) -def init_coin(t,coinsym,network,addrtype,triplet): +def init_coin(t,coinsym,network,addrtype): t.init_coin(coinsym,network) t.addrtype = addrtype check_equal(type(t.addrtype).__name__,'MMGenAddrType') - check_equal(f'{t.coin} {t.proto.cls_name} {t.addrtype}', triplet) - msg('\ncoin/proto/type:',triplet) + msg(f'\n{t.coin} {t.proto.network.capitalize()} {t.addrtype.name.upper()} ({t.addrtype})') + +def test_randpair(t): + wif,addr = t.randpair() + wif_chk = PrivKey(proto=t.proto,wif=wif).wif + check_equal(wif,wif_chk) + msg('\n === randwif ===') + msg(' wif:',wif) + msg(' addr:',CoinAddr(proto=t.proto,addr=addr)) + +def test_wif2addr(t,wif_chk,addr_chk,key_idx): + key_bytes = bytes.fromhex(keys[key_idx]) + wif = PrivKey( + proto = t.proto, + s = key_bytes, + compressed = t.addrtype.compressed, + pubkey_type = t.addrtype.pubkey_type ).wif + addr = t.wif2addr(wif) + + msg('\n === wif2addr ===') + msg(' wif:',PrivKey(proto=t.proto,wif=wif).wif) + msg(' addr:',CoinAddr(proto=t.proto,addr=addr)) + + addr_ph = t.privhex2addr(key_bytes.hex()) + + check_equal(addr,addr_ph) + check_equal(wif,wif_chk) + check_equal(addr,addr_chk) + +def test_triplet(tool,coin,network,addrtype,key_idx,wif_chk,addr_chk): + init_coin(tool,coin,network,addrtype) + test_randpair(tool) + test_wif2addr(tool,wif_chk,addr_chk,key_idx) def run_test(): - key_bytes = bytes.fromhex('deadbeef' * 8) from mmgen.tool import tool_api tool = tool_api() @@ -33,50 +69,44 @@ def run_test(): tool.coins tool.print_addrtypes() - check_equal(f'{tool.coin} {tool.proto.cls_name} {tool.addrtype}', 'BTC Bitcoin L' ) - tool.usr_randchars # getter tool.usr_randchars = 0 # setter check_equal(tool.usr_randchars,0) - init_coin(tool,'xmr','mainnet','M','XMR Monero M') - msg('\n'.join(tool.randpair())) + check_equal(f'{tool.coin} {tool.proto.cls_name} {tool.addrtype}', 'BTC Bitcoin L' ) - init_coin(tool,'etc','mainnet','E','ETC EthereumClassic E') - msg('\n'.join(tool.randpair())) + # test vectors from tooltest2.py: - init_coin(tool,'ltc','regtest','bech32','LTC LitecoinRegtest B') + test_triplet(tool,'btc','mainnet','L',0, + '5HwzecKMWD82ppJK3qMKpC7ohXXAwcyAN5VgdJ9PLFaAzpBG4sX', + '1C5VPtgq9xQ6AcTgMAR3J6GDrs72HC4pS1' ) - wif,addr = tool.randpair() - from mmgen.obj import PrivKey,CoinAddr - msg('wif:',PrivKey(proto=tool.proto,wif=wif).wif) - msg('addr:',CoinAddr(proto=tool.proto,addr=addr)) + test_triplet(tool,'btc','mainnet','C',0, + 'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm', + '1Kz9fVSUMshzPejpzW9D95kScgA3rY6QxF' ) - wif = PrivKey(proto=tool.proto,s=key_bytes,compressed=True,pubkey_type='std').wif - addr = tool.wif2addr(wif) - msg('wif:',PrivKey(proto=tool.proto,wif=wif).wif) - msg('addr:',CoinAddr(proto=tool.proto,addr=addr)) + test_triplet(tool,'btc','mainnet','segwit',0, + 'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm', + '3AhjTiWHhVJAi1s5CfKMcLzYps12x3gZhg' ) - addr_chk = tool.privhex2addr(key_bytes.hex()) + test_triplet(tool,'btc','mainnet','B',0, + 'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm', + 'bc1q6pqnfwwakuuejpm9w52ds342f9d5u36v0qnz7c' ) - check_equal(addr,addr_chk) - check_equal(wif,'cV3ZRqf8PhyfiFwtJfkvGu2qmBsazE1wXoA2A16S3nixb3BTvvVx') - check_equal(addr,'rltc1qvmqas4maw7lg9clqu6kqu9zq9cluvllnz4kj9y') + test_triplet(tool,'ltc','regtest','bech32',1, + 'cV3ZRqf8PhyfiFwtJfkvGu2qmBsazE1wXoA2A16S3nixb3BTvvVx', + 'rltc1qvmqas4maw7lg9clqu6kqu9zq9cluvllnz4kj9y' ) - init_coin(tool,'zec','mainnet','Z','ZEC Zcash Z') + test_triplet(tool,'xmr','mainnet','M',1, + 'e8164dda6d42bd1e261a3406b2038dcbddadbeefdeadbeefdeadbeefdeadbe0f', + '41i7saPWA53EoHenmJVRt34dubPxsXwoWMnw8AdMyx4mTD1svf7qYzcVjxxRfteLNdYrAxWUMmiPegFW9EfoNgXx7vDMExv' ), - wif = PrivKey(proto=tool.proto,s=key_bytes,compressed=True,pubkey_type='zcash_z').wif - addr = tool.wif2addr(wif) - msg('wif:',wif) - msg('addr:',CoinAddr(proto=tool.proto,addr=addr)) + test_triplet(tool,'etc','mainnet','E',1, + 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef', + 'c96aaa54e2d44c299564da76e1cd3184a2386b8d' ), - addr_chk = tool.privhex2addr(key_bytes.hex()) - wif_chk = PrivKey(proto=tool.proto,wif=wif).wif - - check_equal(addr,addr_chk) - check_equal(wif,wif_chk) - check_equal( - addr, + test_triplet(tool,'zec','mainnet','Z',1, + 'SKxuS56e99jpCeD9mMQ5o63zoGPakNdM9HCvt4Vt2cypvRjCdvGJ', 'zchFELwBxqsAubsLQ8yZgPCDDGukjXJssgCbiTPwFNmFwn9haLnDatzfhLdZzJT4PcU4o2yr92B52UFirUzEdF6ZYM2gBkM' ) run_test() diff --git a/test/test_py_d/ts_tool.py b/test/test_py_d/ts_tool.py index f392b8ec..b897f3e1 100755 --- a/test/test_py_d/ts_tool.py +++ b/test/test_py_d/ts_tool.py @@ -26,7 +26,7 @@ class TestSuiteTool(TestSuiteMain,TestSuiteBase): ('tool_encrypt', (9,"'mmgen-tool encrypt' (random data)", [])), ('tool_decrypt', (9,"'mmgen-tool decrypt' (random data)", [[[enc_infn+'.mmenc'],9]])), ('tool_twview_bad_comment',(9,"'mmgen-tool twview' (with bad comment)", [])), - ('tool_api', (9,'tool API (initialization, config methods)',[])), + ('tool_api', (9,'tool API (initialization, config methods, wif2addr)',[])), # ('tool_encrypt_ref', (9,"'mmgen-tool encrypt' (reference text)", [])), )