bip0032 0.0.1

Another Rust implementation of BIP-0032 standard
Documentation

bip0032

Another Rust implementation of BIP-0032 standard.

Usage

Seed material is typically derived from a BIP-0039 mnemonic (for example, via bip0039).

use bip0039::{Count, English, Mnemonic};

let mnemonic = <Mnemonic<English>>::generate(Count::Words12);
let seed = mnemonic.to_seed("");

The examples below assume the seed from above.

  1. Private parent key -> private child key (supports hardened).
use bip0032::{DerivationPath, ExtendedPrivateKey, Version, backend::K256Backend};

let master = ExtendedPrivateKey::<K256Backend>::new(&seed).unwrap();
let path: DerivationPath = "m/0H/1".parse().unwrap();
let child = master.derive_path(&path).unwrap();
let xprv = child
    .encode_with(Version::XPRV)
    .unwrap()
    .to_string();
  1. Private parent key -> public child key.
use bip0032::{DerivationPath, ExtendedPrivateKey, Version, backend::K256Backend};

let master = ExtendedPrivateKey::<K256Backend>::new(&seed).unwrap();
let path: DerivationPath = "m/0H/1".parse().unwrap();
let child = master.derive_path(&path).unwrap();
let xpub = child
    .public_key()
    .encode_with(Version::XPUB)
    .unwrap()
    .to_string();
  1. Public parent key -> public child key (non-hardened only).
use bip0032::{DerivationPath, ExtendedPublicKey, Version, backend::K256Backend};

let parent_xpub = "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8";
let parent: ExtendedPublicKey<K256Backend> = parent_xpub.parse().unwrap();
let path: DerivationPath = "m/0/1".parse().unwrap();
let child = parent.derive_path(&path).unwrap();
let xpub = child
    .encode_with(Version::XPUB)
    .unwrap()
    .to_string();
  1. Public parent key -> private child key: impossible (BIP-0032 does not allow it).

Documentation

See documentation and examples at https://docs.rs/bip0032.

Features

  • Derivation path parsing with hardened suffixes (', h, H)
  • Extended key Base58Check encoding/decoding (xpub/xprv)
  • Multiple secp256k1 backends (k256 default, k256ecdsa, secp256k1, libsecp256k1)
  • Support no_std environment

Performance

See benchmarks for more details

Alternatives

License

This project is licensed under the Apache License, Version 2.0 - see the LICENSE file for details.