Skip to content

Commit d7df50f

Browse files
committed
Allow outer session priv overrides [expound]
For test vectors
1 parent bf3d261 commit d7df50f

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

lightning/src/ln/onion_utils.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -942,7 +942,7 @@ pub(crate) struct DecodedOnionFailure {
942942
#[inline]
943943
pub(super) fn process_onion_failure<T: secp256k1::Signing, L: Deref>(
944944
secp_ctx: &Secp256k1<T>, logger: &L, htlc_source: &HTLCSource,
945-
mut encrypted_packet: OnionErrorPacket,
945+
mut encrypted_packet: OnionErrorPacket, secondary_session_priv: Option<SecretKey>,
946946
) -> DecodedOnionFailure
947947
where
948948
L::Target: Logger,
@@ -1004,8 +1004,10 @@ where
10041004

10051005
let outer_session_priv = path.has_trampoline_hops().then(|| {
10061006
// if we have Trampoline hops, the outer onion session_priv is a hash of the inner one
1007-
let session_priv_hash = Sha256::hash(&session_priv.secret_bytes()).to_byte_array();
1008-
SecretKey::from_slice(&session_priv_hash[..]).expect("You broke SHA-256!")
1007+
secondary_session_priv.unwrap_or_else(|| {
1008+
let session_priv_hash = Sha256::hash(&session_priv.secret_bytes()).to_byte_array();
1009+
SecretKey::from_slice(&session_priv_hash[..]).expect("You broke SHA-256!")
1010+
})
10091011
});
10101012

10111013
let mut onion_keys = Vec::with_capacity(path.hops.len());
@@ -1469,7 +1471,7 @@ impl HTLCFailReason {
14691471
{
14701472
match self.0 {
14711473
HTLCFailReasonRepr::LightningError { ref err } => {
1472-
process_onion_failure(secp_ctx, logger, &htlc_source, err.clone())
1474+
process_onion_failure(secp_ctx, logger, &htlc_source, err.clone(), None)
14731475
},
14741476
#[allow(unused)]
14751477
HTLCFailReasonRepr::Reason { ref failure_code, ref data, .. } => {
@@ -2397,7 +2399,7 @@ mod tests {
23972399

23982400
// Assert that the original failure can be retrieved and that all hmacs check out.
23992401
let decrypted_failure =
2400-
process_onion_failure(&ctx_full, &logger, &htlc_source, onion_error);
2402+
process_onion_failure(&ctx_full, &logger, &htlc_source, onion_error, None);
24012403

24022404
assert_eq!(decrypted_failure.onion_error_code, Some(0x2002));
24032405
}
@@ -2487,7 +2489,8 @@ mod tests {
24872489
payment_id: PaymentId([1; 32]),
24882490
};
24892491

2490-
let decrypted_failure = process_onion_failure(&ctx_full, &logger, &htlc_source, packet);
2492+
let decrypted_failure =
2493+
process_onion_failure(&ctx_full, &logger, &htlc_source, packet, None);
24912494

24922495
decrypted_failure
24932496
}

0 commit comments

Comments
 (0)