Skip to content

Commit

Permalink
moved to hex-string where possible
Browse files Browse the repository at this point in the history
  • Loading branch information
fametrano committed Nov 6, 2020
1 parent 9e977b0 commit 554d110
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 58 deletions.
40 changes: 20 additions & 20 deletions btclib/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,20 @@ class Network(TypedDict):
"p2sh": b"\x05", # base58address starts with '3'
"p2w": "bc", # bech32address starts with 'bc1'
# slip132 "m / 44h / 0h" p2pkh or p2sh
"bip32_prv": b"\x04\x88\xAD\xE4", # xprv
"bip32_pub": b"\x04\x88\xB2\x1E", # xpub
"bip32_prv": bytes.fromhex("04 88 ad e4"), # xprv
"bip32_pub": bytes.fromhex("04 88 b2 1e"), # xpub
# slip132 "m / 49h / 0h" p2wpkh-p2sh (p2sh-wrapped legacy-segwit p2wpkh)
"slip132_p2wpkh_p2sh_prv": b"\x04\x9D\x78\x78", # yprv
"slip132_p2wpkh_p2sh_pub": b"\x04\x9D\x7C\xB2", # ypub
"slip132_p2wpkh_p2sh_prv": bytes.fromhex("04 9d 78 78"), # yprv
"slip132_p2wpkh_p2sh_pub": bytes.fromhex("04 9d 7c b2"), # ypub
# slip132 p2wsh-p2sh (p2sh-wrapped legacy-segwit p2wsh)
"slip132_p2wsh_p2sh_prv": b"\x02\x95\xB0\x05", # Yprv
"slip132_p2wsh_p2sh_pub": b"\x02\x95\xB4\x3F", # Ypub
"slip132_p2wsh_p2sh_prv": bytes.fromhex("02 95 b0 05"), # Yprv
"slip132_p2wsh_p2sh_pub": bytes.fromhex("02 95 b4 3f"), # Ypub
# slip132 "m / 84h / 0h" p2wpkh (native-segwit p2wpkh)
"slip132_p2wpkh_prv": b"\x04\xB2\x43\x0C", # zprv
"slip132_p2wpkh_pub": b"\x04\xB2\x47\x46", # zpub
"slip132_p2wpkh_prv": bytes.fromhex(" 04 b2 43 0c"), # zprv
"slip132_p2wpkh_pub": bytes.fromhex(" 04 b2 47 46"), # zpub
# slip132 p2wsh (native-segwit p2wsh)
"slip132_p2wsh_prv": b"\x02\xAA\x7A\x99", # Zprv
"slip132_p2wsh_pub": b"\x02\xAA\x7E\xD3", # Zpub
"slip132_p2wsh_prv": bytes.fromhex(" 02 aa 7a 99"), # Zprv
"slip132_p2wsh_pub": bytes.fromhex(" 02 aa 7e d3"), # Zpub
}

