Skip to content

Commit bc899ce

Browse files
committed
Calculate Trampoline onion size dynamically
1 parent 43d9874 commit bc899ce

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

lightning/src/ln/onion_utils.rs

+22-3
Original file line numberDiff line numberDiff line change
@@ -425,12 +425,31 @@ 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
431+
.iter()
432+
.map(|p| {
433+
let mut payload_len = LengthCalculatingWriter(0);
434+
p.write(&mut payload_len).expect("Failed to calculate length");
435+
payload_len.0 + 32
436+
})
437+
.sum();
438+
439+
assert!(
440+
minimum_packet_length < ONION_DATA_LEN,
441+
"Trampoline onion packet must be smaller than outer onion"
442+
);
443+
444+
let packet_length = length.unwrap_or(minimum_packet_length as u16) as usize;
445+
assert!(
446+
packet_length >= minimum_packet_length,
447+
"Packet length cannot be smaller than the payloads require."
448+
);
431449

450+
let mut packet_data = vec![0u8; packet_length];
432451
let mut chacha = ChaCha20::new(&prng_seed, &[0; 8]);
433-
chacha.process(&vec![0u8; length as usize], &mut packet_data);
452+
chacha.process(&vec![0u8; packet_length], &mut packet_data);
434453

435454
construct_onion_packet_with_init_noise::<_, _>(
436455
payloads,

0 commit comments

Comments
 (0)