Skip to content

Commit 6e4d0ed

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

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/descriptor/key.rs

Lines changed: 12 additions & 1 deletion
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,17 @@ 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("[0dd03d09/0'/1/2']5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ").unwrap();
1495+
if let DescriptorSecretKey::Single(single) = secret_key {
1496+
assert_eq!(single.key.inner, "0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D".parse().unwrap());
1497+
assert_eq!(single.origin, Some(("0dd03d09".parse().unwrap(), "m/0'/1/2'".parse().unwrap())));
1498+
} else {
1499+
panic!("expected a DescriptorSecretKey::Single");
1500+
}
1501+
}
1502+
14921503
#[test]
14931504
#[cfg(feature = "serde")]
14941505
fn test_descriptor_public_key_serde() {

0 commit comments

Comments
 (0)