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