Skip to content

Commit cde7744

Browse files
committed
fixup! Refactor onion_utils to encrypt/decrypt OnionErrorPacket types
1 parent 4f5b58e commit cde7744

File tree

2 files changed

+14
-26
lines changed

2 files changed

+14
-26
lines changed

lightning/src/ln/onion_route_tests.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -411,15 +411,15 @@ fn test_onion_failure() {
411411
// and tamper returning error message
412412
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
413413
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
414-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), NODE|2, &[0;0]);
414+
msg.reason = onion_utils::build_failure_packet(onion_keys[0].shared_secret.as_ref(), NODE|2, &[0;0]);
415415
}, ||{}, true, Some(NODE|2), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0].hops[0].pubkey, is_permanent: false}), Some(route.paths[0].hops[0].short_channel_id), Some(next_hop_failure.clone()));
416416

417417
// final node failure
418418
run_onion_failure_test_with_fail_intercept("temporary_node_failure", 200, &nodes, &route, &payment_hash, &payment_secret, |_msg| {}, |msg| {
419419
// and tamper returning error message
420420
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
421421
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
422-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[1].shared_secret.as_ref(), NODE|2, &[0;0]);
422+
msg.reason = onion_utils::build_failure_packet(onion_keys[1].shared_secret.as_ref(), NODE|2, &[0;0]);
423423
}, ||{
424424
nodes[2].node.fail_htlc_backwards(&payment_hash);
425425
}, true, Some(NODE|2), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0].hops[1].pubkey, is_permanent: false}), Some(route.paths[0].hops[1].short_channel_id), None);
@@ -431,14 +431,14 @@ fn test_onion_failure() {
431431
}, |msg| {
432432
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
433433
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
434-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|NODE|2, &[0;0]);
434+
msg.reason = onion_utils::build_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|NODE|2, &[0;0]);
435435
}, ||{}, true, Some(PERM|NODE|2), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0].hops[0].pubkey, is_permanent: true}), Some(route.paths[0].hops[0].short_channel_id), Some(next_hop_failure.clone()));
436436

437437
// final node failure
438438
run_onion_failure_test_with_fail_intercept("permanent_node_failure", 200, &nodes, &route, &payment_hash, &payment_secret, |_msg| {}, |msg| {
439439
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
440440
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
441-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[1].shared_secret.as_ref(), PERM|NODE|2, &[0;0]);
441+
msg.reason = onion_utils::build_failure_packet(onion_keys[1].shared_secret.as_ref(), PERM|NODE|2, &[0;0]);
442442
}, ||{
443443
nodes[2].node.fail_htlc_backwards(&payment_hash);
444444
}, false, Some(PERM|NODE|2), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0].hops[1].pubkey, is_permanent: true}), Some(route.paths[0].hops[1].short_channel_id), None);
@@ -450,7 +450,7 @@ fn test_onion_failure() {
450450
}, |msg| {
451451
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
452452
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
453-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|NODE|3, &[0;0]);
453+
msg.reason = onion_utils::build_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|NODE|3, &[0;0]);
454454
}, ||{
455455
nodes[2].node.fail_htlc_backwards(&payment_hash);
456456
}, true, Some(PERM|NODE|3), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0].hops[0].pubkey, is_permanent: true}), Some(route.paths[0].hops[0].short_channel_id), Some(next_hop_failure.clone()));
@@ -459,7 +459,7 @@ fn test_onion_failure() {
459459
run_onion_failure_test_with_fail_intercept("required_node_feature_missing", 200, &nodes, &route, &payment_hash, &payment_secret, |_msg| {}, |msg| {
460460
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
461461
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
462-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[1].shared_secret.as_ref(), PERM|NODE|3, &[0;0]);
462+
msg.reason = onion_utils::build_failure_packet(onion_keys[1].shared_secret.as_ref(), PERM|NODE|3, &[0;0]);
463463
}, ||{
464464
nodes[2].node.fail_htlc_backwards(&payment_hash);
465465
}, false, Some(PERM|NODE|3), Some(NetworkUpdate::NodeFailure{node_id: route.paths[0].hops[1].pubkey, is_permanent: true}), Some(route.paths[0].hops[1].short_channel_id), None);
@@ -489,7 +489,7 @@ fn test_onion_failure() {
489489
}, |msg| {
490490
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
491491
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
492-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), UPDATE|7, &err_data);
492+
msg.reason = onion_utils::build_failure_packet(onion_keys[0].shared_secret.as_ref(), UPDATE|7, &err_data);
493493
}, ||{}, true, Some(UPDATE|7),
494494
Some(NetworkUpdate::ChannelFailure { short_channel_id, is_permanent: false }),
495495
Some(short_channel_id), Some(next_hop_failure.clone()));
@@ -501,7 +501,7 @@ fn test_onion_failure() {
501501
}, |msg| {
502502
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
503503
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
504-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), UPDATE|7, &err_data_without_type);
504+
msg.reason = onion_utils::build_failure_packet(onion_keys[0].shared_secret.as_ref(), UPDATE|7, &err_data_without_type);
505505
}, ||{}, true, Some(UPDATE|7),
506506
Some(NetworkUpdate::ChannelFailure { short_channel_id, is_permanent: false }),
507507
Some(short_channel_id), Some(next_hop_failure.clone()));
@@ -512,7 +512,7 @@ fn test_onion_failure() {
512512
}, |msg| {
513513
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
514514
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
515-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|8, &[0;0]);
515+
msg.reason = onion_utils::build_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|8, &[0;0]);
516516
// short_channel_id from the processing node
517517
}, ||{}, true, Some(PERM|8), Some(NetworkUpdate::ChannelFailure{short_channel_id, is_permanent: true}), Some(short_channel_id), Some(next_hop_failure.clone()));
518518

