Files
lightning/common/blindedpay.c
Rusty Russell 2760490d5d common: catch up on latest routeblinding spec.
This makes us match eed2ab0c30ad7f93e3b2641ca9d7ade32f3d121d
("Use `invalid_onion_blinding` everywhere").

1. Numerous typographical changes.
2. Make sure we *always* return WIRE_INVALID_ONION_BLINDING if
   we're in a blinded path.
3. Handle p->total_msat correctly (MPP payments).
4. Reorganize blinding handling just like spec order.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2022-11-09 15:08:03 +01:00

40 lines
1.2 KiB
C

#include "config.h"
#include <assert.h>
#include <common/blindedpay.h>
#include <common/bolt12.h>
#include <common/onion.h>
u8 **blinded_onion_hops(const tal_t *ctx,
struct amount_msat final_amount,
u32 final_cltv,
const struct blinded_path *path)
{
u8 **onions = tal_arr(ctx, u8 *, tal_count(path->path));
assert(tal_count(onions) > 0);
for (size_t i = 0; i < tal_count(onions); i++) {
bool first = (i == 0);
bool final = (i == tal_count(onions) - 1);
/* BOLT-route-blinding #4:
* - For every node inside a blinded route:
* - MUST include the `encrypted_recipient_data` provided by the
* recipient
* - For the first node in the blinded route:
* - MUST include the `blinding_point` provided by the
* recipient in `current_blinding_point`
* - If it is the final node:
* - MUST include `amt_to_forward` and `outgoing_cltv_value`.
* - MUST include `total_amount_msat` when using `basic_mpp`.
* - MUST NOT include any other tlv field.
*/
onions[i] = onion_blinded_hop(onions,
final ? &final_amount : NULL,
final ? &final_cltv : NULL,
path->path[i]->encrypted_recipient_data,
first ? &path->blinding : NULL);
}
return onions;
}