Skip to content

Commit f4be6af

Browse files
committed
CT descriptor: test cases with wildcards
1 parent eafc28d commit f4be6af

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/confidential/mod.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,4 +469,38 @@ mod tests {
469469
};
470470
test.check(&secp);
471471
}
472+
473+
#[test]
474+
fn descriptor_wildcard() {
475+
let secp = secp256k1_zkp::Secp256k1::new();
476+
let params = &elements::AddressParams::ELEMENTS;
477+
478+
let xprv = "xprv9s21ZrQH143K28NgQ7bHCF61hy9VzwquBZvpzTwXLsbmQLRJ6iV9k2hUBRt5qzmBaSpeMj5LdcsHaXJvM7iFEivPryRcL8irN7Na9p65UUb";
479+
let xpub = "xpub661MyMwAqRbcEcT9W98HZP2kFzyzQQZkYnrRnrM8uD8kH8kSeFoQHq1x2iihLgC6PXGy5LrjCL66uSNhJ8pwjfx2rMUTLWuRMns2EG9xnjs";
480+
let desc_view_str = format!("ct({}/*,elwpkh({}/*))#wk8ltq6h", xprv, xpub);
481+
let desc_bare_str = format!("ct({}/*,elwpkh({}/*))#zzac2dpf", xpub, xpub);
482+
let index = 1;
483+
let conf_addr = "el1qqf6690fpw2y00hv5a84zsydjgztg2089d5xnll4k4cstzn63uvgudd907qpvlvvwd5ym9gx7j0v46elf23kfxunucm6ejjyk0";
484+
let unconf_addr = "ert1qkjhlqqk0kx8x6zdj5r0f8k2avl54gmyn7qjk2k";
485+
486+
let desc_view = Descriptor::<DescriptorPublicKey>::from_str(&desc_view_str).unwrap();
487+
let desc_bare = Descriptor::<DescriptorPublicKey>::from_str(&desc_bare_str).unwrap();
488+
let definite_desc_view = desc_view.at_derivation_index(index).unwrap();
489+
let definite_desc_bare = desc_bare.at_derivation_index(index).unwrap();
490+
assert_eq!(definite_desc_view.address(&secp, params).unwrap().to_string(), conf_addr.to_string());
491+
assert_eq!(definite_desc_bare.address(&secp, params).unwrap().to_string(), conf_addr.to_string());
492+
assert_eq!(definite_desc_view.unconfidential_address(params).unwrap().to_string(), unconf_addr.to_string());
493+
assert_eq!(definite_desc_bare.unconfidential_address(params).unwrap().to_string(), unconf_addr.to_string());
494+
495+
// It's not possible to get an address if the blinding key has a wildcard,
496+
// because the descriptor blinding key is not *definite*,
497+
// but we can't enforce this with the Descriptor generic.
498+
let desc_view_str = format!("ct({}/*,elwpkh({}))#ls6mx2ac", xprv, xpub);
499+
let desc_view = Descriptor::<DefiniteDescriptorKey>::from_str(&desc_view_str).unwrap();
500+
assert_eq!(desc_view.address(&secp, params).unwrap_err(), Error::Unexpected("wildcard blinding key".into()));
501+
502+
let desc_bare_str = format!("ct({}/*,elwpkh({}))#czkz0hwn", xpub, xpub);
503+
let desc_bare = Descriptor::<DefiniteDescriptorKey>::from_str(&desc_bare_str).unwrap();
504+
assert_eq!(desc_bare.address(&secp, params).unwrap_err(), Error::Unexpected("wildcard blinding key".into()));
505+
}
472506
}

0 commit comments

Comments
 (0)