bip32.py 文件源码

python
阅读 18 收藏 0 点赞 0 评论 0

项目:bitencrypt 作者: OriginalMy 项目源码 文件源码
def subkey_public_pair_chain_code_pair(public_pair, chain_code_bytes, i):
    """
    Yield info for a child node for this node.

    public_pair:
        base public pair
    chain_code:
        base chain code
    i:
        the index for this node.

    Returns a pair (new_public_pair, new_chain_code)
    """
    i_as_bytes = struct.pack(">l", i)
    sec = public_pair_to_sec(public_pair, compressed=True)
    data = sec + i_as_bytes

    I64 = hmac.HMAC(key=chain_code_bytes, msg=data, digestmod=hashlib.sha512).digest()

    I_left_as_exponent = from_bytes_32(I64[:32])
    x, y = public_pair

    the_point = I_left_as_exponent * ecdsa.generator_secp256k1 + \
        ecdsa.Point(ecdsa.generator_secp256k1.curve(), x, y, ORDER)
    if the_point == INFINITY:
        logger.critical(_SUBKEY_VALIDATION_LOG_ERR_FMT)
        raise DerivationError('K_{} == {}'.format(i, the_point))

    I_left_as_exponent = from_bytes_32(I64[:32])
    if I_left_as_exponent >= ORDER:
        logger.critical(_SUBKEY_VALIDATION_LOG_ERR_FMT)
        raise DerivationError('I_L >= {}'.format(ORDER))
    new_public_pair = the_point.pair()
    new_chain_code = I64[32:]
    return new_public_pair, new_chain_code
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号