mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-18 09:31:02 +00:00
b4eb406ee5
* Add and use subxt-signer crate for WASM compatible signing * cargo fmt * dev keypairs already references * WIP fix various breakages * re-jig features to be simpler and various test fixes etc * doc and web fix * fix various bits and pieces * fix a test I broke * dev-deps can't be linked to in docs, hrmph * cargo fmt * another doc link * document the subxt_signer crate more thoroughly * move feature flag for consistency * more docs, no default subxt feature flag on signer, update release instrs * Add missing license header * unwrap_inner => into_inner * extend a test a little to better check derive junctions * note more clearly that the crypto bits come from sp_core::crypto
30 lines
878 B
Rust
30 lines
878 B
Rust
// Copyright 2019-2023 Parity Technologies (UK) Ltd.
|
|
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
|
// see LICENSE for license details.
|
|
|
|
use hmac::Hmac;
|
|
use pbkdf2::pbkdf2;
|
|
use sha2::Sha512;
|
|
use zeroize::Zeroize;
|
|
|
|
/// This is taken from `substrate-bip39` so that we can keep dependencies in line, and
|
|
/// is the same logic that sp-core uses to go from mnemonic entropy to seed. Returns
|
|
/// `None` if invalid length.
|
|
pub fn seed_from_entropy(entropy: &[u8], password: &str) -> Option<[u8; 64]> {
|
|
if entropy.len() < 16 || entropy.len() > 32 || entropy.len() % 4 != 0 {
|
|
return None;
|
|
}
|
|
|
|
let mut salt = String::with_capacity(8 + password.len());
|
|
salt.push_str("mnemonic");
|
|
salt.push_str(password);
|
|
|
|
let mut seed = [0u8; 64];
|
|
|
|
pbkdf2::<Hmac<Sha512>>(entropy, salt.as_bytes(), 2048, &mut seed).ok()?;
|
|
|
|
salt.zeroize();
|
|
|
|
Some(seed)
|
|
}
|