Skip to content

Commit 4077d64

Browse files
committed
Calculate Trampoline onion size dynamically
1 parent 641e40f commit 4077d64

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

lightning/src/ln/onion_utils.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,12 +425,24 @@ pub(super) fn construct_onion_packet(
425425
#[allow(unused)]
426426
pub(super) fn construct_trampoline_onion_packet(
427427
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>,
429429
) -> 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();
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+
443+
let mut packet_data = vec![0u8; packet_length];
432444
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);
434446

435447
construct_onion_packet_with_init_noise::<_, _>(
436448
payloads,

0 commit comments

Comments
 (0)