From 5abe340b7cf9359634f6ed15ea991b1bf8f30be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sa=C5=82aban?= Date: Wed, 24 Nov 2021 17:56:56 +0100 Subject: [PATCH] Allow using pysha3 instead of pycryptodomex --- monero/keccak.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/monero/keccak.py b/monero/keccak.py index 5b6e88f..77f3cee 100644 --- a/monero/keccak.py +++ b/monero/keccak.py @@ -1,10 +1,21 @@ -from Cryptodome.Hash import keccak +cd_keccak = None +sha3_keccak = None + +try: + from Cryptodome.Hash import cd_keccak +except ImportError: + from sha3 import keccak_256 as sha3_keccak def keccak_256(data): """ Return a hashlib-compatible Keccak 256 object for the given data. """ - hash = keccak.new(digest_bits=256) - hash.update(data) - return hash + if cd_keccak is not None: + h = cd_keccak.new(digest_bits=256) + h.update(data) + elif sha3_keccak is not None: + h = sha3_keccak(data) + else: # pragma: no cover + raise RuntimeError("SHA3 implementation is missing. Install either 'pycryptodomex' (recommended) or 'pysha3' package to provide it") + return h