use pycryptodome/pycryptodomex for Keccak testing

This commit is contained in:
The MMGen Project 2023-05-19 16:16:52 +00:00
commit e1f68963a7
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
4 changed files with 36 additions and 7 deletions

View file

@ -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:

View file

@ -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:

View file

@ -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

View file

@ -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