Skip to content

Commit aa218ef

Browse files
committed
Fix decoding of WIF with BIP32 origin
1 parent 307c1b3 commit aa218ef

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/descriptor/key.rs

+23-1
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ impl FromStr for DescriptorSecretKey {
703703
if key_part.len() <= 52 {
704704
let sk = bitcoin::PrivateKey::from_str(key_part)
705705
.map_err(|_| DescriptorKeyParseError("Error while parsing a WIF private key"))?;
706-
Ok(DescriptorSecretKey::Single(SinglePriv { key: sk, origin: None }))
706+
Ok(DescriptorSecretKey::Single(SinglePriv { key: sk, origin }))
707707
} else {
708708
let (xpriv, derivation_paths, wildcard) = parse_xkey_deriv::<bip32::Xpriv>(key_part)?;
709709
if derivation_paths.len() > 1 {
@@ -1489,6 +1489,28 @@ mod test {
14891489
DescriptorPublicKey::from_str("tpubDBrgjcxBxnXyL575sHdkpKohWu5qHKoQ7TJXKNrYznh5fVEGBv89hA8ENW7A8MFVpFUSvgLqc4Nj1WZcpePX6rrxviVtPowvMuGF5rdT2Vi/2/4/<0;1;>").unwrap_err();
14901490
}
14911491

1492+
#[test]
1493+
fn test_parse_wif() {
1494+
let secret_key = DescriptorSecretKey::from_str(
1495+
"[0dd03d09/0'/1/2']5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ",
1496+
)
1497+
.unwrap();
1498+
if let DescriptorSecretKey::Single(single) = secret_key {
1499+
assert_eq!(
1500+
single.key.inner,
1501+
"0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D"
1502+
.parse()
1503+
.unwrap()
1504+
);
1505+
assert_eq!(
1506+
single.origin,
1507+
Some(("0dd03d09".parse().unwrap(), "m/0'/1/2'".parse().unwrap()))
1508+
);
1509+
} else {
1510+
panic!("expected a DescriptorSecretKey::Single");
1511+
}
1512+
}
1513+
14921514
#[test]
14931515
#[cfg(feature = "serde")]
14941516
fn test_descriptor_public_key_serde() {

0 commit comments

Comments
 (0)