Crate hd_wallet

source
Expand description

§HD wallets derivation

This crate supports the following HD derivations:

To perform HD derivation, use HdWallet trait.

§Example: SLIP10 derivation

Derive a master key from the seed, and then derive a child key m/1H/10:

use hd_wallet::{slip10, curves::Secp256k1};

let seed = b"16-64 bytes of high entropy".as_slice();
let master_key = slip10::derive_master_key::<Secp256k1>(seed)?;
let master_key_pair = hd_wallet::ExtendedKeyPair::from(master_key);

let child_key_pair = slip10::derive_child_key_pair_with_path(
    &master_key_pair,
    [1 + hd_wallet::H, 10],
);

§Example: via HdWallet trait

HdWallet trait generalizes HD derivation algorithm, you can use it with generics:

use hd_wallet::{Slip10Like, curves::Secp256r1};

fn derive_using_generic_algo<E: generic_ec::Curve, Hd: hd_wallet::HdWallet<E>>(
    master_key: hd_wallet::ExtendedKeyPair<E>,
) -> hd_wallet::ExtendedKeyPair<E>
{
    Hd::derive_child_key_pair_with_path(
        &master_key,
        [1 + hd_wallet::H, 10],
    )
}

// Use it with any HD derivation:
let seed = b"16-64 bytes of high entropy".as_slice();
let master_key = hd_wallet::slip10::derive_master_key(seed)?;
let master_key_pair = hd_wallet::ExtendedKeyPair::from(master_key);
let child_key = derive_using_generic_algo::<Secp256r1, Slip10Like>(master_key_pair);

§Features

  • std: enables std library support (mainly, it just implements Error trait for the error types)
  • curve-secp256k1, curve-secp256r1, curve-ed25519 add curve implementation into the crate curves module

Modules§

Structs§

Enums§

Constants§

  • Beginning of hardened child indexes

Traits§

  • Core functionality of HD wallet derivation, everything is defined on top of it
  • HD derivation

Type Aliases§

  • Chain code of extended key as defined in SLIP-10