Skip to content

Commit 97b2adb

Browse files
committed
f: assert payload/key match
1 parent 0f192bf commit 97b2adb

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

lightning/src/ln/blinded_payment_tests.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -365,15 +365,17 @@ fn do_forward_checks_failure(check: ForwardCheckFail, intro_fails: bool) {
365365
ForwardCheckFail::ForwardPayloadEncodedAsReceive => {
366366
let recipient_onion_fields = RecipientOnionFields::spontaneous_empty();
367367
let session_priv = SecretKey::from_slice(&[3; 32]).unwrap();
368-
let onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
368+
let mut onion_keys = onion_utils::construct_onion_keys(&Secp256k1::new(), &route.paths[0], &session_priv).unwrap();
369369
let cur_height = nodes[0].best_block_info().1;
370370
let (mut onion_payloads, ..) = onion_utils::build_onion_payloads(
371371
&route.paths[0], amt_msat, &recipient_onion_fields, cur_height, &None, None).unwrap();
372372
// Remove the receive payload so the blinded forward payload is encoded as a final payload
373373
// (i.e. next_hop_hmac == [0; 32])
374374
onion_payloads.pop();
375+
onion_keys.pop();
375376
if $target_node_idx + 1 < nodes.len() {
376377
onion_payloads.pop();
378+
onion_keys.pop();
377379
}
378380
$update_add.onion_routing_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, [0; 32], &payment_hash).unwrap();
379381
},

lightning/src/ln/onion_utils.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,12 @@ pub(super) fn construct_onion_keys<T: secp256k1::Signing>(
315315
) -> Result<Vec<OnionKeys>, secp256k1::Error> {
316316
let mut res = Vec::with_capacity(path.hops.len());
317317

318+
let blinded_tail =
319+
if path.trampoline_hops.len() == 0 { path.blinded_tail.as_ref() } else { None };
318320
construct_onion_keys_generic_callback(
319321
secp_ctx,
320322
&path.hops,
321-
path.blinded_tail.as_ref(),
323+
blinded_tail,
322324
session_priv,
323325
|shared_secret, _blinding_factor, ephemeral_pubkey, _, _| {
324326
let (rho, mu) = gen_rho_mu_from_shared_secret(shared_secret.as_ref());
@@ -649,6 +651,8 @@ pub(super) fn construct_onion_packet(
649651
let mut chacha = ChaCha20::new(&prng_seed, &[0; 8]);
650652
chacha.process(&[0; ONION_DATA_LEN], &mut packet_data);
651653

654+
debug_assert_eq!(payloads.len(), onion_keys.len(), "Payloads and keys must have equal lengths");
655+
652656
let packet = FixedSizeOnionPacket(packet_data);
653657
construct_onion_packet_with_init_noise::<_, _>(
654658
payloads,

0 commit comments

Comments
 (0)