Skip to content

Commit 2056f92

Browse files
committed
Calculate Trampoline onion size dynamically
1 parent c23b18e commit 2056f92

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

lightning/src/ln/onion_utils.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -541,12 +541,31 @@ pub(super) fn construct_onion_packet(
541541
#[allow(unused)]
542542
pub(super) fn construct_trampoline_onion_packet(
543543
payloads: Vec<msgs::OutboundTrampolinePayload>, onion_keys: Vec<OnionKeys>,
544-
prng_seed: [u8; 32], associated_data: &PaymentHash, length: u16,
544+
prng_seed: [u8; 32], associated_data: &PaymentHash, length: Option<u16>,
545545
) -> Result<msgs::TrampolineOnionPacket, ()> {
546-
let mut packet_data = vec![0u8; length as usize];
546+
let minimum_packet_length: usize = payloads
547+
.iter()
548+
.map(|p| {
549+
let mut payload_len = LengthCalculatingWriter(0);
550+
p.write(&mut payload_len).expect("Failed to calculate length");
551+
payload_len.0 + 32
552+
})
553+
.sum();
554+
555+
assert!(
556+
minimum_packet_length < ONION_DATA_LEN,
557+
"Trampoline onion packet must be smaller than outer onion"
558+
);
559+
560+
let packet_length = length.unwrap_or(minimum_packet_length as u16) as usize;
561+
assert!(
562+
packet_length >= minimum_packet_length,
563+
"Packet length cannot be smaller than the payloads require."
564+
);
547565

566+
let mut packet_data = vec![0u8; packet_length];
548567
let mut chacha = ChaCha20::new(&prng_seed, &[0; 8]);
549-
chacha.process(&vec![0u8; length as usize], &mut packet_data);
568+
chacha.process(&vec![0u8; packet_length], &mut packet_data);
550569

551570
construct_onion_packet_with_init_noise::<_, _>(
552571
payloads,

0 commit comments

Comments
 (0)