123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #!/usr/bin/env python3
- """
- test/unit_tests_d/ut_baseconv.py: Base conversion unit test for the MMGen suite
- """
- from mmgen.common import *
- from mmgen.exception import *
- class unit_test(object):
- vectors = {
- 'b58': (
- (('00',None),''),
- (('00',1),'1'),
- (('00',2),'11'),
- (('01',None),'2'),
- (('01',1),'2'),
- (('01',2),'12'),
- (('0f',None),'G'),
- (('0f',1),'G'),
- (('0f',2),'1G'),
- (('deadbeef',None),'6h8cQN'),
- (('deadbeef',20),'111111111111116h8cQN'),
- (('00000000',None),''),
- (('00000000',20),'11111111111111111111'),
- (('ffffffff',None),'7YXq9G'),
- (('ffffffff',20),'111111111111117YXq9G'),
- ),
- # MMGen-flavored base32 using simple base conversion
- 'b32': (
- (('00',None),''),
- (('00',1),'A'),
- (('00',2),'AA'),
- (('01',None),'B'),
- (('01',1),'B'),
- (('01',2),'AB'),
- (('0f',None),'P'),
- (('0f',1),'P'),
- (('0f',2),'AP'),
- (('deadbeef',None),'DPK3PXP'),
- (('deadbeef',20),'AAAAAAAAAAAAADPK3PXP'),
- (('00000000',None),''),
- (('00000000',20),'AAAAAAAAAAAAAAAAAAAA'),
- (('ffffffff',None),'D777777'),
- (('ffffffff',20),'AAAAAAAAAAAAAD777777'),
- ),
- 'b16': (
- (('00',None),''),
- (('00',1),'0'),
- (('00',2),'00'),
- (('01',None),'1'),
- (('01',1),'1'),
- (('01',2),'01'),
- (('0f',None),'f'),
- (('0f',1),'f'),
- (('0f',2),'0f'),
- (('deadbeef',None),'deadbeef'),
- (('deadbeef',20),'000000000000deadbeef'),
- (('00000000',None),''),
- (('00000000',20),'00000000000000000000'),
- (('ffffffff',None),'ffffffff'),
- (('ffffffff',20),'000000000000ffffffff'),
- ),
- 'b10': (
- (('00',None),''),
- (('00',1),'0'),
- (('00',2),'00'),
- (('01',None),'1'),
- (('01',1),'1'),
- (('01',2),'01'),
- (('0f',None),'15'),
- (('0f',1),'15'),
- (('0f',2),'15'),
- (('deadbeef',None),'3735928559'),
- (('deadbeef',20),'00000000003735928559'),
- (('00000000',None),''),
- (('00000000',20),'00000000000000000000'),
- (('ffffffff',None),'4294967295'),
- (('ffffffff',20),'00000000004294967295'),
- ),
- 'b8': (
- (('00',None),''),
- (('00',1),'0'),
- (('00',2),'00'),
- (('01',None),'1'),
- (('01',1),'1'),
- (('01',2),'01'),
- (('0f',None),'17'),
- (('0f',1),'17'),
- (('0f',2),'17'),
- (('deadbeef',None),'33653337357'),
- (('deadbeef',20),'00000000033653337357'),
- (('00000000',None),''),
- (('00000000',20),'00000000000000000000'),
- (('ffffffff',None),'37777777777'),
- (('ffffffff',20),'00000000037777777777'),
- ),
- }
- def run_test(self,name):
- msg_r('Testing base conversion routines...')
- from mmgen.util import baseconv
- perr = "length of {!r} less than pad length ({})"
- rerr = "return value ({!r}) does not match reference value ({!r})"
- qmsg_r('\nChecking hex-to-base conversion:')
- fs = " {h:10} {p:6} {r}"
- for base,data in self.vectors.items():
- if not opt.verbose: qmsg_r(' {}'.format(base))
- vmsg('\nBase: {}'.format(base))
- vmsg(fs.format(h='Input',p='Pad',r='Output'))
- for (hexstr,pad),ret_chk in data:
- ret = baseconv.fromhex(hexstr,wl_id=base,pad=pad,tostr=True)
- assert len(ret) >= (pad or 0), perr.format(ret,pad)
- assert ret == ret_chk, rerr.format(ret,ret_chk)
- vmsg(fs.format(h=hexstr,r=ret,p=str(pad)))
- # msg("(('{h}',{p}),'{r}'),".format(h=hexstr,r=ret,c=ret_chk,p=pad))
- # msg('')
- # return True
- qmsg_r('\nChecking base-to-hex conversion:')
- fs = " {h:24} {p:<6} {r}"
- for base,data in self.vectors.items():
- if not opt.verbose: qmsg_r(' {}'.format(base))
- vmsg('\nBase: {}'.format(base))
- vmsg(fs.format(h='Input',p='Pad',r='Output'))
- for (hexstr,pad),ret_chk in data:
- ret = baseconv.tohex(ret_chk,wl_id=base,pad=len(hexstr))
- assert ret == hexstr, rerr.format(ret,ret_chk)
- vmsg(fs.format(h=ret_chk,r=ret,p=len(hexstr)))
- # msg("(('{h}',{p}),'{r}'),".format(h=hexstr,r=ret_chk,c=ret_chk,p=pad))
- qmsg('')
- msg('OK')
- return True
|