@@ -425,12 +425,24 @@ pub(super) fn construct_onion_packet(
425425#[ allow( unused) ]
426426pub ( super ) fn construct_trampoline_onion_packet (
427427 payloads : Vec < msgs:: OutboundTrampolinePayload > , onion_keys : Vec < OnionKeys > ,
428- prng_seed : [ u8 ; 32 ] , associated_data : & PaymentHash , length : u16 ,
428+ prng_seed : [ u8 ; 32 ] , associated_data : & PaymentHash , length : Option < u16 > ,
429429) -> Result < msgs:: TrampolineOnionPacket , ( ) > {
430- let mut packet_data = vec ! [ 0u8 ; length as usize ] ;
430+ let minimum_packet_length : usize = payloads . iter ( ) . map ( |p| p . serialized_length ( ) + 32 ) . sum ( ) ;
431431
432+ assert ! (
433+ minimum_packet_length < ONION_DATA_LEN ,
434+ "Trampoline onion packet must be smaller than outer onion"
435+ ) ;
436+
437+ let packet_length = length. unwrap_or ( minimum_packet_length as u16 ) as usize ;
438+ assert ! (
439+ packet_length >= minimum_packet_length,
440+ "Packet length cannot be smaller than the payloads require."
441+ ) ;
442+
443+ let mut packet_data = vec ! [ 0u8 ; packet_length] ;
432444 let mut chacha = ChaCha20 :: new ( & prng_seed, & [ 0 ; 8 ] ) ;
433- chacha. process ( & vec ! [ 0u8 ; length as usize ] , & mut packet_data) ;
445+ chacha. process_in_place ( & mut packet_data) ;
434446
435447 construct_onion_packet_with_init_noise :: < _ , _ > (
436448 payloads,
0 commit comments