lightningd/hsm: update_signature support.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2017-04-03 13:08:26 +09:30
parent 9c07376dcf
commit 21449650b0
2 changed files with 59 additions and 0 deletions

View File

@ -32,6 +32,7 @@
#include <utils.h>
#include <version.h>
#include <wally_bip32.h>
#include <wire/gen_peer_wire.h>
#include <wire/wire_io.h>
/* Nobody will ever find it here! */
@ -156,6 +157,53 @@ static struct io_plan *handle_cannouncement_sig(struct io_conn *conn,
return daemon_conn_read_next(conn, dc);
}
static struct io_plan *handle_channel_update_sig(struct io_conn *conn,
struct daemon_conn *dc)
{
tal_t *tmpctx = tal_tmpctx(conn);
/* 2 bytes msg type + 64 bytes signature */
size_t offset = 66;
struct privkey node_pkey;
struct sha256_double hash;
secp256k1_ecdsa_signature sig;
struct short_channel_id scid;
u32 timestamp, htlc_minimum_msat, fee_base_msat, fee_proportional_mill;
u16 flags, cltv_expiry_delta;
u8 *cu;
if (!fromwire_hsm_cupdate_sig_req(tmpctx, dc->msg_in, NULL, &cu)) {
status_trace("Failed to parse %s: %s",
hsm_client_wire_type_name(fromwire_peektype(dc->msg_in)),
tal_hex(trc, dc->msg_in));
return io_close(conn);
}
if (!fromwire_channel_update(cu, NULL, &sig, &scid, &timestamp, &flags,
&cltv_expiry_delta, &htlc_minimum_msat,
&fee_base_msat, &fee_proportional_mill)) {
status_trace("Failed to parse inner channel_update: %s",
tal_hex(trc, dc->msg_in));
return io_close(conn);
}
if (tal_len(cu) < offset) {
status_trace("inner channel_update too short: %s",
tal_hex(trc, dc->msg_in));
return io_close(conn);
}
node_key(&node_pkey, NULL);
sha256_double(&hash, cu + offset, tal_len(cu) - offset);
sign_hash(&node_pkey, &hash, &sig);
cu = towire_channel_update(tmpctx, &sig, &scid, timestamp, flags,
cltv_expiry_delta, htlc_minimum_msat,
fee_base_msat, fee_proportional_mill);
daemon_conn_send(dc, take(towire_hsm_cupdate_sig_reply(tmpctx, cu)));
tal_free(tmpctx);
return daemon_conn_read_next(conn, dc);
}
static struct io_plan *handle_channeld(struct io_conn *conn,
struct daemon_conn *dc)
@ -168,9 +216,12 @@ static struct io_plan *handle_channeld(struct io_conn *conn,
return handle_ecdh(conn, dc);
case WIRE_HSM_CANNOUNCEMENT_SIG_REQ:
return handle_cannouncement_sig(conn, dc);
case WIRE_HSM_CUPDATE_SIG_REQ:
return handle_channel_update_sig(conn, dc);
case WIRE_HSM_ECDH_RESP:
case WIRE_HSM_CANNOUNCEMENT_SIG_REPLY:
case WIRE_HSM_CUPDATE_SIG_REPLY:
break;
}

View File

@ -11,3 +11,11 @@ hsm_cannouncement_sig_req,35,ca,calen
hsm_cannouncement_sig_reply,102
hsm_cannouncement_sig_reply,0,node_signature,64
hsm_cupdate_sig_req,3
hsm_cupdate_sig_req,0,culen,u16
hsm_cupdate_sig_req,2,cu,culen
hsm_cupdate_sig_reply,103
hsm_cupdate_sig_reply,0,culen,u16
hsm_cupdate_sig_reply,2,cu,culen