Skip to content

Commit e6ee53e

Browse files
committed
Change satisfier to support xonly sigs
1 parent 27d9253 commit e6ee53e

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

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

@@ -903,7 +911,7 @@ impl Satisfaction {
903911
{
904912
match *term {
905913
Terminal::PkK(ref pk) => Satisfaction {
906-
stack: Witness::signature(stfr, pk),
914+
stack: Witness::signature::<_, _, Ctx>(stfr, pk),
907915
has_sig: true,
908916
},
909917
Terminal::PkH(ref pkh) => Satisfaction {
@@ -1064,7 +1072,7 @@ impl Satisfaction {
10641072
let mut sig_count = 0;
10651073
let mut sigs = Vec::with_capacity(k);
10661074
for pk in keys {
1067-
match Witness::signature(stfr, pk) {
1075+
match Witness::signature::<_, _, Ctx>(stfr, pk) {
10681076
Witness::Stack(sig) => {
10691077
sigs.push(sig);
10701078
sig_count += 1;
@@ -1106,7 +1114,7 @@ impl Satisfaction {
11061114
let mut sig_count = 0;
11071115
let mut sigs = vec![vec![vec![]]; keys.len()];
11081116
for (i, pk) in keys.iter().enumerate() {
1109-
match Witness::signature(stfr, pk) {
1117+
match Witness::signature::<_, _, Ctx>(stfr, pk) {
11101118
Witness::Stack(sig) => {
11111119
sigs[i] = sig;
11121120
sig_count += 1;

0 commit comments

Comments
 (0)