@@ -650,46 +650,48 @@ fn packet_payloads_and_keys<T: CustomOnionMessageContents, S: secp256k1::Signing
650650 let mut blinded_path_idx = 0 ;
651651 let mut prev_control_tlvs_ss = None ;
652652 let mut final_control_tlvs = None ;
653- 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| {
654- if num_unblinded_hops != 0 && unblinded_path_idx < num_unblinded_hops {
655- if let Some ( ss) = prev_control_tlvs_ss. take ( ) {
656- payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Unblinded (
657- ForwardTlvs {
658- next_node_id : unblinded_pk_opt. unwrap ( ) ,
659- next_blinding_override : None ,
660- }
661- ) ) , ss) ) ;
653+ utils:: construct_keys_callback ( secp_ctx, unblinded_path. iter ( ) , Some ( destination) , session_priv,
654+ |_, onion_packet_ss, ephemeral_pubkey, control_tlvs_ss, unblinded_pk_opt, enc_payload_opt| {
655+ if num_unblinded_hops != 0 && unblinded_path_idx < num_unblinded_hops {
656+ if let Some ( ss) = prev_control_tlvs_ss. take ( ) {
657+ payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Unblinded (
658+ ForwardTlvs {
659+ next_node_id : unblinded_pk_opt. unwrap ( ) ,
660+ next_blinding_override : None ,
661+ }
662+ ) ) , ss) ) ;
663+ }
664+ prev_control_tlvs_ss = Some ( control_tlvs_ss) ;
665+ unblinded_path_idx += 1 ;
666+ } else if let Some ( ( intro_node_id, blinding_pt) ) = intro_node_id_blinding_pt. take ( ) {
667+ if let Some ( control_tlvs_ss) = prev_control_tlvs_ss. take ( ) {
668+ payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Unblinded ( ForwardTlvs {
669+ next_node_id : intro_node_id,
670+ next_blinding_override : Some ( blinding_pt) ,
671+ } ) ) , control_tlvs_ss) ) ;
672+ }
662673 }
663- prev_control_tlvs_ss = Some ( control_tlvs_ss) ;
664- unblinded_path_idx += 1 ;
665- } else if let Some ( ( intro_node_id, blinding_pt) ) = intro_node_id_blinding_pt. take ( ) {
666- if let Some ( control_tlvs_ss) = prev_control_tlvs_ss. take ( ) {
667- payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Unblinded ( ForwardTlvs {
668- next_node_id : intro_node_id,
669- next_blinding_override : Some ( blinding_pt) ,
670- } ) ) , control_tlvs_ss) ) ;
674+ if blinded_path_idx < num_blinded_hops. saturating_sub ( 1 ) && enc_payload_opt. is_some ( ) {
675+ payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Blinded ( enc_payload_opt. unwrap ( ) ) ) ,
676+ control_tlvs_ss) ) ;
677+ blinded_path_idx += 1 ;
678+ } else if let Some ( encrypted_payload) = enc_payload_opt {
679+ final_control_tlvs = Some ( ReceiveControlTlvs :: Blinded ( encrypted_payload) ) ;
680+ prev_control_tlvs_ss = Some ( control_tlvs_ss) ;
671681 }
672- }
673- if blinded_path_idx < num_blinded_hops. saturating_sub ( 1 ) && enc_payload_opt. is_some ( ) {
674- payloads. push ( ( Payload :: Forward ( ForwardControlTlvs :: Blinded ( enc_payload_opt. unwrap ( ) ) ) ,
675- control_tlvs_ss) ) ;
676- blinded_path_idx += 1 ;
677- } else if let Some ( encrypted_payload) = enc_payload_opt {
678- final_control_tlvs = Some ( ReceiveControlTlvs :: Blinded ( encrypted_payload) ) ;
679- prev_control_tlvs_ss = Some ( control_tlvs_ss) ;
680- }
681682
682- let ( rho, mu) = onion_utils:: gen_rho_mu_from_shared_secret ( onion_packet_ss. as_ref ( ) ) ;
683- onion_packet_keys. push ( onion_utils:: OnionKeys {
684- #[ cfg( test) ]
685- shared_secret : onion_packet_ss,
686- #[ cfg( test) ]
687- blinding_factor : [ 0 ; 32 ] ,
688- ephemeral_pubkey,
689- rho,
690- mu,
691- } ) ;
692- } ) ?;
683+ let ( rho, mu) = onion_utils:: gen_rho_mu_from_shared_secret ( onion_packet_ss. as_ref ( ) ) ;
684+ onion_packet_keys. push ( onion_utils:: OnionKeys {
685+ #[ cfg( test) ]
686+ shared_secret : onion_packet_ss,
687+ #[ cfg( test) ]
688+ blinding_factor : [ 0 ; 32 ] ,
689+ ephemeral_pubkey,
690+ rho,
691+ mu,
692+ } ) ;
693+ }
694+ ) ?;
693695
694696 if let Some ( control_tlvs) = final_control_tlvs {
695697 payloads. push ( ( Payload :: Receive {
0 commit comments