Skip to content

Commit 7c6f220

Browse files
committed
Calculate Trampoline onion size dynamically
For outbound Trampoline payments, we will need to generate onion packets whose size matches their content. This allows them to be included in individual hops at arbitrary positions. A future spec change may involve defining a static size to improve privacy from Trampoline nodes.
1 parent 8d8b4ea commit 7c6f220

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

lightning/src/ln/onion_utils.rs

+21-3
Original file line numberDiff line numberDiff line change
@@ -427,12 +427,30 @@ 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+
debug_assert!(
435+
minimum_packet_length < ONION_DATA_LEN,
436+
"Trampoline onion packet must be smaller than outer onion"
437+
);
438+
if minimum_packet_length >= ONION_DATA_LEN {
439+
return Err(());
440+
}
441+
442+
let packet_length = length.map(|l| usize::from(l)).unwrap_or(minimum_packet_length);
443+
debug_assert!(
444+
packet_length >= minimum_packet_length,
445+
"Packet length cannot be smaller than the payloads require."
446+
);
447+
if packet_length < minimum_packet_length {
448+
return Err(());
449+
}
450+
451+
let mut packet_data = vec![0u8; packet_length];
434452
let mut chacha = ChaCha20::new(&prng_seed, &[0; 8]);
435-
chacha.process(&vec![0u8; length as usize], &mut packet_data);
453+
chacha.process_in_place(&mut packet_data);
436454

437455
construct_onion_packet_with_init_noise::<_, _>(
438456
payloads,

0 commit comments

Comments
 (0)