From d10ae21a2f20a8c0d0ad5f158a5f6f8c507677b5 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Tue, 14 Nov 2023 16:01:42 +0000 Subject: [PATCH] util2.py: add load_cryptodomex() function for monero-python --- mmgen/util2.py | 13 +++++++++++++ test/gentest.py | 4 ++++ test/unit_tests_d/ut_testdep.py | 2 ++ 3 files changed, 19 insertions(+) diff --git a/mmgen/util2.py b/mmgen/util2.py index c491d3bf..d5310e32 100755 --- a/mmgen/util2.py +++ b/mmgen/util2.py @@ -36,6 +36,19 @@ def removeprefix(s,pfx): # workaround for pre-Python 3.9 def removesuffix(s,sfx): # workaround for pre-Python 3.9 return s[:-len(sfx)] if s.endswith(sfx) else s +# monkey-patch function for monero-python: permits its use with pycryptodome (e.g. MSYS2) +# instead of the expected pycryptodomex +def load_cryptodomex(): + try: + import Cryptodome # cryptodomex + except ImportError: + try: + import Crypto # cryptodome + except ImportError: + die(2,'Unable to import either the ‘pycryptodomex’ or ‘pycryptodome’ package') + else: + sys.modules['Cryptodome'] = Crypto + # called with no arguments by pyethereum.utils: def get_keccak(cfg=None,cached_ret=[]): diff --git a/test/gentest.py b/test/gentest.py index 8f667354..1d4d006f 100755 --- a/test/gentest.py +++ b/test/gentest.py @@ -564,8 +564,12 @@ from mmgen.key import PrivKey from mmgen.addr import MMGenAddrType from mmgen.addrgen import KeyGenerator,AddrGenerator from mmgen.keygen import get_backends +from mmgen.util2 import load_cryptodomex from test.include.common import getrand,get_ethkey,set_globals +# This must be done at top level, not in monero tool __init__ +load_cryptodomex() + gtr = namedtuple('gen_tool_result',['wif','addr','viewkey']) sd = namedtuple('saved_data_item',['reduced','wif','addr','viewkey']) diff --git a/test/unit_tests_d/ut_testdep.py b/test/unit_tests_d/ut_testdep.py index 6512ddea..1ae8ca18 100755 --- a/test/unit_tests_d/ut_testdep.py +++ b/test/unit_tests_d/ut_testdep.py @@ -46,6 +46,8 @@ class unit_tests: return True def monero_python(self,name,ut): + from mmgen.util2 import load_cryptodomex + load_cryptodomex() from monero.seed import Seed Seed('deadbeef' * 8).public_address() return True