@@ -418,9 +418,9 @@ pub(super) fn construct_onion_packet(
418418#[ allow( unused) ]
419419pub ( super ) fn construct_trampoline_onion_packet (
420420 payloads : Vec < msgs:: OutboundTrampolinePayload > , onion_keys : Vec < OnionKeys > ,
421- prng_seed : [ u8 ; 32 ] , associated_data : & PaymentHash ,
421+ prng_seed : [ u8 ; 32 ] , associated_data : & PaymentHash , length : Option < u16 > ,
422422) -> Result < msgs:: TrampolineOnionPacket , ( ) > {
423- let packet_length : usize = payloads
423+ let minimum_packet_length : usize = payloads
424424 . iter ( )
425425 . map ( |p| {
426426 let mut payload_len = LengthCalculatingWriter ( 0 ) ;
@@ -429,6 +429,17 @@ pub(super) fn construct_trampoline_onion_packet(
429429 } )
430430 . 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+
432443 let mut packet_data = vec ! [ 0u8 ; packet_length] ;
433444 let mut chacha = ChaCha20 :: new ( & prng_seed, & [ 0 ; 8 ] ) ;
434445 chacha. process ( & vec ! [ 0u8 ; packet_length] , & mut packet_data) ;
0 commit comments