@@ -553,9 +553,9 @@ pub(super) fn construct_onion_packet(
553
553
#[ allow( unused) ]
554
554
pub ( super ) fn construct_trampoline_onion_packet (
555
555
payloads : Vec < msgs:: OutboundTrampolinePayload > , onion_keys : Vec < OnionKeys > ,
556
- prng_seed : [ u8 ; 32 ] , associated_data : & PaymentHash ,
556
+ prng_seed : [ u8 ; 32 ] , associated_data : & PaymentHash , length : Option < u16 > ,
557
557
) -> Result < msgs:: TrampolineOnionPacket , ( ) > {
558
- let packet_length : usize = payloads
558
+ let minimum_packet_length : usize = payloads
559
559
. iter ( )
560
560
. map ( |p| {
561
561
let mut payload_len = LengthCalculatingWriter ( 0 ) ;
@@ -564,6 +564,17 @@ pub(super) fn construct_trampoline_onion_packet(
564
564
} )
565
565
. sum ( ) ;
566
566
567
+ assert ! (
568
+ minimum_packet_length < ONION_DATA_LEN ,
569
+ "Trampoline onion packet must be smaller than outer onion"
570
+ ) ;
571
+
572
+ let packet_length = length. unwrap_or ( minimum_packet_length as u16 ) as usize ;
573
+ assert ! (
574
+ packet_length >= minimum_packet_length,
575
+ "Packet length cannot be smaller than the payloads require."
576
+ ) ;
577
+
567
578
let mut packet_data = vec ! [ 0u8 ; packet_length] ;
568
579
let mut chacha = ChaCha20 :: new ( & prng_seed, & [ 0 ; 8 ] ) ;
569
580
chacha. process ( & vec ! [ 0u8 ; packet_length] , & mut packet_data) ;
0 commit comments