File tree Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Original file line number Diff line number Diff line change @@ -347,6 +347,19 @@ pub enum OffersContext {
347347/// 
348348/// [`Bolt12Invoice::payment_hash`]: crate::offers::invoice::Bolt12Invoice::payment_hash 
349349payment_hash :  PaymentHash , 
350+ 
351+ 		/// A nonce used for authenticating that a received [`InvoiceError`] is for a valid 
352+ /// sent [`Bolt12Invoice`]. 
353+ /// 
354+ /// [`InvoiceError`]: crate::offers::invoice_error::InvoiceError 
355+ /// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice 
356+ nonce :  Nonce , 
357+ 
358+ 		/// Authentication code for the [`PaymentHash`], which should be checked when the context is 
359+ /// used to log the received [`InvoiceError`]. 
360+ /// 
361+ /// [`InvoiceError`]: crate::offers::invoice_error::InvoiceError 
362+ hmac :  Hmac < Sha256 > , 
350363	} , 
351364} 
352365
@@ -366,6 +379,8 @@ impl_writeable_tlv_based_enum!(OffersContext,
366379	} , 
367380	( 2 ,  InboundPayment )  => { 
368381		( 0 ,  payment_hash,  required) , 
382+ 		( 1 ,  nonce,  required) , 
383+ 		( 2 ,  hmac,  required) 
369384	} , 
370385) ; 
371386
Original file line number Diff line number Diff line change @@ -9226,8 +9226,10 @@ where
92269226				let builder: InvoiceBuilder<DerivedSigningPubkey> = builder.into();
92279227				let invoice = builder.allow_mpp().build_and_sign(secp_ctx)?;
92289228
9229+ 				let nonce = Nonce::from_entropy_source(entropy);
9230+ 				let hmac = payment_hash.hmac_for_offer_payment(nonce, expanded_key);
92299231				let context = OffersContext::InboundPayment {
9230- 					payment_hash: invoice.payment_hash(),
9232+ 					payment_hash: invoice.payment_hash(), nonce, hmac 
92319233				};
92329234				let reply_paths = self.create_blinded_paths(context)
92339235					.map_err(|_| Bolt12SemanticError::MissingPaths)?;
@@ -10987,7 +10989,12 @@ where
1098710989			},
1098810990			OffersMessage::InvoiceError(invoice_error) => {
1098910991				let payment_hash = match context {
10990- 					Some(OffersContext::InboundPayment { payment_hash }) => Some(payment_hash),
10992+ 					Some(OffersContext::InboundPayment { payment_hash, nonce, hmac }) => {
10993+ 						match payment_hash.verify(hmac, nonce, expanded_key) {
10994+ 							Ok(_) => Some(payment_hash),
10995+ 							Err(_) => None,
10996+ 						}
10997+ 					},
1099110998					_ => None,
1099210999				};
1099311000
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments