passgen: allow hex passwords of 32 and 48 characters
This commit is contained in:
parent
d7fe969d8c
commit
bfcfc8676d
5 changed files with 41 additions and 10 deletions
|
|
@ -804,11 +804,11 @@ Record this checksum: it will be used to verify the password file in the future
|
|||
ext = 'pws'
|
||||
pw_len = None
|
||||
dfl_pw_fmt = 'b58'
|
||||
pwinfo = namedtuple('passwd_info',['min_len','max_len','dfl_len','desc','chk_func'])
|
||||
pwinfo = namedtuple('passwd_info',['min_len','max_len','dfl_len','valid_lens','desc','chk_func'])
|
||||
pw_info = {
|
||||
'b32': pwinfo(10, 42 ,24, 'base32 password', is_b32_str),
|
||||
'b58': pwinfo(8, 36 ,20, 'base58 password', is_b58_str),
|
||||
'hex': pwinfo(64, 64 ,64, 'hexadecimal password', is_hex_str),
|
||||
'b32': pwinfo(10, 42 ,24, None, 'base32 password', is_b32_str),
|
||||
'b58': pwinfo(8, 36 ,20, None, 'base58 password', is_b58_str),
|
||||
'hex': pwinfo(32, 64 ,64, [32,48,64], 'hexadecimal password', is_hex_str),
|
||||
}
|
||||
chksum_rec_f = lambda foo,e: (str(e.idx), e.passwd)
|
||||
|
||||
|
|
@ -849,20 +849,22 @@ Record this checksum: it will be used to verify the password file in the future
|
|||
|
||||
def chk_pw_len(self,passwd=None):
|
||||
if passwd is None:
|
||||
assert self.pw_len
|
||||
assert self.pw_len,'either passwd or pw_len must be set'
|
||||
pw_len = self.pw_len
|
||||
fs = '{l}: invalid user-requested length for {b} ({c}{m})'
|
||||
else:
|
||||
pw_len = len(passwd)
|
||||
fs = '{pw}: {b} has invalid length {l} ({c}{m} characters)'
|
||||
d = self.pw_info[self.pw_fmt]
|
||||
if pw_len > d.max_len:
|
||||
if d.valid_lens:
|
||||
if pw_len not in d.valid_lens:
|
||||
die(2,fs.format(l=pw_len,b=d.desc,c='not one of ',m=d.valid_lens,pw=passwd))
|
||||
elif pw_len > d.max_len:
|
||||
die(2,fs.format(l=pw_len,b=d.desc,c='>',m=d.max_len,pw=passwd))
|
||||
elif pw_len < d.min_len:
|
||||
die(2,fs.format(l=pw_len,b=d.desc,c='<',m=d.min_len,pw=passwd))
|
||||
|
||||
def set_pw_len(self,pw_len):
|
||||
assert self.pw_fmt in self.pw_info
|
||||
d = self.pw_info[self.pw_fmt]
|
||||
|
||||
if pw_len is None:
|
||||
|
|
@ -877,9 +879,10 @@ Record this checksum: it will be used to verify the password file in the future
|
|||
def make_passwd(self,hex_sec):
|
||||
assert self.pw_fmt in self.pw_info
|
||||
if self.pw_fmt == 'hex':
|
||||
return hex_sec
|
||||
# take most significant part
|
||||
return hex_sec[:self.pw_len]
|
||||
else:
|
||||
# we take least significant part
|
||||
# take least significant part
|
||||
return baseconv.fromhex(hex_sec,self.pw_fmt,pad=self.pw_len,tostr=True)[-self.pw_len:]
|
||||
|
||||
def check_format(self,pw):
|
||||
|
|
|
|||
6
test/ref/98831F3A-фубар@crypto.org-hex-32[1,4,1100].pws
Normal file
6
test/ref/98831F3A-фубар@crypto.org-hex-32[1,4,1100].pws
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# checksum: 05C7 3678 E25E BC32
|
||||
98831F3A фубар@crypto.org hex:32 {
|
||||
1 c451cf480fa68cd7e8b59a58fc0f9885
|
||||
4 36cde0016fb0f23b1ff98cf02cda423c
|
||||
1100 b8bc8d233d26f1906140dbb5e5657878
|
||||
}
|
||||
6
test/ref/98831F3A-фубар@crypto.org-hex-48[1,4,1100].pws
Normal file
6
test/ref/98831F3A-фубар@crypto.org-hex-48[1,4,1100].pws
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# checksum: 7DBB FFD0 633E DE6F
|
||||
98831F3A фубар@crypto.org hex:48 {
|
||||
1 798200c9adabbd41f5343bc12879905524d1b1d3669e031e
|
||||
4 6276e7091ae77c3d90c6737f36a123097f1292b66369355d
|
||||
1100 8f1d67193feca57770fd21c26ab8129813f48619469df9fe
|
||||
}
|
||||
|
|
@ -45,6 +45,8 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared):
|
|||
'ref_passwdfile_b32_12': '98831F3A-фубар@crypto.org-b32-12[1,4,1100].pws',
|
||||
'ref_passwdfile_b58_10': '98831F3A-фубар@crypto.org-b58-10[1,4,1100].pws',
|
||||
'ref_passwdfile_b58_20': '98831F3A-фубар@crypto.org-b58-20[1,4,1100].pws',
|
||||
'ref_passwdfile_hex_32': '98831F3A-фубар@crypto.org-hex-32[1,4,1100].pws',
|
||||
'ref_passwdfile_hex_48': '98831F3A-фубар@crypto.org-hex-48[1,4,1100].pws',
|
||||
'ref_passwdfile_hex_64': '98831F3A-фубар@crypto.org-hex-64[1,4,1100].pws',
|
||||
'ref_tx_file': { # data shared with ref_altcoin, autosign
|
||||
'btc': ('0B8D5A[15.31789,14,tl=1320969600].rawtx',
|
||||
|
|
@ -85,6 +87,8 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared):
|
|||
'ref_passwdfile_b32_24_chksum': '8D56 3845 A072 A5B9',
|
||||
'ref_passwdfile_b58_10_chksum': '534F CC1A 6701 9FED',
|
||||
'ref_passwdfile_b58_20_chksum': 'DDD9 44B0 CA28 183F',
|
||||
'ref_passwdfile_hex_32_chksum': '05C7 3678 E25E BC32',
|
||||
'ref_passwdfile_hex_48_chksum': '7DBB FFD0 633E DE6F',
|
||||
'ref_passwdfile_hex_64_chksum': 'F11D CB0A 8AE3 4D21',
|
||||
}
|
||||
cmd_group = ( # TODO: move to tooltest2
|
||||
|
|
@ -103,6 +107,8 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared):
|
|||
('ref_passwdfile_chk_b58_10','saved reference password file (base58, 10 chars)'),
|
||||
('ref_passwdfile_chk_b32_24','saved reference password file (base32, 24 chars)'),
|
||||
('ref_passwdfile_chk_b32_12','saved reference password file (base32, 12 chars)'),
|
||||
('ref_passwdfile_chk_hex_32','saved reference password file (hexadecimal, 32 chars)'),
|
||||
('ref_passwdfile_chk_hex_48','saved reference password file (hexadecimal, 48 chars)'),
|
||||
('ref_passwdfile_chk_hex_64','saved reference password file (hexadecimal, 64 chars)'),
|
||||
|
||||
# Create the fake inputs:
|
||||
|
|
@ -224,6 +230,8 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared):
|
|||
def ref_passwdfile_chk_b58_10(self): return self.ref_passwdfile_chk(key='b58_10',pat='Base58.*len.* 10\n')
|
||||
def ref_passwdfile_chk_b32_24(self): return self.ref_passwdfile_chk(key='b32_24',pat='Base32.*len.* 24\n')
|
||||
def ref_passwdfile_chk_b32_12(self): return self.ref_passwdfile_chk(key='b32_12',pat='Base32.*len.* 12\n')
|
||||
def ref_passwdfile_chk_hex_32(self): return self.ref_passwdfile_chk(key='hex_32',pat='Hexadec.*len.* 32\n')
|
||||
def ref_passwdfile_chk_hex_48(self): return self.ref_passwdfile_chk(key='hex_48',pat='Hexadec.*len.* 48\n')
|
||||
def ref_passwdfile_chk_hex_64(self): return self.ref_passwdfile_chk(key='hex_64',pat='Hexadec.*len.* 64\n')
|
||||
|
||||
def ref_tx_chk(self):
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
|
|||
'refpasswdgen_half_1':'D310 2593 B5D9 2E88',
|
||||
'ref_b32passwdgen_1': '37B6 C218 2ABC 7508',
|
||||
'ref_hexpasswdgen_1': '523A F547 0E69 8323',
|
||||
'ref_hexpasswdgen_half_1': '8E99 E696 84CE E7D5',
|
||||
'refaddrgen_legacy_2': {
|
||||
'btc': ('8C17 A5FA 0470 6E89','764C 66F9 7502 AAEA'),
|
||||
'ltc': ('2B77 A009 D5D0 22AD','51D1 979D 0A35 F24B'),
|
||||
|
|
@ -112,6 +113,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
|
|||
'refpasswdgen_half_2':'12B3 4929 9506 76E0',
|
||||
'ref_b32passwdgen_2': '2A28 C5C7 36EC 217A',
|
||||
'ref_hexpasswdgen_2': 'B11C AC6A 1464 608D',
|
||||
'ref_hexpasswdgen_half_2': '59F3 8F48 861E 1186',
|
||||
'refaddrgen_legacy_3': {
|
||||
'btc': ('6FEF 6FB9 7B13 5D91','424E 4326 CFFE 5F51'),
|
||||
'ltc': ('AD52 C3FE 8924 AAF0','4EBE 2E85 E969 1B30'),
|
||||
|
|
@ -148,6 +150,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
|
|||
'refpasswdgen_half_3':'272C B770 0176 D7EA',
|
||||
'ref_b32passwdgen_3': 'F6C1 CDFB 97D9 FCAE',
|
||||
'ref_hexpasswdgen_3': 'BD4F A0AC 8628 4BE4',
|
||||
'ref_hexpasswdgen_half_3': 'FBDD F733 FFB9 21C1',
|
||||
}
|
||||
cmd_group = (
|
||||
# reading
|
||||
|
|
@ -177,7 +180,8 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
|
|||
('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)')),
|
||||
('ref_hexpasswdgen', (['mmdat',pwfile],'new refwallet passwd file chksum (base32)')),
|
||||
('ref_hexpasswdgen', (['mmdat',pwfile],'new refwallet passwd file chksum (hex)')),
|
||||
('ref_hexpasswdgen_half',(['mmdat',pwfile],'new refwallet passwd file chksum (hex, half-length)')),
|
||||
)
|
||||
|
||||
def __init__(self,trunner,cfgs,spawn):
|
||||
|
|
@ -330,3 +334,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
|
|||
def ref_hexpasswdgen(self,wf,pf):
|
||||
ea = ['--passwd-fmt=hex']
|
||||
return self.addrgen(wf,pf,check_ref=True,ftype='passhex',id_str='фубар@crypto.org',extra_args=ea)
|
||||
|
||||
def ref_hexpasswdgen_half(self,wf,pf):
|
||||
ea = ['--passwd-fmt=hex','--passwd-len=h']
|
||||
return self.addrgen(wf,pf,check_ref=True,ftype='passhex',id_str='фубар@crypto.org',extra_args=ea)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue