From 410d75c1fa117b8bc7ba406253603851df9dacf7 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Mon, 24 Apr 2023 13:23:44 +0000 Subject: [PATCH] util: reimplement `make_chksum_N()` --- mmgen/util.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mmgen/util.py b/mmgen/util.py index daa64e1c..7cc8b2f2 100755 --- a/mmgen/util.py +++ b/mmgen/util.py @@ -251,15 +251,19 @@ def remove_extension(fn,ext): a,b = os.path.splitext(fn) return a if b[1:] == ext else fn -def make_chksum_N(s,nchars,sep=False): +def make_chksum_N(s,nchars,sep=False,rounds=2,upper=True): if isinstance(s,str): s = s.encode() - if nchars%4 or not (4 <= nchars <= 64): - return False from hashlib import sha256 - s = sha256(sha256(s).digest()).hexdigest().upper() - sep = ('',' ')[bool(sep)] - return sep.join([s[i*4:i*4+4] for i in range(nchars//4)]) + for i in range(rounds): + s = sha256(s).digest() + ret = s.hex()[:nchars] + if sep: + assert 4 <= nchars <= 64 and (not nchars % 4), 'illegal ‘nchars’ value' + ret = ' '.join([ret[i*4:i*4+4] for i in range(nchars//4)]) + else: + assert 4 <= nchars <= 64, 'illegal ‘nchars’ value' + return ret.upper() if upper else ret def make_chksum_8(s,sep=False): from .obj import HexStr