Skip to content

Commit b4339bc

Browse files
committed
Parameterize failure packet length
Prepares for new test vectors that pad to 1024 bytes.
1 parent 30a7170 commit b4339bc

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

lightning/src/ln/onion_utils.rs

Lines changed: 17 additions & 6 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,16 +891,16 @@ 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);
896-
897-
let pad_len = 256 - 2 - failure_data.len();
898897

899898
// Failure len is 2 bytes type plus the data.
900899
let failure_len = 2 + failure_data.len();
901900

901+
// The remaining length is the padding.
902+
let pad_len = min_packet_len.saturating_sub(failure_len);
903+
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;
904906

@@ -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

@@ -2453,6 +2459,7 @@ mod tests {
24532459
onion_keys[4].shared_secret.as_ref(),
24542460
0x2002,
24552461
&[0; 0],
2462+
DEFAULT_MIN_FAILURE_PACKET_LEN,
24562463
);
24572464
let hex = "4c2fc8bc08510334b6833ad9c3e79cd1b52ae59dfe5c2a4b23ead50f09f7ee0b0002200200fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
24582465
assert_eq!(onion_error.data, <Vec<u8>>::from_hex(hex).unwrap());
@@ -2629,6 +2636,7 @@ mod tests {
26292636
outer_onion_keys[0].shared_secret.as_ref(),
26302637
error_code,
26312638
&[0; 0],
2639+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26322640
);
26332641

26342642
crypt_failure_packet(
@@ -2648,6 +2656,7 @@ mod tests {
26482656
outer_onion_keys[1].shared_secret.as_ref(),
26492657
error_code,
26502658
&[0; 0],
2659+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26512660
);
26522661

26532662
crypt_failure_packet(
@@ -2676,6 +2685,7 @@ mod tests {
26762685
trampoline_onion_keys[0].shared_secret.as_ref(),
26772686
error_code,
26782687
&[0; 0],
2688+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26792689
);
26802690

26812691
crypt_failure_packet(
@@ -2709,6 +2719,7 @@ mod tests {
27092719
trampoline_onion_keys[1].shared_secret.as_ref(),
27102720
error_code,
27112721
&[0; 0],
2722+
DEFAULT_MIN_FAILURE_PACKET_LEN,
27122723
);
27132724

27142725
crypt_failure_packet(

0 commit comments

Comments
 (0)