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:
Andrew Poelstra 2025-04-21 22:33:28 +00:00
parent 0e5e021b69
commit 32d96f6c33
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
4 changed files with 7 additions and 7 deletions

View File

@ -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

View File

@ -598,12 +598,12 @@ impl From<InvalidBase58PayloadLengthError> for Error {
impl Xpriv {
/// 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");
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

View File

@ -1439,7 +1439,7 @@ mod tests {
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);

View File

@ -120,7 +120,7 @@ fn build_extended_private_key() -> Xpriv {
let xpriv = extended_private_key.parse::<Xpriv>().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