@@ -655,46 +655,48 @@ fn packet_payloads_and_keys<T: CustomOnionMessageContents, S: secp256k1::Signing
655655 let mut blinded_path_idx = 0 ;
656656 let mut prev_control_tlvs_ss = None ;
657657 let mut final_control_tlvs = None ;
658- utils:: construct_keys_callback ( secp_ctx, unblinded_path, Some ( destination) , session_priv, |_, onion_packet_ss, ephemeral_pubkey, control_tlvs_ss, unblinded_pk_opt, enc_payload_opt| {
659- if num_unblinded_hops != 0 && unblinded_path_idx < num_unblinded_hops {
660- if let Some ( ss) = prev_control_tlvs_ss. take ( ) {
661- payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Unblinded (
662- ForwardTlvs {
663- next_node_id : unblinded_pk_opt. unwrap ( ) ,
664- next_blinding_override : None ,
665- }
666- ) ) , ss) ) ;
658+ utils:: construct_keys_callback ( secp_ctx, unblinded_path. iter ( ) , Some ( destination) , session_priv,
659+ |_, onion_packet_ss, ephemeral_pubkey, control_tlvs_ss, unblinded_pk_opt, enc_payload_opt| {
660+ if num_unblinded_hops != 0 && unblinded_path_idx < num_unblinded_hops {
661+ if let Some ( ss) = prev_control_tlvs_ss. take ( ) {
662+ payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Unblinded (
663+ ForwardTlvs {
664+ next_node_id : unblinded_pk_opt. unwrap ( ) ,
665+ next_blinding_override : None ,
666+ }
667+ ) ) , ss) ) ;
668+ }
669+ prev_control_tlvs_ss = Some ( control_tlvs_ss) ;
670+ unblinded_path_idx += 1 ;
671+ } else if let Some ( ( intro_node_id, blinding_pt) ) = intro_node_id_blinding_pt. take ( ) {
672+ if let Some ( control_tlvs_ss) = prev_control_tlvs_ss. take ( ) {
673+ payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Unblinded ( ForwardTlvs {
674+ next_node_id : intro_node_id,
675+ next_blinding_override : Some ( blinding_pt) ,
676+ } ) ) , control_tlvs_ss) ) ;
677+ }
667678 }
668- prev_control_tlvs_ss = Some ( control_tlvs_ss) ;
669- unblinded_path_idx += 1 ;
670- } else if let Some ( ( intro_node_id, blinding_pt) ) = intro_node_id_blinding_pt. take ( ) {
671- if let Some ( control_tlvs_ss) = prev_control_tlvs_ss. take ( ) {
672- payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Unblinded ( ForwardTlvs {
673- next_node_id : intro_node_id,
674- next_blinding_override : Some ( blinding_pt) ,
675- } ) ) , control_tlvs_ss) ) ;
679+ if blinded_path_idx < num_blinded_hops. saturating_sub ( 1 ) && enc_payload_opt. is_some ( ) {
680+ payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Blinded ( enc_payload_opt. unwrap ( ) ) ) ,
681+ control_tlvs_ss) ) ;
682+ blinded_path_idx += 1 ;
683+ } else if let Some ( encrypted_payload) = enc_payload_opt {
684+ final_control_tlvs = Some ( ReceiveControlTlvs :: Blinded ( encrypted_payload) ) ;
685+ prev_control_tlvs_ss = Some ( control_tlvs_ss) ;
676686 }
677- }
678- if blinded_path_idx < num_blinded_hops. saturating_sub ( 1 ) && enc_payload_opt. is_some ( ) {
679- payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Blinded ( enc_payload_opt. unwrap ( ) ) ) ,
680- control_tlvs_ss) ) ;
681- blinded_path_idx += 1 ;
682- } else if let Some ( encrypted_payload) = enc_payload_opt {
683- final_control_tlvs = Some ( ReceiveControlTlvs :: Blinded ( encrypted_payload) ) ;
684- prev_control_tlvs_ss = Some ( control_tlvs_ss) ;
685- }
686687
687- let ( rho, mu) = onion_utils:: gen_rho_mu_from_shared_secret ( onion_packet_ss. as_ref ( ) ) ;
688- onion_packet_keys. push ( onion_utils:: OnionKeys {
689- #[ cfg( test) ]
690- shared_secret : onion_packet_ss,
691- #[ cfg( test) ]
692- blinding_factor : [ 0 ; 32 ] ,
693- ephemeral_pubkey,
694- rho,
695- mu,
696- } ) ;
697- } ) ?;
688+ let ( rho, mu) = onion_utils:: gen_rho_mu_from_shared_secret ( onion_packet_ss. as_ref ( ) ) ;
689+ onion_packet_keys. push ( onion_utils:: OnionKeys {
690+ #[ cfg( test) ]
691+ shared_secret : onion_packet_ss,
692+ #[ cfg( test) ]
693+ blinding_factor : [ 0 ; 32 ] ,
694+ ephemeral_pubkey,
695+ rho,
696+ mu,
697+ } ) ;
698+ }
699+ ) ?;
698700
699701 if let Some ( control_tlvs) = final_control_tlvs {
700702 payloads. push ( ( Payload :: Receive {
0 commit comments