Skip to content

Commit b0a5ea8

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 eec69dd commit b0a5ea8

File tree

3 files changed

+17
-19
lines changed

3 files changed

+17
-19
lines changed

lightning/src/offers/invoice.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -873,8 +873,9 @@ impl TryFrom<ParsedMessage<FullInvoiceTlvStream>> for Bolt12Invoice {
873873
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
874874
Some(signature) => signature,
875875
};
876+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
876877
let pubkey = contents.fields().signing_pubkey;
877-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, pubkey)?;
878+
merkle::verify_signature(&signature, message, pubkey)?;
878879

879880
Ok(Bolt12Invoice { bytes, contents, signature })
880881
}
@@ -1031,11 +1032,9 @@ mod tests {
10311032
assert_eq!(invoice.fallbacks(), vec![]);
10321033
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
10331034
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1034-
assert!(
1035-
merkle::verify_signature(
1036-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1037-
).is_ok()
1038-
);
1035+
1036+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1037+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
10391038

10401039
let digest = Message::from_slice(&invoice.signable_hash()).unwrap();
10411040
let pubkey = recipient_pubkey().into();
@@ -1114,11 +1113,9 @@ mod tests {
11141113
assert_eq!(invoice.fallbacks(), vec![]);
11151114
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
11161115
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1117-
assert!(
1118-
merkle::verify_signature(
1119-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1120-
).is_ok()
1121-
);
1116+
1117+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1118+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
11221119

11231120
assert_eq!(
11241121
invoice.as_tlv_stream(),

lightning/src/offers/invoice_request.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,8 @@ impl TryFrom<Vec<u8>> for InvoiceRequest {
730730
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
731731
Some(signature) => signature,
732732
};
733-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, contents.payer_id)?;
733+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
734+
merkle::verify_signature(&signature, message, contents.payer_id)?;
734735

735736
Ok(InvoiceRequest { bytes, contents, signature })
736737
}
@@ -823,10 +824,10 @@ mod tests {
823824
assert_eq!(invoice_request.quantity(), None);
824825
assert_eq!(invoice_request.payer_id(), payer_pubkey());
825826
assert_eq!(invoice_request.payer_note(), None);
827+
828+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice_request.bytes);
826829
assert!(
827-
merkle::verify_signature(
828-
&invoice_request.signature, SIGNATURE_TAG, &invoice_request.bytes, payer_pubkey()
829-
).is_ok()
830+
merkle::verify_signature(&invoice_request.signature, message, payer_pubkey()).is_ok()
830831
);
831832

832833
assert_eq!(

lightning/src/offers/merkle.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,14 @@ pub(super) fn sign_message<F: SignFunction<E>, E>(
9797
Ok(signature)
9898
}
9999

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

0 commit comments

Comments
 (0)