bip32: make Xpriv::new_master be infallible
The only error path for this is cryptographically unreachable and was removed in a previous commit.
This commit is contained in:
parent
0e5e021b69
commit
32d96f6c33
|
@ -33,7 +33,7 @@ fn main() {
|
||||||
let secp = Secp256k1::preallocated_new(buf.as_mut_slice()).unwrap();
|
let secp = Secp256k1::preallocated_new(buf.as_mut_slice()).unwrap();
|
||||||
|
|
||||||
// calculate root key from seed
|
// calculate root key from seed
|
||||||
let root = Xpriv::new_master(NetworkKind::Main, &seed).unwrap();
|
let root = Xpriv::new_master(NetworkKind::Main, &seed);
|
||||||
println!("Root key: {}", root);
|
println!("Root key: {}", root);
|
||||||
|
|
||||||
// derive child xpub
|
// derive child xpub
|
||||||
|
|
|
@ -598,12 +598,12 @@ impl From<InvalidBase58PayloadLengthError> for Error {
|
||||||
|
|
||||||
impl Xpriv {
|
impl Xpriv {
|
||||||
/// Constructs a new master key from a seed value
|
/// Constructs a new master key from a seed value
|
||||||
pub fn new_master(network: impl Into<NetworkKind>, seed: &[u8]) -> Result<Xpriv, Error> {
|
pub fn new_master(network: impl Into<NetworkKind>, seed: &[u8]) -> Xpriv {
|
||||||
let mut engine = HmacEngine::<sha512::HashEngine>::new(b"Bitcoin seed");
|
let mut engine = HmacEngine::<sha512::HashEngine>::new(b"Bitcoin seed");
|
||||||
engine.input(seed);
|
engine.input(seed);
|
||||||
let hmac = engine.finalize();
|
let hmac = engine.finalize();
|
||||||
|
|
||||||
Ok(Xpriv {
|
Xpriv {
|
||||||
network: network.into(),
|
network: network.into(),
|
||||||
depth: 0,
|
depth: 0,
|
||||||
parent_fingerprint: Default::default(),
|
parent_fingerprint: Default::default(),
|
||||||
|
@ -613,7 +613,7 @@ impl Xpriv {
|
||||||
)
|
)
|
||||||
.expect("cryptographically unreachable"),
|
.expect("cryptographically unreachable"),
|
||||||
chain_code: ChainCode::from_hmac(hmac),
|
chain_code: ChainCode::from_hmac(hmac),
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Constructs a new ECDSA compressed private key matching internal secret key representation.
|
/// Constructs a new ECDSA compressed private key matching internal secret key representation.
|
||||||
|
@ -1111,7 +1111,7 @@ mod tests {
|
||||||
expected_sk: &str,
|
expected_sk: &str,
|
||||||
expected_pk: &str,
|
expected_pk: &str,
|
||||||
) {
|
) {
|
||||||
let mut sk = Xpriv::new_master(network, seed).unwrap();
|
let mut sk = Xpriv::new_master(network, seed);
|
||||||
let mut pk = Xpub::from_xpriv(secp, &sk);
|
let mut pk = Xpub::from_xpriv(secp, &sk);
|
||||||
|
|
||||||
// Check derivation convenience method for Xpriv
|
// Check derivation convenience method for Xpriv
|
||||||
|
|
|
@ -1439,7 +1439,7 @@ mod tests {
|
||||||
|
|
||||||
let mut hd_keypaths: BTreeMap<secp256k1::PublicKey, KeySource> = Default::default();
|
let mut hd_keypaths: BTreeMap<secp256k1::PublicKey, KeySource> = Default::default();
|
||||||
|
|
||||||
let mut sk: Xpriv = Xpriv::new_master(NetworkKind::Main, &seed).unwrap();
|
let mut sk: Xpriv = Xpriv::new_master(NetworkKind::Main, &seed);
|
||||||
|
|
||||||
let fprint = sk.fingerprint(secp);
|
let fprint = sk.fingerprint(secp);
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@ fn build_extended_private_key() -> Xpriv {
|
||||||
let xpriv = extended_private_key.parse::<Xpriv>().unwrap();
|
let xpriv = extended_private_key.parse::<Xpriv>().unwrap();
|
||||||
|
|
||||||
let sk = PrivateKey::from_wif(seed).unwrap();
|
let sk = PrivateKey::from_wif(seed).unwrap();
|
||||||
let seeded = Xpriv::new_master(NetworkKind::Test, &sk.inner.secret_bytes()).unwrap();
|
let seeded = Xpriv::new_master(NetworkKind::Test, &sk.inner.secret_bytes());
|
||||||
assert_eq!(xpriv, seeded);
|
assert_eq!(xpriv, seeded);
|
||||||
|
|
||||||
xpriv
|
xpriv
|
||||||
|
|
Loading…
Reference in New Issue