77// You may not use this file except in accordance with one or both of these
88// licenses.
99
10+ use bitcoin:: hashes:: hmac:: Hmac ;
1011use bitcoin:: hashes:: hex:: FromHex ;
12+ use bitcoin:: hashes:: sha256:: Hash as Sha256 ;
1113use bitcoin:: secp256k1:: { PublicKey , Scalar , Secp256k1 , SecretKey , schnorr} ;
1214use bitcoin:: secp256k1:: ecdh:: SharedSecret ;
1315use bitcoin:: secp256k1:: ecdsa:: { RecoverableSignature , Signature } ;
@@ -17,16 +19,18 @@ use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsP
1719use crate :: ln:: types:: ChannelId ;
1820use crate :: types:: payment:: { PaymentHash , PaymentSecret } ;
1921use crate :: ln:: channelmanager;
20- use crate :: ln:: channelmanager:: { HTLCFailureMsg , PaymentId , RecipientOnionFields } ;
22+ use crate :: ln:: channelmanager:: { HTLCFailureMsg , PaymentId , RecipientOnionFields , Verification } ;
2123use crate :: types:: features:: { BlindedHopFeatures , ChannelFeatures , NodeFeatures } ;
2224use crate :: ln:: functional_test_utils:: * ;
25+ use crate :: ln:: inbound_payment:: ExpandedKey ;
2326use crate :: ln:: msgs;
2427use crate :: ln:: msgs:: { ChannelMessageHandler , UnsignedGossipMessage } ;
2528use crate :: ln:: onion_payment;
2629use crate :: ln:: onion_utils;
2730use crate :: ln:: onion_utils:: INVALID_ONION_BLINDING ;
2831use crate :: ln:: outbound_payment:: { Retry , IDEMPOTENCY_TIMEOUT_TICKS } ;
2932use crate :: offers:: invoice:: UnsignedBolt12Invoice ;
33+ use crate :: offers:: nonce:: Nonce ;
3034use crate :: prelude:: * ;
3135use crate :: routing:: router:: { BlindedTail , Path , Payee , PaymentParameters , RouteHop , RouteParameters } ;
3236use crate :: sign:: { KeyMaterial , NodeSigner , Recipient } ;
@@ -69,15 +73,19 @@ fn blinded_payment_path(
6973 . unwrap_or_else ( || channel_upds[ idx - 1 ] . htlc_maximum_msat ) ,
7074 } ) ;
7175 }
72- let payee_tlvs = ReceiveTlvs {
76+
77+ let mut payee_tlvs = ReceiveTlvs {
7378 payment_secret,
7479 payment_constraints : PaymentConstraints {
7580 max_cltv_expiry : u32:: max_value ( ) ,
7681 htlc_minimum_msat :
7782 intro_node_min_htlc_opt. unwrap_or_else ( || channel_upds. last ( ) . unwrap ( ) . htlc_minimum_msat ) ,
7883 } ,
7984 payment_context : PaymentContext :: unknown ( ) ,
85+ authentication : None ,
8086 } ;
87+ payee_tlvs. authentication = Some ( hmac_payee_tlvs ( & payee_tlvs, keys_manager) ) ;
88+
8189 let mut secp_ctx = Secp256k1 :: new ( ) ;
8290 BlindedPaymentPath :: new (
8391 & intermediate_nodes[ ..] , * node_ids. last ( ) . unwrap ( ) , payee_tlvs,
@@ -86,6 +94,15 @@ fn blinded_payment_path(
8694 ) . unwrap ( )
8795}
8896
97+ fn hmac_payee_tlvs (
98+ payee_tlvs : & ReceiveTlvs , keys_manager : & test_utils:: TestKeysInterface ,
99+ ) -> ( Hmac < Sha256 > , Nonce ) {
100+ let nonce = Nonce ( [ 42u8 ; 16 ] ) ;
101+ let expanded_key = ExpandedKey :: new ( & keys_manager. get_inbound_payment_key_material ( ) ) ;
102+ let hmac = payee_tlvs. hmac_for_offer_payment ( nonce, & expanded_key) ;
103+ ( hmac, nonce)
104+ }
105+
89106pub fn get_blinded_route_parameters (
90107 amt_msat : u64 , payment_secret : PaymentSecret , intro_node_min_htlc : u64 , intro_node_max_htlc : u64 ,
91108 node_ids : Vec < PublicKey > , channel_upds : & [ & msgs:: UnsignedChannelUpdate ] ,
@@ -116,14 +133,16 @@ fn do_one_hop_blinded_path(success: bool) {
116133
117134 let amt_msat = 5000 ;
118135 let ( payment_preimage, payment_hash, payment_secret) = get_payment_preimage_hash ( & nodes[ 1 ] , Some ( amt_msat) , None ) ;
119- let payee_tlvs = ReceiveTlvs {
136+ let mut payee_tlvs = ReceiveTlvs {
120137 payment_secret,
121138 payment_constraints : PaymentConstraints {
122139 max_cltv_expiry : u32:: max_value ( ) ,
123140 htlc_minimum_msat : chan_upd. htlc_minimum_msat ,
124141 } ,
125142 payment_context : PaymentContext :: unknown ( ) ,
143+ authentication : None ,
126144 } ;
145+ payee_tlvs. authentication = Some ( hmac_payee_tlvs ( & payee_tlvs, & chanmon_cfgs[ 1 ] . keys_manager ) ) ;
127146 let mut secp_ctx = Secp256k1 :: new ( ) ;
128147 let blinded_path = BlindedPaymentPath :: new (
129148 & [ ] , nodes[ 1 ] . node . get_our_node_id ( ) , payee_tlvs, u64:: MAX , TEST_FINAL_CLTV as u16 ,
@@ -160,14 +179,16 @@ fn mpp_to_one_hop_blinded_path() {
160179
161180 let amt_msat = 15_000_000 ;
162181 let ( payment_preimage, payment_hash, payment_secret) = get_payment_preimage_hash ( & nodes[ 3 ] , Some ( amt_msat) , None ) ;
163- let payee_tlvs = ReceiveTlvs {
182+ let mut payee_tlvs = ReceiveTlvs {
164183 payment_secret,
165184 payment_constraints : PaymentConstraints {
166185 max_cltv_expiry : u32:: max_value ( ) ,
167186 htlc_minimum_msat : chan_upd_1_3. htlc_minimum_msat ,
168187 } ,
169188 payment_context : PaymentContext :: unknown ( ) ,
189+ authentication : None ,
170190 } ;
191+ payee_tlvs. authentication = Some ( hmac_payee_tlvs ( & payee_tlvs, & chanmon_cfgs[ 3 ] . keys_manager ) ) ;
171192 let blinded_path = BlindedPaymentPath :: new (
172193 & [ ] , nodes[ 3 ] . node . get_our_node_id ( ) , payee_tlvs, u64:: MAX , TEST_FINAL_CLTV as u16 ,
173194 & chanmon_cfgs[ 3 ] . keys_manager , & secp_ctx
@@ -302,7 +323,7 @@ fn do_forward_checks_failure(check: ForwardCheckFail, intro_fails: bool) {
302323 let mut route_params = get_blinded_route_parameters ( amt_msat, payment_secret, 1 , 1_0000_0000 ,
303324 nodes. iter ( ) . skip ( 1 ) . map ( |n| n. node . get_our_node_id ( ) ) . collect ( ) ,
304325 & [ & chan_upd_1_2, & chan_upd_2_3] , & chanmon_cfgs[ 3 ] . keys_manager ) ;
305- route_params. payment_params . max_path_length = 18 ;
326+ route_params. payment_params . max_path_length = 17 ;
306327
307328 let route = get_route ( & nodes[ 0 ] , & route_params) . unwrap ( ) ;
308329 node_cfgs[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( route. clone ( ) ) ) ;
@@ -1375,14 +1396,16 @@ fn custom_tlvs_to_blinded_path() {
13751396
13761397 let amt_msat = 5000 ;
13771398 let ( payment_preimage, payment_hash, payment_secret) = get_payment_preimage_hash ( & nodes[ 1 ] , Some ( amt_msat) , None ) ;
1378- let payee_tlvs = ReceiveTlvs {
1399+ let mut payee_tlvs = ReceiveTlvs {
13791400 payment_secret,
13801401 payment_constraints : PaymentConstraints {
13811402 max_cltv_expiry : u32:: max_value ( ) ,
13821403 htlc_minimum_msat : chan_upd. htlc_minimum_msat ,
13831404 } ,
13841405 payment_context : PaymentContext :: unknown ( ) ,
1406+ authentication : None ,
13851407 } ;
1408+ payee_tlvs. authentication = Some ( hmac_payee_tlvs ( & payee_tlvs, & chanmon_cfgs[ 1 ] . keys_manager ) ) ;
13861409 let mut secp_ctx = Secp256k1 :: new ( ) ;
13871410 let blinded_path = BlindedPaymentPath :: new (
13881411 & [ ] , nodes[ 1 ] . node . get_our_node_id ( ) , payee_tlvs, u64:: MAX , TEST_FINAL_CLTV as u16 ,
0 commit comments