From 79f848145c86186325f014532909eb53d5b77240 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Tue, 2 May 2017 19:50:49 +0200 Subject: [PATCH] sphinx: Passing shared secret of the HTLC up to the master This is needed so we can create error messages and wrap them on the way back. --- lightningd/channel/channel.c | 3 ++- lightningd/channel/channel_wire.csv | 1 + lightningd/htlc_end.h | 1 + lightningd/peer_control.c | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lightningd/channel/channel.c b/lightningd/channel/channel.c index 6998aa2a9..2dd846e78 100644 --- a/lightningd/channel/channel.c +++ b/lightningd/channel/channel.c @@ -651,7 +651,8 @@ static void their_htlc_locked(const struct htlc *htlc, struct peer *peer) rs->nextcase == ONION_FORWARD, rs->hop_data.amt_forward, rs->hop_data.outgoing_cltv, - &rs->hop_data.channel_id); + &rs->hop_data.channel_id, + &ss); daemon_conn_send(&peer->master, take(msg)); tal_free(tmpctx); return; diff --git a/lightningd/channel/channel_wire.csv b/lightningd/channel/channel_wire.csv index 80cf4adf7..9eb3f0362 100644 --- a/lightningd/channel/channel_wire.csv +++ b/lightningd/channel/channel_wire.csv @@ -88,6 +88,7 @@ channel_accepted_htlc,0,forward,bool channel_accepted_htlc,0,amt_to_forward,u64 channel_accepted_htlc,0,outgoing_cltv_value,u32 channel_accepted_htlc,0,next_channel,struct short_channel_id +channel_accepted_htlc,0,shared_secret,32 # FIXME: Add code to commit current channel state! diff --git a/lightningd/htlc_end.h b/lightningd/htlc_end.h index 98d5391a7..47fc11c41 100644 --- a/lightningd/htlc_end.h +++ b/lightningd/htlc_end.h @@ -28,6 +28,7 @@ struct htlc_end { u32 outgoing_cltv_value; u32 cltv_expiry; struct sha256 payment_hash; + struct sha256 shared_secret; }; static inline const struct htlc_end *keyof_htlc_end(const struct htlc_end *e) diff --git a/lightningd/peer_control.c b/lightningd/peer_control.c index 8434a89f7..a4bda8a08 100644 --- a/lightningd/peer_control.c +++ b/lightningd/peer_control.c @@ -1088,7 +1088,8 @@ static int peer_accepted_htlc(struct peer *peer, const u8 *msg) hend->next_onion, &forward, &hend->amt_to_forward, &hend->outgoing_cltv_value, - &hend->next_channel)) { + &hend->next_channel, + &hend->shared_secret)) { log_broken(peer->log, "bad fromwire_channel_accepted_htlc %s", tal_hex(peer, msg)); return -1;