Skip to content

Commit

Permalink
Verify signatures after signing
Browse files Browse the repository at this point in the history
As per [BIP-340, footnote 14][fn]:
> Verifying the signature before leaving the signer prevents random or
> attacker provoked computation errors. This prevents publishing invalid
> signatures which may leak information about the secret key. It is
> recommended, but can be omitted if the computation cost is prohibitive.

[fn]: https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#cite_note-14
  • Loading branch information
Scott Robinson committed Aug 25, 2022
1 parent 9f9ffd0 commit 7b1ad1b
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions src/wallet/signer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -475,10 +475,10 @@ fn sign_psbt_ecdsa(
hash_ty: EcdsaSighashType,
secp: &SecpCtx,
) {
let sig = secp.sign_ecdsa(
&Message::from_slice(&hash.into_inner()[..]).unwrap(),
secret_key,
);
let msg = &Message::from_slice(&hash.into_inner()[..]).unwrap();
let sig = secp.sign_ecdsa(msg, secret_key);
secp.verify_ecdsa(msg, &sig, &pubkey.inner)
.expect("invalid or corrupted ecdsa signature");

let final_signature = ecdsa::EcdsaSig { sig, hash_ty };
psbt_input.partial_sigs.insert(pubkey, final_signature);
Expand All @@ -504,10 +504,10 @@ fn sign_psbt_schnorr(
Some(_) => keypair, // no tweak for script spend
};

let sig = secp.sign_schnorr(
&Message::from_slice(&hash.into_inner()[..]).unwrap(),
&keypair,
);
let msg = &Message::from_slice(&hash.into_inner()[..]).unwrap();
let sig = secp.sign_schnorr(msg, &keypair);
secp.verify_schnorr(&sig, msg, &XOnlyPublicKey::from_keypair(&keypair))
.expect("invalid or corrupted schnorr signature");

let final_signature = schnorr::SchnorrSig { sig, hash_ty };

Expand Down

0 comments on commit 7b1ad1b

Please sign in to comment.