Skip to content

Commit 190d7b8

Browse files
committed
Implemented SignChannelUpdate using single channel_update argument.
1 parent e85b89b commit 190d7b8

File tree

4 files changed

+63
-118
lines changed

4 files changed

+63
-118
lines changed

contrib/remote_hsmd/NOTES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Run all of the integration tests:
1515
```
1616
SUBDAEMON='hsmd:remote_hsmd' \
1717
make \
18+
PYTEST_PAR=1 \
1819
DEVELOPER=1 \
1920
VALGRIND=0 \
2021
pytest \

contrib/remote_hsmd/hsmd.c

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -896,8 +896,6 @@ static struct io_plan *handle_channel_update_sig(struct io_conn *conn,
896896
*/
897897
/* 2 bytes msg type + 64 bytes signature */
898898
size_t offset = 66;
899-
struct privkey node_pkey;
900-
struct sha256_double hash;
901899
secp256k1_ecdsa_signature sig;
902900
struct short_channel_id scid;
903901
u32 timestamp, fee_base_msat, fee_proportional_mill;
@@ -921,10 +919,7 @@ static struct io_plan *handle_channel_update_sig(struct io_conn *conn,
921919
return bad_req_fmt(conn, c, msg_in,
922920
"inner channel_update too short");
923921

924-
proxy_stat rv = proxy_handle_channel_update_sig(
925-
&chain_hash, &scid, timestamp, message_flags, channel_flags,
926-
cltv_expiry_delta, &htlc_minimum, fee_base_msat,
927-
fee_proportional_mill, &htlc_maximum, &sig);
922+
proxy_stat rv = proxy_handle_channel_update_sig(cu, &sig);
928923
if (PROXY_PERMANENT(rv))
929924
status_failed(STATUS_FAIL_INTERNAL_ERROR,
930925
"proxy_%s failed: %s", __FUNCTION__,
@@ -933,14 +928,7 @@ static struct io_plan *handle_channel_update_sig(struct io_conn *conn,
933928
return bad_req_fmt(conn, c, msg_in,
934929
"proxy_%s error: %s", __FUNCTION__,
935930
proxy_last_message());
936-
g_proxy_impl = PROXY_IMPL_MARSHALED;
937-
938-
/* FIXME - REPLACE BELOW W/ REMOTE RETURN */
939-
940-
node_key(&node_pkey, NULL);
941-
sha256_double(&hash, cu + offset, tal_count(cu) - offset);
942-
943-
sign_hash(&node_pkey, &hash, &sig);
931+
g_proxy_impl = PROXY_IMPL_COMPLETE;
944932

945933
cu = towire_channel_update_option_channel_htlc_max(tmpctx, &sig, &chain_hash,
946934
&scid, timestamp, message_flags, channel_flags,

contrib/remote_hsmd/proxy.cc

Lines changed: 52 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -694,65 +694,30 @@ proxy_stat proxy_handle_sign_message(
694694
}
695695

696696
proxy_stat proxy_handle_channel_update_sig(
697-
struct bitcoin_blkid *chain_hash,
698-
struct short_channel_id *scid,
699-
u32 timestamp,
700-
u8 message_flags,
701-
u8 channel_flags,
702-
u16 cltv_expiry_delta,
703-
struct amount_msat *htlc_minimum,
704-
u32 fee_base_msat,
705-
u32 fee_proportional_mill,
706-
struct amount_msat *htlc_maximum,
697+
u8 *channel_update,
707698
secp256k1_ecdsa_signature *o_sig)
708699
{
709700
status_debug(
710701
"%s:%d %s self_id=%s "
711-
"chain_hash=%s scid=%" PRIu64 " timestamp=%u "
712-
"message_flags=0x%x channel_flags=0x%x "
713-
"cltv_expiry_delta=%ud htlc_minimum=%" PRIu64 " "
714-
"fee_base_msat=%u fee_proportional_mill=%u "
715-
"htlc_maximum=%" PRIu64 "",
702+
"channel_update=%s",
716703
__FILE__, __LINE__, __FUNCTION__,
717704
dump_node_id(&self_id).c_str(),
718-
dump_hex(chain_hash->shad.sha.u.u8,
719-
sizeof(chain_hash->shad.sha.u.u8)).c_str(),
720-
scid->u64,
721-
timestamp,
722-
static_cast<u32>(message_flags),
723-
static_cast<u32>(channel_flags),
724-
static_cast<u32>(cltv_expiry_delta),
725-
htlc_minimum->millisatoshis,
726-
fee_base_msat,
727-
fee_proportional_mill,
728-
htlc_maximum->millisatoshis
729-
);
705+
dump_hex(channel_update, tal_count(channel_update)).c_str());
706+
707+
/* Skip the portion of the channel_update that we don't sign */
708+
size_t offset = 2 + 64; /* sizeof(type) + sizeof(signature) */
709+
size_t cusz = tal_count(channel_update);
730710

731711
last_message = "";
732712
SignChannelUpdateRequest req;
733713
marshal_node_id(&self_id, req.mutable_self_node_id());
734-
req.set_chain_hash((const char *) chain_hash->shad.sha.u.u8,
735-
sizeof(chain_hash->shad.sha.u.u8));
736-
req.set_short_channel_id(scid->u64);
737-
req.set_timestamp(timestamp);
738-
req.set_message_flags(static_cast<u32>(message_flags));
739-
req.set_channel_flags(static_cast<u32>(channel_flags));
740-
req.set_cltv_expiry_delta(static_cast<u32>(cltv_expiry_delta));
741-
req.set_htlc_minimum(htlc_minimum->millisatoshis);
742-
req.set_fee_base_msat(fee_base_msat);
743-
req.set_fee_proportional_mill(fee_proportional_mill);
744-
req.set_htlc_maximum(htlc_maximum->millisatoshis);
714+
req.set_channel_update(channel_update + offset, cusz - offset);
745715

746716
ClientContext context;
747717
SignChannelUpdateReply rsp;
748718
Status status = stub->SignChannelUpdate(&context, req, &rsp);
749719
if (status.ok()) {
750-
// FIXME - UNCOMMENT WHEN SERVER IMPLEMENTS:
751-
#if 0
752720
output_ecdsa_signature(rsp.signature(), o_sig);
753-
#else
754-
memset(o_sig->data, '\0', sizeof(o_sig->data));
755-
#endif
756721
status_debug("%s:%d %s self_id=%s sig=%s",
757722
__FILE__, __LINE__, __FUNCTION__,
758723
dump_node_id(&self_id).c_str(),
@@ -1005,50 +970,6 @@ proxy_stat proxy_handle_cannouncement_sig(
1005970
}
1006971
}
1007972

1008-
proxy_stat proxy_handle_sign_node_announcement(
1009-
u8 *node_announcement,
1010-
secp256k1_ecdsa_signature *o_sig)
1011-
{
1012-
status_debug(
1013-
"%s:%d %s self_id=%s ann=%s",
1014-
__FILE__, __LINE__, __FUNCTION__,
1015-
dump_node_id(&self_id).c_str(),
1016-
dump_hex(node_announcement,
1017-
tal_count(node_announcement)).c_str()
1018-
);
1019-
1020-
last_message = "";
1021-
SignNodeAnnouncementRequest req;
1022-
marshal_node_id(&self_id, req.mutable_self_node_id());
1023-
req.set_node_announcement(node_announcement,
1024-
tal_count(node_announcement));
1025-
1026-
ClientContext context;
1027-
SignNodeAnnouncementReply rsp;
1028-
Status status = stub->SignNodeAnnouncement(&context, req, &rsp);
1029-
if (status.ok()) {
1030-
// FIXME - UNCOMMENT WHEN SERVER IMPLEMENTS:
1031-
#if 0
1032-
output_ecdsa_signature(rsp.signature(), o_sig);
1033-
#else
1034-
memset(o_sig->data, '\0', sizeof(o_sig->data));
1035-
#endif
1036-
status_debug("%s:%d %s self_id=%s node_sig=%s bitcoin_sig=%s",
1037-
__FILE__, __LINE__, __FUNCTION__,
1038-
dump_node_id(&self_id).c_str(),
1039-
dump_secp256k1_ecdsa_signature(o_sig).c_str());
1040-
last_message = "success";
1041-
return PROXY_OK;
1042-
} else {
1043-
status_unusual("%s:%d %s: self_id=%s %s",
1044-
__FILE__, __LINE__, __FUNCTION__,
1045-
dump_node_id(&self_id).c_str(),
1046-
status.error_message().c_str());
1047-
last_message = status.error_message();
1048-
return map_status(status);
1049-
}
1050-
}
1051-
1052973
proxy_stat proxy_handle_sign_local_htlc_tx(
1053974
struct bitcoin_tx *tx,
1054975
u64 commit_num,
@@ -1378,4 +1299,48 @@ proxy_stat proxy_handle_check_future_secret(
13781299
}
13791300
}
13801301

1302+
proxy_stat proxy_handle_sign_node_announcement(
1303+
u8 *node_announcement,
1304+
secp256k1_ecdsa_signature *o_sig)
1305+
{
1306+
status_debug(
1307+
"%s:%d %s self_id=%s ann=%s",
1308+
__FILE__, __LINE__, __FUNCTION__,
1309+
dump_node_id(&self_id).c_str(),
1310+
dump_hex(node_announcement,
1311+
tal_count(node_announcement)).c_str()
1312+
);
1313+
1314+
last_message = "";
1315+
SignNodeAnnouncementRequest req;
1316+
marshal_node_id(&self_id, req.mutable_self_node_id());
1317+
req.set_node_announcement(node_announcement,
1318+
tal_count(node_announcement));
1319+
1320+
ClientContext context;
1321+
SignNodeAnnouncementReply rsp;
1322+
Status status = stub->SignNodeAnnouncement(&context, req, &rsp);
1323+
if (status.ok()) {
1324+
// FIXME - UNCOMMENT WHEN SERVER IMPLEMENTS:
1325+
#if 0
1326+
output_ecdsa_signature(rsp.signature(), o_sig);
1327+
#else
1328+
memset(o_sig->data, '\0', sizeof(o_sig->data));
1329+
#endif
1330+
status_debug("%s:%d %s self_id=%s node_sig=%s bitcoin_sig=%s",
1331+
__FILE__, __LINE__, __FUNCTION__,
1332+
dump_node_id(&self_id).c_str(),
1333+
dump_secp256k1_ecdsa_signature(o_sig).c_str());
1334+
last_message = "success";
1335+
return PROXY_OK;
1336+
} else {
1337+
status_unusual("%s:%d %s: self_id=%s %s",
1338+
__FILE__, __LINE__, __FUNCTION__,
1339+
dump_node_id(&self_id).c_str(),
1340+
status.error_message().c_str());
1341+
last_message = status.error_message();
1342+
return map_status(status);
1343+
}
1344+
}
1345+
13811346
} /* extern "C" */

contrib/remote_hsmd/proxy.h

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -84,19 +84,6 @@ proxy_stat proxy_handle_sign_message(
8484
u8 *msg,
8585
secp256k1_ecdsa_recoverable_signature *o_sig);
8686

87-
proxy_stat proxy_handle_channel_update_sig(
88-
struct bitcoin_blkid *chain_hash,
89-
struct short_channel_id *scid,
90-
u32 timestamp,
91-
u8 message_flags,
92-
u8 channel_flags,
93-
u16 cltv_expiry_delta,
94-
struct amount_msat *htlc_minimum,
95-
u32 fee_base_msat,
96-
u32 fee_proportional_mill,
97-
struct amount_msat *htlc_maximum,
98-
secp256k1_ecdsa_signature *o_sig);
99-
10087
proxy_stat proxy_handle_get_channel_basepoints(
10188
struct node_id *peer_id,
10289
u64 dbid,
@@ -119,17 +106,17 @@ proxy_stat proxy_handle_sign_commitment_tx(
119106
u64 dbid,
120107
struct bitcoin_signature *o_sig);
121108

122-
proxy_stat proxy_handle_sign_node_announcement(
123-
u8 *node_announcement,
124-
secp256k1_ecdsa_signature *o_sig);
125-
126109
proxy_stat proxy_handle_cannouncement_sig(
127110
struct node_id *peer_id,
128111
u64 dbid,
129112
u8 *channel_announcement,
130113
secp256k1_ecdsa_signature *o_node_sig,
131114
secp256k1_ecdsa_signature *o_bitcoin_sig);
132115

116+
proxy_stat proxy_handle_channel_update_sig(
117+
u8 *channel_update,
118+
secp256k1_ecdsa_signature *o_sig);
119+
133120
proxy_stat proxy_handle_sign_local_htlc_tx(
134121
struct bitcoin_tx *tx,
135122
u64 commit_num,
@@ -177,6 +164,10 @@ proxy_stat proxy_handle_check_future_secret(
177164
struct secret *suggested,
178165
bool *o_correct);
179166

167+
proxy_stat proxy_handle_sign_node_announcement(
168+
u8 *node_announcement,
169+
secp256k1_ecdsa_signature *o_sig);
170+
180171
#ifdef __cplusplus
181172
} /* extern C */
182173
#endif

0 commit comments

Comments
 (0)