Skip to content

Commit e7ec174

Browse files
committed
Change satisfier to support xonly sigs
1 parent 4625419 commit e7ec174

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/miniscript/satisfy.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -562,11 +562,19 @@ impl Ord for Witness {
562562

563563
impl Witness {
564564
/// Turn a signature into (part of) a satisfaction
565-
fn signature<Pk: ToPublicKey, S: Satisfier<Pk>>(sat: S, pk: &Pk) -> Self {
566-
match sat.lookup_ec_sig(pk) {
567-
Some(sig) => Witness::Stack(vec![sig.serialize()]),
568-
// Signatures cannot be forged
569-
None => Witness::Impossible,
565+
fn signature<Pk: ToPublicKey, S: Satisfier<Pk>, Ctx: ScriptContext>(sat: S, pk: &Pk) -> Self {
566+
if Ctx::is_tap() {
567+
match sat.lookup_schnorr_sig(pk) {
568+
Some(sig) => Witness::Stack(vec![sig.serialize()]),
569+
// Signatures cannot be forged
570+
None => Witness::Impossible,
571+
}
572+
} else {
573+
match sat.lookup_ec_sig(pk) {
574+
Some(sig) => Witness::Stack(vec![sig.serialize()]),
575+
// Signatures cannot be forged
576+
None => Witness::Impossible,
577+
}
570578
}
571579
}
572580

@@ -904,7 +912,7 @@ impl Satisfaction {
904912
{
905913
match *term {
906914
Terminal::PkK(ref pk) => Satisfaction {
907-
stack: Witness::signature(stfr, pk),
915+
stack: Witness::signature::<_, _, Ctx>(stfr, pk),
908916
has_sig: true,
909917
},
910918
Terminal::PkH(ref pkh) => Satisfaction {
@@ -1065,7 +1073,7 @@ impl Satisfaction {
10651073
let mut sig_count = 0;
10661074
let mut sigs = Vec::with_capacity(k);
10671075
for pk in keys {
1068-
match Witness::signature(stfr, pk) {
1076+
match Witness::signature::<_, _, Ctx>(stfr, pk) {
10691077
Witness::Stack(sig) => {
10701078
sigs.push(sig);
10711079
sig_count += 1;
@@ -1107,7 +1115,7 @@ impl Satisfaction {
11071115
let mut sig_count = 0;
11081116
let mut sigs = vec![vec![vec![]]; keys.len()];
11091117
for (i, pk) in keys.iter().enumerate() {
1110-
match Witness::signature(stfr, pk) {
1118+
match Witness::signature::<_, _, Ctx>(stfr, pk) {
11111119
Witness::Stack(sig) => {
11121120
sigs[i] = sig;
11131121
sig_count += 1;

0 commit comments

Comments
 (0)