Skip to content

Commit 1a7e779

Browse files
committed
Change satisfier to support xonly sigs
1 parent 2c32c03 commit 1a7e779

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
@@ -488,11 +488,19 @@ impl Ord for Witness {
488488

489489
impl Witness {
490490
/// Turn a signature into (part of) a satisfaction
491-
fn signature<Pk: ToPublicKey, S: Satisfier<Pk>>(sat: S, pk: &Pk) -> Self {
492-
match sat.lookup_ecdsa_sig(pk) {
493-
Some(sig) => Witness::Stack(vec![sig.to_vec()]),
494-
// Signatures cannot be forged
495-
None => Witness::Impossible,
491+
fn signature<Pk: ToPublicKey, S: Satisfier<Pk>, Ctx: ScriptContext>(sat: S, pk: &Pk) -> Self {
492+
if Ctx::is_tap() {
493+
match sat.lookup_schnorr_sig(pk) {
494+
Some(sig) => Witness::Stack(vec![sig.to_vec()]),
495+
// Signatures cannot be forged
496+
None => Witness::Impossible,
497+
}
498+
} else {
499+
match sat.lookup_ecdsa_sig(pk) {
500+
Some(sig) => Witness::Stack(vec![sig.to_vec()]),
501+
// Signatures cannot be forged
502+
None => Witness::Impossible,
503+
}
496504
}
497505
}
498506

@@ -828,7 +836,7 @@ impl Satisfaction {
828836
{
829837
match *term {
830838
Terminal::PkK(ref pk) => Satisfaction {
831-
stack: Witness::signature(stfr, pk),
839+
stack: Witness::signature::<_, _, Ctx>(stfr, pk),
832840
has_sig: true,
833841
},
834842
Terminal::PkH(ref pkh) => Satisfaction {
@@ -989,7 +997,7 @@ impl Satisfaction {
989997
let mut sig_count = 0;
990998
let mut sigs = Vec::with_capacity(k);
991999
for pk in keys {
992-
match Witness::signature(stfr, pk) {
1000+
match Witness::signature::<_, _, Ctx>(stfr, pk) {
9931001
Witness::Stack(sig) => {
9941002
sigs.push(sig);
9951003
sig_count += 1;
@@ -1031,7 +1039,7 @@ impl Satisfaction {
10311039
let mut sig_count = 0;
10321040
let mut sigs = vec![vec![vec![]]; keys.len()];
10331041
for (i, pk) in keys.iter().rev().enumerate() {
1034-
match Witness::signature(stfr, pk) {
1042+
match Witness::signature::<_, _, Ctx>(stfr, pk) {
10351043
Witness::Stack(sig) => {
10361044
sigs[i] = sig;
10371045
sig_count += 1;

0 commit comments

Comments
 (0)