From e1f68963a7c76035a7071acee8dc13f4132eab20 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Fri, 19 May 2023 16:16:52 +0000 Subject: [PATCH] use pycryptodome/pycryptodomex for Keccak testing --- mmgen/util.py | 9 +++++++++ test/gentest.py | 2 ++ test/hashfunc.py | 15 +++++++++------ test/unit_tests_d/ut_dep.py | 17 ++++++++++++++++- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/mmgen/util.py b/mmgen/util.py index 374ff18e..506be9db 100755 --- a/mmgen/util.py +++ b/mmgen/util.py @@ -399,6 +399,15 @@ def async_run(coro): import asyncio return asyncio.run(coro) +def load_cryptodomex(called=[]): + if not called: + try: + import Cryptodome + except ImportError: + import Crypto + sys.modules['Cryptodome'] = sys.modules['Crypto'] + called.append(True) + def wrap_ripemd160(called=[]): if not called: try: diff --git a/test/gentest.py b/test/gentest.py index 1e7133ac..675f74de 100755 --- a/test/gentest.py +++ b/test/gentest.py @@ -230,6 +230,8 @@ class GenToolMonero_python(GenTool): def __init__(self,*args,**kwargs): super().__init__(*args,**kwargs) + from mmgen.util import load_cryptodomex + load_cryptodomex() try: from monero.seed import Seed except: diff --git a/test/hashfunc.py b/test/hashfunc.py index 5a7d56f4..a0d15fdf 100755 --- a/test/hashfunc.py +++ b/test/hashfunc.py @@ -109,12 +109,15 @@ class TestKeccak(TestHashFunc): from mmgen.contrib.keccak import keccak_256 self.t_cls = keccak_256 from mmgen.pyversion import python_version - if python_version >= '3.11': - ymsg(f'Skipping keccak random data test for Python version {python_version} (no pysha3)') - self.hashlib = None - elif gc.platform == 'win': - ymsg(f'Skipping keccak random data test for Windows platform (no pysha3)') - self.hashlib = None + if python_version >= '3.11' or gc.platform == 'win': + class hashlib: + @staticmethod + def keccak_256(data): + return keccak.new(data=data,digest_bytes=32) + from mmgen.util import load_cryptodomex + load_cryptodomex() + from Cryptodome.Hash import keccak + self.hashlib = hashlib else: import sha3 self.hashlib = sha3 diff --git a/test/unit_tests_d/ut_dep.py b/test/unit_tests_d/ut_dep.py index d889b8e9..9c7b7362 100755 --- a/test/unit_tests_d/ut_dep.py +++ b/test/unit_tests_d/ut_dep.py @@ -15,7 +15,7 @@ from ..include.common import cfg,vmsg,check_solc_ver class unit_tests: - altcoin_deps = ('pysha3','py_ecc','solc') + altcoin_deps = ('pysha3','py_ecc','solc','pycryptodomex') win_skip = ('pysha3','led') def led(self,name,ut): @@ -36,6 +36,21 @@ class unit_tests: from sha3 import keccak_256 return True + def pycryptodomex(self,name,ut): # ETH,XMR + from mmgen.pyversion import python_version + if python_version >= '3.11' or gc.platform == 'win': + try: + from mmgen.util import load_cryptodomex + except Exception as e: + msg(str(e)) + ymsg('Please install the ‘pycryptodome’ or ‘pycryptodomex’ package on your system') + return False + elif gc.platform != 'win': + ut.skip_msg(f'platform {gc.platform!r}') + else: + ut.skip_msg(f'Python version {python_version}') + return True + def py_ecc(self,name,ut): # ETH from py_ecc.secp256k1 import privtopub return True