Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions dash-spv/tests/dashd_sync/tests_transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use dashcore::PublicKey;
use key_wallet::account::ManagedAccountTrait;
use key_wallet::bip32::{ChildNumber, ExtendedPrivKey};
use key_wallet::gap_limit::DEFAULT_EXTERNAL_GAP_LIMIT;
use key_wallet::mnemonic::{Language, Mnemonic};
use key_wallet::mnemonic::Mnemonic;
use key_wallet::wallet::initialization::WalletAccountCreationOptions;
use key_wallet::wallet::managed_wallet_info::coin_selection::SelectionStrategy;
use key_wallet::wallet::managed_wallet_info::fee::FeeRate;
Expand Down Expand Up @@ -263,7 +263,7 @@ const MEMPOOL_TIMEOUT: Duration = Duration::from_secs(30);
/// independently of any wallet state, so a test can pay addresses far beyond
/// the pre-generated pool window.
fn derive_external_addresses(mnemonic: &str, count: u32) -> Vec<Address> {
let mnemonic = Mnemonic::from_phrase(mnemonic, Language::English).expect("mnemonic");
let mnemonic = Mnemonic::from_phrase(mnemonic).expect("mnemonic");
let seed = mnemonic.to_seed("");
let secp = Secp256k1::new();
let master = ExtendedPrivKey::new_master(Network::Regtest, &seed).expect("master key");
Expand Down
41 changes: 8 additions & 33 deletions key-wallet-ffi/src/account_derivation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ use crate::keys::{FFIExtendedPrivKey, FFIPrivateKey};
use crate::{check_ptr, deref_ptr, unwrap_or_return};
use key_wallet::account::derivation::AccountDerivation;
use key_wallet::account::AccountTrait;
use key_wallet::Mnemonic;
use std::ffi::CString;
use std::os::raw::{c_char, c_uint};
use std::ptr;
Expand Down Expand Up @@ -124,15 +123,8 @@ pub unsafe extern "C" fn bls_account_derive_private_key_from_mnemonic(
} else {
Some(unwrap_or_return!(std::ffi::CStr::from_ptr(passphrase).to_str(), error))
};
let mnemonic_lang =
unwrap_or_return!(Mnemonic::from_phrase_in_any_language(mnemonic_str), error).language();
let sk = unwrap_or_return!(
account.inner().derive_from_mnemonic_private_key_at(
mnemonic_str,
passphrase_str,
mnemonic_lang,
index,
),
account.inner().derive_from_mnemonic_private_key_at(mnemonic_str, passphrase_str, index,),
error
);
unwrap_or_return!(CString::new(hex::encode(sk.to_be_bytes())), error).into_raw()
Expand Down Expand Up @@ -203,15 +195,8 @@ pub unsafe extern "C" fn eddsa_account_derive_private_key_from_mnemonic(
} else {
Some(unwrap_or_return!(std::ffi::CStr::from_ptr(passphrase).to_str(), error))
};
let mnemonic_lang =
unwrap_or_return!(Mnemonic::from_phrase_in_any_language(mnemonic_str), error).language();
let sk = unwrap_or_return!(
account.inner().derive_from_mnemonic_private_key_at(
mnemonic_str,
passphrase_str,
mnemonic_lang,
index,
),
account.inner().derive_from_mnemonic_private_key_at(mnemonic_str, passphrase_str, index,),
error
);
unwrap_or_return!(CString::new(hex::encode(sk.to_bytes())), error).into_raw()
Expand Down Expand Up @@ -360,15 +345,10 @@ pub unsafe extern "C" fn account_derive_extended_private_key_from_mnemonic(
} else {
Some(unwrap_or_return!(std::ffi::CStr::from_ptr(passphrase).to_str(), error))
};
let mnemonic_lang =
unwrap_or_return!(Mnemonic::from_phrase_in_any_language(mnemonic_str), error).language();
let derived = unwrap_or_return!(
account.inner().derive_from_mnemonic_extended_xpriv_at(
mnemonic_str,
passphrase_str,
mnemonic_lang,
index,
),
account
.inner()
.derive_from_mnemonic_extended_xpriv_at(mnemonic_str, passphrase_str, index,),
error
);
Box::into_raw(Box::new(FFIExtendedPrivKey::from_inner(derived)))
Expand Down Expand Up @@ -400,15 +380,10 @@ pub unsafe extern "C" fn account_derive_private_key_from_mnemonic(
} else {
Some(unwrap_or_return!(std::ffi::CStr::from_ptr(passphrase).to_str(), error))
};
let mnemonic_lang =
unwrap_or_return!(Mnemonic::from_phrase_in_any_language(mnemonic_str), error).language();
let derived = unwrap_or_return!(
account.inner().derive_from_mnemonic_extended_xpriv_at(
mnemonic_str,
passphrase_str,
mnemonic_lang,
index,
),
account
.inner()
.derive_from_mnemonic_extended_xpriv_at(mnemonic_str, passphrase_str, index,),
error
);
Box::into_raw(Box::new(FFIPrivateKey::from_secret(derived.private_key)))
Expand Down
4 changes: 2 additions & 2 deletions key-wallet-ffi/src/mnemonic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ pub unsafe extern "C" fn mnemonic_validate(mnemonic: *const c_char, error: *mut
let mnemonic = deref_ptr!(mnemonic, error);
let mnemonic_str = unwrap_or_return!(CStr::from_ptr(mnemonic).to_str(), error);

if Mnemonic::from_phrase_in_any_language(mnemonic_str).is_err() {
if Mnemonic::from_phrase(mnemonic_str).is_err() {
(*error).set(
FFIErrorCode::InvalidMnemonic,
"Invalid mnemonic: does not match any supported language",
Expand Down Expand Up @@ -205,7 +205,7 @@ pub unsafe extern "C" fn mnemonic_to_seed(
unwrap_or_return!(CStr::from_ptr(passphrase).to_str(), error)
};

let m = unwrap_or_return!(Mnemonic::from_phrase_in_any_language(mnemonic_str), error);
let m = unwrap_or_return!(Mnemonic::from_phrase(mnemonic_str), error);
let seed = m.to_seed(passphrase_str);
let seed_bytes: &[u8] = seed.as_ref();

Expand Down
2 changes: 1 addition & 1 deletion key-wallet-ffi/src/wallet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ pub unsafe extern "C" fn wallet_create_from_mnemonic_with_options(
let mnemonic = deref_ptr!(mnemonic, error);
let mnemonic_str = unwrap_or_return!(CStr::from_ptr(mnemonic).to_str(), error);

let mnemonic = unwrap_or_return!(Mnemonic::from_phrase_in_any_language(mnemonic_str), error);
let mnemonic = unwrap_or_return!(Mnemonic::from_phrase(mnemonic_str), error);

let network_rust: Network = network.into();
let creation_options = if account_options.is_null() {
Expand Down
3 changes: 1 addition & 2 deletions key-wallet-ffi/tests/test_valid_addr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ fn test_valid_testnet_address() {
use key_wallet::{Mnemonic, Network, Wallet};

let mnemonic_str = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
let mnemonic =
Mnemonic::from_phrase(mnemonic_str, key_wallet::mnemonic::Language::English).unwrap();
let mnemonic = Mnemonic::from_phrase(mnemonic_str).unwrap();

let wallet =
Wallet::from_mnemonic(mnemonic, Network::Testnet, WalletAccountCreationOptions::Default)
Expand Down
4 changes: 2 additions & 2 deletions key-wallet-manager/src/accessors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,12 +272,12 @@ impl<T: WalletInfoInterface + Send + Sync + 'static> WalletManager<T> {
mod tests {
use super::*;
use crate::test_helpers::TEST_MNEMONIC;
use key_wallet::mnemonic::{Language, Mnemonic};
use key_wallet::mnemonic::Mnemonic;
use key_wallet::wallet::initialization::WalletAccountCreationOptions;
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;

fn build_wallet() -> Wallet {
let mnemonic = Mnemonic::from_phrase(TEST_MNEMONIC, Language::English).unwrap();
let mnemonic = Mnemonic::from_phrase(TEST_MNEMONIC).unwrap();
Wallet::from_mnemonic(mnemonic, Network::Testnet, WalletAccountCreationOptions::Default)
.expect("wallet from mnemonic")
}
Expand Down
4 changes: 2 additions & 2 deletions key-wallet-manager/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ impl<T: WalletInfoInterface + Send + Sync + 'static> WalletManager<T> {
birth_height: CoreBlockHeight,
account_creation_options: key_wallet::wallet::initialization::WalletAccountCreationOptions,
) -> Result<WalletId, WalletError> {
let mnemonic_obj = Mnemonic::from_phrase_in_any_language(mnemonic)
let mnemonic_obj = Mnemonic::from_phrase(mnemonic)
.map_err(|e| WalletError::InvalidMnemonic(e.to_string()))?;

let wallet = Wallet::from_mnemonic(mnemonic_obj, self.network, account_creation_options)
Expand Down Expand Up @@ -339,7 +339,7 @@ impl<T: WalletInfoInterface + Send + Sync + 'static> WalletManager<T> {
) -> Result<(Vec<u8>, WalletId), WalletError> {
use zeroize::Zeroize;

let mnemonic_obj = Mnemonic::from_phrase_in_any_language(mnemonic)
let mnemonic_obj = Mnemonic::from_phrase(mnemonic)
.map_err(|e| WalletError::InvalidMnemonic(e.to_string()))?;

let mut wallet =
Expand Down
7 changes: 2 additions & 5 deletions key-wallet/examples/account_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use key_wallet::account::{
};
use key_wallet::bip32::{ChildNumber, DerivationPath, ExtendedPrivKey, ExtendedPubKey};
use key_wallet::managed_account::address_pool::AddressPoolType;
use key_wallet::mnemonic::{Language, Mnemonic};
use key_wallet::mnemonic::Mnemonic;
use key_wallet::Network;
use secp256k1::Secp256k1;

Expand All @@ -18,10 +18,7 @@ use key_wallet::derivation_slip10::ExtendedEd25519PrivKey;

fn main() -> Result<(), Box<dyn std::error::Error>> {
// Generate a mnemonic for testing
let mnemonic = Mnemonic::from_phrase(
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
Language::English,
)?;
let mnemonic = Mnemonic::from_phrase("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about")?;
let seed = mnemonic.to_seed("");

// Create master key
Expand Down
6 changes: 1 addition & 5 deletions key-wallet/examples/basic_usage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
use core::str::FromStr;
use dashcore::{Address, Network as DashNetwork};
use key_wallet::bip32::{ChildNumber, DerivationPath, ExtendedPrivKey, ExtendedPubKey};
use key_wallet::mnemonic::Language;
use key_wallet::prelude::*;
use key_wallet::Network;

Expand All @@ -12,10 +11,7 @@ fn main() -> core::result::Result<(), Box<dyn std::error::Error>> {

// 1. Create a mnemonic
println!("1. Creating mnemonic...");
let mnemonic = Mnemonic::from_phrase(
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
Language::English
)?;
let mnemonic = Mnemonic::from_phrase("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about")?;
println!(" Mnemonic: {}", mnemonic.phrase());
println!(" Word count: {}", mnemonic.word_count());

Expand Down
7 changes: 2 additions & 5 deletions key-wallet/src/account/account_collection_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ mod tests {
Account, AccountCollection, AccountType, BLSAccount, EdDSAAccount, StandardAccountType,
};
use crate::bip32::{ExtendedPrivKey, ExtendedPubKey};
use crate::mnemonic::{Language, Mnemonic};
use crate::mnemonic::Mnemonic;
use crate::Network;
use secp256k1::Secp256k1;

Expand All @@ -16,10 +16,7 @@ mod tests {
let mut collection = AccountCollection::new();

// Create test keys
let mnemonic = Mnemonic::from_phrase(
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
Language::English,
).unwrap();
let mnemonic = Mnemonic::from_phrase("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about").unwrap();
let seed = mnemonic.to_seed("");
let master = ExtendedPrivKey::new_master(Network::Testnet, &seed).unwrap();
let secp = Secp256k1::new();
Expand Down
9 changes: 4 additions & 5 deletions key-wallet/src/account/derivation.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::managed_account::address_pool::AddressPoolType;
use crate::mnemonic::Language;
use crate::{ChildNumber, DerivationPath, Error, Mnemonic};
use dashcore::Address;

Expand Down Expand Up @@ -199,27 +198,27 @@ pub trait AccountDerivation<EPrivKeyType, EPubKeyType, PubKeyType, PrivKeyType>
) -> Result<PrivKeyType, Error>;

/// Derive an extended private key from a BIP39 mnemonic and optional passphrase at the given index.
/// The mnemonic's wordlist is auto-detected ([`Mnemonic::from_phrase`]).
fn derive_from_mnemonic_extended_xpriv_at(
&self,
mnemonic: &str,
passphrase: Option<&str>,
language: Language,
index: u32,
) -> Result<EPrivKeyType, Error> {
let m = Mnemonic::from_phrase(mnemonic, language)?;
let m = Mnemonic::from_phrase(mnemonic)?;
let seed = m.to_seed(passphrase.unwrap_or(""));
self.derive_from_seed_extended_xpriv_at(&seed, index)
}

/// Derive a private key from a BIP39 mnemonic and optional passphrase at the given index.
/// The mnemonic's wordlist is auto-detected ([`Mnemonic::from_phrase`]).
fn derive_from_mnemonic_private_key_at(
&self,
mnemonic: &str,
passphrase: Option<&str>,
language: Language,
index: u32,
) -> Result<PrivKeyType, Error> {
let m = Mnemonic::from_phrase(mnemonic, language)?;
let m = Mnemonic::from_phrase(mnemonic)?;
let seed = m.to_seed(passphrase.unwrap_or(""));
self.derive_from_seed_private_key_at(&seed, index)
}
Expand Down
7 changes: 2 additions & 5 deletions key-wallet/src/account/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -400,13 +400,10 @@ impl fmt::Display for Account {
mod tests {
use super::*;
use crate::bip32::ChildNumber;
use crate::mnemonic::{Language, Mnemonic};
use crate::mnemonic::Mnemonic;

pub(crate) fn test_account() -> Account {
let mnemonic = Mnemonic::from_phrase(
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
Language::English,
).unwrap();
let mnemonic = Mnemonic::from_phrase("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about").unwrap();
let seed = mnemonic.to_seed("");
let master = ExtendedPrivKey::new_master(Network::Testnet, &seed).unwrap();

Expand Down
21 changes: 4 additions & 17 deletions key-wallet/src/derivation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -429,10 +429,7 @@ mod tests {
// ✓ Test special derivation paths (from DashSync special purpose paths)
#[test]
fn test_special_derivation_paths() {
let mnemonic = Mnemonic::from_phrase(
"upper renew that grow pelican pave subway relief describe enforce suit hedgehog blossom dose swallow",
crate::mnemonic::Language::English
).unwrap();
let mnemonic = Mnemonic::from_phrase("upper renew that grow pelican pave subway relief describe enforce suit hedgehog blossom dose swallow").unwrap();

let seed = mnemonic.to_seed("");
let master_key = ExtendedPrivKey::new_master(crate::Network::Mainnet, &seed).unwrap();
Expand Down Expand Up @@ -537,10 +534,7 @@ mod tests {
// ✓ Test derivation path builder pattern
#[test]
fn test_derivation_path_builder() {
let mnemonic = Mnemonic::from_phrase(
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
crate::mnemonic::Language::English
).unwrap();
let mnemonic = Mnemonic::from_phrase("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about").unwrap();

let seed = mnemonic.to_seed("");
let master_key = ExtendedPrivKey::new_master(crate::Network::Testnet, &seed).unwrap();
Expand Down Expand Up @@ -584,10 +578,7 @@ mod tests {
// ✓ Test key signing and verification
#[test]
fn test_key_signing_deterministic() {
let mnemonic = Mnemonic::from_phrase(
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
crate::mnemonic::Language::English
).unwrap();
let mnemonic = Mnemonic::from_phrase("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about").unwrap();

let seed = mnemonic.to_seed("");
let master_key = ExtendedPrivKey::new_master(crate::Network::Testnet, &seed).unwrap();
Expand Down Expand Up @@ -629,10 +620,7 @@ mod tests {
// ✓ Test key recovery from signature
#[test]
fn test_key_recovery_from_signature() {
let mnemonic = Mnemonic::from_phrase(
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
crate::mnemonic::Language::English
).unwrap();
let mnemonic = Mnemonic::from_phrase("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about").unwrap();

let seed = mnemonic.to_seed("");
let master_key = ExtendedPrivKey::new_master(crate::Network::Testnet, &seed).unwrap();
Expand Down Expand Up @@ -676,7 +664,6 @@ mod tests {

let mnemonic = Mnemonic::from_phrase(
"birth kingdom trash renew flavor utility donkey gasp regular alert pave layer",
crate::mnemonic::Language::English,
)
.unwrap();

Expand Down
7 changes: 2 additions & 5 deletions key-wallet/src/managed_account/address_pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1329,13 +1329,10 @@ impl Default for AddressPoolBuilder {
#[cfg(test)]
mod tests {
use super::*;
use crate::mnemonic::{Language, Mnemonic};
use crate::mnemonic::Mnemonic;

fn test_key_source() -> KeySource {
let mnemonic = Mnemonic::from_phrase(
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
Language::English,
).unwrap();
let mnemonic = Mnemonic::from_phrase("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about").unwrap();
let seed = mnemonic.to_seed("");
let master = ExtendedPrivKey::new_master(Network::Testnet, &seed).unwrap();

Expand Down
Loading
Loading