NETWORKS["testnet"] = {
Expand All @@ -67,20 +67,20 @@ class Network(TypedDict):
"p2sh": b"\xc4", # base58address starts with '2'
"p2w": "tb", # bech32address starts with 'tb1'
# slip132 "m / 44h / 1h" p2pkh or p2sh
"bip32_prv": b"\x04\x35\x83\x94", # tprv
"bip32_pub": b"\x04\x35\x87\xCF", # tpub
"bip32_prv": bytes.fromhex("04 35 83 94"), # tprv
"bip32_pub": bytes.fromhex("04 35 87 cf"), # tpub
# slip132 "m / 49h / 1h" p2wpkh-p2sh (p2sh-wrapped-segwit)
"slip132_p2wpkh_p2sh_prv": b"\x04\x4A\x4E\x28", # uprv
"slip132_p2wpkh_p2sh_pub": b"\x04\x4A\x52\x62", # upub
"slip132_p2wpkh_p2sh_prv": bytes.fromhex("04 4a 4e 28"), # uprv
"slip132_p2wpkh_p2sh_pub": bytes.fromhex("04 4a 52 62"), # upub
# slip132 p2wsh-p2sh (p2sh-wrapped-segwit)
"slip132_p2wsh_p2sh_prv": b"\x02\x42\x85\xB5", # Uprv
"slip132_p2wsh_p2sh_pub": b"\x02\x42\x89\xEF", # Upub
"slip132_p2wsh_p2sh_prv": bytes.fromhex("02 42 85 b5"), # Uprv
"slip132_p2wsh_p2sh_pub": bytes.fromhex("02 42 89 ef"), # Upub
# slip132 "m / 84h / 1h" p2wpkh (native-segwit)
"slip132_p2wpkh_prv": b"\x04\x5F\x18\xBC", # vprv
"slip132_p2wpkh_pub": b"\x04\x5F\x1C\xF6", # vpub
"slip132_p2wpkh_prv": bytes.fromhex("04 5f 18 bc"), # vprv
"slip132_p2wpkh_pub": bytes.fromhex("04 5f 1c f6"), # vpub
# slip132 p2wsh (native-segwit)
"slip132_p2wsh_prv": b"\x02\x57\x50\x48", # Vprv
"slip132_p2wsh_pub": b"\x02\x57\x54\x83", # Vpub
"slip132_p2wsh_prv": bytes.fromhex("02 57 50 48"), # Vprv
"slip132_p2wsh_pub": bytes.fromhex("02 57 54 83"), # Vpub
}

NETWORKS["regtest"] = copy.copy(NETWORKS["testnet"])
Expand Down
60 changes: 29 additions & 31 deletions btclib/tests/test_psbt.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ def test_explicit_version():
def test_global_unknown():
psbt_string = "cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAEAuwIAAAABqtc5MQGL0l+ErkALaISL4J23BurCrBgpi6vucatlb4sAAAAASEcwRAIgWPb8fGoz4bMVSNSByCbAFb0wE1qtQs1neQ2rZtKtJDsCIEoc7SYExnNbY5PltBaR3XiwDwxZQvufdRhW+qk4FX26Af7///8CgPD6AgAAAAAXqRQPuUY0IWlrgsgzryQceMF9295JNIfQ8gonAQAAABepFCnKdPigj4GZlCgYXJe12FLkBj9hh2UAAAAiAgKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgf0cwRAIgdAGK1BgAl7hzMjwAFXILNoTMgSOJEEjn282bVa1nnJkCIHPTabdA4+tT3O+jOCPIBwUUylWn3ZVE8VfBZ5EyYRGMASICAtq2H/SaFNtqfQKwzR+7ePxLGDErW05U2uTbovv+9TbXSDBFAiEA9hA4swjcHahlo0hSdG8BV3KTQgjG0kRUOTzZm98iF3cCIAVuZ1pnWm0KArhbFOXikHTYolqbV2C+ooFvZhkQoAbqAQEDBAEAAAABBEdSIQKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgfyEC2rYf9JoU22p9ArDNH7t4/EsYMStbTlTa5Nui+/71NtdSriIGApWDvzmuCmCXR60Zmt3WNPphCFWdbFzTm0whg/GrluB/ENkMak8AAACAAAAAgAAAAIAiBgLath/0mhTban0CsM0fu3j8SxgxK1tOVNrk26L7/vU21xDZDGpPAAAAgAAAAIABAACAAAEBIADC6wsAAAAAF6kUt/X69A49QKWkWbHbNTXyty+pIeiHIgIDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtxHMEQCIGLrelVhB6fHP0WsSrWh3d9vcHX7EnWWmn84Pv/3hLyyAiAMBdu3Rw2/LwhVfdNWxzJcHtMJE+mWzThAlF2xIijaXwEiAgI63ZBPPW3PWd25BrDe4jUpt/+57VDl6GFRkmhgIh8Oc0cwRAIgZfRbpZmLWaJ//hp77QFq8fH5DVSzqo90UKpfVqJRA70CIH9yRwOtHtuWaAsoS1bU/8uI9/t1nqu+CKow8puFE4PSAQEDBAEAAAABBCIAIIwjUxc3Q7WV37Sge3K6jkLjeX2nTof+fZ10l+OyAokDAQVHUiEDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtwhAjrdkE89bc9Z3bkGsN7iNSm3/7ntUOXoYVGSaGAiHw5zUq4iBgI63ZBPPW3PWd25BrDe4jUpt/+57VDl6GFRkmhgIh8OcxDZDGpPAAAAgAAAAIADAACAIgYDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtwQ2QxqTwAAAIAAAACAAgAAgAAiAgOppMN/WZbTqiXbrGtXCvBlA5RJKUJGCzVHU+2e7KWHcRDZDGpPAAAAgAAAAIAEAACAACICAn9jmXV9Lv9VoTatAsaEsYOLZVbl8bazQoKpS2tQBRCWENkMak8AAACAAAAAgAUAAIAA"
psbt = Psbt.deserialize(psbt_string)
psbt.add_unknown_entry("ff010203", b"\x12\x34\x56\x78\x90")
psbt.add_unknown_entry("ff010203", bytes.fromhex("1234567890"))
assert Psbt.deserialize(psbt.serialize()) == psbt


