123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #!/usr/bin/env python3
- """
- test.unit_tests_d.ut_gen: key/address generation unit tests for the MMGen suite
- """
- from mmgen.color import blue
- from mmgen.protocol import init_proto
- from mmgen.key import PrivKey
- from mmgen.addr import MMGenAddrType
- from mmgen.addrgen import KeyGenerator,AddrGenerator
- from mmgen.keygen import get_backends
- from ..include.common import cfg,qmsg
- # TODO: add viewkey checks
- vectors = { # from tooltest2
- 'btc': ( (
- '5HwzecKMWD82ppJK3qMKpC7ohXXAwcyAN5VgdJ9PLFaAzpBG4sX',
- '1C5VPtgq9xQ6AcTgMAR3J6GDrs72HC4pS1',
- 'legacy'
- ), (
- 'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
- '1Kz9fVSUMshzPejpzW9D95kScgA3rY6QxF',
- 'compressed'
- ), (
- 'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
- '3AhjTiWHhVJAi1s5CfKMcLzYps12x3gZhg',
- 'segwit'
- ), (
- 'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
- 'bc1q6pqnfwwakuuejpm9w52ds342f9d5u36v0qnz7c',
- 'bech32' ),
- ),
- 'eth': ( (
- '0000000000000000000000000000000000000000000000000000000000000001',
- '7e5f4552091a69125d5dfcb7b8c2659029395bdf',
- 'ethereum',
- ), ),
- 'xmr': ( (
- '0000000000000000000000000000000000000000000000000000000000000001',
- '42nsXK8WbVGTNayQ6Kjw5UdgqbQY5KCCufdxdCgF7NgTfjC69Mna7DJSYyie77hZTQ8H92G2HwgFhgEUYnDzrnLnQdF28r3',
- 'monero',
- ), ),
- 'zec': ( (
- 'SKxny894fJe2rmZjeuoE6GVfNkWoXfPp8337VrLLNWG56FjqVUYR',
- 'zceQDpyNwek7dKqF5ZuFGj7YrNVxh7X1aPkrVxDLVxWSiZAFDEuy5C7XNV8VhyZ3ghTPQ61xjCGiyLT3wqpiN1Yi6mdmaCq',
- 'zcash_z',
- ), ),
- }
- def do_test(proto,wif,addr_chk,addr_type,internal_keccak):
- if internal_keccak:
- cfg.use_internal_keccak_module = True
- add_msg = ' (internal keccak module)'
- else:
- add_msg = ''
- at = MMGenAddrType(proto,addr_type)
- privkey = PrivKey(proto,wif=wif)
- for n,backend in enumerate(get_backends(at.pubkey_type)):
- kg = KeyGenerator( cfg, proto, at.pubkey_type, n+1 )
- qmsg(blue(f' Testing backend {backend!r} for addr type {addr_type!r}{add_msg}'))
- data = kg.gen_data(privkey)
- for k,v in data._asdict().items():
- if v and k in ('pubkey','viewkey_bytes'):
- qmsg(f' {k+":":19} {v.hex()}')
- ag = AddrGenerator( cfg, proto, addr_type )
- addr = ag.to_addr(data)
- qmsg(f' addr: {addr}\n')
- assert addr == addr_chk, f'{addr} != {addr_chk}'
- cfg.use_internal_keccak_module = False
- def do_tests(coin,internal_keccak=False):
- proto = init_proto( cfg, coin )
- for wif,addr,addr_type in vectors[coin]:
- do_test(proto,wif,addr,addr_type,internal_keccak)
- return True
- class unit_tests:
- altcoin_deps = ('eth','xmr','zec')
- def btc(self,name,ut):
- return do_tests('btc')
- def eth(self,name,ut):
- do_tests('eth')
- return do_tests('eth',internal_keccak=True)
- def xmr(self,name,ut):
- if not cfg.fast:
- do_tests('xmr')
- return do_tests('xmr',internal_keccak=True)
- def zec(self,name,ut):
- return do_tests('zec')
|