From 32d96f6c337290c2624886bd5cc30a7264c361d1 Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Mon, 21 Apr 2025 22:33:28 +0000 Subject: [PATCH] bip32: make Xpriv::new_master be infallible The only error path for this is cryptographically unreachable and was removed in a previous commit. --- bitcoin/examples/bip32.rs | 2 +- bitcoin/src/bip32.rs | 8 ++++---- bitcoin/src/psbt/mod.rs | 2 +- bitcoin/tests/bip_174.rs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bitcoin/examples/bip32.rs b/bitcoin/examples/bip32.rs index 9df5ef673..6cc56697e 100644 --- a/bitcoin/examples/bip32.rs +++ b/bitcoin/examples/bip32.rs @@ -33,7 +33,7 @@ fn main() { let secp = Secp256k1::preallocated_new(buf.as_mut_slice()).unwrap(); // 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); // derive child xpub diff --git a/bitcoin/src/bip32.rs b/bitcoin/src/bip32.rs index b1bf0bc18..b19c55c98 100644 --- a/bitcoin/src/bip32.rs +++ b/bitcoin/src/bip32.rs @@ -598,12 +598,12 @@ impl From for Error { impl Xpriv { /// Constructs a new master key from a seed value - pub fn new_master(network: impl Into, seed: &[u8]) -> Result { + pub fn new_master(network: impl Into, seed: &[u8]) -> Xpriv { let mut engine = HmacEngine::::new(b"Bitcoin seed"); engine.input(seed); let hmac = engine.finalize(); - Ok(Xpriv { + Xpriv { network: network.into(), depth: 0, parent_fingerprint: Default::default(), @@ -613,7 +613,7 @@ impl Xpriv { ) .expect("cryptographically unreachable"), chain_code: ChainCode::from_hmac(hmac), - }) + } } /// Constructs a new ECDSA compressed private key matching internal secret key representation. @@ -1111,7 +1111,7 @@ mod tests { expected_sk: &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); // Check derivation convenience method for Xpriv diff --git a/bitcoin/src/psbt/mod.rs b/bitcoin/src/psbt/mod.rs index 6f0ce3fc4..d648dfac3 100644 --- a/bitcoin/src/psbt/mod.rs +++ b/bitcoin/src/psbt/mod.rs @@ -1439,7 +1439,7 @@ mod tests { let mut hd_keypaths: BTreeMap = 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); diff --git a/bitcoin/tests/bip_174.rs b/bitcoin/tests/bip_174.rs index 495658658..c9ecef166 100644 --- a/bitcoin/tests/bip_174.rs +++ b/bitcoin/tests/bip_174.rs @@ -120,7 +120,7 @@ fn build_extended_private_key() -> Xpriv { let xpriv = extended_private_key.parse::().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); xpriv