Skip to content

Commit d6de275

Browse files
committed
Parameterize failure packet length
Prepares for new test vectors that pad to 1024 bytes.
1 parent 19a5ea5 commit d6de275

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

@@ -2506,6 +2512,7 @@ mod tests {
25062512
onion_keys[4].shared_secret.as_ref(),
25072513
0x2002,
25082514
&[0; 0],
2515+
DEFAULT_MIN_FAILURE_PACKET_LEN,
25092516
);
25102517
let hex = "4c2fc8bc08510334b6833ad9c3e79cd1b52ae59dfe5c2a4b23ead50f09f7ee0b0002200200fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
25112518
assert_eq!(onion_error.data, <Vec<u8>>::from_hex(hex).unwrap());
@@ -2675,6 +2682,7 @@ mod tests {
26752682
outer_onion_keys[0].shared_secret.as_ref(),
26762683
error_code,
26772684
&[0; 0],
2685+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26782686
);
26792687

26802688
crypt_failure_packet(
@@ -2694,6 +2702,7 @@ mod tests {
26942702
outer_onion_keys[1].shared_secret.as_ref(),
26952703
error_code,
26962704
&[0; 0],
2705+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26972706
);
26982707

26992708
crypt_failure_packet(
@@ -2722,6 +2731,7 @@ mod tests {
27222731
trampoline_onion_keys[0].shared_secret.as_ref(),
27232732
error_code,
27242733
&[0; 0],
2734+
DEFAULT_MIN_FAILURE_PACKET_LEN,
27252735
);
27262736

27272737
crypt_failure_packet(
@@ -2755,6 +2765,7 @@ mod tests {
27552765
trampoline_onion_keys[1].shared_secret.as_ref(),
27562766
error_code,
27572767
&[0; 0],
2768+
DEFAULT_MIN_FAILURE_PACKET_LEN,
27582769
);
27592770

27602771
crypt_failure_packet(

0 commit comments

Comments
 (0)