X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;ds=sidebyside;f=lightning%2Fsrc%2Foffers%2Foffer.rs;h=d2918e809429d8f5db858b52930e8e19634e869e;hb=8afe6940200769b9df9e9ecfda2a8390919a6cf2;hp=617496d4b5174f45e51b8c72b54309c96038fed6;hpb=9bd43e077fd00add0491960aeb5533a75d9d71d3;p=rust-lightning diff --git a/lightning/src/offers/offer.rs b/lightning/src/offers/offer.rs index 617496d4..d2918e80 100644 --- a/lightning/src/offers/offer.rs +++ b/lightning/src/offers/offer.rs @@ -68,7 +68,7 @@ use bitcoin::blockdata::constants::ChainHash; use bitcoin::network::constants::Network; -use bitcoin::secp256k1::{PublicKey, Secp256k1, self}; +use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, self}; use core::convert::TryFrom; use core::num::NonZeroU64; use core::ops::Deref; @@ -92,7 +92,7 @@ use crate::prelude::*; #[cfg(feature = "std")] use std::time::SystemTime; -const IV_BYTES: &[u8; IV_LEN] = b"LDK Offer ~~~~~~"; +pub(super) const IV_BYTES: &[u8; IV_LEN] = b"LDK Offer ~~~~~~"; /// Builds an [`Offer`] for the "offer to be paid" flow. /// @@ -443,8 +443,8 @@ impl Offer { /// - derives the [`InvoiceRequest::payer_id`] such that a different key can be used for each /// request, and /// - sets the [`InvoiceRequest::metadata`] when [`InvoiceRequestBuilder::build`] is called such - /// that it can be used to determine if the invoice was requested using a base [`ExpandedKey`] - /// from which the payer id was derived. + /// that it can be used by [`Invoice::verify`] to determine if the invoice was requested using + /// a base [`ExpandedKey`] from which the payer id was derived. /// /// Useful to protect the sender's privacy. /// @@ -615,11 +615,11 @@ impl OfferContents { /// Verifies that the offer metadata was produced from the offer in the TLV stream. pub(super) fn verify( - &self, tlv_stream: TlvStream<'_>, key: &ExpandedKey, secp_ctx: &Secp256k1 - ) -> bool { + &self, bytes: &[u8], key: &ExpandedKey, secp_ctx: &Secp256k1 + ) -> Result, ()> { match self.metadata() { Some(metadata) => { - let tlv_stream = tlv_stream.range(OFFER_TYPES).filter(|record| { + let tlv_stream = TlvStream::new(bytes).range(OFFER_TYPES).filter(|record| { match record.r#type { OFFER_METADATA_TYPE => false, OFFER_NODE_ID_TYPE => !self.metadata.as_ref().unwrap().derives_keys(), @@ -630,7 +630,7 @@ impl OfferContents { metadata, key, IV_BYTES, self.signing_pubkey(), tlv_stream, secp_ctx ) }, - None => false, + None => Err(()), } } @@ -722,7 +722,7 @@ impl Quantity { } /// Valid type range for offer TLV records. -const OFFER_TYPES: core::ops::Range = 1..80; +pub(super) const OFFER_TYPES: core::ops::Range = 1..80; /// TLV record type for [`Offer::metadata`]. const OFFER_METADATA_TYPE: u64 = 4; @@ -962,7 +962,7 @@ mod tests { let invoice_request = offer.request_invoice(vec![1; 32], payer_pubkey()).unwrap() .build().unwrap() .sign(payer_sign).unwrap(); - assert!(invoice_request.verify(&expanded_key, &secp_ctx)); + assert!(invoice_request.verify(&expanded_key, &secp_ctx).is_ok()); // Fails verification with altered offer field let mut tlv_stream = offer.as_tlv_stream(); @@ -975,7 +975,7 @@ mod tests { .request_invoice(vec![1; 32], payer_pubkey()).unwrap() .build().unwrap() .sign(payer_sign).unwrap(); - assert!(!invoice_request.verify(&expanded_key, &secp_ctx)); + assert!(invoice_request.verify(&expanded_key, &secp_ctx).is_err()); // Fails verification with altered metadata let mut tlv_stream = offer.as_tlv_stream(); @@ -989,7 +989,7 @@ mod tests { .request_invoice(vec![1; 32], payer_pubkey()).unwrap() .build().unwrap() .sign(payer_sign).unwrap(); - assert!(!invoice_request.verify(&expanded_key, &secp_ctx)); + assert!(invoice_request.verify(&expanded_key, &secp_ctx).is_err()); } #[test] @@ -1019,7 +1019,7 @@ mod tests { let invoice_request = offer.request_invoice(vec![1; 32], payer_pubkey()).unwrap() .build().unwrap() .sign(payer_sign).unwrap(); - assert!(invoice_request.verify(&expanded_key, &secp_ctx)); + assert!(invoice_request.verify(&expanded_key, &secp_ctx).is_ok()); // Fails verification with altered offer field let mut tlv_stream = offer.as_tlv_stream(); @@ -1032,7 +1032,7 @@ mod tests { .request_invoice(vec![1; 32], payer_pubkey()).unwrap() .build().unwrap() .sign(payer_sign).unwrap(); - assert!(!invoice_request.verify(&expanded_key, &secp_ctx)); + assert!(invoice_request.verify(&expanded_key, &secp_ctx).is_err()); // Fails verification with altered signing pubkey let mut tlv_stream = offer.as_tlv_stream(); @@ -1046,7 +1046,7 @@ mod tests { .request_invoice(vec![1; 32], payer_pubkey()).unwrap() .build().unwrap() .sign(payer_sign).unwrap(); - assert!(!invoice_request.verify(&expanded_key, &secp_ctx)); + assert!(invoice_request.verify(&expanded_key, &secp_ctx).is_err()); } #[test]