keygen.py: relocate libsecp256k1 availability test to class

This commit is contained in:
The MMGen Project 2022-10-04 13:08:53 +00:00
commit 79652a78a6
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
2 changed files with 14 additions and 10 deletions

View file

@ -204,14 +204,12 @@ def KeyGenerator(proto,pubkey_type,backend=None,silent=False):
backend_id = pubkey_type_cls.backends[int(backend) - 1 if backend else 0]
if backend_id == 'libsecp256k1':
if not pubkey_type_cls.libsecp256k1.test_avail(silent=silent):
backend_id = 'python-ecdsa'
if not backend:
from .util import qmsg
qmsg('Using (slow) native Python ECDSA library for public key generation')
backend_clsname = getattr(
pubkey_type_cls,
backend_id.replace('-','_')
).test_avail(silent=silent)
return getattr(pubkey_type_cls,backend_id.replace('-','_'))()
return getattr(pubkey_type_cls,backend_clsname)()
def AddrGenerator(proto,addr_type):
"""

View file

@ -43,6 +43,10 @@ class keygen_base:
def to_viewkey(self,privkey):
return None
@classmethod
def test_avail(cls,silent=False):
return cls.__name__
class keygen_backend:
class std:
@ -67,12 +71,14 @@ class keygen_backend:
from .util import die
die( 'ExtensionModuleError',
'Unable to execute priv2pub() from secp256k1 extension module' )
return True
return cls.__name__
except Exception as e:
if not silent:
from .util import ymsg
ymsg(str(e))
return False
from .util import qmsg
qmsg('Using (slow) native Python ECDSA library for public key generation')
return 'python_ecdsa'
class python_ecdsa(keygen_base):