mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-26 20:30:59 +01:00
hsmd: remove #if DEVELOPER in favor of runtime flag.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
1fc603ea6e
commit
60def0ead7
3 changed files with 26 additions and 36 deletions
47
hsmd/hsmd.c
47
hsmd/hsmd.c
|
@ -35,13 +35,6 @@
|
||||||
* stream from lightningd. */
|
* stream from lightningd. */
|
||||||
#define REQ_FD 3
|
#define REQ_FD 3
|
||||||
|
|
||||||
#if DEVELOPER
|
|
||||||
/* If they specify --dev-force-privkey it ends up in here. */
|
|
||||||
extern struct privkey *dev_force_privkey;
|
|
||||||
/* If they specify --dev-force-bip32-seed it ends up in here. */
|
|
||||||
extern struct secret *dev_force_bip32_seed;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Temporary storage for the secret until we pass it to `hsmd_init` */
|
/* Temporary storage for the secret until we pass it to `hsmd_init` */
|
||||||
struct secret hsm_secret;
|
struct secret hsm_secret;
|
||||||
|
|
||||||
|
@ -87,6 +80,9 @@ static UINTMAP(struct client *) clients;
|
||||||
static struct client *dbid_zero_clients[3];
|
static struct client *dbid_zero_clients[3];
|
||||||
static size_t num_dbid_zero_clients;
|
static size_t num_dbid_zero_clients;
|
||||||
|
|
||||||
|
/* Are we in developer mode */
|
||||||
|
static bool developer;
|
||||||
|
|
||||||
/*~ We need this deep inside bad_req_fmt, and for memleak, so we make it a
|
/*~ We need this deep inside bad_req_fmt, and for memleak, so we make it a
|
||||||
* global. */
|
* global. */
|
||||||
static struct daemon_conn *status_conn;
|
static struct daemon_conn *status_conn;
|
||||||
|
@ -437,10 +433,6 @@ static struct io_plan *init_hsm(struct io_conn *conn,
|
||||||
struct client *c,
|
struct client *c,
|
||||||
const u8 *msg_in)
|
const u8 *msg_in)
|
||||||
{
|
{
|
||||||
struct privkey *privkey;
|
|
||||||
struct secret *seed;
|
|
||||||
struct secrets *secrets;
|
|
||||||
struct sha256 *shaseed;
|
|
||||||
struct secret *hsm_encryption_key;
|
struct secret *hsm_encryption_key;
|
||||||
struct bip32_key_version bip32_key_version;
|
struct bip32_key_version bip32_key_version;
|
||||||
u32 minversion, maxversion;
|
u32 minversion, maxversion;
|
||||||
|
@ -454,7 +446,11 @@ static struct io_plan *init_hsm(struct io_conn *conn,
|
||||||
* an extension of the simple comma-separated format output by the
|
* an extension of the simple comma-separated format output by the
|
||||||
* BOLT tools/extract-formats.py tool. */
|
* BOLT tools/extract-formats.py tool. */
|
||||||
if (!fromwire_hsmd_init(NULL, msg_in, &bip32_key_version, &chainparams,
|
if (!fromwire_hsmd_init(NULL, msg_in, &bip32_key_version, &chainparams,
|
||||||
&hsm_encryption_key, &privkey, &seed, &secrets, &shaseed,
|
&hsm_encryption_key,
|
||||||
|
&dev_force_privkey,
|
||||||
|
&dev_force_bip32_seed,
|
||||||
|
&dev_force_channel_secrets,
|
||||||
|
&dev_force_channel_secrets_shaseed,
|
||||||
&minversion, &maxversion))
|
&minversion, &maxversion))
|
||||||
return bad_req(conn, c, msg_in);
|
return bad_req(conn, c, msg_in);
|
||||||
|
|
||||||
|
@ -476,12 +472,12 @@ static struct io_plan *init_hsm(struct io_conn *conn,
|
||||||
/*~ Don't swap this. */
|
/*~ Don't swap this. */
|
||||||
sodium_mlock(hsm_secret.data, sizeof(hsm_secret.data));
|
sodium_mlock(hsm_secret.data, sizeof(hsm_secret.data));
|
||||||
|
|
||||||
#if DEVELOPER
|
if (!developer) {
|
||||||
dev_force_privkey = privkey;
|
assert(!dev_force_privkey);
|
||||||
dev_force_bip32_seed = seed;
|
assert(!dev_force_bip32_seed);
|
||||||
dev_force_channel_secrets = secrets;
|
assert(!dev_force_channel_secrets);
|
||||||
dev_force_channel_secrets_shaseed = shaseed;
|
assert(!dev_force_channel_secrets_shaseed);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
/* Once we have read the init message we know which params the master
|
/* Once we have read the init message we know which params the master
|
||||||
* will use */
|
* will use */
|
||||||
|
@ -558,7 +554,6 @@ static struct io_plan *pass_client_hsmfd(struct io_conn *conn,
|
||||||
send_pending_client_fd, c);
|
send_pending_client_fd, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEVELOPER
|
|
||||||
static struct io_plan *handle_memleak(struct io_conn *conn,
|
static struct io_plan *handle_memleak(struct io_conn *conn,
|
||||||
struct client *c,
|
struct client *c,
|
||||||
const u8 *msg_in)
|
const u8 *msg_in)
|
||||||
|
@ -582,7 +577,6 @@ static struct io_plan *handle_memleak(struct io_conn *conn,
|
||||||
reply = towire_hsmd_dev_memleak_reply(NULL, found_leak);
|
reply = towire_hsmd_dev_memleak_reply(NULL, found_leak);
|
||||||
return req_reply(conn, c, take(reply));
|
return req_reply(conn, c, take(reply));
|
||||||
}
|
}
|
||||||
#endif /* DEVELOPER */
|
|
||||||
|
|
||||||
u8 *hsmd_status_bad_request(struct hsmd_client *client, const u8 *msg, const char *error)
|
u8 *hsmd_status_bad_request(struct hsmd_client *client, const u8 *msg, const char *error)
|
||||||
{
|
{
|
||||||
|
@ -645,13 +639,10 @@ static struct io_plan *handle_client(struct io_conn *conn, struct client *c)
|
||||||
case WIRE_HSMD_CLIENT_HSMFD:
|
case WIRE_HSMD_CLIENT_HSMFD:
|
||||||
return pass_client_hsmfd(conn, c, c->msg_in);
|
return pass_client_hsmfd(conn, c, c->msg_in);
|
||||||
|
|
||||||
#if DEVELOPER
|
|
||||||
case WIRE_HSMD_DEV_MEMLEAK:
|
case WIRE_HSMD_DEV_MEMLEAK:
|
||||||
return handle_memleak(conn, c, c->msg_in);
|
if (developer)
|
||||||
#else
|
return handle_memleak(conn, c, c->msg_in);
|
||||||
case WIRE_HSMD_DEV_MEMLEAK:
|
/* fall thru */
|
||||||
#endif /* DEVELOPER */
|
|
||||||
|
|
||||||
case WIRE_HSMD_NEW_CHANNEL:
|
case WIRE_HSMD_NEW_CHANNEL:
|
||||||
case WIRE_HSMD_READY_CHANNEL:
|
case WIRE_HSMD_READY_CHANNEL:
|
||||||
case WIRE_HSMD_SIGN_COMMITMENT_TX:
|
case WIRE_HSMD_SIGN_COMMITMENT_TX:
|
||||||
|
@ -745,8 +736,8 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
setup_locale();
|
setup_locale();
|
||||||
|
|
||||||
/* This sets up tmpctx, various DEVELOPER options, backtraces, etc. */
|
/* This sets up tmpctx, various --developer options, backtraces, etc. */
|
||||||
subdaemon_setup(argc, argv);
|
developer = subdaemon_setup(argc, argv);
|
||||||
|
|
||||||
/* A trivial daemon_conn just for writing. */
|
/* A trivial daemon_conn just for writing. */
|
||||||
status_conn = daemon_conn_new(NULL, STDIN_FILENO, NULL, NULL, NULL);
|
status_conn = daemon_conn_new(NULL, STDIN_FILENO, NULL, NULL, NULL);
|
||||||
|
|
|
@ -16,12 +16,10 @@
|
||||||
#include <sodium/utils.h>
|
#include <sodium/utils.h>
|
||||||
#include <wally_psbt.h>
|
#include <wally_psbt.h>
|
||||||
|
|
||||||
#if DEVELOPER
|
|
||||||
/* If they specify --dev-force-privkey it ends up in here. */
|
/* If they specify --dev-force-privkey it ends up in here. */
|
||||||
struct privkey *dev_force_privkey;
|
struct privkey *dev_force_privkey;
|
||||||
/* If they specify --dev-force-bip32-seed it ends up in here. */
|
/* If they specify --dev-force-bip32-seed it ends up in here. */
|
||||||
struct secret *dev_force_bip32_seed;
|
struct secret *dev_force_bip32_seed;
|
||||||
#endif
|
|
||||||
|
|
||||||
/*~ Nobody will ever find it here! hsm_secret is our root secret, the bip32
|
/*~ Nobody will ever find it here! hsm_secret is our root secret, the bip32
|
||||||
* tree, bolt12 payer_id keys and derived_secret are derived from that, and
|
* tree, bolt12 payer_id keys and derived_secret are derived from that, and
|
||||||
|
@ -228,8 +226,7 @@ static void node_key(struct privkey *node_privkey, struct pubkey *node_id)
|
||||||
} while (!secp256k1_ec_pubkey_create(secp256k1_ctx, &node_id->pubkey,
|
} while (!secp256k1_ec_pubkey_create(secp256k1_ctx, &node_id->pubkey,
|
||||||
node_privkey->secret.data));
|
node_privkey->secret.data));
|
||||||
|
|
||||||
#if DEVELOPER
|
/* In --developer mode, we can override with --dev-force-privkey */
|
||||||
/* In DEVELOPER mode, we can override with --dev-force-privkey */
|
|
||||||
if (dev_force_privkey) {
|
if (dev_force_privkey) {
|
||||||
*node_privkey = *dev_force_privkey;
|
*node_privkey = *dev_force_privkey;
|
||||||
if (!secp256k1_ec_pubkey_create(secp256k1_ctx, &node_id->pubkey,
|
if (!secp256k1_ec_pubkey_create(secp256k1_ctx, &node_id->pubkey,
|
||||||
|
@ -237,7 +234,6 @@ static void node_key(struct privkey *node_privkey, struct pubkey *node_id)
|
||||||
hsmd_status_failed(STATUS_FAIL_INTERNAL_ERROR,
|
hsmd_status_failed(STATUS_FAIL_INTERNAL_ERROR,
|
||||||
"Failed to derive pubkey for dev_force_privkey");
|
"Failed to derive pubkey for dev_force_privkey");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*~ This returns the secret key for this node. */
|
/*~ This returns the secret key for this node. */
|
||||||
|
@ -2053,8 +2049,7 @@ u8 *hsmd_init(struct secret hsm_secret,
|
||||||
bip32_key_version.bip32_privkey_version,
|
bip32_key_version.bip32_privkey_version,
|
||||||
0, &master_extkey) != WALLY_OK);
|
0, &master_extkey) != WALLY_OK);
|
||||||
|
|
||||||
#if DEVELOPER
|
/* In --developer mode, we can override with --dev-force-bip32-seed */
|
||||||
/* In DEVELOPER mode, we can override with --dev-force-bip32-seed */
|
|
||||||
if (dev_force_bip32_seed) {
|
if (dev_force_bip32_seed) {
|
||||||
if (bip32_key_from_seed(dev_force_bip32_seed->data,
|
if (bip32_key_from_seed(dev_force_bip32_seed->data,
|
||||||
sizeof(dev_force_bip32_seed->data),
|
sizeof(dev_force_bip32_seed->data),
|
||||||
|
@ -2063,7 +2058,6 @@ u8 *hsmd_init(struct secret hsm_secret,
|
||||||
hsmd_status_failed(STATUS_FAIL_INTERNAL_ERROR,
|
hsmd_status_failed(STATUS_FAIL_INTERNAL_ERROR,
|
||||||
"Can't derive bip32 master key");
|
"Can't derive bip32 master key");
|
||||||
}
|
}
|
||||||
#endif /* DEVELOPER */
|
|
||||||
|
|
||||||
/* BIP 32:
|
/* BIP 32:
|
||||||
*
|
*
|
||||||
|
|
|
@ -89,4 +89,9 @@ void hsmd_status_failed(enum status_failreason code,
|
||||||
bool hsmd_check_client_capabilities(struct hsmd_client *client,
|
bool hsmd_check_client_capabilities(struct hsmd_client *client,
|
||||||
enum hsmd_wire t);
|
enum hsmd_wire t);
|
||||||
|
|
||||||
|
/* If they specify --dev-force-privkey it ends up in here. */
|
||||||
|
extern struct privkey *dev_force_privkey;
|
||||||
|
/* If they specify --dev-force-bip32-seed it ends up in here. */
|
||||||
|
extern struct secret *dev_force_bip32_seed;
|
||||||
|
|
||||||
#endif /* LIGHTNING_HSMD_LIBHSMD_H */
|
#endif /* LIGHTNING_HSMD_LIBHSMD_H */
|
||||||
|
|
Loading…
Add table
Reference in a new issue