Skip to content

Commit f18661f

Browse files
Fix onion messages of size BIG_PACKET_HOP_DATA_LEN
This was previously broken and would result in an invalid HMAC error, because we had a hardcoded assumption that OM hop data would always be of size 1300.
1 parent 408b12f commit f18661f

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

lightning/src/ln/onion_utils.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,8 @@ fn construct_onion_packet_with_init_noise<HD: Writeable, P: Packet>(
324324
chacha.process_in_place(packet_data);
325325

326326
if i == 0 {
327-
packet_data[ONION_DATA_LEN - filler.len()..ONION_DATA_LEN].copy_from_slice(&filler[..]);
327+
let onion_data_len = packet_data.len();
328+
packet_data[onion_data_len - filler.len()..onion_data_len].copy_from_slice(&filler[..]);
328329
}
329330

330331
let mut hmac = HmacEngine::<Sha256>::new(&keys.mu);

lightning/src/onion_message/functional_tests.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,3 +284,20 @@ fn peer_buffer_full() {
284284
let err = nodes[0].messenger.send_onion_message(&[], Destination::Node(nodes[1].get_node_pk()), OnionMessageContents::Custom(test_msg), None).unwrap_err();
285285
assert_eq!(err, SendError::BufferFull);
286286
}
287+
288+
#[test]
289+
fn many_hops() {
290+
// Check we can send over a route with many hops. This will exercise our logic for onion messages
291+
// of size [`crate::onion_message::packet::BIG_PACKET_HOP_DATA_LEN`].
292+
let num_nodes: usize = 25;
293+
let nodes = create_nodes(num_nodes as u8);
294+
let test_msg = OnionMessageContents::Custom(TestCustomMessage {});
295+
296+
let mut intermediates = vec![];
297+
for i in 1..(num_nodes-1) {
298+
intermediates.push(nodes[i].get_node_pk());
299+
}
300+
301+
nodes[0].messenger.send_onion_message(&intermediates, Destination::Node(nodes[num_nodes-1].get_node_pk()), test_msg, None).unwrap();
302+
pass_along_path(&nodes);
303+
}

pending_changelog/big-om-error.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
## Bug Fixes
2+
3+
* Fixed sending large onion messages, which previously would result in an HMAC error on the second
4+
hop (#2277).

0 commit comments

Comments
 (0)