@@ -425,12 +425,24 @@ pub(super) fn construct_onion_packet(
425
425
#[ allow( unused) ]
426
426
pub ( super ) fn construct_trampoline_onion_packet (
427
427
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 > ,
429
429
) -> 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 ( ) ;
431
431
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] ;
432
444
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) ;
434
446
435
447
construct_onion_packet_with_init_noise :: < _ , _ > (
436
448
payloads,
0 commit comments