Skip to content

Commit 2dae1fb

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 3db675d commit 2dae1fb

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
@@ -865,8 +865,9 @@ impl TryFrom<ParsedMessage<FullInvoiceTlvStream>> for Invoice {
865865
None => return Err(ParseError::InvalidSemantics(SemanticError::MissingSignature)),
866866
Some(signature) => signature,
867867
};
868+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
868869
let pubkey = contents.fields().signing_pubkey;
869-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, pubkey)?;
870+
merkle::verify_signature(&signature, message, pubkey)?;
870871

871872
Ok(Invoice { bytes, contents, signature })
872873
}
@@ -968,7 +969,7 @@ mod tests {
968969
use crate::ln::inbound_payment::ExpandedKey;
969970
use crate::ln::msgs::DecodeError;
970971
use crate::offers::invoice_request::InvoiceRequestTlvStreamRef;
971-
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, self};
972+
use crate::offers::merkle::{SignError, SignatureTlvStreamRef, TaggedHash, self};
972973
use crate::offers::offer::{OfferBuilder, OfferTlvStreamRef, Quantity};
973974
use crate::offers::parse::{ParseError, SemanticError};
974975
use crate::offers::payer::PayerTlvStreamRef;
@@ -1023,11 +1024,9 @@ mod tests {
10231024
assert_eq!(invoice.fallbacks(), vec![]);
10241025
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
10251026
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1026-
assert!(
1027-
merkle::verify_signature(
1028-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1029-
).is_ok()
1030-
);
1027+
1028+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1029+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
10311030

10321031
let digest = Message::from_slice(&invoice.signable_hash()).unwrap();
10331032
let pubkey = recipient_pubkey().into();
@@ -1106,11 +1105,9 @@ mod tests {
11061105
assert_eq!(invoice.fallbacks(), vec![]);
11071106
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
11081107
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1109-
assert!(
1110-
merkle::verify_signature(
1111-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1112-
).is_ok()
1113-
);
1108+
1109+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1110+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
11141111

11151112
assert_eq!(
11161113
invoice.as_tlv_stream(),

lightning/src/offers/invoice_request.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,8 @@ impl TryFrom<Vec<u8>> for InvoiceRequest {
726726
None => return Err(ParseError::InvalidSemantics(SemanticError::MissingSignature)),
727727
Some(signature) => signature,
728728
};
729-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, contents.payer_id)?;
729+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
730+
merkle::verify_signature(&signature, message, contents.payer_id)?;
730731

731732
Ok(InvoiceRequest { bytes, contents, signature })
732733
}
@@ -819,10 +820,10 @@ mod tests {
819820
assert_eq!(invoice_request.quantity(), None);
820821
assert_eq!(invoice_request.payer_id(), payer_pubkey());
821822
assert_eq!(invoice_request.payer_note(), None);
823+
824+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice_request.bytes);
822825
assert!(
823-
merkle::verify_signature(
824-
&invoice_request.signature, SIGNATURE_TAG, &invoice_request.bytes, payer_pubkey()
825-
).is_ok()
826+
merkle::verify_signature(&invoice_request.signature, message, payer_pubkey()).is_ok()
826827
);
827828

828829
assert_eq!(

lightning/src/offers/merkle.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,14 @@ pub(super) fn sign_message<F: SignFunction<E>, E>(
9090
Ok(signature)
9191
}
9292

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

0 commit comments

Comments
 (0)