diff options
-rw-r--r-- | src/leap/soledad/client/_scrypt.py | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/leap/soledad/client/_scrypt.py b/src/leap/soledad/client/_scrypt.py index 03dcab40..674fabd7 100644 --- a/src/leap/soledad/client/_scrypt.py +++ b/src/leap/soledad/client/_scrypt.py @@ -18,18 +18,26 @@ try: from cryptography.hazmat.backends.interfaces import ScryptBackend from cryptography.hazmat.backends import default_backend + from cryptography.exceptions import UnsupportedAlgorithm backend = default_backend() OPENSSL_HAS_SCRYPT = isinstance(backend, ScryptBackend) except ImportError: OPENSSL_HAS_SCRYPT = False +def _fallback_hash(secret, salt, buflen=32): + import scrypt + return scrypt.hash(secret, salt, buflen=buflen) + if OPENSSL_HAS_SCRYPT: from cryptography.hazmat.primitives.kdf.scrypt import Scrypt def hash(secret, salt, buflen=32): - return Scrypt(salt, buflen, 16384, 8, 1, backend).derive(secret) -else: - import scrypt + try: + _hash = Scrypt( + salt, buflen, 16384, 8, 1, backend).derive(secret) + except UnsupportedAlgorithm: + _hash = _fallback_hash(secret, salt, buflen) + return _hash - def hash(secret, salt, buflen=32): - return scrypt.hash(secret, salt, buflen=buflen) +else: + hash = _fallback_hash |