Skip to content

Commit c7c8ef8

Browse files
committed
Use TaggedHash in merkle::verify_signature
An earlier commit introduced TaggedHash for use in sign_message. For consistency, use it in verify_signature, too.
1 parent c8d0a90 commit c7c8ef8

File tree

3 files changed

+18
-24
lines changed

3 files changed

+18
-24
lines changed

lightning/src/offers/invoice.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -879,8 +879,9 @@ impl TryFrom<ParsedMessage<FullInvoiceTlvStream>> for Bolt12Invoice {
879879
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
880880
Some(signature) => signature,
881881
};
882+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
882883
let pubkey = contents.fields().signing_pubkey;
883-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, pubkey)?;
884+
merkle::verify_signature(&signature, message, pubkey)?;
884885

885886
Ok(Bolt12Invoice { bytes, contents, signature })
886887
}
@@ -982,7 +983,7 @@ mod tests {
982983
use crate::ln::inbound_payment::ExpandedKey;
983984
use crate::ln::msgs::DecodeError;
984985
use crate::offers::invoice_request::InvoiceRequestTlvStreamRef;
985-
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, self};
986+
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, TaggedHash, self};
986987
use crate::offers::offer::{OfferBuilder, OfferTlvStreamRef, Quantity};
987988
use crate::offers::parse::{Bolt12ParseError, Bolt12SemanticError};
988989
use crate::offers::payer::PayerTlvStreamRef;
@@ -1037,11 +1038,9 @@ mod tests {
10371038
assert_eq!(invoice.fallbacks(), vec![]);
10381039
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
10391040
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1040-
assert!(
1041-
merkle::verify_signature(
1042-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1043-
).is_ok()
1044-
);
1041+
1042+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1043+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
10451044

10461045
let digest = Message::from_slice(&invoice.signable_hash()).unwrap();
10471046
let pubkey = recipient_pubkey().into();
@@ -1120,11 +1119,9 @@ mod tests {
11201119
assert_eq!(invoice.fallbacks(), vec![]);
11211120
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
11221121
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1123-
assert!(
1124-
merkle::verify_signature(
1125-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1126-
).is_ok()
1127-
);
1122+
1123+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1124+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
11281125

11291126
assert_eq!(
11301127
invoice.as_tlv_stream(),

lightning/src/offers/invoice_request.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,8 @@ impl TryFrom<Vec<u8>> for InvoiceRequest {
741741
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
742742
Some(signature) => signature,
743743
};
744-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, contents.payer_id)?;
744+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
745+
merkle::verify_signature(&signature, message, contents.payer_id)?;
745746

746747
Ok(InvoiceRequest { bytes, contents, signature })
747748
}
@@ -834,11 +835,9 @@ mod tests {
834835
assert_eq!(invoice_request.quantity(), None);
835836
assert_eq!(invoice_request.payer_id(), payer_pubkey());
836837
assert_eq!(invoice_request.payer_note(), None);
837-
assert!(
838-
merkle::verify_signature(
839-
&invoice_request.signature, SIGNATURE_TAG, &invoice_request.bytes, payer_pubkey()
840-
).is_ok()
841-
);
838+
839+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice_request.bytes);
840+
assert!(merkle::verify_signature(&invoice_request.signature, message, payer_pubkey()).is_ok());
842841

843842
assert_eq!(
844843
invoice_request.as_tlv_stream(),

lightning/src/offers/merkle.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,15 @@ where
8080
Ok(signature)
8181
}
8282

83-
/// Verifies the signature with a pubkey over the given bytes using a tagged hash as the message
83+
/// Verifies the signature with a pubkey over the given message using a tagged hash as the message
8484
/// digest.
85-
///
86-
/// Panics if `bytes` is not a well-formed TLV stream containing at least one TLV record.
8785
pub(super) fn verify_signature(
88-
signature: &Signature, tag: &str, bytes: &[u8], pubkey: PublicKey,
86+
signature: &Signature, message: TaggedHash, pubkey: PublicKey,
8987
) -> Result<(), secp256k1::Error> {
90-
let digest = message_digest(tag, bytes);
88+
let digest = message.as_digest();
9189
let pubkey = pubkey.into();
9290
let secp_ctx = Secp256k1::verification_only();
93-
secp_ctx.verify_schnorr(signature, &digest, &pubkey)
91+
secp_ctx.verify_schnorr(signature, digest, &pubkey)
9492
}
9593

9694
pub(super) fn message_digest(tag: &str, bytes: &[u8]) -> Message {

0 commit comments

Comments
 (0)