Skip to content

Commit 15d4c7c

Browse files
committed
Parameterize failure packet length
Prepares for new test vectors that pad to 1024 bytes.
1 parent 6ed87eb commit 15d4c7c

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

lightning/src/ln/onion_utils.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ use core::ops::Deref;
4141
#[allow(unused_imports)]
4242
use crate::prelude::*;
4343

44+
const DEFAULT_MIN_FAILURE_PACKET_LEN: usize = 256;
45+
4446
pub(crate) struct OnionKeys {
4547
#[cfg(test)]
4648
pub(crate) shared_secret: SharedSecret,
@@ -889,15 +891,15 @@ fn process_chacha(key: &[u8; 32], packet: &mut [u8]) {
889891
}
890892

891893
fn build_unencrypted_failure_packet(
892-
shared_secret: &[u8], failure_type: u16, failure_data: &[u8],
894+
shared_secret: &[u8], failure_type: u16, failure_data: &[u8], min_packet_len: usize,
893895
) -> OnionErrorPacket {
894896
assert_eq!(shared_secret.len(), 32);
895-
assert!(failure_data.len() <= 256 - 2);
896897

897898
// Failure len is 2 bytes type plus the data.
898899
let failure_len = 2 + failure_data.len();
899900

900-
let pad_len = 256 - failure_len;
901+
// The remaining length is the padding.
902+
let pad_len = min_packet_len.saturating_sub(failure_len);
901903

902904
// Total len is a 32 bytes HMAC, 2 bytes failure len, failure, 2 bytes pad len and pad.
903905
let total_len = 32 + 2 + failure_len + 2 + pad_len;
@@ -931,8 +933,12 @@ fn build_unencrypted_failure_packet(
931933
pub(super) fn build_failure_packet(
932934
shared_secret: &[u8], failure_type: u16, failure_data: &[u8],
933935
) -> OnionErrorPacket {
934-
let mut onion_error_packet =
935-
build_unencrypted_failure_packet(shared_secret, failure_type, failure_data);
936+
let mut onion_error_packet = build_unencrypted_failure_packet(
937+
shared_secret,
938+
failure_type,
939+
failure_data,
940+
DEFAULT_MIN_FAILURE_PACKET_LEN,
941+
);
936942

937943
crypt_failure_packet(shared_secret, &mut onion_error_packet);
938944

@@ -2461,6 +2467,7 @@ mod tests {
24612467
onion_keys[4].shared_secret.as_ref(),
24622468
0x2002,
24632469
&[0; 0],
2470+
DEFAULT_MIN_FAILURE_PACKET_LEN,
24642471
);
24652472
let hex = "4c2fc8bc08510334b6833ad9c3e79cd1b52ae59dfe5c2a4b23ead50f09f7ee0b0002200200fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
24662473
assert_eq!(onion_error.data, <Vec<u8>>::from_hex(hex).unwrap());
@@ -2630,6 +2637,7 @@ mod tests {
26302637
outer_onion_keys[0].shared_secret.as_ref(),
26312638
error_code,
26322639
&[0; 0],
2640+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26332641
);
26342642

26352643
crypt_failure_packet(
@@ -2649,6 +2657,7 @@ mod tests {
26492657
outer_onion_keys[1].shared_secret.as_ref(),
26502658
error_code,
26512659
&[0; 0],
2660+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26522661
);
26532662

26542663
crypt_failure_packet(
@@ -2677,6 +2686,7 @@ mod tests {
26772686
trampoline_onion_keys[0].shared_secret.as_ref(),
26782687
error_code,
26792688
&[0; 0],
2689+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26802690
);
26812691

26822692
crypt_failure_packet(
@@ -2710,6 +2720,7 @@ mod tests {
27102720
trampoline_onion_keys[1].shared_secret.as_ref(),
27112721
error_code,
27122722
&[0; 0],
2723+
DEFAULT_MIN_FAILURE_PACKET_LEN,
27132724
);
27142725

27152726
crypt_failure_packet(

0 commit comments

Comments
 (0)