Skip to content

Commit 52fa372

Browse files
committed
f: assert payload/key match
1 parent bb68a86 commit 52fa372

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

lightning/src/ln/blinded_payment_tests.rs

Lines changed: 3 additions & 1 deletion
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

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

317+
let blinded_tail =
318+
if path.trampoline_hops.len() == 0 { path.blinded_tail.as_ref() } else { None };
317319
construct_onion_keys_generic_callback(
318320
secp_ctx,
319321
&path.hops,
320-
path.blinded_tail.as_ref(),
322+
blinded_tail,
321323
session_priv,
322324
|shared_secret, _blinding_factor, ephemeral_pubkey, _, _| {
323325
let (rho, mu) = gen_rho_mu_from_shared_secret(shared_secret.as_ref());
@@ -648,6 +650,8 @@ pub(super) fn construct_onion_packet(
648650
let mut chacha = ChaCha20::new(&prng_seed, &[0; 8]);
649651
chacha.process(&[0; ONION_DATA_LEN], &mut packet_data);
650652

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

0 commit comments

Comments
 (0)