import os import binascii import ecdsa import hmac import hashlib seed = os.urandom(32) root_key = b'Bitcoin Seed' def hmac_sha512(data, keymessage): hash = hmac.new(data, keymessage, hashlib.sha512).digest() return hash def create_pubkey(private_key): publickey = ecdsa.SigningKey.from_string(private_key, curve=ecdsa.SECP256k1).verifying_key.to_string() return publickey master = hmac_sha512(seed, root_key) master_secretkey = master[:32] master_chaincode = master[32:] master_publickey = create_pubkey(master_secretkey) master_publickey_integer = int.from_bytes(master_publickey[32:], byteorder="big") if master_publickey_integer % 2 == 0: master_publickey_x = b"\x02" + master_publickey[:32] else: master_publickey_x = b"\x03" + master_publickey[:32] print("マスター秘密鍵") print(binascii.hexlify(master_secretkey)) print("\n") print("マスターチェーンコード") print(binascii.hexlify(master_chaincode)) print("\n") print("マスター公開鍵") print(binascii.hexlify(master_publickey_x)) index = 0 index_bytes = index.to_bytes(8, "big") data = master_publickey_x + index_bytes result_hmac512 = hmac_sha512(data, master_chaincode) sum_integer = int.from_bytes(master_secretkey, "big") + int.from_bytes(result_hmac512[:32], "big") p = 2**256 - 2**32 - 2**9 - 2**8 - 2**7 - 2**6 - 2**4 - 1 child_secretkey = (sum_integer % p).to_bytes(32, "big") print("\n") print("子秘密鍵") print(binascii.hexlify(child_secretkey))