Expand Down Expand Up @@ -439,7 +439,7 @@ def test_sig_type1():
psbt_template = "cHNidP8BAIkCAAAAARnxViCzMlE50R7BLfUK9Em7JRSithDHx6/HqzxOPb/lAAAAAAD9////AiChBwAAAAAAIgAg6OYWyJlTxF3xOZM+ZJnQYcC6um0klfv3rZqVkbDWaKVBiAMAAAAAACIAIFXAXQ7M7bSsf6IR0Zt+mWvjNRtOX1dbUyA7QN7x3rJVAAAAAAABASuFKwsAAAAAACIAIGxMhA6S1FFxsrccUutx1Wu6+ijbCMDqwETnode6/M9vIgYCOOOQQx1Uydk9h38Rd98Gj/dMemSmLtsUC3tlt004+5QUpFwW+ywAAIAAAACAAAAAAAAAAAAiBgJ6RK62ZrlAXMGL4dJOG61AdvTYSrSYvJu7XE37wIolbBQ+kOBlLAAAgAAAAIAAAAAAAAAAACIGAyoYpiApIUlH9R9l71y9PdAJBGyxofwpoeoZGTcP8OkCFLd96kwsAACAAAAAgAAAAAAAAAAAIgYDVy+a9q69emdkJk4Xq9xPyAzzWcEfgcu+Ts96LCNKX48UOIHNZywAAIAAAACAAAAAAAAAAAAiBgP8xVUHZvsvdflS4U8rKZT1vopnW1W8RSXAqOTGeY3RFxRS5uGZLAAAgAAAAIAAAAAAAAAAAAAAAA=="

psbt = Psbt.deserialize(psbt_template)
pk1_str = "03572f9af6aebd7a6764264e17abdc4fc80cf359c11f81cbbe4ecf7a2c234a5f8f"
pk1_str = "03 572f9af6aebd7a6764264e17abdc4fc80cf359c11f81cbbe4ecf7a2c234a5f8f"
sig1_str = "3045022100e1ea1a3f9f790492eb18810f0e49e650b3397f91fa4a380c0649e3144943009e02202c36df002e2d1b211da0256b446b27541e330c46fd9386b59a161b4902e854cb01"

psbt.inputs[0].partial_sigs.add_sig(pk1_str, sig1_str)
Expand Down Expand Up @@ -474,13 +474,13 @@ def test_sig_type3():

psbt = Psbt.deserialize(psbt_template)

pk1_str = "03572f9af6aebd7a6764264e17abdc4fc80cf359c11f81cbbe4ecf7a2c234a5f8f"
pk1_str = "03 572f9af6aebd7a6764264e17abdc4fc80cf359c11f81cbbe4ecf7a2c234a5f8f"
pk1_data = BIP32KeyData(
version=2,
version=bytes.fromhex("04 88 b2 1e"),
depth=0,
parent_fingerprint=bytes.fromhex("00000000"),
parent_fingerprint=bytes.fromhex("00 00 00 00"),
index=0,
chain_code=None,
chain_code=bytes.fromhex(32 * "00"),
key=bytes.fromhex(pk1_str),
)

