bip0032 0.1.0

Another Rust implementation of BIP-0032 standard
Documentation
//! # bip0032
//!
//! [![](https://github.com/koushiro/rust-bips/actions/workflows/bip0032.yml/badge.svg)][actions]
//! [![](https://img.shields.io/docsrs/bip0032)][docs.rs]
//! [![](https://img.shields.io/crates/v/bip0032)][crates.io]
//! [![](https://img.shields.io/crates/l/bip0032)][crates.io]
//! [![](https://img.shields.io/crates/d/bip0032.svg)][crates.io]
//! [![](https://img.shields.io/badge/MSRV-1.85.0-green?logo=rust)][whatrustisit]
//!
//! [actions]: https://github.com/koushiro/rust-bips/actions
//! [docs.rs]: https://docs.rs/bip0032
//! [crates.io]: https://crates.io/crates/bip0032
//! [whatrustisit]: https://www.whatrustisit.com
//!
//! Another Rust implementation of [BIP-0032](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) standard.
//!
//! ## Support curves and features
//!
//! | Curve | Feature | Backends | Hardened | Non-hardened (private) | Non-hardened (public) | Serialization |
//! | --- | --- | --- | --- | --- | --- | --- |
//! | secp256k1 | `k256` \| `secp256k1` | k256, secp256k1 | yes | yes | yes | yes |
//!
//! ## Usage
//!
//! Seed material is typically derived from a BIP-0039 mnemonic (for example, via
//! [bip0039](https://crates.io/crates/bip0039)).
//!
//! ```rust,ignore
//! 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).
//!
//! ```rust
//! use bip0032::{DerivationPath, ExtendedPrivateKey, Version, curve::secp256k1::*};
//!
//! # let seed = [0u8; 64];
//! let master = ExtendedPrivateKey::<Secp256k1Curve<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();
//! ```
//!
//! 2. Private parent key -> public child key.
//!
//! ```rust
//! use bip0032::{DerivationPath, ExtendedPrivateKey, Version, curve::secp256k1::*};
//!
//! # let seed = [0u8; 64];
//! let master = ExtendedPrivateKey::<Secp256k1Curve<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();
//! ```
//!
//! 3. Public parent key -> public child key (non-hardened only).
//!
//! ```rust
//! use bip0032::{DerivationPath, ExtendedPublicKey, Version, curve::secp256k1::*};
//!
//! let parent_xpub = "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8";
//! let parent: ExtendedPublicKey<Secp256k1Curve<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();
//! ```
//!
//! 4. Public parent key -> private child key: impossible (BIP-0032 does not allow it).
//!
//! # SLIP-0010 (optional)
//!
//! SLIP-0010 support is available behind the `slip10` feature. It shares the same
//! `ExtendedPrivateKey`/`ExtendedPublicKey` types but uses SLIP-0010 derivation
//! rules.

#![deny(unused_imports)]
#![deny(missing_docs)]
#![deny(unsafe_code)]
#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(docsrs, feature(doc_cfg))]

#[cfg(not(feature = "std"))]
extern crate alloc;

pub mod curve;
mod error;
mod path;
mod xkey;

#[cfg(feature = "slip10")]
pub use self::xkey::slip10;
pub use self::{
    error::*,
    path::{ChildNumber, DerivationPath, HardenedChildNumber, HardenedDerivationPath},
    xkey::{ExtendedKeyPayload, ExtendedPrivateKey, ExtendedPublicKey, KnownVersion, Version},
};