Browse Source

keygen.py: relocate libsecp256k1 availability test to class

The MMGen Project 2 years ago
parent
commit
79652a78a6
2 changed files with 14 additions and 10 deletions
  1. 6 8
      mmgen/addr.py
  2. 8 2
      mmgen/keygen.py

+ 6 - 8
mmgen/addr.py

@@ -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')
-
-	return getattr(pubkey_type_cls,backend_id.replace('-','_'))()
+	backend_clsname = getattr(
+		pubkey_type_cls,
+		backend_id.replace('-','_')
+			).test_avail(silent=silent)
+
+	return getattr(pubkey_type_cls,backend_clsname)()
 
 def AddrGenerator(proto,addr_type):
 	"""

+ 8 - 2
mmgen/keygen.py

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