From 360ef8d3c527c043f2a6603e3ff009e380a64fcb Mon Sep 17 00:00:00 2001 From: MMGen Date: Sun, 17 Mar 2019 15:26:23 +0000 Subject: [PATCH] use hashlib.scrypt() if available, in preference to scrypt.hash() --- mmgen/crypto.py | 11 +++++++++-- mmgen/globalvars.py | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/mmgen/crypto.py b/mmgen/crypto.py index 11d21b43..b0c33512 100755 --- a/mmgen/crypto.py +++ b/mmgen/crypto.py @@ -106,12 +106,19 @@ def decrypt_data(enc_data,key,iv=1,desc='data'): return c.decrypt(enc_data) def scrypt_hash_passphrase(passwd,salt,hash_preset,buflen=32): - import scrypt + # Buflen arg is for brainwallets only, which use this function to generate # the seed directly. N,r,p = get_hash_params(hash_preset) if type(passwd) == str: passwd = passwd.encode() - return scrypt.hash(passwd,salt,2**N,r,p,buflen=buflen) + + try: + assert not g.use_standalone_scrypt_module + from hashlib import scrypt # Python >= v3.6 + return scrypt(passwd,salt=salt,n=2**N,r=r,p=p,maxmem=0,dklen=buflen) + except: + import scrypt + return scrypt.hash(passwd,salt,2**N,r,p,buflen=buflen) def make_key(passwd,salt,hash_preset,desc='encryption key',from_what='passphrase',verbose=False): if from_what: desc += ' from ' diff --git a/mmgen/globalvars.py b/mmgen/globalvars.py index ac805701..91914df1 100755 --- a/mmgen/globalvars.py +++ b/mmgen/globalvars.py @@ -167,6 +167,7 @@ class g(object): 'MMGEN_TESTNET', 'MMGEN_REGTEST', 'MMGEN_TRACEBACK', + 'MMGEN_USE_STANDALONE_SCRYPT_MODULE', 'MMGEN_DISABLE_COLOR', ) @@ -195,6 +196,7 @@ class g(object): key_generators = 'python-ecdsa','secp256k1' # '1','2' key_generator = 2 # secp256k1 is default + use_standalone_scrypt_module = False hash_presets = { # Scrypt params: # ID N p r (N is an exponent of two)