Skip to content

Commit

Permalink
lightningd: have makesecret take hex or string (just like `data…
Browse files Browse the repository at this point in the history
…store`)

Changelog-Added: JSON-RPC: `makesecret` can take a string argument instead of hex.
Signed-off-by: Rusty Russell <[email protected]>
  • Loading branch information
rustyrussell committed Sep 29, 2022
1 parent 6adb1e0 commit 49fe1c8
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 13 deletions.
10 changes: 3 additions & 7 deletions doc/lightning-makesecret.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ lightning-makesecret -- Command for deriving pseudorandom key from HSM
SYNOPSIS
--------

**makesecret** *hex*
**makesecret** [*hex*] [*string*]

DESCRIPTION
-----------

The **makesecret** RPC command derives a secret key from the HSM_secret.

The *hex* can be any hex data.
One of *hex* or *string* must be specified: *hex* can be any hex data,
*string* is a UTF-8 string interpreted literally.

RETURN VALUE
------------
Expand All @@ -32,11 +33,6 @@ AUTHOR

Aditya <<[email protected]>> is mainly responsible.

SEE ALSO
--------

lightning-getsharedsecret(7)

RESOURCES
---------

Expand Down
8 changes: 5 additions & 3 deletions doc/schemas/makesecret.request.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"additionalProperties": false,
"required": [
"hex"
],
"required": [],
"properties": {
"hex": {
"type": "hex",
"description": "This will be used for deriving the secret"
},
"string": {
"type": "string",
"description": "This will be used for deriving the secret"
}
}
}
20 changes: 17 additions & 3 deletions lightningd/hsm_control.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,16 +131,30 @@ static struct command_result *json_makesecret(struct command *cmd,
const jsmntok_t *obj UNNEEDED,
const jsmntok_t *params)
{
u8 *info;
u8 *data;
const char *strdata;
struct json_stream *response;
struct secret secret;

if (!param(cmd, buffer, params,
p_req("hex", param_bin_from_hex, &info),
p_opt("hex", param_bin_from_hex, &data),
p_opt("string", param_string, &strdata),
NULL))
return command_param_failed();

u8 *msg = towire_hsmd_derive_secret(cmd, info);
if (strdata) {
if (data)
return command_fail(cmd, JSONRPC2_INVALID_PARAMS,
"Cannot have both hex and string");
data = tal_dup_arr(cmd, u8, (u8 *)strdata, strlen(strdata), 0);
} else {
if (!data)
return command_fail(cmd, JSONRPC2_INVALID_PARAMS,
"Must have either hex or string");
}


u8 *msg = towire_hsmd_derive_secret(cmd, data);
if (!wire_sync_write(cmd->ld->hsm_fd, take(msg)))
return command_fail(cmd, LIGHTNINGD,
"Could not write to HSM: %s", strerror(errno));
Expand Down
4 changes: 4 additions & 0 deletions tests/test_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -2281,6 +2281,10 @@ def test_makesecret(node_factory):
assert l1.rpc.makesecret(hex="736362207365637265")["secret"] != secret
assert l1.rpc.makesecret(hex="7363622073656372657401")["secret"] != secret

# Using string works!
assert l1.rpc.makesecret(string="scb secret")["secret"] == secret
assert l1.rpc.makesecret(None, "scb secret")["secret"] == secret


def test_staticbackup(node_factory):
"""
Expand Down

0 comments on commit 49fe1c8

Please sign in to comment.