lazy imports of hashlib, string

This commit is contained in:
The MMGen Project 2022-01-27 11:08:07 +00:00
commit bb96d6223f
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
5 changed files with 18 additions and 6 deletions

View file

@ -20,7 +20,6 @@
baseconv.py: base conversion class for the MMGen suite
"""
from hashlib import sha256
from collections import namedtuple
from .exception import BaseConversionError,BaseConversionPadError,HexadecimalStringError,SeedLengthError
@ -92,6 +91,7 @@ class baseconv(object):
return self.digits
def get_wordlist_chksum(self):
from hashlib import sha256
return sha256( ' '.join(self.digits).encode() ).hexdigest()[:8]
def check_wordlist(self):

View file

@ -24,7 +24,7 @@ cfg.py: API for the MMGen runtime configuration file and related files
# override_from_env() during init, so global config vars that are set from the environment
# (such as g.test_suite) cannot be used here.
import sys,os,re,hashlib
import sys,os,re
from collections import namedtuple
from .globalvars import *
@ -111,6 +111,7 @@ class CfgFileSample(CfgFile):
@staticmethod
def compute_chksum(data):
import hashlib
return hashlib.new('ripemd160','\n'.join(data).encode()).hexdigest()
@property

View file

@ -21,7 +21,6 @@ crypto.py: Random number, password hashing and symmetric encryption routines for
"""
import os
from hashlib import sha256
from collections import namedtuple
from .globalvars import g
@ -70,6 +69,7 @@ def get_hash_params(hash_preset):
die(3,f"{hash_preset}: invalid 'hash_preset' value")
def sha256_rounds(s,n):
from hashlib import sha256
for i in range(n):
s = sha256(s).digest()
return s
@ -251,6 +251,7 @@ def add_user_random(rand_bytes,desc):
assert type(rand_bytes) == bytes, 'add_user_random_chk1'
if opt.usr_randchars:
if not g.user_entropy:
from hashlib import sha256
g.user_entropy = sha256(_get_random_data_from_user(opt.usr_randchars,desc)).digest()
urand_desc = 'user-supplied entropy'
else:
@ -341,6 +342,7 @@ def mmgen_encrypt(data,desc='data',hash_preset=None):
hash_preset = hp,
passwd_file = opt.passwd_file )
key = make_key(passwd,salt,hp)
from hashlib import sha256
enc_d = encrypt_data( sha256(nonce+data).digest() + nonce + data, key, iv, desc=desc )
return salt+iv+enc_d
@ -359,6 +361,7 @@ def mmgen_decrypt(data,desc='data',hash_preset=None):
key = make_key(passwd,salt,hp)
dec_d = decrypt_data( enc_d, key, iv, desc )
sha256_len = 32
from hashlib import sha256
if dec_d[:sha256_len] == sha256(dec_d[sha256_len:]).digest():
vmsg('OK')
return dec_d[sha256_len+mmenc_nonce_len:]

View file

@ -21,8 +21,6 @@ util.py: Low-level routines imported by other modules in the MMGen suite
"""
import sys,os,time,re
from hashlib import sha256
from string import hexdigits,digits
from .color import *
from .globalvars import g
@ -276,7 +274,6 @@ def int2bytespec(n,spec,fmt,print_sym=True):
return '{:{}f}{}'.format( n / spec2int(spec), fmt, spec if print_sym else '' )
def parse_bytespec(nbytes):
import re
m = re.match(r'([0123456789.]+)(.*)',nbytes)
if m:
if m.group(2):
@ -331,16 +328,20 @@ def make_chksum_N(s,nchars,sep=False):
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)])
def make_chksum_8(s,sep=False):
from .obj import HexStr
from hashlib import sha256
s = HexStr(sha256(sha256(s).digest()).hexdigest()[:8].upper(),case='upper')
return '{} {}'.format(s[:4],s[4:]) if sep else s
def make_chksum_6(s):
from .obj import HexStr
from hashlib import sha256
if isinstance(s,str):
s = s.encode()
return HexStr(sha256(s).hexdigest()[:6])
@ -349,6 +350,7 @@ def is_chksum_6(s):
return len(s) == 6 and is_hex_str_lc(s)
def make_iv_chksum(s):
from hashlib import sha256
return sha256(s).hexdigest()[:8].upper()
def splitN(s,n,sep=None): # always return an n-element list
@ -406,9 +408,11 @@ def is_int(s):
return False
def is_hex_str(s):
from string import hexdigits
return set(list(s.lower())) <= set(list(hexdigits.lower()))
def is_hex_str_lc(s):
from string import hexdigits
return set(list(s)) <= set(list(hexdigits.lower()))
def is_utf8(s):

View file

@ -350,6 +350,7 @@ class WalletEnc(Wallet):
else:
self._get_new_passphrase()
from hashlib import sha256
d.salt = sha256( crypto.get_random(128) ).digest()[:crypto.salt_len]
key = crypto.make_key( d.passwd, d.salt, d.hash_preset )
d.key_id = make_chksum_8(key)
@ -911,6 +912,7 @@ to exit and re-run the program with the '--old-incog-fmt' option.
}
def _make_iv_chksum(self,s):
from hashlib import sha256
return sha256(s).hexdigest()[:8].upper()
def _get_incog_data_len(self,seed_len):
@ -952,6 +954,7 @@ to exit and re-run the program with the '--old-incog-fmt' option.
d.salt = crypto.get_random( crypto.salt_len )
key = crypto.make_key( d.passwd, d.salt, d.hash_preset, 'incog wallet key' )
from hashlib import sha256
chk = sha256(self.seed.data).digest()[:8]
d.enc_seed = crypto.encrypt_data(
chk + self.seed.data,
@ -1001,6 +1004,7 @@ to exit and re-run the program with the '--old-incog-fmt' option.
def _verify_seed_newfmt(self,data):
chk,seed = data[:8],data[8:]
from hashlib import sha256
if sha256(seed).digest()[:8] == chk:
qmsg('Passphrase{} are correct'.format( self.msg['dec_chk'].format('and') ))
return seed