Skip to content

Commit 3d368c3

Browse files
committed
Parameterize failure packet length
Prepares for new test vectors that pad to 1024 bytes.
1 parent c827173 commit 3d368c3

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

lightning/src/ln/onion_utils.rs

Lines changed: 19 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,12 +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

897-
let pad_len = 256 - 2 - failure_data.len();
898+
let pad_len = if failure_data.len() > min_packet_len - 2 {
899+
0
900+
} else {
901+
min_packet_len - 2 - failure_data.len()
902+
};
898903

899904
// Failure len is 2 bytes type plus the data.
900905
let failure_len = 2 + failure_data.len();
@@ -931,8 +936,12 @@ fn build_unencrypted_failure_packet(
931936
pub(super) fn build_failure_packet(
932937
shared_secret: &[u8], failure_type: u16, failure_data: &[u8],
933938
) -> OnionErrorPacket {
934-
let mut onion_error_packet =
935-
build_unencrypted_failure_packet(shared_secret, failure_type, failure_data);
939+
let mut onion_error_packet = build_unencrypted_failure_packet(
940+
shared_secret,
941+
failure_type,
942+
failure_data,
943+
DEFAULT_MIN_FAILURE_PACKET_LEN,
944+
);
936945

937946
crypt_failure_packet(shared_secret, &mut onion_error_packet);
938947

@@ -2438,6 +2447,7 @@ mod tests {
24382447
onion_keys[4].shared_secret.as_ref(),
24392448
0x2002,
24402449
&[0; 0],
2450+
DEFAULT_MIN_FAILURE_PACKET_LEN,
24412451
);
24422452
let hex = "4c2fc8bc08510334b6833ad9c3e79cd1b52ae59dfe5c2a4b23ead50f09f7ee0b0002200200fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
24432453
assert_eq!(onion_error.data, <Vec<u8>>::from_hex(hex).unwrap());
@@ -2614,6 +2624,7 @@ mod tests {
26142624
outer_onion_keys[0].shared_secret.as_ref(),
26152625
error_code,
26162626
&[0; 0],
2627+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26172628
);
26182629

26192630
crypt_failure_packet(
@@ -2633,6 +2644,7 @@ mod tests {
26332644
outer_onion_keys[1].shared_secret.as_ref(),
26342645
error_code,
26352646
&[0; 0],
2647+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26362648
);
26372649

26382650
crypt_failure_packet(
@@ -2661,6 +2673,7 @@ mod tests {
26612673
trampoline_onion_keys[0].shared_secret.as_ref(),
26622674
error_code,
26632675
&[0; 0],
2676+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26642677
);
26652678

26662679
crypt_failure_packet(
@@ -2694,6 +2707,7 @@ mod tests {
26942707
trampoline_onion_keys[1].shared_secret.as_ref(),
26952708
error_code,
26962709
&[0; 0],
2710+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26972711
);
26982712

26992713
crypt_failure_packet(

0 commit comments

Comments
 (0)