Skip to content

Commit 284d007

Browse files
committed
Use TaggedBytes in merkle::verify_signature
An earlier commit introduced TaggedBytes for use in sign_message. For consistency, use it in verify_signature, too.
1 parent 15d16e5 commit 284d007

File tree

3 files changed

+18
-20
lines changed

3 files changed

+18
-20
lines changed

lightning/src/offers/invoice.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -868,8 +868,9 @@ impl TryFrom<ParsedMessage<FullInvoiceTlvStream>> for Invoice {
868868
None => return Err(ParseError::InvalidSemantics(SemanticError::MissingSignature)),
869869
Some(signature) => signature,
870870
};
871+
let message = TaggedBytes::new(SIGNATURE_TAG, &bytes);
871872
let pubkey = contents.fields().signing_pubkey;
872-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, pubkey)?;
873+
merkle::verify_signature(&signature, message, pubkey)?;
873874

874875
Ok(Invoice { bytes, contents, signature })
875876
}
@@ -971,7 +972,7 @@ mod tests {
971972
use crate::ln::inbound_payment::ExpandedKey;
972973
use crate::ln::msgs::DecodeError;
973974
use crate::offers::invoice_request::InvoiceRequestTlvStreamRef;
974-
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, self};
975+
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, TaggedBytes, self};
975976
use crate::offers::offer::{OfferBuilder, OfferTlvStreamRef, Quantity};
976977
use crate::offers::parse::{ParseError, SemanticError};
977978
use crate::offers::payer::PayerTlvStreamRef;
@@ -1026,11 +1027,9 @@ mod tests {
10261027
assert_eq!(invoice.fallbacks(), vec![]);
10271028
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
10281029
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1029-
assert!(
1030-
merkle::verify_signature(
1031-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1032-
).is_ok()
1033-
);
1030+
1031+
let message = TaggedBytes::new(SIGNATURE_TAG, &invoice.bytes);
1032+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
10341033

10351034
let digest = Message::from_slice(&invoice.signable_hash()).unwrap();
10361035
let pubkey = recipient_pubkey().into();
@@ -1109,11 +1108,9 @@ mod tests {
11091108
assert_eq!(invoice.fallbacks(), vec![]);
11101109
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
11111110
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1112-
assert!(
1113-
merkle::verify_signature(
1114-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1115-
).is_ok()
1116-
);
1111+
1112+
let message = TaggedBytes::new(SIGNATURE_TAG, &invoice.bytes);
1113+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
11171114

11181115
assert_eq!(
11191116
invoice.as_tlv_stream(),

lightning/src/offers/invoice_request.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,8 @@ impl TryFrom<Vec<u8>> for InvoiceRequest {
729729
None => return Err(ParseError::InvalidSemantics(SemanticError::MissingSignature)),
730730
Some(signature) => signature,
731731
};
732-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, contents.payer_id)?;
732+
let message = TaggedBytes::new(SIGNATURE_TAG, &bytes);
733+
merkle::verify_signature(&signature, message, contents.payer_id)?;
733734

734735
Ok(InvoiceRequest { bytes, contents, signature })
735736
}
@@ -822,10 +823,10 @@ mod tests {
822823
assert_eq!(invoice_request.quantity(), None);
823824
assert_eq!(invoice_request.payer_id(), payer_pubkey());
824825
assert_eq!(invoice_request.payer_note(), None);
826+
827+
let message = TaggedBytes::new(SIGNATURE_TAG, &invoice_request.bytes);
825828
assert!(
826-
merkle::verify_signature(
827-
&invoice_request.signature, SIGNATURE_TAG, &invoice_request.bytes, payer_pubkey()
828-
).is_ok()
829+
merkle::verify_signature(&invoice_request.signature, message, payer_pubkey()).is_ok()
829830
);
830831

831832
assert_eq!(

lightning/src/offers/merkle.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,14 @@ where
8686
Ok(signature)
8787
}
8888

89-
/// Verifies the signature with a pubkey over the given bytes using a tagged hash as the message
89+
/// Verifies the signature with a pubkey over the given message using a tagged hash as the message
9090
/// digest.
9191
///
92-
/// Panics if `bytes` is not a well-formed TLV stream containing at least one TLV record.
92+
/// Panics if `message` is not a well-formed TLV stream containing at least one TLV record.
9393
pub(super) fn verify_signature(
94-
signature: &Signature, tag: &str, bytes: &[u8], pubkey: PublicKey,
94+
signature: &Signature, message: TaggedBytes, pubkey: PublicKey,
9595
) -> Result<(), secp256k1::Error> {
96-
let digest = message_digest(tag, bytes);
96+
let digest = message.digest();
9797
let pubkey = pubkey.into();
9898
let secp_ctx = Secp256k1::verification_only();
9999
secp_ctx.verify_schnorr(signature, &digest, &pubkey)

0 commit comments

Comments
 (0)