mirror of
https://github.com/bitcoin/bips.git
synced 2025-10-11 13:12:38 +02:00
328: Add reference implementation
This commit is contained in:
31
bip-0328/reference.py
Normal file
31
bip-0328/reference.py
Normal file
@@ -0,0 +1,31 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
from _base58 import xpub_to_pub_hex
|
||||
from _bip327 import cbytes, key_agg
|
||||
from _xpub import ExtendedKey
|
||||
|
||||
CHAINCODE = bytes.fromhex("868087ca02a6f974c4598924c36b57762d32cb45717167e300622c7167e38965")
|
||||
|
||||
def aggregate_to_xpub(aggregate: bytes) -> ExtendedKey:
|
||||
return ExtendedKey(ExtendedKey.MAINNET_PUBLIC, 0, b"\x00\x00\x00\x00", 0, CHAINCODE, None, aggregate)
|
||||
|
||||
def test_aggregate_to_xpub():
|
||||
with open(os.path.join(sys.path[0], "vectors.json"), "r") as f:
|
||||
test_data = json.load(f)
|
||||
|
||||
for test_case in test_data:
|
||||
keys = [bytes.fromhex(k) for k in test_case["keys"]]
|
||||
|
||||
agg_ctx = key_agg(keys)
|
||||
pub = cbytes(agg_ctx.Q)
|
||||
assert pub.hex() == test_case["aggregate_pubkey"]
|
||||
|
||||
xpub = aggregate_to_xpub(pub)
|
||||
assert xpub.to_string() == test_case["xpub"]
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_aggregate_to_xpub()
|
Reference in New Issue
Block a user