Bitcoin full node and query server

May 22, 2019

View in context in the libbitcoin Slack #general mirror.

N
narodnik06:08
hd_public hd_public::derive_public(uint32_t index) const
{
    if (index >= hd_first_hardened_key)
        return {};

    const auto data = splice(point_, to_big_endian(index));
    const auto intermediate = split(hmac_sha512_hash(data, chain_));

    // The returned child key Ki is point(parse256(IL)) + Kpar.
    auto child = point_;
    if (!ec_add(child, intermediate.left))
        return {};

    if (lineage_.depth == max_uint8)
        return {};

    const hd_lineage lineage
    {
        lineage_.prefixes,
        static_cast<uint8_t>(lineage_.depth + 1),
        fingerprint(),
        index
    };

    return hd_public(child, intermediate.right, lineage);
}