#bip-39 #mnemonic #phrase #seed #walletd #word #passphrase

walletd_bip39

WalletD 的 BIP39 密码本实现

2 个不稳定版本

0.2.0 2023年5月15日
0.1.0 2023年4月20日

#5 in #walletd


3 crates 中使用

MIT/Apache

100KB
1K SLoC

BIP39 密码本种子 rust 库

示例

创建 BIP39 密码本短语和种子的基本示例

cargo run --manifest-path ./examples/basic/Cargo.toml

从短语创建 BIP39 密码本并创建种子的导入示例

cargo run --manifest-path ./examples/import/Cargo.toml

lib.rs:

WalletD BIP39

这是一个 Rust 库,实现了 BIP39 标准,用于 HD 钱包密码本短语。简化了 BIP39 密码本短语和种子的生成和导入。

快速入门指南

要访问这个 walletD 库中与 BIP39 密码本相关的不同功能,可以使用 [Bip39Mnemonic] 构建器 ([Bip39MnemonicBuilder]),也可以通过 [Bip39Mnemonic::builder()] 使用默认设置。

使用默认设置创建

[Bip39MnemonicBuilder] 的默认设置是: 英语语言密码本短语中包含 12 个单词,没有指定密码。您可以使用 [Bip39Mnemonic] 结构体中的 to_seed 方法获取密码本种子。

以下是如何使用默认设置创建新的随机 BIP39 密码本的示例。

use walletd_bip39::prelude::*;

fn bip39_mnemonics() -> Result<(), walletd_bip39::Error> {
let mnemonic = Bip39Mnemonic::builder().build()?;
// display the generated mnemonic phrase
println!("mnemonic phrase: {}", mnemonic.phrase());
// can use the hex format specifier to print the seed as hex
println!("mnemonic seed hex: {:x}", mnemonic.to_seed());
// can use the as_bytes method to get the seed as a byte array
println!("mnemonic seed as bytes: {:?}", mnemonic.to_seed().as_bytes());
Ok(())
}

指定选项

您可以通过提供所需的设置来覆盖默认设置。您还可以以可变的方式重用 [Bip39MnemonicBuilder] 对象来创建多个 BIP39 密码本,甚至可以覆盖以前的设置。

let mut mnemonic_builder = Bip39Mnemonic::builder();

// specify that the mnemonic phrase should consist of 24 words
let mnemonic_1 = mnemonic_builder.mnemonic_type(Bip39MnemonicType::Words24).build()?;
println!("mnemonic_1 phrase: {}", mnemonic_1.phrase());
println!("mnemonic_1 seed hex: {:x}", mnemonic_1.to_seed());
// see the number of entropy bits for the specified mnemonic type
println!("mnemonic_1 number of entropy bits: {}", mnemonic_1.mnemonic_type().entropy_bits());

// reuse builder but now specify 18 words in the mnemonic phrase
let mnemonic_2 = mnemonic_builder.mnemonic_type(Bip39MnemonicType::Words18).build()?;
println!("mnemonic_2 phrase: {}", mnemonic_2.phrase());
println!("mnemonic_2 seed hex: {:x}", mnemonic_2.to_seed());
println!("mnemonic_2 number of entropy bits: {}", mnemonic_2.mnemonic_type().entropy_bits());

在某些情况下,即使使用默认设置,提供所有规格可能也有用。

可选密码短语的使用

您可以为生成助记词指定一个密码短语。请注意,在恢复助记词时也必须使用相同的密码短语。

警告:如果使用密码短语规格生成[Bip39Mnemonic]助记短语,则恢复[Bip39Mnemonic]时需要助记短语和密码短语。指定的密码短语不会存储在[Bip39Mnemonic]结构中。重要的是要安全地存储您指定的密码短语以及助记短语,以便能够恢复[Bip39Mnemonic]。

let mnemonic_3 = Bip39Mnemonic::builder()
    .passphrase("mypassphrase")
    .mnemonic_type(Bip39MnemonicType::Words12)
    .language(Bip39Language::English)
    .build()?;
println!("mnemonic_3 phrase: {}", mnemonic_3.phrase());
println!("mnemonic_3 seed hex: {:x}", mnemonic_3.to_seed());
}

恢复助记词

[Bip39Mnemonic]可以从指定的有效助记短语恢复,如果生成助记词时指定了密码短语,也可以从指定的有效助记短语和密码短语中恢复。

let mnemonic_phrase = "outer ride neither foil glue number place usage ball shed dry point";
let restored_mnemonic_1 = Bip39Mnemonic::builder().mnemonic_phrase(mnemonic_phrase).build()?;
println!("restored_mnemonic_1 phrase: {}", restored_mnemonic_1.phrase());
println!("restored_mnemonic_1 seed hex: {:x}", restored_mnemonic_1.to_seed());

let specified_passphrase = "mypassphrase";
let restored_mnemonic_2 = Bip39Mnemonic::builder().mnemonic_phrase(mnemonic_phrase).passphrase(specified_passphrase).build()?;
println!("restored_mnemonic_2 phrase: {}", restored_mnemonic_2.phrase());
println!("restored_mnemonic_2 seed hex: {:x}", restored_mnemonic_2.to_seed());

依赖关系

~6MB
~132K SLoC