Expand All @@ -502,56 +502,54 @@ def test_hd_paths():
psbt.inputs[0].hd_keypaths = HdKeypaths()
assert psbt.serialize() != psbt_check_string

pk1_str = "0238e390431d54c9d93d877f1177df068ff74c7a64a62edb140b7b65b74d38fb94"
pk1_str = "02 38e390431d54c9d93d877f1177df068ff74c7a64a62edb140b7b65b74d38fb94"
fingerprint1_str = "a45c16fb"
path1_str = "m/44'/0'/0/0"
psbt.inputs[0].hd_keypaths.add_hd_path(pk1_str, fingerprint1_str, path1_str)

pk2_tuple = (
55303518948956126257715543378820412488467496206714732453652294290762118079852,
94239533235813337047676626617971636063945929248279744743514887733238097548810,
)

fingerprint2_bytes = b"\x3e\x90\xe0\x65"
fingerprint2_bytes = bytes.fromhex("3e 90 e0 65")
path2_indexes = [0x8000002C, 0x80000000, 0, 0]
psbt.inputs[0].hd_keypaths.add_hd_path(pk2_tuple, fingerprint2_bytes, path2_indexes)
assert psbt.inputs[0].hd_keypaths.get_hd_path_entry(pk2_tuple) == (
fingerprint2_bytes.hex(),
"m/44h/0h/0/0",
)

pk3_data = BIP32KeyData(
version=2,
version=bytes.fromhex("04 88 b2 1e"),
depth=0,
parent_fingerprint=bytes.fromhex("00000000"),
parent_fingerprint=bytes.fromhex("00 00 00 00"),
index=0,
chain_code=None,
chain_code=bytes.fromhex(32 * "00"),
key=bytes.fromhex(
"032a18a62029214947f51f65ef5cbd3dd009046cb1a1fc29a1ea1919370ff0e902"
"03 2a18a62029214947f51f65ef5cbd3dd009046cb1a1fc29a1ea1919370ff0e902"
),
)

fingerprint3_str = "b77dea4c"
path3_str = "m/44H/0h/0/0"
psbt.inputs[0].hd_keypaths.add_hd_path(pk3_data, fingerprint3_str, path3_str)

pk4_bytes = b"\x03\x57\x2f\x9a\xf6\xae\xbd\x7a\x67\x64\x26\x4e\x17\xab\xdc\x4f\xc8\x0c\xf3\x59\xc1\x1f\x81\xcb\xbe\x4e\xcf\x7a\x2c\x23\x4a\x5f\x8f"
fingerprint4_bytes = b"\x38\x81\xcd\x67"
pk4_bytes = bytes.fromhex(
"03 572f9af6aebd7a6764264e17abdc4fc80cf359c11f81cbbe4ecf7a2c234a5f8f"
)
fingerprint4_bytes = bytes.fromhex("38 81 cd 67")
path4_str = "m/44'/0'/0/0"
psbt.inputs[0].hd_keypaths.add_hd_path(pk4_bytes, fingerprint4_bytes, path4_str)

pk5_str = "03fcc5550766fb2f75f952e14f2b2994f5be8a675b55bc4525c0a8e4c6798dd117"
pk5_str = "03 fcc5550766fb2f75f952e14f2b2994f5be8a675b55bc4525c0a8e4c6798dd117"
fingerprint5_str = "52e6e199"
path5_str = "m/44'/0H/0/0"

psbt.inputs[0].hd_keypaths.add_hd_path(pk1_str, fingerprint1_str, path1_str)
psbt.inputs[0].hd_keypaths.add_hd_path(pk2_tuple, fingerprint2_bytes, path2_indexes)
psbt.inputs[0].hd_keypaths.add_hd_path(pk3_data, fingerprint3_str, path3_str)
psbt.inputs[0].hd_keypaths.add_hd_path(pk4_bytes, fingerprint4_bytes, path4_str)
psbt.inputs[0].hd_keypaths.add_hd_path(pk5_str, fingerprint5_str, path5_str)

