global: rename blinding to path_key everywhere.

Get with the modern nomenclature: the pubkey inside a blinded path is called
the `path_key` now.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2024-10-15 09:54:26 +10:30
parent 9f593a8184
commit 45533584e2
23 changed files with 114 additions and 118 deletions

View File

@ -1496,7 +1496,7 @@ static void marshall_htlc_info(const tal_t *ctx,
memcpy(a.onion_routing_packet, memcpy(a.onion_routing_packet,
htlc->routing, htlc->routing,
sizeof(a.onion_routing_packet)); sizeof(a.onion_routing_packet));
a.blinding = htlc->blinding; a.path_key = htlc->path_key;
a.fail_immediate = htlc->fail_immediate; a.fail_immediate = htlc->fail_immediate;
tal_arr_expand(added, a); tal_arr_expand(added, a);
} else if (htlc->state == RCVD_REMOVE_COMMIT) { } else if (htlc->state == RCVD_REMOVE_COMMIT) {
@ -4410,10 +4410,10 @@ static void resend_commitment(struct peer *peer, struct changed_htlc *last)
if (h->state == SENT_ADD_COMMIT) { if (h->state == SENT_ADD_COMMIT) {
struct tlv_update_add_htlc_tlvs *tlvs; struct tlv_update_add_htlc_tlvs *tlvs;
if (h->blinding) { if (h->path_key) {
tlvs = tlv_update_add_htlc_tlvs_new(tmpctx); tlvs = tlv_update_add_htlc_tlvs_new(tmpctx);
tlvs->blinded_path = tal_dup(tlvs, struct pubkey, tlvs->blinded_path = tal_dup(tlvs, struct pubkey,
h->blinding); h->path_key);
} else } else
tlvs = NULL; tlvs = NULL;
msg = towire_update_add_htlc(NULL, &peer->channel_id, msg = towire_update_add_htlc(NULL, &peer->channel_id,
@ -5346,7 +5346,7 @@ static void handle_offer_htlc(struct peer *peer, const u8 *inmsg)
const u8 *failwiremsg; const u8 *failwiremsg;
const char *failstr; const char *failstr;
struct amount_sat htlc_fee; struct amount_sat htlc_fee;
struct pubkey *blinding; struct pubkey *path_key;
struct tlv_update_add_htlc_tlvs *tlvs; struct tlv_update_add_htlc_tlvs *tlvs;
if (!peer->channel_ready[LOCAL] || !peer->channel_ready[REMOTE]) if (!peer->channel_ready[LOCAL] || !peer->channel_ready[REMOTE])
@ -5355,18 +5355,18 @@ static void handle_offer_htlc(struct peer *peer, const u8 *inmsg)
if (!fromwire_channeld_offer_htlc(tmpctx, inmsg, &amount, if (!fromwire_channeld_offer_htlc(tmpctx, inmsg, &amount,
&cltv_expiry, &payment_hash, &cltv_expiry, &payment_hash,
onion_routing_packet, &blinding)) onion_routing_packet, &path_key))
master_badmsg(WIRE_CHANNELD_OFFER_HTLC, inmsg); master_badmsg(WIRE_CHANNELD_OFFER_HTLC, inmsg);
if (blinding) { if (path_key) {
tlvs = tlv_update_add_htlc_tlvs_new(tmpctx); tlvs = tlv_update_add_htlc_tlvs_new(tmpctx);
tlvs->blinded_path = tal_dup(tlvs, struct pubkey, blinding); tlvs->blinded_path = tal_dup(tlvs, struct pubkey, path_key);
} else } else
tlvs = NULL; tlvs = NULL;
e = channel_add_htlc(peer->channel, LOCAL, peer->htlc_id, e = channel_add_htlc(peer->channel, LOCAL, peer->htlc_id,
amount, cltv_expiry, &payment_hash, amount, cltv_expiry, &payment_hash,
onion_routing_packet, take(blinding), NULL, onion_routing_packet, take(path_key), NULL,
&htlc_fee, true); &htlc_fee, true);
status_debug("Adding HTLC %"PRIu64" amount=%s cltv=%u gave %s", status_debug("Adding HTLC %"PRIu64" amount=%s cltv=%u gave %s",
peer->htlc_id, peer->htlc_id,

View File

@ -27,7 +27,7 @@ struct htlc {
const u8 *routing; const u8 *routing;
/* Blinding (optional). */ /* Blinding (optional). */
struct pubkey *blinding; struct pubkey *path_key;
/* Should we immediately fail this htlc? */ /* Should we immediately fail this htlc? */
bool fail_immediate; bool fail_immediate;

View File

@ -95,7 +95,7 @@ msgdata,channeld_offer_htlc,amount_msat,amount_msat,
msgdata,channeld_offer_htlc,cltv_expiry,u32, msgdata,channeld_offer_htlc,cltv_expiry,u32,
msgdata,channeld_offer_htlc,payment_hash,sha256, msgdata,channeld_offer_htlc,payment_hash,sha256,
msgdata,channeld_offer_htlc,onion_routing_packet,u8,1366 msgdata,channeld_offer_htlc,onion_routing_packet,u8,1366
msgdata,channeld_offer_htlc,blinding,?pubkey, msgdata,channeld_offer_htlc,path_key,?pubkey,
# Reply; synchronous since IDs have to increment. # Reply; synchronous since IDs have to increment.
msgtype,channeld_offer_htlc_reply,1104 msgtype,channeld_offer_htlc_reply,1104

Can't render this file because it has a wrong number of fields in line 16.

View File

@ -580,7 +580,7 @@ static enum channel_add_err add_htlc(struct channel *channel,
u32 cltv_expiry, u32 cltv_expiry,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const u8 routing[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)], const u8 routing[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)],
const struct pubkey *blinding TAKES, const struct pubkey *path_key TAKES,
struct htlc **htlcp, struct htlc **htlcp,
bool enforce_aggregate_limits, bool enforce_aggregate_limits,
struct amount_sat *htlc_fee, struct amount_sat *htlc_fee,
@ -605,7 +605,7 @@ static enum channel_add_err add_htlc(struct channel *channel,
htlc->fail_immediate = false; htlc->fail_immediate = false;
htlc->rhash = *payment_hash; htlc->rhash = *payment_hash;
htlc->blinding = tal_dup_or_null(htlc, struct pubkey, blinding); htlc->path_key = tal_dup_or_null(htlc, struct pubkey, path_key);
htlc->failed = NULL; htlc->failed = NULL;
htlc->r = NULL; htlc->r = NULL;
htlc->routing = tal_dup_arr(htlc, u8, routing, TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE), 0); htlc->routing = tal_dup_arr(htlc, u8, routing, TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE), 0);
@ -898,7 +898,7 @@ enum channel_add_err channel_add_htlc(struct channel *channel,
u32 cltv_expiry, u32 cltv_expiry,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const u8 routing[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)], const u8 routing[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)],
const struct pubkey *blinding TAKES, const struct pubkey *path_key TAKES,
struct htlc **htlcp, struct htlc **htlcp,
struct amount_sat *htlc_fee, struct amount_sat *htlc_fee,
bool err_immediate_failures) bool err_immediate_failures)
@ -918,7 +918,7 @@ enum channel_add_err channel_add_htlc(struct channel *channel,
status_broken("Peer sent out-of-order HTLC ids (is that you, old c-lightning node?)"); status_broken("Peer sent out-of-order HTLC ids (is that you, old c-lightning node?)");
return add_htlc(channel, state, id, amount, cltv_expiry, return add_htlc(channel, state, id, amount, cltv_expiry,
payment_hash, routing, blinding, payment_hash, routing, path_key,
htlcp, true, htlc_fee, err_immediate_failures); htlcp, true, htlc_fee, err_immediate_failures);
} }
@ -1616,7 +1616,7 @@ bool channel_force_htlcs(struct channel *channel,
htlcs[i]->cltv_expiry, htlcs[i]->cltv_expiry,
&htlcs[i]->payment_hash, &htlcs[i]->payment_hash,
htlcs[i]->onion_routing_packet, htlcs[i]->onion_routing_packet,
htlcs[i]->blinding, htlcs[i]->path_key,
&htlc, false, NULL, false); &htlc, false, NULL, false);
if (e != CHANNEL_ERR_ADD_OK) { if (e != CHANNEL_ERR_ADD_OK) {
status_broken("%s HTLC %"PRIu64" failed error %u", status_broken("%s HTLC %"PRIu64" failed error %u",

View File

@ -45,7 +45,7 @@ struct existing_htlc *new_existing_htlc(const tal_t *ctx,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
u32 cltv_expiry, u32 cltv_expiry,
const u8 onion_routing_packet[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)], const u8 onion_routing_packet[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)],
const struct pubkey *blinding TAKES, const struct pubkey *path_key TAKES,
const struct preimage *preimage TAKES, const struct preimage *preimage TAKES,
const struct failed_htlc *failed TAKES) const struct failed_htlc *failed TAKES)
{ {
@ -58,7 +58,7 @@ struct existing_htlc *new_existing_htlc(const tal_t *ctx,
existing->payment_hash = *payment_hash; existing->payment_hash = *payment_hash;
memcpy(existing->onion_routing_packet, onion_routing_packet, memcpy(existing->onion_routing_packet, onion_routing_packet,
sizeof(existing->onion_routing_packet)); sizeof(existing->onion_routing_packet));
existing->blinding = tal_dup_or_null(existing, struct pubkey, blinding); existing->path_key = tal_dup_or_null(existing, struct pubkey, path_key);
existing->payment_preimage existing->payment_preimage
= tal_dup_or_null(existing, struct preimage, preimage); = tal_dup_or_null(existing, struct preimage, preimage);
if (failed) if (failed)
@ -79,9 +79,9 @@ void towire_added_htlc(u8 **pptr, const struct added_htlc *added)
towire_u32(pptr, added->cltv_expiry); towire_u32(pptr, added->cltv_expiry);
towire(pptr, added->onion_routing_packet, towire(pptr, added->onion_routing_packet,
sizeof(added->onion_routing_packet)); sizeof(added->onion_routing_packet));
if (added->blinding) { if (added->path_key) {
towire_bool(pptr, true); towire_bool(pptr, true);
towire_pubkey(pptr, added->blinding); towire_pubkey(pptr, added->path_key);
} else } else
towire_bool(pptr, false); towire_bool(pptr, false);
towire_bool(pptr, added->fail_immediate); towire_bool(pptr, added->fail_immediate);
@ -106,9 +106,9 @@ void towire_existing_htlc(u8 **pptr, const struct existing_htlc *existing)
towire_failed_htlc(pptr, existing->failed); towire_failed_htlc(pptr, existing->failed);
} else } else
towire_bool(pptr, false); towire_bool(pptr, false);
if (existing->blinding) { if (existing->path_key) {
towire_bool(pptr, true); towire_bool(pptr, true);
towire_pubkey(pptr, existing->blinding); towire_pubkey(pptr, existing->path_key);
} else } else
towire_bool(pptr, false); towire_bool(pptr, false);
} }
@ -181,10 +181,10 @@ void fromwire_added_htlc(const u8 **cursor, size_t *max,
fromwire(cursor, max, added->onion_routing_packet, fromwire(cursor, max, added->onion_routing_packet,
sizeof(added->onion_routing_packet)); sizeof(added->onion_routing_packet));
if (fromwire_bool(cursor, max)) { if (fromwire_bool(cursor, max)) {
added->blinding = tal(added, struct pubkey); added->path_key = tal(added, struct pubkey);
fromwire_pubkey(cursor, max, added->blinding); fromwire_pubkey(cursor, max, added->path_key);
} else } else
added->blinding = NULL; added->path_key = NULL;
added->fail_immediate = fromwire_bool(cursor, max); added->fail_immediate = fromwire_bool(cursor, max);
} }
@ -210,10 +210,10 @@ struct existing_htlc *fromwire_existing_htlc(const tal_t *ctx,
else else
existing->failed = NULL; existing->failed = NULL;
if (fromwire_bool(cursor, max)) { if (fromwire_bool(cursor, max)) {
existing->blinding = tal(existing, struct pubkey); existing->path_key = tal(existing, struct pubkey);
fromwire_pubkey(cursor, max, existing->blinding); fromwire_pubkey(cursor, max, existing->path_key);
} else } else
existing->blinding = NULL; existing->path_key = NULL;
return existing; return existing;
} }

