@@ -112,6 +112,10 @@ def __init__(self, symbol: str = "BTC", cryptocurrency: Any = None,
112
112
self ._private_key : Optional [bytes ] = None
113
113
self ._public_key : Optional [str ] = None
114
114
self ._chain_code : Optional [bytes ] = None
115
+
116
+ self ._private_key_base58check : Optional [str ] = None
117
+ self ._public_key_base58check : Optional [str ] = None
118
+
115
119
self ._depth : int = 0
116
120
self ._index : int = 0
117
121
@@ -211,6 +215,8 @@ def from_seed(self, seed: str) -> "HDWallet":
211
215
if self ._use_default_path :
212
216
self .from_path (path = self ._cryptocurrency .DEFAULT_PATH )
213
217
self ._public_key = self .compressed ()
218
+ self ._public_key_base58check = self .public_key_base58check ()
219
+ self ._private_key_base58check = self .private_key_base58check ()
214
220
if self ._from_class :
215
221
self .from_path (path = self ._path_class )
216
222
return self
@@ -251,6 +257,8 @@ def from_root_xprivate_key(self, xprivate_key: str, strict: bool = True) -> "HDW
251
257
if self ._from_class :
252
258
self .from_path (path = self ._path_class )
253
259
self ._public_key = self .compressed ()
260
+ self ._public_key_base58check = self .public_key_base58check ()
261
+ self ._private_key_base58check = self .private_key_base58check ()
254
262
return self
255
263
256
264
def from_root_xpublic_key (self , xpublic_key : str , strict : bool = True ) -> "HDWallet" :
@@ -289,6 +297,7 @@ def from_root_xpublic_key(self, xpublic_key: str, strict: bool = True) -> "HDWal
289
297
if self ._from_class :
290
298
self .from_path (path = self ._path_class )
291
299
self ._public_key = self .compressed ()
300
+ self ._public_key_base58check = self .public_key_base58check ()
292
301
return self
293
302
294
303
def from_xprivate_key (self , xprivate_key : str ) -> "HDWallet" :
@@ -317,6 +326,8 @@ def from_xprivate_key(self, xprivate_key: str) -> "HDWallet":
317
326
self ._key = ecdsa .SigningKey .from_string (_deserialize_xprivate_key [5 ], curve = SECP256k1 )
318
327
self ._verified_key = self ._key .get_verifying_key ()
319
328
self ._public_key = self .compressed ()
329
+ self ._public_key_base58check = self .public_key_base58check ()
330
+ self ._private_key_base58check = self .private_key_base58check ()
320
331
return self
321
332
322
333
def from_xpublic_key (self , xpublic_key : str ) -> "HDWallet" :
@@ -346,6 +357,7 @@ def from_xpublic_key(self, xpublic_key: str) -> "HDWallet":
346
357
_deserialize_xpublic_key [5 ], curve = SECP256k1
347
358
)
348
359
self ._public_key = self .compressed ()
360
+ self ._public_key_base58check = self .public_key_base58check ()
349
361
return self
350
362
351
363
def from_wif (self , wif : str ) -> "HDWallet" :
@@ -372,6 +384,8 @@ def from_wif(self, wif: str) -> "HDWallet":
372
384
self ._key = ecdsa .SigningKey .from_string (self ._private_key , curve = SECP256k1 )
373
385
self ._verified_key = self ._key .get_verifying_key ()
374
386
self ._public_key = self .compressed ()
387
+ self ._public_key_base58check = self .public_key_base58check ()
388
+ self ._private_key_base58check = self .private_key_base58check ()
375
389
return self
376
390
377
391
def from_private_key (self , private_key : str ) -> "HDWallet" :
@@ -394,6 +408,8 @@ def from_private_key(self, private_key: str) -> "HDWallet":
394
408
self ._key = ecdsa .SigningKey .from_string (self ._private_key , curve = SECP256k1 )
395
409
self ._verified_key = self ._key .get_verifying_key ()
396
410
self ._public_key = self .compressed ()
411
+ self ._public_key_base58check = self .public_key_base58check ()
412
+ self ._private_key_base58check = self .private_key_base58check ()
397
413
return self
398
414
399
415
def from_public_key (self , public_key : str ) -> "HDWallet" :
@@ -416,6 +432,7 @@ def from_public_key(self, public_key: str) -> "HDWallet":
416
432
unhexlify (public_key ), curve = SECP256k1
417
433
)
418
434
self ._public_key = self .compressed ()
435
+ self ._public_key_base58check = self .public_key_base58check ()
419
436
return self
420
437
421
438
def from_path (self , path : Union [str , Derivation ]) -> "HDWallet" :
@@ -521,6 +538,7 @@ def _derive_key_by_index(self, index) -> Optional["HDWallet"]:
521
538
)
522
539
self ._key = ecdsa .SigningKey .from_string (self ._private_key , curve = SECP256k1 )
523
540
self ._verified_key = self ._key .get_verifying_key ()
541
+ self ._private_key_base58check = self .private_key_base58check ()
524
542
else :
525
543
key_point = S256Point .parse (unhexlify (self .public_key ()))
526
544
left_point = il_int * G
@@ -730,6 +748,7 @@ def clean_derivation(self) -> "HDWallet":
730
748
self ._private_key , self ._chain_code = self ._root_private_key
731
749
self ._key = ecdsa .SigningKey .from_string (self ._private_key , curve = SECP256k1 )
732
750
self ._verified_key = self ._key .get_verifying_key ()
751
+ self ._private_key_base58check = self .private_key_base58check ()
733
752
elif self ._root_public_key :
734
753
self ._path , self ._depth , self ._parent_fingerprint , self ._index = (
735
754
"m" , 0 , b"\0 \0 \0 \0 " , 0
@@ -847,6 +866,18 @@ def public_key(self, compressed: bool = True, private_key: Optional[str] = None)
847
866
return hexlify (ck ).decode () if compressed else self .uncompressed (compressed = hexlify (ck ).decode ())
848
867
return self .compressed () if compressed else self .uncompressed ()
849
868
869
+ def public_key_base58check (self ) -> str :
870
+ return base58 .b58encode_check (
871
+ _unhexlify (self ._cryptocurrency .PUBLIC_KEY_ADDRESS ) +
872
+ unhexlify (self .public_key ())
873
+ )
874
+
875
+ def private_key_base58check (self ) -> str :
876
+ return base58 .b58encode_check (
877
+ _unhexlify (self ._cryptocurrency .PRIVATE_KEY_ADDRESS ) +
878
+ unhexlify (self .private_key ())
879
+ )
880
+
850
881
def strength (self ) -> Optional [int ]:
851
882
"""
852
883
Get Entropy strength.
@@ -1281,6 +1312,8 @@ def dumps(self) -> dict:
1281
1312
semantic = self .semantic (),
1282
1313
path = self .path (),
1283
1314
hash = self .hash (),
1315
+ public_key_base58check = self .public_key_base58check (),
1316
+ private_key_base58check = self .private_key_base58check (),
1284
1317
addresses = dict (
1285
1318
p2pkh = self .p2pkh_address (),
1286
1319
p2sh = self .p2sh_address (),
0 commit comments