Skip to content

Commit 3a4ba8b

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

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

lightning/src/ln/onion_utils.rs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ use core::ops::Deref;
3939
#[allow(unused_imports)]
4040
use crate::prelude::*;
4141

42+
const DEFAULT_MIN_FAILURE_PACKET_LEN: usize = 256;
43+
4244
pub(crate) struct OnionKeys {
4345
#[cfg(test)]
4446
pub(crate) shared_secret: SharedSecret,
@@ -887,10 +889,9 @@ fn process_chacha(key: &[u8; 32], packet: &mut [u8]) {
887889
}
888890

889891
fn build_unencrypted_failure_packet(
890-
shared_secret: &[u8], failure_type: u16, failure_data: &[u8],
892+
shared_secret: &[u8], failure_type: u16, failure_data: &[u8], min_packet_len: usize,
891893
) -> OnionErrorPacket {
892894
assert_eq!(shared_secret.len(), 32);
893-
assert!(failure_data.len() <= 256 - 2);
894895

895896
let um = gen_um_from_shared_secret(&shared_secret);
896897

@@ -901,9 +902,14 @@ fn build_unencrypted_failure_packet(
901902
res.extend_from_slice(&failure_data[..]);
902903
res
903904
};
905+
let pad_len = if failure_data.len() > min_packet_len - 2 {
906+
0
907+
} else {
908+
min_packet_len - 2 - failure_data.len()
909+
};
904910
let pad = {
905-
let mut res = Vec::with_capacity(256 - 2 - failure_data.len());
906-
res.resize(256 - 2 - failure_data.len(), 0);
911+
let mut res = Vec::with_capacity(pad_len);
912+
res.resize(pad_len, 0);
907913
res
908914
};
909915
let mut packet = msgs::DecodedOnionErrorPacket { hmac: [0; 32], failuremsg, pad };
@@ -918,8 +924,12 @@ fn build_unencrypted_failure_packet(
918924
pub(super) fn build_failure_packet(
919925
shared_secret: &[u8], failure_type: u16, failure_data: &[u8],
920926
) -> OnionErrorPacket {
921-
let mut onion_error_packet =
922-
build_unencrypted_failure_packet(shared_secret, failure_type, failure_data);
927+
let mut onion_error_packet = build_unencrypted_failure_packet(
928+
shared_secret,
929+
failure_type,
930+
failure_data,
931+
DEFAULT_MIN_FAILURE_PACKET_LEN,
932+
);
923933

924934
crypt_failure_packet(shared_secret, &mut onion_error_packet);
925935

@@ -2425,6 +2435,7 @@ mod tests {
24252435
onion_keys[4].shared_secret.as_ref(),
24262436
0x2002,
24272437
&[0; 0],
2438+
DEFAULT_MIN_FAILURE_PACKET_LEN,
24282439
);
24292440
let hex = "4c2fc8bc08510334b6833ad9c3e79cd1b52ae59dfe5c2a4b23ead50f09f7ee0b0002200200fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
24302441
assert_eq!(onion_error.data, <Vec<u8>>::from_hex(hex).unwrap());
@@ -2601,6 +2612,7 @@ mod tests {
26012612
outer_onion_keys[0].shared_secret.as_ref(),
26022613
error_code,
26032614
&[0; 0],
2615+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26042616
);
26052617

26062618
crypt_failure_packet(
@@ -2620,6 +2632,7 @@ mod tests {
26202632
outer_onion_keys[1].shared_secret.as_ref(),
26212633
error_code,
26222634
&[0; 0],
2635+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26232636
);
26242637

26252638
crypt_failure_packet(
@@ -2648,6 +2661,7 @@ mod tests {
26482661
trampoline_onion_keys[0].shared_secret.as_ref(),
26492662
error_code,
26502663
&[0; 0],
2664+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26512665
);
26522666

26532667
crypt_failure_packet(
@@ -2681,6 +2695,7 @@ mod tests {
26812695
trampoline_onion_keys[1].shared_secret.as_ref(),
26822696
error_code,
26832697
&[0; 0],
2698+
DEFAULT_MIN_FAILURE_PACKET_LEN,
26842699
);
26852700

26862701
crypt_failure_packet(

0 commit comments

Comments
 (0)