Skip to content

Commit 63d0d55

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 7f641da commit 63d0d55

File tree

3 files changed

+18
-24
lines changed

3 files changed

+18
-24
lines changed

lightning/src/offers/invoice.rs

+9-12
Original file line numberDiff line numberDiff line change
@@ -1184,8 +1184,9 @@ impl TryFrom<ParsedMessage<FullInvoiceTlvStream>> for Bolt12Invoice {
11841184
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
11851185
Some(signature) => signature,
11861186
};
1187+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
11871188
let pubkey = contents.fields().signing_pubkey;
1188-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, pubkey)?;
1189+
merkle::verify_signature(&signature, message, pubkey)?;
11891190

11901191
Ok(Bolt12Invoice { bytes, contents, signature })
11911192
}
@@ -1288,7 +1289,7 @@ mod tests {
12881289
use crate::ln::inbound_payment::ExpandedKey;
12891290
use crate::ln::msgs::DecodeError;
12901291
use crate::offers::invoice_request::InvoiceRequestTlvStreamRef;
1291-
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, self};
1292+
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, TaggedHash, self};
12921293
use crate::offers::offer::{Amount, OfferBuilder, OfferTlvStreamRef, Quantity};
12931294
use crate::offers::parse::{Bolt12ParseError, Bolt12SemanticError};
12941295
use crate::offers::payer::PayerTlvStreamRef;
@@ -1400,11 +1401,9 @@ mod tests {
14001401
assert_eq!(invoice.fallbacks(), vec![]);
14011402
assert_eq!(invoice.invoice_features(), &Bolt12InvoiceFeatures::empty());
14021403
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1403-
assert!(
1404-
merkle::verify_signature(
1405-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1406-
).is_ok()
1407-
);
1404+
1405+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1406+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
14081407

14091408
let digest = Message::from_slice(&invoice.signable_hash()).unwrap();
14101409
let pubkey = recipient_pubkey().into();
@@ -1499,11 +1498,9 @@ mod tests {
14991498
assert_eq!(invoice.fallbacks(), vec![]);
15001499
assert_eq!(invoice.invoice_features(), &Bolt12InvoiceFeatures::empty());
15011500
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1502-
assert!(
1503-
merkle::verify_signature(
1504-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1505-
).is_ok()
1506-
);
1501+
1502+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1503+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
15071504

15081505
assert_eq!(
15091506
invoice.as_tlv_stream(),

lightning/src/offers/invoice_request.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,8 @@ impl TryFrom<Vec<u8>> for InvoiceRequest {
799799
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
800800
Some(signature) => signature,
801801
};
802-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, contents.payer_id)?;
802+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
803+
merkle::verify_signature(&signature, message, contents.payer_id)?;
803804

804805
Ok(InvoiceRequest { bytes, contents, signature })
805806
}
@@ -933,11 +934,9 @@ mod tests {
933934
assert_eq!(invoice_request.quantity(), None);
934935
assert_eq!(invoice_request.payer_id(), payer_pubkey());
935936
assert_eq!(invoice_request.payer_note(), None);
936-
assert!(
937-
merkle::verify_signature(
938-
&invoice_request.signature, SIGNATURE_TAG, &invoice_request.bytes, payer_pubkey()
939-
).is_ok()
940-
);
937+
938+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice_request.bytes);
939+
assert!(merkle::verify_signature(&invoice_request.signature, message, payer_pubkey()).is_ok());
941940

942941
assert_eq!(
943942
invoice_request.as_tlv_stream(),

lightning/src/offers/merkle.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,15 @@ where
8888
Ok(signature)
8989
}
9090

91-
/// Verifies the signature with a pubkey over the given bytes using a tagged hash as the message
91+
/// Verifies the signature with a pubkey over the given message using a tagged hash as the message
9292
/// digest.
93-
///
94-
/// Panics if `bytes` is not a well-formed TLV stream containing at least one TLV record.
9593
pub(super) fn verify_signature(
96-
signature: &Signature, tag: &str, bytes: &[u8], pubkey: PublicKey,
94+
signature: &Signature, message: TaggedHash, pubkey: PublicKey,
9795
) -> Result<(), secp256k1::Error> {
98-
let digest = message_digest(tag, bytes);
96+
let digest = message.as_digest();
9997
let pubkey = pubkey.into();
10098
let secp_ctx = Secp256k1::verification_only();
101-
secp_ctx.verify_schnorr(signature, &digest, &pubkey)
99+
secp_ctx.verify_schnorr(signature, digest, &pubkey)
102100
}
103101

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

0 commit comments

Comments
 (0)