View File

@ -16,7 +16,7 @@ struct added_htlc {
u32 cltv_expiry; u32 cltv_expiry;
u8 onion_routing_packet[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)]; u8 onion_routing_packet[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)];
bool fail_immediate; bool fail_immediate;
struct pubkey *blinding; struct pubkey *path_key;
}; };
/* This is how lightningd tells us about HTLCs which already exist at startup */ /* This is how lightningd tells us about HTLCs which already exist at startup */
@ -27,8 +27,8 @@ struct existing_htlc {
struct sha256 payment_hash; struct sha256 payment_hash;
u32 cltv_expiry; u32 cltv_expiry;
u8 onion_routing_packet[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)]; u8 onion_routing_packet[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)];
/* If this is non-NULL, this is blinding to send with (outgoing) HTLC */ /* If this is non-NULL, this is path_key to send with (outgoing) HTLC */
struct pubkey *blinding; struct pubkey *path_key;
/* If fulfilled, this is non-NULL */ /* If fulfilled, this is non-NULL */
struct preimage *payment_preimage; struct preimage *payment_preimage;
/* If failed, this is set */ /* If failed, this is set */
@ -75,7 +75,7 @@ struct existing_htlc *new_existing_htlc(const tal_t *ctx,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
u32 cltv_expiry, u32 cltv_expiry,
const u8 onion_routing_packet[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)], const u8 onion_routing_packet[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)],
const struct pubkey *blinding TAKES, const struct pubkey *path_key TAKES,
const struct preimage *preimage TAKES, const struct preimage *preimage TAKES,
const struct failed_htlc *failed TAKES); const struct failed_htlc *failed TAKES);

