Skip to content

Commit 896cd32

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 023c9e1 commit 896cd32

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
@@ -861,8 +861,9 @@ impl TryFrom<ParsedMessage<FullInvoiceTlvStream>> for Bolt12Invoice {
861861
None => return Err(Bolt12ParseError::InvalidSemantics(Bolt12SemanticError::MissingSignature)),
862862
Some(signature) => signature,
863863
};
864+
let message = TaggedHash::new(SIGNATURE_TAG, &bytes);
864865
let pubkey = contents.fields().signing_pubkey;
865-
merkle::verify_signature(&signature, SIGNATURE_TAG, &bytes, pubkey)?;
866+
merkle::verify_signature(&signature, message, pubkey)?;
866867

867868
Ok(Bolt12Invoice { bytes, contents, signature })
868869
}
@@ -1019,11 +1020,9 @@ mod tests {
10191020
assert_eq!(invoice.fallbacks(), vec![]);
10201021
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
10211022
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1022-
assert!(
1023-
merkle::verify_signature(
1024-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1025-
).is_ok()
1026-
);
1023+
1024+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1025+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
10271026

10281027
let digest = Message::from_slice(&invoice.signable_hash()).unwrap();
10291028
let pubkey = recipient_pubkey().into();
@@ -1102,11 +1101,9 @@ mod tests {
11021101
assert_eq!(invoice.fallbacks(), vec![]);
11031102
assert_eq!(invoice.features(), &Bolt12InvoiceFeatures::empty());
11041103
assert_eq!(invoice.signing_pubkey(), recipient_pubkey());
1105-
assert!(
1106-
merkle::verify_signature(
1107-
&invoice.signature, SIGNATURE_TAG, &invoice.bytes, recipient_pubkey()
1108-
).is_ok()
1109-
);
1104+
1105+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice.bytes);
1106+
assert!(merkle::verify_signature(&invoice.signature, message, recipient_pubkey()).is_ok());
11101107

11111108
assert_eq!(
11121109
invoice.as_tlv_stream(),

lightning/src/offers/invoice_request.rs

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

732733
Ok(InvoiceRequest { bytes, contents, signature })
733734
}
@@ -820,10 +821,10 @@ mod tests {
820821
assert_eq!(invoice_request.quantity(), None);
821822
assert_eq!(invoice_request.payer_id(), payer_pubkey());
822823
assert_eq!(invoice_request.payer_note(), None);
824+
825+
let message = TaggedHash::new(SIGNATURE_TAG, &invoice_request.bytes);
823826
assert!(
824-
merkle::verify_signature(
825-
&invoice_request.signature, SIGNATURE_TAG, &invoice_request.bytes, payer_pubkey()
826-
).is_ok()
827+
merkle::verify_signature(&invoice_request.signature, message, payer_pubkey()).is_ok()
827828
);
828829

829830
assert_eq!(

lightning/src/offers/merkle.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ pub(super) fn sign_message<F: SignFunction<E>, E>(
9494
Ok(signature)
9595
}
9696

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

0 commit comments

Comments
 (0)