Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Offers initial cleanups #5633

Merged
Next Next commit
lightningd: have makesecret take hex or string (just like `data…
…store`)

Changelog-Added: JSON-RPC: `makesecret` can take a string argument instead of hex.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
  • Loading branch information
rustyrussell committed Sep 29, 2022
commit 8b62249cbed484c31d4a915f5d0c100c6954fa03
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 <<aditya.sharma20111@gmail.com>> 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