2020-05-19 22:46:30 +02:00
|
|
|
/* Test of https://github.com/ElementsProject/lightning/issues/3703:
|
|
|
|
*
|
|
|
|
* > 2020-05-04T05:17:36.958Z **BROKEN** gossipd: peer 0254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d3 invalid local_channel_announcement 0db201b3010011effc9ed10fceccfae5f9e3fef20d983b06eed030e968fd8d1e6c5905e18f9f2df6a43f00d7c0ddf52e0467ab1e32394051b72ea6343fb008a4117c265f3d7b732bab7df4ee404ac926aef6610f4eb33e31baabfd9afdbf897c8a80057efa1468362b4d2cc0a5482013e1058c8205717f85c3bc82c3ea89f17cfeac21e2cb2ac65b429f79b24fbd51094bee5e080d4c7cfc28a584e279075643054a48b2972f0b72becfd57e03297bf0102b09329982e0ac839dc120959c07456431d3c8fd1430ffe2cc2710e9600e602779c9cf5f91e95874ef4bcf9f0bdda2ce2be97bba562848a2717acdb8dec30bd5073f2f853776cc98f0b6cddc2dcfb57aa69fa7c43400030800006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000009984d00063a00010254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d303baa70886d9200af0ffbd3f9e18d96008331c858456b16e3a9b41e735c6208fef03c8731bbac446b7d11b7f5a1861c7d2c87ccf429780c74463de3428dceeb73ad702b3e55c7a1a6cdf17a83a801f7f8f698e4980323e2584f27a643a1b0519ebf8c7 (001100000000000000000000000000000000000000000000000000000000000000000463426164206e6f64655f7369676e61747572655f3120333034343032323031316566666339656431306663656363666165356639653366656632306439383362303665656430333065393638666438643165366335393035653138663966303232303264663661343366303064376330646466353265303436376162316533323339343035316237326561363334336662303038613431313763323635663364376220686173682062623932623866343562343865363561643266326366666632323432666139323162346366343666373039613337326361373738383533376538396439646531206f6e206e6f64655f616e6e6f756e63656d656e7420303130303131656666633965643130666365636366616535663965336665663230643938336230366565643033306539363866643864316536633539303565313866396632646636613433663030643763306464663532653034363761623165333233393430353162373265613633343366623030386134313137633236356633643762373332626162376466346565343034616339323661656636363130663465623333653331626161626664396166646266383937633861383030353765666131343638333632623464326363306135343832303133653130353863383230353731376638356333626338326333656138396631376366656163323165326362326163363562343239663739623234666264353130393462656535653038306434633763666332386135383465323739303735363433303534613438623239373266306237326265636664353765303332393762663031303262303933323939383265306163383339646331323039353963303734353634333164336338666431343330666665326363323731306539363030653630323737396339636635663931653935383734656634626366396630626464613263653262653937626261353632383438613237313761636462386465633330626435303733663266383533373736636339386630623663646463326463666235376161363966613763343334303030333038303030303666653238633061623666316233373263316136613234366165363366373466393331653833363565313561303839633638643631393030303030303030303030393938346430303036336130303031303235346666383038663533623266386334356537346237303433306633333663366337366261326634616632383966343864363038366165366536303436326433303362616137303838366439323030616630666662643366396531386439363030383333316338353834353662313665336139623431653733356336323038666566303363383733316262616334343662376431316237663561313836316337643263383763636634323937383063373434363364653334323864636565623733616437303262336535356337613161366364663137613833613830316637663866363938653439383033323365323538346632376136343361316230353139656266386337)
|
|
|
|
*
|
|
|
|
* OK, so your peer is 0254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d3, and we consider it to be a bad channel_announcement signature (it says "node_announcement" in the message below, but that's a typo!):
|
|
|
|
|
|
|
|
```
|
|
|
|
Bad node_signature_1 3044022011effc9ed10fceccfae5f9e3fef20d983b06eed030e968fd8d1e6c5905e18f9f02202df6a43f00d7c0ddf52e0467ab1e32394051b72ea6343fb008a4117c265f3d7b hash bb92b8f45b48e65ad2f2cfff2242fa921b4cf46f709a372ca7788537e89d9de1 on node_announcement 010011effc9ed10fceccfae5f9e3fef20d983b06eed030e968fd8d1e6c5905e18f9f2df6a43f00d7c0ddf52e0467ab1e32394051b72ea6343fb008a4117c265f3d7b732bab7df4ee404ac926aef6610f4eb33e31baabfd9afdbf897c8a80057efa1468362b4d2cc0a5482013e1058c8205717f85c3bc82c3ea89f17cfeac21e2cb2ac65b429f79b24fbd51094bee5e080d4c7cfc28a584e279075643054a48b2972f0b72becfd57e03297bf0102b09329982e0ac839dc120959c07456431d3c8fd1430ffe2cc2710e9600e602779c9cf5f91e95874ef4bcf9f0bdda2ce2be97bba562848a2717acdb8dec30bd5073f2f853776cc98f0b6cddc2dcfb57aa69fa7c43400030800006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000009984d00063a00010254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d303baa70886d9200af0ffbd3f9e18d96008331c858456b16e3a9b41e735c6208fef03c8731bbac446b7d11b7f5a1861c7d2c87ccf429780c74463de3428dceeb73ad702b3e55c7a1a6cdf17a83a801f7f8f698e4980323e2584f27a643a1b0519ebf8c7
|
|
|
|
```
|
|
|
|
|
|
|
|
Here's what we think the channel_announcement should look like:
|
|
|
|
```
|
|
|
|
WIRE_CHANNEL_ANNOUNCEMENT:
|
|
|
|
node_signature_1=3044022011effc9ed10fceccfae5f9e3fef20d983b06eed030e968fd8d1e6c5905e18f9f02202df6a43f00d7c0ddf52e0467ab1e32394051b72ea6343fb008a4117c265f3d7b
|
|
|
|
node_signature_2=30440220732bab7df4ee404ac926aef6610f4eb33e31baabfd9afdbf897c8a80057efa14022068362b4d2cc0a5482013e1058c8205717f85c3bc82c3ea89f17cfeac21e2cb2a
|
|
|
|
bitcoin_signature_1=3045022100c65b429f79b24fbd51094bee5e080d4c7cfc28a584e279075643054a48b2972f02200b72becfd57e03297bf0102b09329982e0ac839dc120959c07456431d3c8fd14
|
|
|
|
bitcoin_signature_2=3044022030ffe2cc2710e9600e602779c9cf5f91e95874ef4bcf9f0bdda2ce2be97bba5602202848a2717acdb8dec30bd5073f2f853776cc98f0b6cddc2dcfb57aa69fa7c434
|
|
|
|
features=[080000]
|
|
|
|
chain_hash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
|
|
|
|
short_channel_id=628813x1594x1
|
|
|
|
node_id_1=0254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d3
|
|
|
|
node_id_2=03baa70886d9200af0ffbd3f9e18d96008331c858456b16e3a9b41e735c6208fef
|
|
|
|
bitcoin_key_1=03c8731bbac446b7d11b7f5a1861c7d2c87ccf429780c74463de3428dceeb73ad7
|
|
|
|
bitcoin_key_2=02b3e55c7a1a6cdf17a83a801f7f8f698e4980323e2584f27a643a1b0519ebf8c7
|
|
|
|
```
|
|
|
|
|
|
|
|
In particular, we set feature bit 19. The spec says we should set feature bit 18 (which is clearly wrong!).
|
|
|
|
*/
|
|
|
|
|
2021-12-04 12:23:56 +01:00
|
|
|
#include "config.h"
|
2020-05-19 22:46:30 +02:00
|
|
|
#include "../common/wire_error.c"
|
2024-01-31 05:23:33 +01:00
|
|
|
#include "../sigcheck.c"
|
|
|
|
#include <assert.h>
|
2021-11-30 04:06:05 +01:00
|
|
|
#include <common/blinding.h>
|
2021-09-09 04:50:52 +02:00
|
|
|
#include <common/channel_type.h>
|
2021-11-30 04:06:05 +01:00
|
|
|
#include <common/ecdh.h>
|
2020-05-19 22:46:30 +02:00
|
|
|
#include <common/json_stream.h>
|
2021-11-30 04:06:05 +01:00
|
|
|
#include <common/onionreply.h>
|
2024-05-09 05:36:20 +02:00
|
|
|
#include <common/sciddir_or_pubkey.h>
|
2020-12-02 01:10:04 +01:00
|
|
|
#include <common/setup.h>
|
2020-05-19 22:46:30 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
/* AUTOGENERATED MOCKS START */
|
2021-11-30 04:06:05 +01:00
|
|
|
/* Generated stub for blinding_hash_e_and_ss */
|
|
|
|
void blinding_hash_e_and_ss(const struct pubkey *e UNNEEDED,
|
|
|
|
const struct secret *ss UNNEEDED,
|
|
|
|
struct sha256 *sha UNNEEDED)
|
|
|
|
{ fprintf(stderr, "blinding_hash_e_and_ss called!\n"); abort(); }
|
2024-10-14 18:03:49 +02:00
|
|
|
/* Generated stub for blinding_next_path_key */
|
|
|
|
bool blinding_next_path_key(const struct pubkey *pk UNNEEDED,
|
|
|
|
const struct sha256 *h UNNEEDED,
|
|
|
|
struct pubkey *next UNNEEDED)
|
|
|
|
{ fprintf(stderr, "blinding_next_path_key called!\n"); abort(); }
|
|
|
|
/* Generated stub for blinding_next_path_privkey */
|
|
|
|
bool blinding_next_path_privkey(const struct privkey *e UNNEEDED,
|
|
|
|
const struct sha256 *h UNNEEDED,
|
|
|
|
struct privkey *next UNNEEDED)
|
|
|
|
{ fprintf(stderr, "blinding_next_path_privkey called!\n"); abort(); }
|
2024-05-09 05:36:20 +02:00
|
|
|
/* Generated stub for fromwire_sciddir_or_pubkey */
|
|
|
|
void fromwire_sciddir_or_pubkey(const u8 **cursor UNNEEDED, size_t *max UNNEEDED,
|
|
|
|
struct sciddir_or_pubkey *sciddpk UNNEEDED)
|
|
|
|
{ fprintf(stderr, "fromwire_sciddir_or_pubkey called!\n"); abort(); }
|
|
|
|
/* Generated stub for towire_sciddir_or_pubkey */
|
|
|
|
void towire_sciddir_or_pubkey(u8 **pptr UNNEEDED,
|
|
|
|
const struct sciddir_or_pubkey *sciddpk UNNEEDED)
|
|
|
|
{ fprintf(stderr, "towire_sciddir_or_pubkey called!\n"); abort(); }
|
2020-05-19 22:46:30 +02:00
|
|
|
/* AUTOGENERATED MOCKS END */
|
|
|
|
|
2020-12-02 01:10:04 +01:00
|
|
|
int main(int argc, char *argv[])
|
2020-05-19 22:46:30 +02:00
|
|
|
{
|
|
|
|
struct bitcoin_blkid chain_hash;
|
2024-01-31 05:23:33 +01:00
|
|
|
u8 *features;
|
|
|
|
const char *err;
|
2020-05-19 22:46:30 +02:00
|
|
|
secp256k1_ecdsa_signature node_signature_1, node_signature_2;
|
|
|
|
secp256k1_ecdsa_signature bitcoin_signature_1, bitcoin_signature_2;
|
|
|
|
struct short_channel_id short_channel_id;
|
|
|
|
struct node_id node_id_1, node_id_2;
|
|
|
|
struct pubkey bitcoin_key_1, bitcoin_key_2;
|
|
|
|
const u8 *cannounce;
|
|
|
|
|
2020-12-02 01:10:04 +01:00
|
|
|
common_setup(argv[0]);
|
2020-05-19 22:46:30 +02:00
|
|
|
|
|
|
|
cannounce = tal_hexdata(tmpctx, "010011effc9ed10fceccfae5f9e3fef20d983b06eed030e968fd8d1e6c5905e18f9f2df6a43f00d7c0ddf52e0467ab1e32394051b72ea6343fb008a4117c265f3d7b732bab7df4ee404ac926aef6610f4eb33e31baabfd9afdbf897c8a80057efa1468362b4d2cc0a5482013e1058c8205717f85c3bc82c3ea89f17cfeac21e2cb2ac65b429f79b24fbd51094bee5e080d4c7cfc28a584e279075643054a48b2972f0b72becfd57e03297bf0102b09329982e0ac839dc120959c07456431d3c8fd1430ffe2cc2710e9600e602779c9cf5f91e95874ef4bcf9f0bdda2ce2be97bba562848a2717acdb8dec30bd5073f2f853776cc98f0b6cddc2dcfb57aa69fa7c43400030800006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000009984d00063a00010254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d303baa70886d9200af0ffbd3f9e18d96008331c858456b16e3a9b41e735c6208fef03c8731bbac446b7d11b7f5a1861c7d2c87ccf429780c74463de3428dceeb73ad702b3e55c7a1a6cdf17a83a801f7f8f698e4980323e2584f27a643a1b0519ebf8c7", strlen("010011effc9ed10fceccfae5f9e3fef20d983b06eed030e968fd8d1e6c5905e18f9f2df6a43f00d7c0ddf52e0467ab1e32394051b72ea6343fb008a4117c265f3d7b732bab7df4ee404ac926aef6610f4eb33e31baabfd9afdbf897c8a80057efa1468362b4d2cc0a5482013e1058c8205717f85c3bc82c3ea89f17cfeac21e2cb2ac65b429f79b24fbd51094bee5e080d4c7cfc28a584e279075643054a48b2972f0b72becfd57e03297bf0102b09329982e0ac839dc120959c07456431d3c8fd1430ffe2cc2710e9600e602779c9cf5f91e95874ef4bcf9f0bdda2ce2be97bba562848a2717acdb8dec30bd5073f2f853776cc98f0b6cddc2dcfb57aa69fa7c43400030800006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000009984d00063a00010254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d303baa70886d9200af0ffbd3f9e18d96008331c858456b16e3a9b41e735c6208fef03c8731bbac446b7d11b7f5a1861c7d2c87ccf429780c74463de3428dceeb73ad702b3e55c7a1a6cdf17a83a801f7f8f698e4980323e2584f27a643a1b0519ebf8c7"));
|
|
|
|
if (!fromwire_channel_announcement(cannounce, cannounce,
|
|
|
|
&node_signature_1,
|
|
|
|
&node_signature_2,
|
|
|
|
&bitcoin_signature_1,
|
|
|
|
&bitcoin_signature_2,
|
|
|
|
&features,
|
|
|
|
&chain_hash,
|
|
|
|
&short_channel_id,
|
|
|
|
&node_id_1,
|
|
|
|
&node_id_2,
|
|
|
|
&bitcoin_key_1,
|
|
|
|
&bitcoin_key_2))
|
|
|
|
abort();
|
|
|
|
|
2024-01-31 05:23:33 +01:00
|
|
|
err = sigcheck_channel_announcement(cannounce,
|
|
|
|
&node_id_1, &node_id_2,
|
|
|
|
&bitcoin_key_1, &bitcoin_key_2,
|
|
|
|
&node_signature_1, &node_signature_2,
|
|
|
|
&bitcoin_signature_1,
|
|
|
|
&bitcoin_signature_2,
|
|
|
|
cannounce);
|
2020-05-19 22:46:30 +02:00
|
|
|
assert(err);
|
2024-01-31 05:23:33 +01:00
|
|
|
assert(strstr(err, "Bad node_signature_1"));
|
2020-05-19 22:46:30 +02:00
|
|
|
|
|
|
|
/* Turns out they didn't include the feature bit at all. */
|
|
|
|
cannounce = towire_channel_announcement(tmpctx,
|
|
|
|
&node_signature_1,
|
|
|
|
&node_signature_2,
|
|
|
|
&bitcoin_signature_1,
|
|
|
|
&bitcoin_signature_2,
|
|
|
|
NULL,
|
|
|
|
&chain_hash,
|
2024-03-20 02:59:51 +01:00
|
|
|
short_channel_id,
|
2020-05-19 22:46:30 +02:00
|
|
|
&node_id_1,
|
|
|
|
&node_id_2,
|
|
|
|
&bitcoin_key_1,
|
|
|
|
&bitcoin_key_2);
|
2024-01-31 05:23:33 +01:00
|
|
|
err = sigcheck_channel_announcement(cannounce,
|
|
|
|
&node_id_1, &node_id_2,
|
|
|
|
&bitcoin_key_1, &bitcoin_key_2,
|
|
|
|
&node_signature_1, &node_signature_2,
|
|
|
|
&bitcoin_signature_1,
|
|
|
|
&bitcoin_signature_2,
|
|
|
|
cannounce);
|
2020-05-19 22:46:30 +02:00
|
|
|
assert(err);
|
2024-01-31 05:23:33 +01:00
|
|
|
assert(strstr(err, "Bad node_signature_2"));
|
2020-05-19 22:46:30 +02:00
|
|
|
|
2020-12-02 01:10:04 +01:00
|
|
|
common_shutdown();
|
2020-05-19 22:46:30 +02:00
|
|
|
return 0;
|
|
|
|
}
|