- /// Verifies that the payer metadata was produced from the invoice request in the TLV stream.
- pub(super) fn verify<T: secp256k1::Signing>(
- &self, tlv_stream: TlvStream<'_>, key: &ExpandedKey, secp_ctx: &Secp256k1<T>
- ) -> bool {
- let offer_records = tlv_stream.clone().range(OFFER_TYPES);
- let invreq_records = tlv_stream.range(INVOICE_REQUEST_TYPES).filter(|record| {
- match record.r#type {
- PAYER_METADATA_TYPE => false, // Should be outside range
- INVOICE_REQUEST_PAYER_ID_TYPE => !self.inner.payer.0.derives_keys(),
- _ => true,
- }
- });
- let tlv_stream = offer_records.chain(invreq_records);
- signer::verify_metadata(self.metadata(), key, IV_BYTES, self.payer_id, tlv_stream, secp_ctx)