From bcc7c1dc1d8e08c93b3f94db509ee4a0ed692608 Mon Sep 17 00:00:00 2001 From: Jeffrey Czyz Date: Thu, 17 Oct 2024 17:51:54 -0500 Subject: [PATCH] Include experimental TLV records when verifying Upcoming commits will allow parsing BOLT12 messages that include TLV records in the experimental range. Include these ranges when verifying messages since they will be included in the message bytes. --- lightning/src/offers/invoice.rs | 6 +++++- lightning/src/offers/offer.rs | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lightning/src/offers/invoice.rs b/lightning/src/offers/invoice.rs index 894c45d42..92b75baaf 100644 --- a/lightning/src/offers/invoice.rs +++ b/lightning/src/offers/invoice.rs @@ -1147,6 +1147,9 @@ impl InvoiceContents { &self, bytes: &[u8], metadata: &Metadata, key: &ExpandedKey, iv_bytes: &[u8; IV_LEN], secp_ctx: &Secp256k1 ) -> Result { + const EXPERIMENTAL_TYPES: core::ops::Range = + EXPERIMENTAL_OFFER_TYPES.start..EXPERIMENTAL_INVOICE_REQUEST_TYPES.end; + let offer_records = TlvStream::new(bytes).range(OFFER_TYPES); let invreq_records = TlvStream::new(bytes).range(INVOICE_REQUEST_TYPES).filter(|record| { match record.r#type { @@ -1155,7 +1158,8 @@ impl InvoiceContents { _ => true, } }); - let tlv_stream = offer_records.chain(invreq_records); + let experimental_records = TlvStream::new(bytes).range(EXPERIMENTAL_TYPES); + let tlv_stream = offer_records.chain(invreq_records).chain(experimental_records); let signing_pubkey = self.payer_signing_pubkey(); signer::verify_payer_metadata( diff --git a/lightning/src/offers/offer.rs b/lightning/src/offers/offer.rs index c33d6510f..810787265 100644 --- a/lightning/src/offers/offer.rs +++ b/lightning/src/offers/offer.rs @@ -963,7 +963,9 @@ impl OfferContents { OFFER_ISSUER_ID_TYPE => !metadata.derives_recipient_keys(), _ => true, } - }); + }) + .chain(TlvStream::new(bytes).range(EXPERIMENTAL_OFFER_TYPES)); + let signing_pubkey = match self.issuer_signing_pubkey() { Some(signing_pubkey) => signing_pubkey, None => return Err(()), -- 2.39.5