cardano-serialization-lib
cardano-serialization-lib copied to clipboard
Upstream ed25519-bip32 version change
We should add this upstream changes into our codebase
https://github.com/input-output-hk/chain-libs/commit/0295b6db5fea512838a957739cc33746c6d0da88
Would this also include the removal of any <Ed25519Bip32> within the chain_crypto/derive.rs ?
there are a few conversions from <Ed25519Bip32> to <Ed25519> or <Ed25519Extended> that probably no longer make sense.
pub fn to_raw_sk(key: &SecretKey<Ed25519Bip32>) -> SecretKey<Ed25519Extended> {
SecretKey(ExtendedPriv::from(&key.0))
}
pub fn to_raw_pk(key: &PublicKey<Ed25519Bip32>) -> PublicKey<Ed25519> {
PublicKey(Pub::from_xpub(&key.0))
}
there's also a few operations on <Ed25519Bip32> that might be removed or transformed
pub fn derive_sk_ed25519(key: &SecretKey<Ed25519Bip32>, index: u32) -> SecretKey<Ed25519Bip32> {
let new_key = key.0.derive(DerivationScheme::V2, index);
SecretKey(new_key)
}
pub fn derive_pk_ed25519(
key: &PublicKey<Ed25519Bip32>,
index: u32,
) -> Result<PublicKey<Ed25519Bip32>, DerivationError> {
key.0.derive(DerivationScheme::V2, index).map(PublicKey)
}
pub fn from_bip39_entropy(entropy: &[u8], password: &[u8]) -> SecretKey<Ed25519Bip32> {
let mut pbkdf2_result = [0; XPRV_SIZE];
const ITER: u32 = 4096;
let mut mac = Hmac::new(Sha512::new(), password);
pbkdf2(&mut mac, entropy.as_ref(), ITER, &mut pbkdf2_result);
SecretKey(XPrv::normalize_bytes_force3rd(pbkdf2_result))
}