@@ -522,7 +522,7 @@ fn test_onion_failure() {
522522
}, |msg| {
523523
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
524524
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
525-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|9, &[0;0]);
525+
msg.reason = onion_utils::build_failure_packet(onion_keys[0].shared_secret.as_ref(), PERM|9, &[0;0]);
526526
// short_channel_id from the processing node
527527
}, ||{}, true, Some(PERM|9), Some(NetworkUpdate::ChannelFailure{short_channel_id, is_permanent: true}), Some(short_channel_id), Some(next_hop_failure.clone()));
528528

@@ -654,7 +654,7 @@ fn test_onion_failure() {
654654
// Tamper returning error message
655655
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
656656
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
657-
msg.reason = onion_utils::build_first_hop_failure_packet(onion_keys[1].shared_secret.as_ref(), 23, &[0;0]);
657+
msg.reason = onion_utils::build_failure_packet(onion_keys[1].shared_secret.as_ref(), 23, &[0;0]);
658658
}, ||{
659659
nodes[2].node.fail_htlc_backwards(&payment_hash);
660660
}, true, Some(23), None, None, None);

lightning/src/ln/onion_utils.rs

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -907,17 +907,11 @@ pub(super) fn build_failure_packet(
907907
hmac.input(&packet.encode()[32..]);
908908
packet.hmac = Hmac::from_engine(hmac).to_byte_array();
909909

910-
OnionErrorPacket { data: packet.encode() }
911-
}
910+
let mut onion_error_packet = OnionErrorPacket { data: packet.encode() };
912911

913-
#[cfg(test)]
914-
pub(super) fn build_first_hop_failure_packet(
915-
shared_secret: &[u8], failure_type: u16, failure_data: &[u8],
916-
) -> msgs::OnionErrorPacket {
917-
let mut failure_packet = build_failure_packet(shared_secret, failure_type, failure_data);
918-
crypt_failure_packet(shared_secret, &mut failure_packet);
912+
crypt_failure_packet(shared_secret, &mut onion_error_packet);
919913

920-
failure_packet
914+
onion_error_packet
921915
}
922916

923917
pub(crate) struct DecodedOnionFailure {
@@ -1367,7 +1361,6 @@ impl HTLCFailReason {
13671361
let mut packet =
13681362
build_failure_packet(secondary_shared_secret, *failure_code, &data[..]);
13691363

1370-
crypt_failure_packet(secondary_shared_secret, &mut packet);
13711364
crypt_failure_packet(incoming_packet_shared_secret, &mut packet);
13721365

13731366
packet
@@ -1377,7 +1370,6 @@ impl HTLCFailReason {
13771370
*failure_code,
13781371
&data[..],
13791372
);
1380-
crypt_failure_packet(incoming_packet_shared_secret, &mut packet);
13811373

13821374
packet
13831375
}
@@ -2290,10 +2282,6 @@ mod tests {
22902282
let onion_keys = build_test_onion_keys();
22912283
let mut onion_error =
22922284
super::build_failure_packet(onion_keys[4].shared_secret.as_ref(), 0x2002, &[0; 0]);
2293-
let hex = "4c2fc8bc08510334b6833ad9c3e79cd1b52ae59dfe5c2a4b23ead50f09f7ee0b0002200200fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
2294-
assert_eq!(onion_error.data, <Vec<u8>>::from_hex(hex).unwrap());
2295-
2296-
super::crypt_failure_packet(onion_keys[4].shared_secret.as_ref(), &mut onion_error);
22972285
let hex = "a5e6bd0c74cb347f10cce367f949098f2457d14c046fd8a22cb96efb30b0fdcda8cb9168b50f2fd45edd73c1b0c8b33002df376801ff58aaa94000bf8a86f92620f343baef38a580102395ae3abf9128d1047a0736ff9b83d456740ebbb4aeb3aa9737f18fb4afb4aa074fb26c4d702f42968888550a3bded8c05247e045b866baef0499f079fdaeef6538f31d44deafffdfd3afa2fb4ca9082b8f1c465371a9894dd8c243fb4847e004f5256b3e90e2edde4c9fb3082ddfe4d1e734cacd96ef0706bf63c9984e22dc98851bcccd1c3494351feb458c9c6af41c0044bea3c47552b1d992ae542b17a2d0bba1a096c78d169034ecb55b6e3a7263c26017f033031228833c1daefc0dedb8cf7c3e37c9c37ebfe42f3225c326e8bcfd338804c145b16e34e4";
22982286
assert_eq!(onion_error.data, <Vec<u8>>::from_hex(hex).unwrap());
22992287

0 commit comments

Comments
 (0)