assert psbt.serialize() == psbt_check_string

# test json properties
assert psbt == Psbt.from_json(psbt.to_json(indent=True))

assert psbt.inputs[0].hd_keypaths.get_hd_path_entry(pk2_tuple) == (
fingerprint2_bytes.hex(),
"m/44h/0h/0/0",
)

assert psbt.serialize() == psbt_check_string


Expand All @@ -562,10 +560,10 @@ def test_proprietary_types():
psbt = Psbt.deserialize(psbt_template)

psbt.add_unknown_entry("abcd", "123456")
psbt.inputs[0].add_unknown_entry(b"\xab\xcd", "123456")
psbt.outputs[0].add_unknown_entry("abcd", b"\x12\x34")
psbt.inputs[0].add_unknown_entry(bytes.fromhex("abcd"), "123456")
psbt.outputs[0].add_unknown_entry("abcd", bytes.fromhex("1234"))

assert psbt.serialize() == psbt_check
assert psbt.get_unknown_entry(b"\xab\xcd") == "123456"
assert psbt.get_unknown_entry(bytes.fromhex("abcd")) == "123456"
assert psbt.inputs[0].get_unknown_entry("abcd") == "123456"
assert psbt.outputs[0].get_unknown_entry(b"\xab\xcd") == "1234"
assert psbt.outputs[0].get_unknown_entry(bytes.fromhex("abcd")) == "1234"
14 changes: 7 additions & 7 deletions btclib/tests/test_to_key.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
wif_uncompressed_string2 = " " + wif_uncompressed_string + " "

xprv_data = BIP32KeyData(
version=b"\x04\x88\xAD\xE4",
version=bytes.fromhex("04 88 ad e4"),
depth=0,
parent_fingerprint=bytes.fromhex("00000000"),
index=0,
Expand Down Expand Up @@ -96,7 +96,7 @@
)

xpub_data = BIP32KeyData(
version=b"\x04\x88\xB2\x1E",
version=bytes.fromhex("04 88 b2 1e"),
depth=xprv_data.depth,
parent_fingerprint=xprv_data.parent_fingerprint,
index=xprv_data.index,
Expand Down Expand Up @@ -138,8 +138,8 @@
# version / key mismatch
xprv_data_bad = copy.copy(xprv_data)
xpub_data_bad = copy.copy(xpub_data)
xprv_data_bad.version = b"\x04\x88\xB2\x1E"
xpub_data_bad.version = b"\x04\x88\xAD\xE4"
xprv_data_bad.version = bytes.fromhex("04 88 b2 1e")
xpub_data_bad.version = bytes.fromhex("04 88 ad e4")
bad_bip32_keys += [
xprv_data_bad.serialize(False).decode("ascii"),
xpub_data_bad.serialize(False).decode("ascii"),
Expand Down Expand Up @@ -227,7 +227,7 @@
wif_n_uncompressed_string2 = " " + wif_n_uncompressed_string + " "

xprv0_data = BIP32KeyData(
version=b"\x04\x88\xAD\xE4",
version=bytes.fromhex("04 88 ad e4"),
depth=0,
parent_fingerprint=bytes.fromhex("00000000"),
index=0,
Expand All @@ -239,7 +239,7 @@
xprv0_string2 = " " + xprv0_string + " "

xprvn_data = BIP32KeyData(
version=b"\x04\x88\xAD\xE4",
version=bytes.fromhex("04 88 ad e4"),
depth=0,
parent_fingerprint=bytes.fromhex("00000000"),
index=0,
Expand Down Expand Up @@ -316,7 +316,7 @@
)

INF_xpub_data = BIP32KeyData(
version=b"\x04\x88\xB2\x1E",
version=bytes.fromhex("04 88 b2 1e"),
depth=xprv_data.depth,
parent_fingerprint=xprv_data.parent_fingerprint,
index=xprv_data.index,
Expand Down

0 comments on commit 554d110

Please sign in to comment.