Skip to content

Commit a34f9fe

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 41bd77a commit a34f9fe

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
@@ -1178,8 +1178,9 @@ impl TryFrom<ParsedMessage<FullInvoiceTlvStream>> for Bolt12Invoice {
11781178
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
11791179
Some(signature) => signature,
11801180
};
1181+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
11811182
let pubkey = contents.fields().signing_pubkey;
1182-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, pubkey)?;
1183+
merkle::verify_signature(&signature, message, pubkey)?;
11831184

11841185
Ok(Bolt12Invoice { bytes, contents, signature })
11851186
}
@@ -1282,7 +1283,7 @@ mod tests {
12821283
use crate::ln::inbound_payment::ExpandedKey;
12831284
use crate::ln::msgs::DecodeError;
12841285
use crate::offers::invoice_request::InvoiceRequestTlvStreamRef;
1285-
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, self};
1286+
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, TaggedHash, self};
12861287
use crate::offers::offer::{Amount, OfferBuilder, OfferTlvStreamRef, Quantity};
12871288
use crate::offers::parse::{Bolt12ParseError, Bolt12SemanticError};
12881289
use crate::offers::payer::PayerTlvStreamRef;
@@ -1394,11 +1395,9 @@ mod tests {
13941395
assert_eq!(invoice.fallbacks(), vec![]);
13951396
assert_eq!(invoice.invoice_features(), &Bolt12InvoiceFeatures::empty());
13961397
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1397-
assert!(
1398-
merkle::verify_signature(
1399-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1400-
).is_ok()
1401-
);
1398+
1399+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1400+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
14021401

14031402
let digest = Message::from_slice(&invoice.signable_hash()).unwrap();
14041403
let pubkey = recipient_pubkey().into();
@@ -1493,11 +1492,9 @@ mod tests {
14931492
assert_eq!(invoice.fallbacks(), vec![]);
14941493
assert_eq!(invoice.invoice_features(), &Bolt12InvoiceFeatures::empty());
14951494
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1496-
assert!(
1497-
merkle::verify_signature(
1498-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1499-
).is_ok()
1500-
);
1495+
1496+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1497+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
15011498

15021499
assert_eq!(
15031500
invoice.as_tlv_stream(),

lightning/src/offers/invoice_request.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,8 @@ impl TryFrom<Vec<u8>> for InvoiceRequest {
793793
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
794794
Some(signature) => signature,
795795
};
796-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, contents.payer_id)?;
796+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
797+
merkle::verify_signature(&signature, message, contents.payer_id)?;
797798

798799
Ok(InvoiceRequest { bytes, contents, signature })
799800
}
@@ -927,11 +928,9 @@ mod tests {
927928
assert_eq!(invoice_request.quantity(), None);
928929
assert_eq!(invoice_request.payer_id(), payer_pubkey());
929930
assert_eq!(invoice_request.payer_note(), None);
930-
assert!(
931-
merkle::verify_signature(
932-
&invoice_request.signature, SIGNATURE_TAG, &invoice_request.bytes, payer_pubkey()
933-
).is_ok()
934-
);
931+
932+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice_request.bytes);
933+
assert!(merkle::verify_signature(&invoice_request.signature, message, payer_pubkey()).is_ok());
935934

936935
assert_eq!(
937936
invoice_request.as_tlv_stream(),

lightning/src/offers/merkle.rs

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

84-
/// Verifies the signature with a pubkey over the given bytes using a tagged hash as the message
84+
/// Verifies the signature with a pubkey over the given message using a tagged hash as the message
8585
/// digest.
86-
///
87-
/// Panics if `bytes` is not a well-formed TLV stream containing at least one TLV record.
8886
pub(super) fn verify_signature(
89-
signature: &Signature, tag: &str, bytes: &[u8], pubkey: PublicKey,
87+
signature: &Signature, message: TaggedHash, pubkey: PublicKey,
9088
) -> Result<(), secp256k1::Error> {
91-
let digest = message_digest(tag, bytes);
89+
let digest = message.as_digest();
9290
let pubkey = pubkey.into();
9391
let secp_ctx = Secp256k1::verification_only();
94-
secp_ctx.verify_schnorr(signature, &digest, &pubkey)
92+
secp_ctx.verify_schnorr(signature, digest, &pubkey)
9593
}
9694

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

0 commit comments

Comments
 (0)