Skip to content

Commit 7ecd863

Browse files
committed
Calculate Trampoline onion size dynamically
1 parent 8d8b4ea commit 7ecd863

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

lightning/src/ln/onion_utils.rs

+15-3
Original file line numberDiff line numberDiff line change
@@ -427,12 +427,24 @@ pub(super) fn construct_onion_packet(
427427
#[allow(unused)]
428428
pub(super) fn construct_trampoline_onion_packet(
429429
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>,
431431
) -> 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();
433433

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];
434446
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);
436448

437449
construct_onion_packet_with_init_noise::<_, _>(
438450
payloads,

0 commit comments

Comments
 (0)