View File

@ -168,7 +168,7 @@ static bool handle_blinded_terminal(struct onion_payload *p,
struct onion_payload *onion_decode(const tal_t *ctx, struct onion_payload *onion_decode(const tal_t *ctx,
const struct route_step *rs, const struct route_step *rs,
const struct pubkey *blinding, const struct pubkey *path_key,
const u64 *accepted_extra_tlvs, const u64 *accepted_extra_tlvs,
struct amount_msat amount_in, struct amount_msat amount_in,
u32 cltv_expiry, u32 cltv_expiry,
@ -222,18 +222,18 @@ struct onion_payload *onion_decode(const tal_t *ctx,
* - MUST return an error if `current_path_key` is not present. * - MUST return an error if `current_path_key` is not present.
* - MUST use that `current_path_key` as the `path_key` for decryption. * - MUST use that `current_path_key` as the `path_key` for decryption.
*/ */
if (blinding) { if (path_key) {
if (p->tlv->current_path_key) { if (p->tlv->current_path_key) {
*failtlvtype = TLV_PAYLOAD_CURRENT_PATH_KEY; *failtlvtype = TLV_PAYLOAD_CURRENT_PATH_KEY;
goto field_bad; goto field_bad;
} }
p->blinding = tal_dup(p, struct pubkey, blinding); p->path_key = tal_dup(p, struct pubkey, path_key);
} else { } else {
if (!p->tlv->current_path_key) { if (!p->tlv->current_path_key) {
*failtlvtype = TLV_PAYLOAD_CURRENT_PATH_KEY; *failtlvtype = TLV_PAYLOAD_CURRENT_PATH_KEY;
goto field_bad; goto field_bad;
} }
p->blinding = tal_dup(p, struct pubkey, p->path_key = tal_dup(p, struct pubkey,
p->tlv->current_path_key); p->tlv->current_path_key);
} }
@ -244,7 +244,7 @@ struct onion_payload *onion_decode(const tal_t *ctx,
* not decrypt using the `path_key` as described in * not decrypt using the `path_key` as described in
* [Route Blinding](#route-blinding). * [Route Blinding](#route-blinding).
*/ */
ecdh(p->blinding, &p->blinding_ss); ecdh(p->path_key, &p->blinding_ss);
enc = decrypt_encrypted_data(tmpctx, &p->blinding_ss, enc = decrypt_encrypted_data(tmpctx, &p->blinding_ss,
p->tlv->encrypted_recipient_data); p->tlv->encrypted_recipient_data);
if (!enc) { if (!enc) {
@ -335,7 +335,7 @@ struct onion_payload *onion_decode(const tal_t *ctx,
* incoming `update_add_htlc` or `current_path_key` * incoming `update_add_htlc` or `current_path_key`
* is present. * is present.
*/ */
if (blinding || p->tlv->current_path_key) { if (path_key || p->tlv->current_path_key) {
*failtlvtype = TLV_PAYLOAD_ENCRYPTED_RECIPIENT_DATA; *failtlvtype = TLV_PAYLOAD_ENCRYPTED_RECIPIENT_DATA;
goto field_bad; goto field_bad;
} }
@ -401,7 +401,7 @@ struct onion_payload *onion_decode(const tal_t *ctx,
else else
p->payment_metadata = NULL; p->payment_metadata = NULL;
p->blinding = NULL; p->path_key = NULL;
return p; return p;

View File

@ -10,7 +10,7 @@
* @ctx: context to allocate onion_contents off. * @ctx: context to allocate onion_contents off.
* @rs: the route_step, whose raw_payload is of at least length * @rs: the route_step, whose raw_payload is of at least length
* onion_payload_length(). * onion_payload_length().
* @blinding: the optional incoming blinding point. * @path_key: the optional incoming path_key point.
* @accepted_extra_tlvs: Allow these types to be in the TLV without failing * @accepted_extra_tlvs: Allow these types to be in the TLV without failing
* @amount_in: Incoming HTLC amount * @amount_in: Incoming HTLC amount
* @cltv_expiry: Incoming HTLC cltv_expiry * @cltv_expiry: Incoming HTLC cltv_expiry
@ -21,7 +21,7 @@
*/ */
struct onion_payload *onion_decode(const tal_t *ctx, struct onion_payload *onion_decode(const tal_t *ctx,
const struct route_step *rs, const struct route_step *rs,
const struct pubkey *blinding, const struct pubkey *path_key,
const u64 *accepted_extra_tlvs, const u64 *accepted_extra_tlvs,
struct amount_msat amount_in, struct amount_msat amount_in,
u32 cltv_expiry, u32 cltv_expiry,

View File

@ -28,8 +28,8 @@ struct onion_payload {
struct secret *payment_secret; struct secret *payment_secret;
u8 *payment_metadata; u8 *payment_metadata;
/* If blinding is set, blinding_ss is the shared secret.*/ /* If path_key is set, blinding_ss is the shared secret.*/
struct pubkey *blinding; struct pubkey *path_key;
struct secret blinding_ss; struct secret blinding_ss;
/* The raw TLVs contained in the payload. */ /* The raw TLVs contained in the payload. */

View File

@ -221,7 +221,7 @@ wrap:
/* Now populate the onion message to return */ /* Now populate the onion message to return */
omsg = tal(ctx, struct onion_message); omsg = tal(ctx, struct onion_message);
omsg->first_blinding = combined_path->first_path_key; omsg->first_path_key = combined_path->first_path_key;
omsg->hops = onionmsg_tlvs_to_hops(omsg, combined_path, omsg->hops = onionmsg_tlvs_to_hops(omsg, combined_path,
cast_const2(const struct tlv_onionmsg_tlv **, otlvs)); cast_const2(const struct tlv_onionmsg_tlv **, otlvs));
return omsg; return omsg;

View File

@ -106,7 +106,7 @@ struct blinded_path *incoming_message_blinded_path(const tal_t *ctx,
/* A ready-to-be-encrypted-and-sent onion message. */ /* A ready-to-be-encrypted-and-sent onion message. */
struct onion_message { struct onion_message {
struct pubkey first_blinding; struct pubkey first_path_key;
struct sphinx_hop **hops; struct sphinx_hop **hops;
}; };

View File

@ -12,7 +12,6 @@
#include <wire/peer_wire.h> #include <wire/peer_wire.h>
static bool decrypt_final_onionmsg(const tal_t *ctx, static bool decrypt_final_onionmsg(const tal_t *ctx,
const struct pubkey *blinding,
const struct secret *ss, const struct secret *ss,
const u8 *enctlv, const u8 *enctlv,
const struct pubkey *my_id, const struct pubkey *my_id,
@ -86,7 +85,7 @@ static bool decrypt_forwarding_onionmsg(const struct pubkey *path_key,
/* Returns false on failure */ /* Returns false on failure */
const char *onion_message_parse(const tal_t *ctx, const char *onion_message_parse(const tal_t *ctx,
const u8 *onion_message_packet, const u8 *onion_message_packet,
const struct pubkey *blinding, const struct pubkey *path_key,
const struct pubkey *me, const struct pubkey *me,
u8 **next_onion_msg, u8 **next_onion_msg,
struct sciddir_or_pubkey *next_node, struct sciddir_or_pubkey *next_node,
@ -114,7 +113,7 @@ const char *onion_message_parse(const tal_t *ctx,
} }
ephemeral = op->ephemeralkey; ephemeral = op->ephemeralkey;
if (!unblind_onion(blinding, ecdh, &ephemeral, &ss)) { if (!unblind_onion(path_key, ecdh, &ephemeral, &ss)) {
return tal_fmt(ctx, "onion_message_parse: can't unblind onionpacket"); return tal_fmt(ctx, "onion_message_parse: can't unblind onionpacket");
} }
@ -151,7 +150,7 @@ const char *onion_message_parse(const tal_t *ctx,
if (!om->encrypted_recipient_data) { if (!om->encrypted_recipient_data) {
*final_alias = *me; *final_alias = *me;
*final_path_id = NULL; *final_path_id = NULL;
} else if (!decrypt_final_onionmsg(ctx, blinding, &ss, } else if (!decrypt_final_onionmsg(ctx, &ss,
om->encrypted_recipient_data, me, om->encrypted_recipient_data, me,
final_alias, final_alias,
final_path_id)) { final_path_id)) {
@ -160,7 +159,7 @@ const char *onion_message_parse(const tal_t *ctx,
" %s", tal_hex(tmpctx, om->encrypted_recipient_data)); " %s", tal_hex(tmpctx, om->encrypted_recipient_data));
} }
} else { } else {
struct pubkey next_blinding; struct pubkey next_path_key;
*final_om = NULL; *final_om = NULL;
@ -174,14 +173,14 @@ const char *onion_message_parse(const tal_t *ctx,
} }
/* This fails as expected if no enctlv. */ /* This fails as expected if no enctlv. */
if (!decrypt_forwarding_onionmsg(blinding, &ss, om->encrypted_recipient_data, next_node, if (!decrypt_forwarding_onionmsg(path_key, &ss, om->encrypted_recipient_data, next_node,
&next_blinding)) { &next_path_key)) {
return tal_fmt(ctx, return tal_fmt(ctx,
"onion_message_parse: invalid encrypted_recipient_data %s", "onion_message_parse: invalid encrypted_recipient_data %s",
tal_hex(tmpctx, om->encrypted_recipient_data)); tal_hex(tmpctx, om->encrypted_recipient_data));
} }
*next_onion_msg = towire_onion_message(ctx, *next_onion_msg = towire_onion_message(ctx,
&next_blinding, &next_path_key,
serialize_onionpacket(tmpctx, rs->next)); serialize_onionpacket(tmpctx, rs->next));
} }

View File

@ -12,7 +12,7 @@ struct pubkey;
* onion_message_parse: core routine to check onion_message * onion_message_parse: core routine to check onion_message
* @ctx: context to allocate @next_onion_msg or @final_om/@path_id off * @ctx: context to allocate @next_onion_msg or @final_om/@path_id off
* @onion_message_packet: Sphinx-encrypted onion * @onion_message_packet: Sphinx-encrypted onion
* @blinding: Blinding we were given for @onion_message_packet * @path_key: Path_Key we were given for @onion_message_packet
* @me: my pubkey * @me: my pubkey
* @next_onion_msg (out): set if we should forward, otherwise NULL. * @next_onion_msg (out): set if we should forward, otherwise NULL.
* @next_node (out): set to node id or scid to fwd to, iff *@next_onion_msg. * @next_node (out): set to node id or scid to fwd to, iff *@next_onion_msg.
@ -24,7 +24,7 @@ struct pubkey;
*/ */
const char *onion_message_parse(const tal_t *ctx, const char *onion_message_parse(const tal_t *ctx,
const u8 *onion_message_packet, const u8 *onion_message_packet,
const struct pubkey *blinding, const struct pubkey *path_key,
const struct pubkey *me, const struct pubkey *me,
u8 **next_onion_msg, u8 **next_onion_msg,
struct sciddir_or_pubkey *next_node, struct sciddir_or_pubkey *next_node,

View File

@ -147,11 +147,11 @@ msgtype,connectd_send_onionmsg,2041
msgdata,connectd_send_onionmsg,id,node_id, msgdata,connectd_send_onionmsg,id,node_id,
msgdata,connectd_send_onionmsg,onion_len,u16, msgdata,connectd_send_onionmsg,onion_len,u16,
msgdata,connectd_send_onionmsg,onion,u8,onion_len msgdata,connectd_send_onionmsg,onion,u8,onion_len
msgdata,connectd_send_onionmsg,blinding,pubkey, msgdata,connectd_send_onionmsg,path_key,pubkey,
# Lightningd tells us to digest an onion message. # Lightningd tells us to digest an onion message.
msgtype,connectd_inject_onionmsg,2042 msgtype,connectd_inject_onionmsg,2042
msgdata,connectd_inject_onionmsg,blinding,pubkey, msgdata,connectd_inject_onionmsg,path_key,pubkey,
msgdata,connectd_inject_onionmsg,onion_len,u16, msgdata,connectd_inject_onionmsg,onion_len,u16,
msgdata,connectd_inject_onionmsg,onion,u8,onion_len msgdata,connectd_inject_onionmsg,onion,u8,onion_len

1 #include <bitcoin/block.h>
147 msgdata,connectd_custommsg_out,msg_len,u16,
148 msgdata,connectd_custommsg_out,msg,u8,msg_len
149 # master -> connectd: we're shutting down, no new connections.
150 msgtype,connectd_start_shutdown,2031
151 # connect - >master: acknowledged.
152 msgtype,connectd_start_shutdown_reply,2131
153 # master -> connect: stop sending gossip.
154 msgtype,connectd_dev_suppress_gossip,2032
155 # master -> connect: waste all your fds.
156 msgtype,connectd_dev_exhaust_fds,2036
157 # master -> connect: set artificial maximum reply_channel_range size.

View File

@ -21,24 +21,24 @@ void onionmsg_req(struct daemon *daemon, const u8 *msg)
{ {
struct node_id id; struct node_id id;
u8 *onionmsg; u8 *onionmsg;
struct pubkey blinding; struct pubkey path_key;
struct peer *peer; struct peer *peer;
if (!fromwire_connectd_send_onionmsg(msg, msg, &id, &onionmsg, &blinding)) if (!fromwire_connectd_send_onionmsg(msg, msg, &id, &onionmsg, &path_key))
master_badmsg(WIRE_CONNECTD_SEND_ONIONMSG, msg); master_badmsg(WIRE_CONNECTD_SEND_ONIONMSG, msg);
/* Even though lightningd checks for valid ids, there's a race /* Even though lightningd checks for valid ids, there's a race
* where it might vanish before we read this command. */ * where it might vanish before we read this command. */
peer = peer_htable_get(daemon->peers, &id); peer = peer_htable_get(daemon->peers, &id);
if (peer) { if (peer) {
u8 *omsg = towire_onion_message(NULL, &blinding, onionmsg); u8 *omsg = towire_onion_message(NULL, &path_key, onionmsg);
inject_peer_msg(peer, take(omsg)); inject_peer_msg(peer, take(omsg));
} }
} }
static const char *handle_onion(const tal_t *ctx, static const char *handle_onion(const tal_t *ctx,
struct daemon *daemon, struct daemon *daemon,
const struct pubkey *blinding, const struct pubkey *path_key,
const u8 *onion) const u8 *onion)
{ {
u8 *next_onion_msg; u8 *next_onion_msg;
@ -48,7 +48,7 @@ static const char *handle_onion(const tal_t *ctx,
struct secret *final_path_id; struct secret *final_path_id;
const char *err; const char *err;
err = onion_message_parse(tmpctx, onion, blinding, err = onion_message_parse(tmpctx, onion, path_key,
&daemon->mykey, &daemon->mykey,
&next_onion_msg, &next_node, &next_onion_msg, &next_node,
&final_om, &final_alias, &final_path_id); &final_om, &final_alias, &final_path_id);
@ -113,7 +113,7 @@ static const char *handle_onion(const tal_t *ctx,
void handle_onion_message(struct daemon *daemon, void handle_onion_message(struct daemon *daemon,
struct peer *peer, const u8 *msg) struct peer *peer, const u8 *msg)
{ {
struct pubkey blinding; struct pubkey path_key;
u8 *onion; u8 *onion;
u64 msec; u64 msec;
struct timemono now = time_mono(); struct timemono now = time_mono();
@ -144,26 +144,26 @@ void handle_onion_message(struct daemon *daemon,
} }
peer->onionmsg_incoming_tokens -= ONION_MSG_MSEC; peer->onionmsg_incoming_tokens -= ONION_MSG_MSEC;
if (!fromwire_onion_message(msg, msg, &blinding, &onion)) { if (!fromwire_onion_message(msg, msg, &path_key, &onion)) {
inject_peer_msg(peer, inject_peer_msg(peer,
take(towire_warningfmt(NULL, NULL, take(towire_warningfmt(NULL, NULL,
"Bad onion_message"))); "Bad onion_message")));
return; return;
} }
handle_onion(tmpctx, daemon, &blinding, onion); handle_onion(tmpctx, daemon, &path_key, onion);
} }
void inject_onionmsg_req(struct daemon *daemon, const u8 *msg) void inject_onionmsg_req(struct daemon *daemon, const u8 *msg)
{ {
u8 *onionmsg; u8 *onionmsg;
struct pubkey blinding; struct pubkey path_key;
const char *err; const char *err;
if (!fromwire_connectd_inject_onionmsg(msg, msg, &blinding, &onionmsg)) if (!fromwire_connectd_inject_onionmsg(msg, msg, &path_key, &onionmsg))
master_badmsg(WIRE_CONNECTD_INJECT_ONIONMSG, msg); master_badmsg(WIRE_CONNECTD_INJECT_ONIONMSG, msg);
err = handle_onion(tmpctx, daemon, &blinding, onionmsg); err = handle_onion(tmpctx, daemon, &path_key, onionmsg);
daemon_conn_send(daemon->master, daemon_conn_send(daemon->master,
take(towire_connectd_inject_onionmsg_reply(NULL, err ? err : ""))); take(towire_connectd_inject_onionmsg_reply(NULL, err ? err : "")));
} }

View File

@ -128,7 +128,7 @@ struct htlc_in *new_htlc_in(const tal_t *ctx,
struct amount_msat msat, u32 cltv_expiry, struct amount_msat msat, u32 cltv_expiry,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const struct secret *shared_secret TAKES, const struct secret *shared_secret TAKES,
const struct pubkey *blinding TAKES, const struct pubkey *path_key TAKES,
const u8 *onion_routing_packet, const u8 *onion_routing_packet,
bool fail_immediate) bool fail_immediate)
{ {
@ -143,10 +143,7 @@ struct htlc_in *new_htlc_in(const tal_t *ctx,
hin->status = NULL; hin->status = NULL;
hin->fail_immediate = fail_immediate; hin->fail_immediate = fail_immediate;
hin->shared_secret = tal_dup_or_null(hin, struct secret, shared_secret); hin->shared_secret = tal_dup_or_null(hin, struct secret, shared_secret);
if (blinding) hin->path_key = tal_dup_or_null(hin, struct pubkey, path_key);
hin->blinding = tal_dup(hin, struct pubkey, blinding);
else
hin->blinding = NULL;
memcpy(hin->onion_routing_packet, onion_routing_packet, memcpy(hin->onion_routing_packet, onion_routing_packet,
sizeof(hin->onion_routing_packet)); sizeof(hin->onion_routing_packet));
@ -267,7 +264,7 @@ struct htlc_out *new_htlc_out(const tal_t *ctx,
u32 cltv_expiry, u32 cltv_expiry,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const u8 *onion_routing_packet, const u8 *onion_routing_packet,
const struct pubkey *blinding, const struct pubkey *path_key,
bool am_origin, bool am_origin,
struct amount_msat final_msat, struct amount_msat final_msat,
u64 partid, u64 partid,
@ -293,7 +290,7 @@ struct htlc_out *new_htlc_out(const tal_t *ctx,
hout->preimage = NULL; hout->preimage = NULL;
hout->timeout = NULL; hout->timeout = NULL;
hout->blinding = tal_dup_or_null(hout, struct pubkey, blinding); hout->path_key = tal_dup_or_null(hout, struct pubkey, path_key);
hout->am_origin = am_origin; hout->am_origin = am_origin;
if (am_origin) { if (am_origin) {
hout->partid = partid; hout->partid = partid;

View File

@ -47,7 +47,7 @@ struct htlc_in {
struct timeabs received_time; struct timeabs received_time;
/* If it was blinded. */ /* If it was blinded. */
struct pubkey *blinding; struct pubkey *path_key;
/* true if we supplied the preimage */ /* true if we supplied the preimage */
bool *we_filled; bool *we_filled;
/* true if we immediately fail the htlc (too much dust) */ /* true if we immediately fail the htlc (too much dust) */
@ -101,8 +101,8 @@ struct htlc_out {
/* Where it's from, if not going to us. */ /* Where it's from, if not going to us. */
struct htlc_in *in; struct htlc_in *in;
/* Blinding to send alongside, if any. */ /* Path_Key to send alongside, if any. */
struct pubkey *blinding; struct pubkey *path_key;
/* Timer we use in case they don't add an HTLC in a timely manner. */ /* Timer we use in case they don't add an HTLC in a timely manner. */
struct oneshot *timeout; struct oneshot *timeout;
@ -156,7 +156,7 @@ struct htlc_in *new_htlc_in(const tal_t *ctx,
struct amount_msat msat, u32 cltv_expiry, struct amount_msat msat, u32 cltv_expiry,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const struct secret *shared_secret TAKES, const struct secret *shared_secret TAKES,
const struct pubkey *blinding TAKES, const struct pubkey *path_key TAKES,
const u8 *onion_routing_packet, const u8 *onion_routing_packet,
bool fail_immediate); bool fail_immediate);
@ -167,7 +167,7 @@ struct htlc_out *new_htlc_out(const tal_t *ctx,
u32 cltv_expiry, u32 cltv_expiry,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const u8 *onion_routing_packet, const u8 *onion_routing_packet,
const struct pubkey *blinding, const struct pubkey *path_key,
bool am_origin, bool am_origin,
struct amount_msat final_msat, struct amount_msat final_msat,
u64 partid, u64 partid,

View File

@ -723,7 +723,7 @@ static const u8 *send_onion(const tal_t *ctx, struct lightningd *ld,
const struct route_hop *first_hop, const struct route_hop *first_hop,
const struct amount_msat final_amount, const struct amount_msat final_amount,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const struct pubkey *blinding, const struct pubkey *path_key,
u64 partid, u64 partid,
u64 groupid, u64 groupid,
struct channel *channel, struct channel *channel,
@ -738,7 +738,7 @@ static const u8 *send_onion(const tal_t *ctx, struct lightningd *ld,
return send_htlc_out(ctx, channel, first_hop->amount, return send_htlc_out(ctx, channel, first_hop->amount,
base_expiry + first_hop->delay, base_expiry + first_hop->delay,
final_amount, payment_hash, final_amount, payment_hash,
blinding, partid, groupid, onion, NULL, hout); path_key, partid, groupid, onion, NULL, hout);
} }
static struct command_result *check_invoice_request_usage(struct command *cmd, static struct command_result *check_invoice_request_usage(struct command *cmd,

View File

@ -144,11 +144,11 @@ static void channel_stats_incr_out_offered(struct channel *c,
*/ */
static bool blind_error_return(const struct htlc_in *hin) static bool blind_error_return(const struct htlc_in *hin)
{ {
if (hin->blinding) if (hin->path_key)
return true; return true;
if (hin->payload if (hin->payload
&& hin->payload->blinding && hin->payload->path_key
&& !hin->payload->final) && !hin->payload->final)
return true; return true;
@ -186,7 +186,7 @@ static struct failed_htlc *mk_failed_htlc(const tal_t *ctx,
/* Also, at head of the blinded path, return "normal" invalid /* Also, at head of the blinded path, return "normal" invalid
* onion blinding. */ * onion blinding. */
if (hin->payload && hin->payload->blinding) { if (hin->payload && hin->payload->path_key) {
struct sha256 sha; struct sha256 sha;
sha256(&sha, hin->onion_routing_packet, sha256(&sha, hin->onion_routing_packet,
sizeof(hin->onion_routing_packet)); sizeof(hin->onion_routing_packet));
@ -655,7 +655,7 @@ const u8 *send_htlc_out(const tal_t *ctx,
struct amount_msat amount, u32 cltv, struct amount_msat amount, u32 cltv,
struct amount_msat final_msat, struct amount_msat final_msat,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const struct pubkey *blinding, const struct pubkey *path_key,
u64 partid, u64 partid,
u64 groupid, u64 groupid,
const u8 *onion_routing_packet, const u8 *onion_routing_packet,
@ -690,7 +690,7 @@ const u8 *send_htlc_out(const tal_t *ctx,
/* Make peer's daemon own it, catch if it dies. */ /* Make peer's daemon own it, catch if it dies. */
*houtp = new_htlc_out(out->owner, out, amount, cltv, *houtp = new_htlc_out(out->owner, out, amount, cltv,
payment_hash, onion_routing_packet, payment_hash, onion_routing_packet,
blinding, in == NULL, path_key, in == NULL,
final_msat, final_msat,
partid, groupid, in); partid, groupid, in);
tal_add_destructor(*houtp, destroy_hout_subd_died); tal_add_destructor(*houtp, destroy_hout_subd_died);
@ -704,7 +704,7 @@ const u8 *send_htlc_out(const tal_t *ctx,
} }
msg = towire_channeld_offer_htlc(out, amount, cltv, payment_hash, msg = towire_channeld_offer_htlc(out, amount, cltv, payment_hash,
onion_routing_packet, blinding); onion_routing_packet, path_key);
subd_req(out->peer->ld, out->owner, take(msg), -1, 0, rcvd_htlc_reply, subd_req(out->peer->ld, out->owner, take(msg), -1, 0, rcvd_htlc_reply,
*houtp); *houtp);
@ -757,7 +757,7 @@ static void forward_htlc(struct htlc_in *hin,
const struct short_channel_id *forward_scid, const struct short_channel_id *forward_scid,
const struct channel_id *forward_to, const struct channel_id *forward_to,
const u8 next_onion[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)], const u8 next_onion[TOTAL_PACKET_SIZE(ROUTING_INFO_SIZE)],
const struct pubkey *next_blinding) const struct pubkey *next_path_key)
{ {
const u8 *failmsg; const u8 *failmsg;
struct lightningd *ld = hin->key.channel->peer->ld; struct lightningd *ld = hin->key.channel->peer->ld;
@ -872,7 +872,7 @@ static void forward_htlc(struct htlc_in *hin,
failmsg = send_htlc_out(tmpctx, next, amt_to_forward, failmsg = send_htlc_out(tmpctx, next, amt_to_forward,
outgoing_cltv_value, AMOUNT_MSAT(0), outgoing_cltv_value, AMOUNT_MSAT(0),
&hin->payment_hash, &hin->payment_hash,
next_blinding, 0 /* partid */, 0 /* groupid */, next_path_key, 0 /* partid */, 0 /* groupid */,
next_onion, hin, &hout); next_onion, hin, &hout);
if (!failmsg) if (!failmsg)
return; return;
@ -895,7 +895,7 @@ struct htlc_accepted_hook_payload {
struct htlc_in *hin; struct htlc_in *hin;
struct channel *channel; struct channel *channel;
struct lightningd *ld; struct lightningd *ld;
struct pubkey *next_blinding; struct pubkey *next_path_key;
/* NULL if we couldn't find it */ /* NULL if we couldn't find it */
struct channel_id *fwd_channel_id; struct channel_id *fwd_channel_id;
u8 *next_onion; u8 *next_onion;
@ -986,7 +986,7 @@ static bool htlc_accepted_hook_deserialize(struct htlc_accepted_hook_payload *re
rs->raw_payload = prepend_length(rs, take(payload)); rs->raw_payload = prepend_length(rs, take(payload));
request->payload = onion_decode(request, request->payload = onion_decode(request,
rs, rs,
hin->blinding, hin->path_key,
ld->accept_extra_tlv_types, ld->accept_extra_tlv_types,
hin->msat, hin->msat,
hin->cltv_expiry, hin->cltv_expiry,
@ -1163,7 +1163,7 @@ htlc_accepted_hook_final(struct htlc_accepted_hook_payload *request STEALS)
request->payload->forward_channel, request->payload->forward_channel,
request->fwd_channel_id, request->fwd_channel_id,
serialize_onionpacket(tmpctx, rs->next), serialize_onionpacket(tmpctx, rs->next),
request->next_blinding); request->next_path_key);
} else } else
handle_localpay(hin, handle_localpay(hin,
request->payload->amt_to_forward, request->payload->amt_to_forward,
@ -1175,18 +1175,18 @@ htlc_accepted_hook_final(struct htlc_accepted_hook_payload *request STEALS)
tal_free(request); tal_free(request);
} }
/* Apply tweak to ephemeral key if blinding is non-NULL, then do ECDH */ /* Apply tweak to ephemeral key if path_key is non-NULL, then do ECDH */
static bool ecdh_maybe_blinding(const struct pubkey *ephemeral_key, static bool ecdh_maybe_blinding(const struct pubkey *ephemeral_key,
const struct pubkey *blinding, const struct pubkey *path_key,
struct secret *ss) struct secret *ss)
{ {
struct pubkey point = *ephemeral_key; struct pubkey point = *ephemeral_key;
if (blinding) { if (path_key) {
struct secret hmac; struct secret hmac;
struct secret blinding_ss; struct secret blinding_ss;
ecdh(blinding, &blinding_ss); ecdh(path_key, &blinding_ss);
/* b(i) = HMAC256("blinded_node_id", ss(i)) * k(i) */ /* b(i) = HMAC256("blinded_node_id", ss(i)) * k(i) */
subkey_from_hmac("blinded_node_id", &blinding_ss, &hmac); subkey_from_hmac("blinded_node_id", &blinding_ss, &hmac);
@ -1403,7 +1403,7 @@ static bool peer_accepted_htlc(const tal_t *ctx,
hook_payload->route_step = tal_steal(hook_payload, rs); hook_payload->route_step = tal_steal(hook_payload, rs);
hook_payload->payload = onion_decode(hook_payload, hook_payload->payload = onion_decode(hook_payload,
rs, rs,
hin->blinding, hin->path_key,
ld->accept_extra_tlv_types, ld->accept_extra_tlv_types,
hin->msat, hin->msat,
hin->cltv_expiry, hin->cltv_expiry,
@ -1415,16 +1415,16 @@ static bool peer_accepted_htlc(const tal_t *ctx,
hook_payload->next_onion = serialize_onionpacket(hook_payload, rs->next); hook_payload->next_onion = serialize_onionpacket(hook_payload, rs->next);
/* We could have blinding from hin or from inside onion. */ /* We could have blinding from hin or from inside onion. */
if (hook_payload->payload && hook_payload->payload->blinding) { if (hook_payload->payload && hook_payload->payload->path_key) {
struct sha256 sha; struct sha256 sha;
blinding_hash_e_and_ss(hook_payload->payload->blinding, blinding_hash_e_and_ss(hook_payload->payload->path_key,
&hook_payload->payload->blinding_ss, &hook_payload->payload->blinding_ss,
&sha); &sha);
hook_payload->next_blinding = tal(hook_payload, struct pubkey); hook_payload->next_path_key = tal(hook_payload, struct pubkey);
blinding_next_path_key(hook_payload->payload->blinding, &sha, blinding_next_path_key(hook_payload->payload->path_key, &sha,
hook_payload->next_blinding); hook_payload->next_path_key);
} else } else
hook_payload->next_blinding = NULL; hook_payload->next_path_key = NULL;
/* The scid is merely used to indicate the next peer, it is not /* The scid is merely used to indicate the next peer, it is not
* a requirement (nor, ideally, observable anyway). We can change * a requirement (nor, ideally, observable anyway). We can change
@ -1443,7 +1443,7 @@ static bool peer_accepted_htlc(const tal_t *ctx,
fail: fail:
/* In a blinded path, *all* failures are "invalid_onion_blinding" */ /* In a blinded path, *all* failures are "invalid_onion_blinding" */
if (hin->blinding) { if (hin->path_key) {
*failmsg = tal_free(*failmsg); *failmsg = tal_free(*failmsg);
*badonion = WIRE_INVALID_ONION_BLINDING; *badonion = WIRE_INVALID_ONION_BLINDING;
} }
@ -2157,7 +2157,7 @@ static bool channel_added_their_htlc(struct channel *channel,
&failcode); &failcode);
if (op) { if (op) {
if (!ecdh_maybe_blinding(&op->ephemeralkey, if (!ecdh_maybe_blinding(&op->ephemeralkey,
added->blinding, added->path_key,
&shared_secret)) { &shared_secret)) {
log_debug(channel->log, "htlc %"PRIu64 log_debug(channel->log, "htlc %"PRIu64
": can't tweak pubkey", added->id); ": can't tweak pubkey", added->id);
@ -2170,7 +2170,7 @@ static bool channel_added_their_htlc(struct channel *channel,
hin = new_htlc_in(channel, channel, added->id, added->amount, hin = new_htlc_in(channel, channel, added->id, added->amount,
added->cltv_expiry, &added->payment_hash, added->cltv_expiry, &added->payment_hash,
op ? &shared_secret : NULL, op ? &shared_secret : NULL,
added->blinding, added->path_key,
added->onion_routing_packet, added->onion_routing_packet,
added->fail_immediate); added->fail_immediate);
@ -2607,7 +2607,7 @@ const struct existing_htlc **peer_htlcs(const tal_t *ctx,
hin->msat, &hin->payment_hash, hin->msat, &hin->payment_hash,
hin->cltv_expiry, hin->cltv_expiry,
hin->onion_routing_packet, hin->onion_routing_packet,
hin->blinding, hin->path_key,
hin->preimage, hin->preimage,
f); f);
tal_arr_expand(&htlcs, existing); tal_arr_expand(&htlcs, existing);
@ -2639,7 +2639,7 @@ const struct existing_htlc **peer_htlcs(const tal_t *ctx,
hout->msat, &hout->payment_hash, hout->msat, &hout->payment_hash,
hout->cltv_expiry, hout->cltv_expiry,
hout->onion_routing_packet, hout->onion_routing_packet,
hout->blinding, hout->path_key,
hout->preimage, hout->preimage,
f); f);
tal_arr_expand(&htlcs, existing); tal_arr_expand(&htlcs, existing);

View File

@ -32,7 +32,7 @@ const u8 *send_htlc_out(const tal_t *ctx,
struct amount_msat amount, u32 cltv, struct amount_msat amount, u32 cltv,
struct amount_msat final_msat, struct amount_msat final_msat,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const struct pubkey *blinding, const struct pubkey *path_key,
u64 partid, u64 partid,
u64 groupid, u64 groupid,
const u8 *onion_routing_packet, const u8 *onion_routing_packet,

View File

@ -106,7 +106,7 @@ inject_onionmessage_(struct command *cmd,
req = jsonrpc_request_start(cmd->plugin, cmd, "injectonionmessage", req = jsonrpc_request_start(cmd->plugin, cmd, "injectonionmessage",
cb, errcb, arg); cb, errcb, arg);
json_add_pubkey(req->js, "path_key", &omsg->first_blinding); json_add_pubkey(req->js, "path_key", &omsg->first_path_key);
json_array_start(req->js, "hops"); json_array_start(req->js, "hops");
for (size_t i = 0; i < tal_count(omsg->hops); i++) { for (size_t i = 0; i < tal_count(omsg->hops); i++) {
json_object_start(req->js, NULL); json_object_start(req->js, NULL);

View File

@ -5,27 +5,27 @@
#include <wire/peer_wire.h> #include <wire/peer_wire.h>
struct onion_message { struct onion_message {
struct pubkey blinding; struct pubkey path_key;
u8 *onionmsg; u8 *onionmsg;
}; };
static void *encode(const tal_t *ctx, const struct onion_message *s) static void *encode(const tal_t *ctx, const struct onion_message *s)
{ {
return towire_onion_message(ctx, &s->blinding, s->onionmsg); return towire_onion_message(ctx, &s->path_key, s->onionmsg);
} }
static struct onion_message *decode(const tal_t *ctx, const void *p) static struct onion_message *decode(const tal_t *ctx, const void *p)
{ {
struct onion_message *s = tal(ctx, struct onion_message); struct onion_message *s = tal(ctx, struct onion_message);
if (fromwire_onion_message(s, p, &s->blinding, &s->onionmsg)) if (fromwire_onion_message(s, p, &s->path_key, &s->onionmsg))
return s; return s;
return tal_free(s); return tal_free(s);
} }
static bool equal(const struct onion_message *x, const struct onion_message *y) static bool equal(const struct onion_message *x, const struct onion_message *y)
{ {
if (memcmp(&x->blinding, &y->blinding, sizeof(x->blinding)) != 0) if (memcmp(&x->path_key, &y->path_key, sizeof(x->path_key)) != 0)
return false; return false;
return tal_arr_eq(x->onionmsg, y->onionmsg); return tal_arr_eq(x->onionmsg, y->onionmsg);
} }

View File

@ -2991,8 +2991,8 @@ static bool wallet_stmt2htlc_in(struct channel *channel,
in->cltv_expiry = db_col_int(stmt, "cltv_expiry"); in->cltv_expiry = db_col_int(stmt, "cltv_expiry");
in->hstate = db_col_int(stmt, "hstate"); in->hstate = db_col_int(stmt, "hstate");
in->status = NULL; in->status = NULL;
/* FIXME: save blinding in db !*/ /* FIXME: save path_key in db !*/
in->blinding = NULL; in->path_key = NULL;
in->payload = NULL; in->payload = NULL;
db_col_sha256(stmt, "payment_hash", &in->payment_hash); db_col_sha256(stmt, "payment_hash", &in->payment_hash);
@ -3064,8 +3064,8 @@ static bool wallet_stmt2htlc_out(struct wallet *wallet,
out->cltv_expiry = db_col_int(stmt, "cltv_expiry"); out->cltv_expiry = db_col_int(stmt, "cltv_expiry");
out->hstate = db_col_int(stmt, "hstate"); out->hstate = db_col_int(stmt, "hstate");
db_col_sha256(stmt, "payment_hash", &out->payment_hash); db_col_sha256(stmt, "payment_hash", &out->payment_hash);
/* FIXME: save blinding in db !*/ /* FIXME: save path_key in db !*/
out->blinding = NULL; out->path_key = NULL;
out->preimage = db_col_optional(out, stmt, "payment_key", preimage); out->preimage = db_col_optional(out, stmt, "payment_key", preimage);