@@ -17,6 +17,11 @@ class PrivateDerivationError(ValueError):
1717 pass
1818
1919
20+ class InvalidInputError (ValueError ):
21+ def __init__ (self , message ):
22+ self .message = message
23+
24+
2025class BIP32 :
2126 def __init__ (self , chaincode , privkey = None , pubkey = None , fingerprint = None ,
2227 depth = 0 , index = 0 , network = "main" ):
@@ -37,14 +42,21 @@ def __init__(self, chaincode, privkey=None, pubkey=None, fingerprint=None,
3742 need this for serialization.
3843 :param network: Either "main" or "test".
3944 """
40- assert isinstance (chaincode , bytes )
41- assert privkey is not None or pubkey is not None
45+ if network not in ["main" , "test" ]:
46+ raise InvalidInputError ("'network' must be one of 'main' or 'test'" )
47+ if not isinstance (chaincode , bytes ):
48+ raise InvalidInputError ("'chaincode' must be bytes" )
49+ if privkey is None and pubkey is None :
50+ raise InvalidInputError ("Need at least a 'pubkey' or a 'privkey'" )
4251 if privkey is not None :
43- assert isinstance (privkey , bytes )
52+ if not isinstance (privkey , bytes ):
53+ raise InvalidInputError ("'privkey' must be bytes" )
4454 if pubkey is not None :
45- assert isinstance (pubkey , bytes )
55+ if not isinstance (pubkey , bytes ):
56+ raise InvalidInputError ("'pubkey' must be bytes" )
4657 else :
4758 pubkey = _privkey_to_pubkey (privkey )
59+
4860 self .master_chaincode = chaincode
4961 self .master_privkey = privkey
5062 self .master_pubkey = pubkey
@@ -213,6 +225,9 @@ def from_xpriv(cls, xpriv):
213225
214226 :param xpriv: (str) The encoded serialized extended private key.
215227 """
228+ if not isinstance (xpriv , str ):
229+ raise InvalidInputError ("'xpriv' must be a string" )
230+
216231 extended_key = base58 .b58decode_check (xpriv )
217232 (network , depth , fingerprint ,
218233 index , chaincode , key ) = _unserialize_extended_key (extended_key )
@@ -226,6 +241,9 @@ def from_xpub(cls, xpub):
226241
227242 :param xpub: (str) The encoded serialized extended public key.
228243 """
244+ if not isinstance (xpub , str ):
245+ raise InvalidInputError ("'xpub' must be a string" )
246+
229247 extended_key = base58 .b58decode_check (xpub )
230248 (network , depth , fingerprint ,
231249 index , chaincode , key ) = _unserialize_extended_key (extended_key )
0 commit comments