@@ -418,9 +418,9 @@ pub(super) fn construct_onion_packet(
418
418
#[ allow( unused) ]
419
419
pub ( super ) fn construct_trampoline_onion_packet (
420
420
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 > ,
422
422
) -> Result < msgs:: TrampolineOnionPacket , ( ) > {
423
- let packet_length : usize = payloads
423
+ let minimum_packet_length : usize = payloads
424
424
. iter ( )
425
425
. map ( |p| {
426
426
let mut payload_len = LengthCalculatingWriter ( 0 ) ;
@@ -429,6 +429,17 @@ pub(super) fn construct_trampoline_onion_packet(
429
429
} )
430
430
. 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
+
432
443
let mut packet_data = vec ! [ 0u8 ; packet_length] ;
433
444
let mut chacha = ChaCha20 :: new ( & prng_seed, & [ 0 ; 8 ] ) ;
434
445
chacha. process ( & vec ! [ 0u8 ; packet_length] , & mut packet_data) ;
0 commit comments