Skip to content

Commit 4b86afe

Browse files
committed
Change satisfier to support xonly sigs
1 parent 7158d34 commit 4b86afe

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

480480
impl Witness {
481481
/// Turn a signature into (part of) a satisfaction
482-
fn signature<Pk: ToPublicKey, S: Satisfier<Pk>>(sat: S, pk: &Pk) -> Self {
483-
match sat.lookup_ec_sig(pk) {
484-
Some(sig) => Witness::Stack(vec![sig.to_vec()]),
485-
// Signatures cannot be forged
486-
None => Witness::Impossible,
482+
fn signature<Pk: ToPublicKey, S: Satisfier<Pk>, Ctx: ScriptContext>(sat: S, pk: &Pk) -> Self {
483+
if Ctx::is_tap() {
484+
match sat.lookup_schnorr_sig(pk) {
485+
Some(sig) => Witness::Stack(vec![sig.to_vec()]),
486+
// Signatures cannot be forged
487+
None => Witness::Impossible,
488+
}
489+
} else {
490+
match sat.lookup_ec_sig(pk) {
491+
Some(sig) => Witness::Stack(vec![sig.to_vec()]),
492+
// Signatures cannot be forged
493+
None => Witness::Impossible,
494+
}
487495
}
488496
}
489497

@@ -819,7 +827,7 @@ impl Satisfaction {
819827
{
820828
match *term {
821829
Terminal::PkK(ref pk) => Satisfaction {
822-
stack: Witness::signature(stfr, pk),
830+
stack: Witness::signature::<_, _, Ctx>(stfr, pk),
823831
has_sig: true,
824832
},
825833
Terminal::PkH(ref pkh) => Satisfaction {
@@ -980,7 +988,7 @@ impl Satisfaction {
980988
let mut sig_count = 0;
981989
let mut sigs = Vec::with_capacity(k);
982990
for pk in keys {
983-
match Witness::signature(stfr, pk) {
991+
match Witness::signature::<_, _, Ctx>(stfr, pk) {
984992
Witness::Stack(sig) => {
985993
sigs.push(sig);
986994
sig_count += 1;
@@ -1022,7 +1030,7 @@ impl Satisfaction {
10221030
let mut sig_count = 0;
10231031
let mut sigs = vec![vec![vec![]]; keys.len()];
10241032
for (i, pk) in keys.iter().rev().enumerate() {
1025-
match Witness::signature(stfr, pk) {
1033+
match Witness::signature::<_, _, Ctx>(stfr, pk) {
10261034
Witness::Stack(sig) => {
10271035
sigs[i] = sig;
10281036
sig_count += 1;

0 commit comments

Comments
 (0)