12 releases (6 breaking)
0.12.0 | Jul 27, 2024 |
---|---|
0.11.1 | Jun 9, 2024 |
0.8.7 | Aug 23, 2023 |
0.8.3 | Mar 15, 2023 |
0.2.2 | Apr 4, 2021 |
#9 in #bip-32
210,804 downloads per month
Used in 295 crates
(10 directly)
120KB
2.5K
SLoC
coins-bip32
This is an implementation of BIP32. It uses k256 and re-exports several of its traits and types.
It can be used to build wallets and applications for Bitcoin and Ethereum.
Building
$ cargo build
$ cargo build --target wasm32-unknown-unknown
Run tests (make sure to run with all feature combinations):
$ cargo test
Run bench marks
$ cargo bench
$ cargo bench --no-default-features
lib.rs
:
This crate provides a basic implementation of BIP32, BIP49, and BIP84. It can be easily adapted to support other networks, using the paramaterizable encoder.
Typically, users will want to use the MainnetEncoder
, DerivedXPub
, DerivedXPriv
types,
which are available at the crate root. If key derivations are unknown, use the XPub
and
XPriv
objects instead. These may be deserialized using a network-specific Encoder
from the
enc
module.
Useful traits will need to be imported from the enc
or model
modules.
We also provide a prelude
module with everything you need to get started.
Warnings:
- This crate is NOT designed to be used in adversarial environments.
- This crate has NOT had a comprehensive security review.
Usage
use coins_bip32::prelude::*;
let digest = coins_core::Hash256::default();
let xpriv_str = "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi".to_owned();
let xpriv: XPriv = xpriv_str.parse().unwrap();
let child_xpriv = xpriv.derive_child(33)?;
let (sig, _recovery_id): (Signature, RecoveryId) = child_xpriv.sign_digest(digest.clone());
// Signing key types are associated with verifying key types. You can always derive a pubkey
let child_xpub = child_xpriv.verify_key();
child_xpub.verify_digest(digest.clone(), &sig)?;
MainnetEncoder::xpub_to_base58(&child_xpub)?;
Dependencies
~5MB
~88K SLoC