Skip to content

Commit 4152653

Browse files
committed
Merge Pull Request #23 "Add methods get_xpub_bytes and get_xpriv_bytes"
2 parents 9735f6c + 6b79149 commit 4152653

3 files changed

Lines changed: 30 additions & 4 deletions

File tree

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ include an index `>= HARDENED_INDEX`.
116116

117117
Equivalent to `get_xpriv_from_path([])`.
118118

119+
### get_xpriv_bytes(path)
120+
121+
Equivalent to `get_xpriv([])`, but not serialized in base58
122+
119123
### get_xpub(path)
120124

121125
Equivalent to `get_xpub_from_path([])`.
126+
127+
### get_xpub_bytes(path)
128+
129+
Equivalent to `get_xpub([])`, but not serialized in base58

bip32/bip32.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,30 +245,36 @@ def get_xpub_from_path(self, path):
245245
return base58.b58encode_check(extended_key).decode()
246246

247247
def get_xpriv(self):
248+
"""Get the base58 encoded extended private key."""
249+
return base58.b58encode_check(self.get_xpriv_bytes()).decode()
250+
251+
def get_xpriv_bytes(self):
248252
"""Get the encoded extended private key."""
249253
if self.privkey is None:
250254
raise PrivateDerivationError
251-
extended_key = _serialize_extended_key(
255+
return _serialize_extended_key(
252256
self.privkey,
253257
self.depth,
254258
self.parent_fingerprint,
255259
self.index,
256260
self.chaincode,
257261
self.network,
258262
)
259-
return base58.b58encode_check(extended_key).decode()
260263

261264
def get_xpub(self):
262265
"""Get the encoded extended public key."""
263-
extended_key = _serialize_extended_key(
266+
return base58.b58encode_check(self.get_xpub_bytes()).decode()
267+
268+
def get_xpub_bytes(self):
269+
"""Get the encoded extended public key."""
270+
return _serialize_extended_key(
264271
self.pubkey,
265272
self.depth,
266273
self.parent_fingerprint,
267274
self.index,
268275
self.chaincode,
269276
self.network,
270277
)
271-
return base58.b58encode_check(extended_key).decode()
272278

273279
@classmethod
274280
def from_xpriv(cls, xpriv):

tests/test_bip32.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,16 @@ def test_vector_1():
1313
bip32.get_xpub()
1414
== "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"
1515
)
16+
assert bip32.get_xpub_bytes() == bytes.fromhex(
17+
"0488b21e000000000000000000873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d5080339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2"
18+
)
1619
assert (
1720
bip32.get_xpriv()
1821
== "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi"
1922
)
23+
assert bip32.get_xpriv_bytes() == bytes.fromhex(
24+
"0488ade4000000000000000000873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d50800e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35"
25+
)
2026
# Chain m/0H
2127
assert (
2228
bip32.get_xpub_from_path([HARDENED_INDEX])
@@ -112,10 +118,16 @@ def test_vector_2():
112118
bip32.get_xpub()
113119
== "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB"
114120
)
121+
assert bip32.get_xpub_bytes() == bytes.fromhex(
122+
"0488b21e00000000000000000060499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd968903cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7"
123+
)
115124
assert (
116125
bip32.get_xpriv()
117126
== "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U"
118127
)
128+
assert bip32.get_xpriv_bytes() == bytes.fromhex(
129+
"0488ade400000000000000000060499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd9689004b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e"
130+
)
119131
# Chain m/0
120132
assert (
121133
bip32.get_xpub_from_path([0])

0 commit comments

Comments
 (0)