diff --git a/lightningd/gossip/gossip.c b/lightningd/gossip/gossip.c index b70aee818..52d3f7d95 100644 --- a/lightningd/gossip/gossip.c +++ b/lightningd/gossip/gossip.c @@ -112,6 +112,7 @@ static struct io_plan *peer_msgin(struct io_conn *conn, case WIRE_FUNDING_CREATED: case WIRE_FUNDING_SIGNED: case WIRE_FUNDING_LOCKED: + case WIRE_ANNOUNCEMENT_SIGNATURES: case WIRE_UPDATE_FEE: case WIRE_SHUTDOWN: case WIRE_CLOSING_SIGNED: diff --git a/wire/gen_peer_wire_csv b/wire/gen_peer_wire_csv index f90e3ee77..057577822 100644 --- a/wire/gen_peer_wire_csv +++ b/wire/gen_peer_wire_csv @@ -48,9 +48,7 @@ funding_signed,8,signature,64 funding_locked,36 funding_locked,0,temporary-channel-id,8 funding_locked,8,channel-id,8 -funding_locked,16,announcement-node-signature,64 -funding_locked,80,announcement-bitcoin-signature,64 -funding_locked,144,next-per-commitment-point,33 +funding_locked,16,next-per-commitment-point,33 shutdown,38 shutdown,0,channel-id,8 shutdown,8,len,2 @@ -95,6 +93,10 @@ revoke_and_ack,76,htlc-timeout-signature,num-htlc-timeouts*64 update_fee,134 update_fee,0,channel-id,8 update_fee,8,feerate-per-kw,4 +announcement_signatures,259 +announcement_signatures,0,channel-id,8 +announcement_signatures,8,node-signature,64 +announcement_signatures,72,bitcoin-signature,64 channel_announcement,256 channel_announcement,0,node-signature-1,64 channel_announcement,64,node-signature-2,64 diff --git a/wire/test/run-peer-wire.c b/wire/test/run-peer-wire.c index 8ccbadcc3..9af8456e7 100644 --- a/wire/test/run-peer-wire.c +++ b/wire/test/run-peer-wire.c @@ -141,10 +141,13 @@ struct msg_channel_update { }; struct msg_funding_locked { struct channel_id temporary_channel_id; + struct channel_id channel_id; + struct pubkey next_per_commitment_point; +}; +struct msg_announcement_signatures { struct channel_id channel_id; secp256k1_ecdsa_signature announcement_node_signature; secp256k1_ecdsa_signature announcement_bitcoin_signature; - struct pubkey next_per_commitment_point; }; struct msg_commit_sig { struct channel_id channel_id; @@ -395,8 +398,6 @@ static void *towire_struct_funding_locked(const tal_t *ctx, return towire_funding_locked(ctx, &s->temporary_channel_id, &s->channel_id, - &s->announcement_node_signature, - &s->announcement_bitcoin_signature, &s->next_per_commitment_point); } @@ -407,13 +408,32 @@ static struct msg_funding_locked *fromwire_struct_funding_locked(const tal_t *ct if (fromwire_funding_locked(p, plen, &s->temporary_channel_id, &s->channel_id, - &s->announcement_node_signature, - &s->announcement_bitcoin_signature, &s->next_per_commitment_point)) return s; return tal_free(s); } +static void *towire_struct_announcement_signatures(const tal_t *ctx, + const struct msg_announcement_signatures *s) +{ + return towire_announcement_signatures(ctx, + &s->channel_id, + &s->announcement_node_signature, + &s->announcement_bitcoin_signature); +} + +static struct msg_announcement_signatures *fromwire_struct_announcement_signatures(const tal_t *ctx, const void *p, size_t *plen) +{ + struct msg_announcement_signatures *s = tal(ctx, struct msg_announcement_signatures); + + if (fromwire_announcement_signatures(p, plen, + &s->channel_id, + &s->announcement_node_signature, + &s->announcement_bitcoin_signature)) + return s; + return tal_free(s); +} + static void *towire_struct_update_fail_htlc(const tal_t *ctx, const struct msg_update_fail_htlc *s) { @@ -685,6 +705,12 @@ static bool funding_locked_eq(const struct msg_funding_locked *a, return structeq(a, b); } +static bool announcement_signatures_eq(const struct msg_announcement_signatures *a, + const struct msg_announcement_signatures *b) +{ + return structeq(a, b); +} + static bool update_fail_htlc_eq(const struct msg_update_fail_htlc *a, const struct msg_update_fail_htlc *b) { @@ -811,6 +837,7 @@ int main(void) { struct msg_channel_announcement ca, *ca2; struct msg_funding_locked fl, *fl2; + struct msg_announcement_signatures as, *as2; struct msg_update_fail_htlc ufh, *ufh2; struct msg_commit_sig cs, *cs2; struct msg_funding_signed fs, *fs2; @@ -858,6 +885,15 @@ int main(void) assert(len == 0); assert(funding_locked_eq(&fl, fl2)); test_corruption(&fl, fl2, funding_locked); + + memset(&as, 2, sizeof(as)); + + msg = towire_struct_announcement_signatures(ctx, &as); + len = tal_count(msg); + as2 = fromwire_struct_announcement_signatures(ctx, msg, &len); + assert(len == 0); + assert(announcement_signatures_eq(&as, as2)); + test_corruption(&as, as2, announcement_signatures); memset(&ufh, 2, sizeof(ufh)); ufh.reason = tal_arr(ctx, u8, 2);