Crate hd_wallet

Source
Expand description

License Docs Crates io Discord

§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::{Slip10, 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, Slip10>(master_key_pair);

§Features

  • curve-secp256k1, curve-secp256r1, curve-ed25519, curve-stark add curve implementation into the crate curves module
  • all-curves adds all curves listed above
  • slip10, edwards, stark add slip10, edwards, and stark HD derivations respectively
  • serde adds serde::{Serialize, Deserialize} traits implementation to the types in the library

§Join us in Discord!

Feel free to reach out to us in Discord!

Re-exports§

pub use edwards::Edwards;
pub use slip10::Slip10;
pub use stark::Stark;

Modules§

curves
Curves supported out of the box
edwards
Edwards HD derivation
errors
When something goes wrong
slip10
SLIP10 derivation
stark
Stark HD derivation

Structs§

DerivedShift
A shift that can be applied to parent key to obtain a child key
ExtendedKeyPair
Pair of extended secret and public keys
ExtendedPublicKey
Extended public key
ExtendedSecretKey
Extended secret key
HardenedIndex
Child index in range $2^{31} \le i < 2^{32}$ corresponding to a hardened wallet
NonHardenedIndex
Child index in range $0 \le i < 2^{31}$ corresponding to a non-hardened wallet

Enums§

ChildIndex
Child index, whether hardened or not

Constants§

H
Beginning of hardened child indexes

Traits§

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

Type Aliases§

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