Compare commits
1 Commits
e7d8b49ecc
...
v0.0.11
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c51e261dd |
@@ -3,6 +3,21 @@
|
|||||||
|
|
||||||
#include "../resources/nostr_core_lib/cjson/cJSON.h"
|
#include "../resources/nostr_core_lib/cjson/cJSON.h"
|
||||||
|
|
||||||
|
/* Selector for key derivation/role in n_signer requests. */
|
||||||
|
typedef struct {
|
||||||
|
int has_nostr_index;
|
||||||
|
int nostr_index;
|
||||||
|
char role[64];
|
||||||
|
} nt_nsigner_selector_t;
|
||||||
|
|
||||||
|
static inline nt_nsigner_selector_t nsigner_selector_default(void) {
|
||||||
|
nt_nsigner_selector_t s;
|
||||||
|
s.has_nostr_index = 1;
|
||||||
|
s.nostr_index = 0;
|
||||||
|
s.role[0] = '\0';
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
/* Error codes */
|
/* Error codes */
|
||||||
#define NT_NSIGNER_OK 0
|
#define NT_NSIGNER_OK 0
|
||||||
#define NT_NSIGNER_E_IO -1
|
#define NT_NSIGNER_E_IO -1
|
||||||
@@ -39,42 +54,42 @@ int nsigner_rpc(int fd, const cJSON *request, cJSON **response_out, int read_tim
|
|||||||
* socket_name: without '@' prefix.
|
* socket_name: without '@' prefix.
|
||||||
* role: the role selector string (e.g. "main").
|
* role: the role selector string (e.g. "main").
|
||||||
*/
|
*/
|
||||||
int nsigner_get_public_key(const char *socket_name, const char *role, char *out_hex_65);
|
int nsigner_get_public_key(const char *socket_name, const nt_nsigner_selector_t *selector, char *out_hex_65);
|
||||||
|
|
||||||
int nsigner_sign_event(const char *socket_name, const char *role,
|
int nsigner_sign_event(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *unsigned_event_json, char **signed_event_json_out);
|
const char *unsigned_event_json, char **signed_event_json_out);
|
||||||
|
|
||||||
int nsigner_nip04_encrypt(const char *socket_name, const char *role,
|
int nsigner_nip04_encrypt(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *plaintext, char **cipher_out);
|
const char *peer_pub_hex, const char *plaintext, char **cipher_out);
|
||||||
|
|
||||||
int nsigner_nip04_decrypt(const char *socket_name, const char *role,
|
int nsigner_nip04_decrypt(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *ciphertext, char **plain_out);
|
const char *peer_pub_hex, const char *ciphertext, char **plain_out);
|
||||||
|
|
||||||
int nsigner_nip44_encrypt(const char *socket_name, const char *role,
|
int nsigner_nip44_encrypt(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *plaintext, char **cipher_out);
|
const char *peer_pub_hex, const char *plaintext, char **cipher_out);
|
||||||
|
|
||||||
int nsigner_nip44_decrypt(const char *socket_name, const char *role,
|
int nsigner_nip44_decrypt(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *ciphertext, char **plain_out);
|
const char *peer_pub_hex, const char *ciphertext, char **plain_out);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* URL helpers for FIPS/TCP transport.
|
* URL helpers for FIPS/TCP transport.
|
||||||
* URL format: http://host:port (path/query ignored if present).
|
* URL format: http://host:port (path/query ignored if present).
|
||||||
*/
|
*/
|
||||||
int nsigner_get_public_key_url(const char *url, const char *role, char *out_hex_65);
|
int nsigner_get_public_key_url(const char *url, const nt_nsigner_selector_t *selector, char *out_hex_65);
|
||||||
|
|
||||||
int nsigner_sign_event_url(const char *url, const char *role,
|
int nsigner_sign_event_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *unsigned_event_json, char **signed_event_json_out);
|
const char *unsigned_event_json, char **signed_event_json_out);
|
||||||
|
|
||||||
int nsigner_nip04_encrypt_url(const char *url, const char *role,
|
int nsigner_nip04_encrypt_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *plaintext, char **cipher_out);
|
const char *peer_pub_hex, const char *plaintext, char **cipher_out);
|
||||||
|
|
||||||
int nsigner_nip04_decrypt_url(const char *url, const char *role,
|
int nsigner_nip04_decrypt_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *ciphertext, char **plain_out);
|
const char *peer_pub_hex, const char *ciphertext, char **plain_out);
|
||||||
|
|
||||||
int nsigner_nip44_encrypt_url(const char *url, const char *role,
|
int nsigner_nip44_encrypt_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *plaintext, char **cipher_out);
|
const char *peer_pub_hex, const char *plaintext, char **cipher_out);
|
||||||
|
|
||||||
int nsigner_nip44_decrypt_url(const char *url, const char *role,
|
int nsigner_nip44_decrypt_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *ciphertext, char **plain_out);
|
const char *peer_pub_hex, const char *ciphertext, char **plain_out);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -84,39 +99,39 @@ int nsigner_nip44_decrypt_url(const char *url, const char *role,
|
|||||||
*/
|
*/
|
||||||
int nsigner_qrexec_get_public_key(const char *target_qube,
|
int nsigner_qrexec_get_public_key(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
char *out_hex_65);
|
char *out_hex_65);
|
||||||
|
|
||||||
int nsigner_qrexec_sign_event(const char *target_qube,
|
int nsigner_qrexec_sign_event(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *unsigned_event_json,
|
const char *unsigned_event_json,
|
||||||
char **signed_event_json_out);
|
char **signed_event_json_out);
|
||||||
|
|
||||||
int nsigner_qrexec_nip04_encrypt(const char *target_qube,
|
int nsigner_qrexec_nip04_encrypt(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex,
|
const char *peer_pub_hex,
|
||||||
const char *plaintext,
|
const char *plaintext,
|
||||||
char **cipher_out);
|
char **cipher_out);
|
||||||
|
|
||||||
int nsigner_qrexec_nip04_decrypt(const char *target_qube,
|
int nsigner_qrexec_nip04_decrypt(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex,
|
const char *peer_pub_hex,
|
||||||
const char *ciphertext,
|
const char *ciphertext,
|
||||||
char **plain_out);
|
char **plain_out);
|
||||||
|
|
||||||
int nsigner_qrexec_nip44_encrypt(const char *target_qube,
|
int nsigner_qrexec_nip44_encrypt(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex,
|
const char *peer_pub_hex,
|
||||||
const char *plaintext,
|
const char *plaintext,
|
||||||
char **cipher_out);
|
char **cipher_out);
|
||||||
|
|
||||||
int nsigner_qrexec_nip44_decrypt(const char *target_qube,
|
int nsigner_qrexec_nip44_decrypt(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex,
|
const char *peer_pub_hex,
|
||||||
const char *ciphertext,
|
const char *ciphertext,
|
||||||
char **plain_out);
|
char **plain_out);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define SIGNER_H
|
#define SIGNER_H
|
||||||
|
|
||||||
#include "../resources/nostr_core_lib/cjson/cJSON.h"
|
#include "../resources/nostr_core_lib/cjson/cJSON.h"
|
||||||
|
#include "nsigner_client.h"
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
@@ -18,16 +19,17 @@ typedef struct {
|
|||||||
char qrexec_target[128];
|
char qrexec_target[128];
|
||||||
char qrexec_service[128];
|
char qrexec_service[128];
|
||||||
char endpoint_url[256];
|
char endpoint_url[256];
|
||||||
char role[64];
|
nt_nsigner_selector_t selector;
|
||||||
} nt_signer_t;
|
} nt_signer_t;
|
||||||
|
|
||||||
extern nt_signer_t g_signer;
|
extern nt_signer_t g_signer;
|
||||||
|
|
||||||
void signer_init(void);
|
void signer_init(void);
|
||||||
int signer_init_local(void);
|
int signer_init_local(void);
|
||||||
int signer_init_nsigner(const char *socket_name);
|
void signer_set_selector(int has_index, int index, const char *role);
|
||||||
int signer_init_nsigner_qrexec(const char *target_qube, const char *service_name);
|
int signer_init_nsigner(const char *socket_name, const nt_nsigner_selector_t *selector);
|
||||||
int signer_init_nsigner_url(const char *endpoint_url);
|
int signer_init_nsigner_qrexec(const char *target_qube, const char *service_name, const nt_nsigner_selector_t *selector);
|
||||||
|
int signer_init_nsigner_url(const char *endpoint_url, const nt_nsigner_selector_t *selector);
|
||||||
|
|
||||||
int signer_create_and_sign(int kind,
|
int signer_create_and_sign(int kind,
|
||||||
const char *content,
|
const char *content,
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
*/
|
*/
|
||||||
#define NT_VERSION_MAJOR 0
|
#define NT_VERSION_MAJOR 0
|
||||||
#define NT_VERSION_MINOR 0
|
#define NT_VERSION_MINOR 0
|
||||||
#define NT_VERSION_PATCH 10
|
#define NT_VERSION_PATCH 11
|
||||||
#define NT_VERSION "v0.0.10"
|
#define NT_VERSION "v0.0.11"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -196,6 +196,9 @@ void menu_login(void) {
|
|||||||
int name_count = 0;
|
int name_count = 0;
|
||||||
char pubkey_hex[65] = {0};
|
char pubkey_hex[65] = {0};
|
||||||
int selected = 0;
|
int selected = 0;
|
||||||
|
nt_nsigner_selector_t selector = nsigner_selector_default();
|
||||||
|
char idxbuf[32];
|
||||||
|
int nostr_index = 0;
|
||||||
|
|
||||||
tui_print("Searching for running n_signer instances...");
|
tui_print("Searching for running n_signer instances...");
|
||||||
|
|
||||||
@@ -210,20 +213,31 @@ void menu_login(void) {
|
|||||||
selected = 0;
|
selected = 0;
|
||||||
} else {
|
} else {
|
||||||
int idx;
|
int idx;
|
||||||
char idxbuf[16];
|
char pickbuf[16];
|
||||||
tui_print("Found %d n_signer instances:", name_count);
|
tui_print("Found %d n_signer instances:", name_count);
|
||||||
for (idx = 0; idx < name_count; idx++) {
|
for (idx = 0; idx < name_count; idx++) {
|
||||||
tui_print(" [%d] @%s", idx, names[idx]);
|
tui_print(" [%d] @%s", idx, names[idx]);
|
||||||
}
|
}
|
||||||
tui_get_line("Select (0) >", idxbuf, (int)sizeof(idxbuf));
|
tui_get_line("Select (0) >", pickbuf, (int)sizeof(pickbuf));
|
||||||
selected = (idxbuf[0] != '\0') ? atoi(idxbuf) : 0;
|
selected = (pickbuf[0] != '\0') ? atoi(pickbuf) : 0;
|
||||||
if (selected < 0 || selected >= name_count) {
|
if (selected < 0 || selected >= name_count) {
|
||||||
selected = 0;
|
selected = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tui_get_line("Seed phrase index (0) >", idxbuf, (int)sizeof(idxbuf));
|
||||||
|
if (idxbuf[0] != '\0') {
|
||||||
|
nostr_index = atoi(idxbuf);
|
||||||
|
if (nostr_index < 0) {
|
||||||
|
nostr_index = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selector.has_nostr_index = 1;
|
||||||
|
selector.nostr_index = nostr_index;
|
||||||
|
selector.role[0] = '\0';
|
||||||
|
|
||||||
tui_print("Waiting for n_signer approval...");
|
tui_print("Waiting for n_signer approval...");
|
||||||
if (nsigner_get_public_key(names[selected], "main", pubkey_hex) != 0) {
|
if (nsigner_get_public_key(names[selected], &selector, pubkey_hex) != 0) {
|
||||||
int i;
|
int i;
|
||||||
tui_print("Failed to get public key from n_signer (denied or error).");
|
tui_print("Failed to get public key from n_signer (denied or error).");
|
||||||
for (i = 0; i < name_count; i++) {
|
for (i = 0; i < name_count; i++) {
|
||||||
@@ -234,7 +248,7 @@ void menu_login(void) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
signer_init_nsigner(names[selected]);
|
signer_init_nsigner(names[selected], &selector);
|
||||||
|
|
||||||
snprintf(g_state.npub_hex, sizeof(g_state.npub_hex), "%s", pubkey_hex);
|
snprintf(g_state.npub_hex, sizeof(g_state.npub_hex), "%s", pubkey_hex);
|
||||||
{
|
{
|
||||||
@@ -273,6 +287,9 @@ void menu_login(void) {
|
|||||||
char pubkey_hex[65] = {0};
|
char pubkey_hex[65] = {0};
|
||||||
char endpoint_url[256];
|
char endpoint_url[256];
|
||||||
const char *saved_endpoint = db_get_local("nsigner_url_endpoint");
|
const char *saved_endpoint = db_get_local("nsigner_url_endpoint");
|
||||||
|
nt_nsigner_selector_t selector = nsigner_selector_default();
|
||||||
|
char idxbuf[32];
|
||||||
|
int nostr_index = 0;
|
||||||
|
|
||||||
snprintf(endpoint_url, sizeof(endpoint_url), "%s", (saved_endpoint && saved_endpoint[0] != '\0') ? saved_endpoint : "");
|
snprintf(endpoint_url, sizeof(endpoint_url), "%s", (saved_endpoint && saved_endpoint[0] != '\0') ? saved_endpoint : "");
|
||||||
tui_get_line("Signer URL (http://<npub>.fips:8080) >", endpoint_url, (int)sizeof(endpoint_url));
|
tui_get_line("Signer URL (http://<npub>.fips:8080) >", endpoint_url, (int)sizeof(endpoint_url));
|
||||||
@@ -286,16 +303,27 @@ void menu_login(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tui_get_line("Seed phrase index (0) >", idxbuf, (int)sizeof(idxbuf));
|
||||||
|
if (idxbuf[0] != '\0') {
|
||||||
|
nostr_index = atoi(idxbuf);
|
||||||
|
if (nostr_index < 0) {
|
||||||
|
nostr_index = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selector.has_nostr_index = 1;
|
||||||
|
selector.nostr_index = nostr_index;
|
||||||
|
selector.role[0] = '\0';
|
||||||
|
|
||||||
tui_print("Connecting to n_signer URL: %s", endpoint_url);
|
tui_print("Connecting to n_signer URL: %s", endpoint_url);
|
||||||
tui_print("Waiting for n_signer approval...");
|
tui_print("Waiting for n_signer approval...");
|
||||||
|
|
||||||
if (nsigner_get_public_key_url(endpoint_url, "main", pubkey_hex) != 0) {
|
if (nsigner_get_public_key_url(endpoint_url, &selector, pubkey_hex) != 0) {
|
||||||
tui_print("Failed to get public key from n_signer URL (denied or error).");
|
tui_print("Failed to get public key from n_signer URL (denied or error).");
|
||||||
tui_get_line(">", input, (int)sizeof(input));
|
tui_get_line(">", input, (int)sizeof(input));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (signer_init_nsigner_url(endpoint_url) != 0) {
|
if (signer_init_nsigner_url(endpoint_url, &selector) != 0) {
|
||||||
tui_print("Failed to initialize URL signer mode.");
|
tui_print("Failed to initialize URL signer mode.");
|
||||||
tui_get_line(">", input, (int)sizeof(input));
|
tui_get_line(">", input, (int)sizeof(input));
|
||||||
continue;
|
continue;
|
||||||
@@ -333,6 +361,9 @@ void menu_login(void) {
|
|||||||
char target_qube[128];
|
char target_qube[128];
|
||||||
char service_name[128];
|
char service_name[128];
|
||||||
const char *saved_target = db_get_local("nsigner_qrexec_target");
|
const char *saved_target = db_get_local("nsigner_qrexec_target");
|
||||||
|
nt_nsigner_selector_t selector = nsigner_selector_default();
|
||||||
|
char idxbuf[32];
|
||||||
|
int nostr_index = 0;
|
||||||
|
|
||||||
snprintf(target_qube, sizeof(target_qube), "%s", (saved_target && saved_target[0] != '\0') ? saved_target : "nsigner-vault");
|
snprintf(target_qube, sizeof(target_qube), "%s", (saved_target && saved_target[0] != '\0') ? saved_target : "nsigner-vault");
|
||||||
snprintf(service_name, sizeof(service_name), "%s", "qubes.NsignerRpc");
|
snprintf(service_name, sizeof(service_name), "%s", "qubes.NsignerRpc");
|
||||||
@@ -347,16 +378,27 @@ void menu_login(void) {
|
|||||||
snprintf(service_name, sizeof(service_name), "%s", "qubes.NsignerRpc");
|
snprintf(service_name, sizeof(service_name), "%s", "qubes.NsignerRpc");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tui_get_line("Seed phrase index (0) >", idxbuf, (int)sizeof(idxbuf));
|
||||||
|
if (idxbuf[0] != '\0') {
|
||||||
|
nostr_index = atoi(idxbuf);
|
||||||
|
if (nostr_index < 0) {
|
||||||
|
nostr_index = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selector.has_nostr_index = 1;
|
||||||
|
selector.nostr_index = nostr_index;
|
||||||
|
selector.role[0] = '\0';
|
||||||
|
|
||||||
tui_print("Calling qrexec service %s in %s...", service_name, target_qube);
|
tui_print("Calling qrexec service %s in %s...", service_name, target_qube);
|
||||||
tui_print("Waiting for n_signer approval...");
|
tui_print("Waiting for n_signer approval...");
|
||||||
|
|
||||||
if (nsigner_qrexec_get_public_key(target_qube, service_name, "main", pubkey_hex) != 0) {
|
if (nsigner_qrexec_get_public_key(target_qube, service_name, &selector, pubkey_hex) != 0) {
|
||||||
tui_print("Failed to get public key via qrexec (denied or error).");
|
tui_print("Failed to get public key via qrexec (denied or error).");
|
||||||
tui_get_line(">", input, (int)sizeof(input));
|
tui_get_line(">", input, (int)sizeof(input));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (signer_init_nsigner_qrexec(target_qube, service_name) != 0) {
|
if (signer_init_nsigner_qrexec(target_qube, service_name, &selector) != 0) {
|
||||||
tui_print("Failed to initialize qrexec signer mode.");
|
tui_print("Failed to initialize qrexec signer mode.");
|
||||||
tui_get_line(">", input, (int)sizeof(input));
|
tui_get_line(">", input, (int)sizeof(input));
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -29,13 +29,28 @@ void menu_profile(void) {
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
||||||
tui_print("Signer: n_signer (@%s)", g_signer.socket_name);
|
tui_print("Signer: n_signer (@%s)", g_signer.socket_name);
|
||||||
|
if (g_signer.selector.has_nostr_index) {
|
||||||
|
tui_print("Signer selector: nostr_index=%d", g_signer.selector.nostr_index);
|
||||||
|
} else {
|
||||||
|
tui_print("Signer selector: role=%s", g_signer.selector.role[0] ? g_signer.selector.role : "main");
|
||||||
|
}
|
||||||
} else if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
} else if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
||||||
tui_print("Signer: n_signer qrexec");
|
tui_print("Signer: n_signer qrexec");
|
||||||
tui_print("Signer target: %s", g_signer.qrexec_target);
|
tui_print("Signer target: %s", g_signer.qrexec_target);
|
||||||
tui_print("Signer service: %s", g_signer.qrexec_service);
|
tui_print("Signer service: %s", g_signer.qrexec_service);
|
||||||
|
if (g_signer.selector.has_nostr_index) {
|
||||||
|
tui_print("Signer selector: nostr_index=%d", g_signer.selector.nostr_index);
|
||||||
|
} else {
|
||||||
|
tui_print("Signer selector: role=%s", g_signer.selector.role[0] ? g_signer.selector.role : "main");
|
||||||
|
}
|
||||||
} else if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
} else if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
||||||
tui_print("Signer: n_signer URL");
|
tui_print("Signer: n_signer URL");
|
||||||
tui_print("Signer endpoint: %s", g_signer.endpoint_url);
|
tui_print("Signer endpoint: %s", g_signer.endpoint_url);
|
||||||
|
if (g_signer.selector.has_nostr_index) {
|
||||||
|
tui_print("Signer selector: nostr_index=%d", g_signer.selector.nostr_index);
|
||||||
|
} else {
|
||||||
|
tui_print("Signer selector: role=%s", g_signer.selector.role[0] ? g_signer.selector.role : "main");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
tui_print("nsecHex: %s", g_state.nsec_hex);
|
tui_print("nsecHex: %s", g_state.nsec_hex);
|
||||||
tui_print("nsec: %s", g_state.nsec_bech32);
|
tui_print("nsec: %s", g_state.nsec_bech32);
|
||||||
|
|||||||
113
src/net.c
113
src/net.c
@@ -8,6 +8,7 @@
|
|||||||
#include "../resources/nostr_core_lib/nostr_core/nip042.h"
|
#include "../resources/nostr_core_lib/nostr_core/nip042.h"
|
||||||
#include "../resources/nostr_core_lib/nostr_core/utils.h"
|
#include "../resources/nostr_core_lib/nostr_core/utils.h"
|
||||||
#include "../resources/nostr_core_lib/nostr_websocket/nostr_websocket_tls.h"
|
#include "../resources/nostr_core_lib/nostr_websocket/nostr_websocket_tls.h"
|
||||||
|
#include "../resources/nostr_core_lib/nostr_core/nostr_core.h"
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@@ -19,7 +20,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define NT_SUB_ID "sub1"
|
#define NT_SUB_ID "sub1"
|
||||||
#define NT_WS_BUFFER_SIZE 65536
|
#define NT_WS_BUFFER_SIZE 262144
|
||||||
|
|
||||||
static long long nt_now_ms(void) {
|
static long long nt_now_ms(void) {
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
@@ -685,13 +686,12 @@ int nt_query_sync_verbose(const char *filter_json,
|
|||||||
char ***events_out,
|
char ***events_out,
|
||||||
int *event_count) {
|
int *event_count) {
|
||||||
cJSON *filter = NULL;
|
cJSON *filter = NULL;
|
||||||
|
nostr_relay_pool_t *pool = NULL;
|
||||||
|
cJSON **pool_events = NULL;
|
||||||
|
int pool_event_count = 0;
|
||||||
char **events = NULL;
|
char **events = NULL;
|
||||||
char **seen_ids = NULL;
|
|
||||||
int events_n = 0;
|
int events_n = 0;
|
||||||
int events_cap = 0;
|
int events_cap = 0;
|
||||||
int seen_n = 0;
|
|
||||||
int seen_cap = 0;
|
|
||||||
int success_relays = 0;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!events_out || !event_count || !filter_json || !relay_urls || relay_count <= 0) {
|
if (!events_out || !event_count || !filter_json || !relay_urls || relay_count <= 0) {
|
||||||
@@ -708,59 +708,62 @@ int nt_query_sync_verbose(const char *filter_json,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < relay_count; i++) {
|
pool = nostr_relay_pool_create(NULL);
|
||||||
const char *relay = relay_urls[i];
|
if (!pool) {
|
||||||
int rc;
|
cJSON_Delete(filter);
|
||||||
const char *reason = "unknown";
|
fprintf(stderr, "query: failed to create relay pool\n");
|
||||||
|
|
||||||
if (!relay || relay[0] == '\0') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (verbose && phase_label) {
|
|
||||||
fprintf(stderr, "%s: attempting relay %d/%d %s\n", phase_label, i + 1, relay_count, relay);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = nt_query_one_relay(relay,
|
|
||||||
filter,
|
|
||||||
timeout_ms,
|
|
||||||
verbose,
|
|
||||||
phase_label,
|
|
||||||
&events,
|
|
||||||
&events_n,
|
|
||||||
&events_cap,
|
|
||||||
&seen_ids,
|
|
||||||
&seen_n,
|
|
||||||
&seen_cap,
|
|
||||||
&reason);
|
|
||||||
if (rc < 0) {
|
|
||||||
if (verbose && phase_label) {
|
|
||||||
fprintf(stderr, "%s: failed %s (%s)\n", phase_label, relay, reason ? reason : "error");
|
|
||||||
}
|
|
||||||
nt_free_string_array(events, events_n);
|
|
||||||
nt_free_string_array(seen_ids, seen_n);
|
|
||||||
cJSON_Delete(filter);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc > 0) {
|
|
||||||
success_relays++;
|
|
||||||
if (verbose && phase_label) {
|
|
||||||
fprintf(stderr, "%s: connected %s (%s)\n", phase_label, relay, reason ? reason : "ok");
|
|
||||||
}
|
|
||||||
} else if (verbose && phase_label) {
|
|
||||||
fprintf(stderr, "%s: failed %s (%s)\n", phase_label, relay, reason ? reason : "failed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nt_free_string_array(seen_ids, seen_n);
|
|
||||||
cJSON_Delete(filter);
|
|
||||||
|
|
||||||
if (success_relays == 0) {
|
|
||||||
nt_free_string_array(events, events_n);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (verbose && phase_label) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: querying %d relays via nostr_core relay pool\n",
|
||||||
|
phase_label,
|
||||||
|
relay_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
pool_events = nostr_relay_pool_query_sync(pool,
|
||||||
|
relay_urls,
|
||||||
|
relay_count,
|
||||||
|
filter,
|
||||||
|
&pool_event_count,
|
||||||
|
timeout_ms);
|
||||||
|
|
||||||
|
cJSON_Delete(filter);
|
||||||
|
filter = NULL;
|
||||||
|
|
||||||
|
if (!pool_events || pool_event_count <= 0) {
|
||||||
|
nostr_relay_pool_destroy(pool);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < pool_event_count; i++) {
|
||||||
|
char *event_str = cJSON_PrintUnformatted(pool_events[i]);
|
||||||
|
if (!event_str || nt_push_string(&events, &events_n, &events_cap, event_str) != 0) {
|
||||||
|
free(event_str);
|
||||||
|
nt_free_string_array(events, events_n);
|
||||||
|
for (i = 0; i < pool_event_count; i++) {
|
||||||
|
cJSON_Delete(pool_events[i]);
|
||||||
|
}
|
||||||
|
free(pool_events);
|
||||||
|
nostr_relay_pool_destroy(pool);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < pool_event_count; i++) {
|
||||||
|
cJSON_Delete(pool_events[i]);
|
||||||
|
}
|
||||||
|
free(pool_events);
|
||||||
|
|
||||||
|
if (verbose && phase_label) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: relay pool collected %d unique events\n",
|
||||||
|
phase_label,
|
||||||
|
events_n);
|
||||||
|
}
|
||||||
|
|
||||||
|
nostr_relay_pool_destroy(pool);
|
||||||
*events_out = events;
|
*events_out = events;
|
||||||
*event_count = events_n;
|
*event_count = events_n;
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -448,8 +448,41 @@ int nsigner_rpc(int fd, const cJSON *request, cJSON **response_out, int read_tim
|
|||||||
return NT_NSIGNER_OK;
|
return NT_NSIGNER_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cJSON *nsigner_selector_to_json(const nt_nsigner_selector_t *selector) {
|
||||||
|
nt_nsigner_selector_t fallback;
|
||||||
|
const nt_nsigner_selector_t *sel = selector;
|
||||||
|
cJSON *selector_obj;
|
||||||
|
|
||||||
|
if (!sel) {
|
||||||
|
fallback = nsigner_selector_default();
|
||||||
|
sel = &fallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
selector_obj = cJSON_CreateObject();
|
||||||
|
if (!selector_obj) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sel->has_nostr_index) {
|
||||||
|
if (!cJSON_AddNumberToObject(selector_obj, "nostr_index", sel->nostr_index)) {
|
||||||
|
cJSON_Delete(selector_obj);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return selector_obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cJSON_AddStringToObject(selector_obj,
|
||||||
|
"role",
|
||||||
|
(sel->role[0] != '\0') ? sel->role : "main")) {
|
||||||
|
cJSON_Delete(selector_obj);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return selector_obj;
|
||||||
|
}
|
||||||
|
|
||||||
static int nsigner_call_string_method(const char *socket_name,
|
static int nsigner_call_string_method(const char *socket_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *method,
|
const char *method,
|
||||||
const char **args,
|
const char **args,
|
||||||
int arg_count,
|
int arg_count,
|
||||||
@@ -457,7 +490,7 @@ static int nsigner_call_string_method(const char *socket_name,
|
|||||||
int fd = -1;
|
int fd = -1;
|
||||||
cJSON *request = NULL;
|
cJSON *request = NULL;
|
||||||
cJSON *params = NULL;
|
cJSON *params = NULL;
|
||||||
cJSON *role_obj = NULL;
|
cJSON *selector_obj = NULL;
|
||||||
cJSON *response = NULL;
|
cJSON *response = NULL;
|
||||||
cJSON *result_item;
|
cJSON *result_item;
|
||||||
int rc;
|
int rc;
|
||||||
@@ -494,15 +527,14 @@ static int nsigner_call_string_method(const char *socket_name,
|
|||||||
cJSON_AddItemToArray(params, cJSON_CreateString(args[i]));
|
cJSON_AddItemToArray(params, cJSON_CreateString(args[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
role_obj = cJSON_CreateObject();
|
selector_obj = nsigner_selector_to_json(selector);
|
||||||
if (!role_obj) {
|
if (!selector_obj) {
|
||||||
cJSON_Delete(request);
|
cJSON_Delete(request);
|
||||||
cJSON_Delete(params);
|
cJSON_Delete(params);
|
||||||
close(fd);
|
close(fd);
|
||||||
return NT_NSIGNER_E_IO;
|
return NT_NSIGNER_E_IO;
|
||||||
}
|
}
|
||||||
cJSON_AddStringToObject(role_obj, "role", (role && *role) ? role : "main");
|
cJSON_AddItemToArray(params, selector_obj);
|
||||||
cJSON_AddItemToArray(params, role_obj);
|
|
||||||
|
|
||||||
cJSON_AddItemToObject(request, "params", params);
|
cJSON_AddItemToObject(request, "params", params);
|
||||||
|
|
||||||
@@ -526,7 +558,7 @@ static int nsigner_call_string_method(const char *socket_name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int nsigner_call_string_method_url(const char *url,
|
static int nsigner_call_string_method_url(const char *url,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *method,
|
const char *method,
|
||||||
const char **args,
|
const char **args,
|
||||||
int arg_count,
|
int arg_count,
|
||||||
@@ -541,7 +573,7 @@ static int nsigner_call_string_method_url(const char *url,
|
|||||||
if (!url || !method || !result_out || arg_count < 0) {
|
if (!url || !method || !result_out || arg_count < 0) {
|
||||||
return NT_NSIGNER_E_IO;
|
return NT_NSIGNER_E_IO;
|
||||||
}
|
}
|
||||||
(void)role;
|
cJSON *selector_obj = NULL;
|
||||||
*result_out = NULL;
|
*result_out = NULL;
|
||||||
|
|
||||||
fd = nsigner_connect_url(url);
|
fd = nsigner_connect_url(url);
|
||||||
@@ -571,6 +603,15 @@ static int nsigner_call_string_method_url(const char *url,
|
|||||||
cJSON_AddItemToArray(params, cJSON_CreateString(args[i]));
|
cJSON_AddItemToArray(params, cJSON_CreateString(args[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selector_obj = nsigner_selector_to_json(selector);
|
||||||
|
if (!selector_obj) {
|
||||||
|
cJSON_Delete(request);
|
||||||
|
cJSON_Delete(params);
|
||||||
|
close(fd);
|
||||||
|
return NT_NSIGNER_E_IO;
|
||||||
|
}
|
||||||
|
cJSON_AddItemToArray(params, selector_obj);
|
||||||
|
|
||||||
cJSON_AddItemToObject(request, "params", params);
|
cJSON_AddItemToObject(request, "params", params);
|
||||||
|
|
||||||
rc = nsigner_rpc(fd, request, &response, 60000);
|
rc = nsigner_rpc(fd, request, &response, 60000);
|
||||||
@@ -727,14 +768,14 @@ static int nsigner_qrexec_rpc(const char *target_qube,
|
|||||||
|
|
||||||
static int nsigner_qrexec_call_string_method(const char *target_qube,
|
static int nsigner_qrexec_call_string_method(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *method,
|
const char *method,
|
||||||
const char **args,
|
const char **args,
|
||||||
int arg_count,
|
int arg_count,
|
||||||
char **result_out) {
|
char **result_out) {
|
||||||
cJSON *request = NULL;
|
cJSON *request = NULL;
|
||||||
cJSON *params = NULL;
|
cJSON *params = NULL;
|
||||||
cJSON *role_obj = NULL;
|
cJSON *selector_obj = NULL;
|
||||||
cJSON *response = NULL;
|
cJSON *response = NULL;
|
||||||
cJSON *result_item;
|
cJSON *result_item;
|
||||||
int rc;
|
int rc;
|
||||||
@@ -764,14 +805,13 @@ static int nsigner_qrexec_call_string_method(const char *target_qube,
|
|||||||
cJSON_AddItemToArray(params, cJSON_CreateString(args[i]));
|
cJSON_AddItemToArray(params, cJSON_CreateString(args[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
role_obj = cJSON_CreateObject();
|
selector_obj = nsigner_selector_to_json(selector);
|
||||||
if (!role_obj) {
|
if (!selector_obj) {
|
||||||
cJSON_Delete(request);
|
cJSON_Delete(request);
|
||||||
cJSON_Delete(params);
|
cJSON_Delete(params);
|
||||||
return NT_NSIGNER_E_IO;
|
return NT_NSIGNER_E_IO;
|
||||||
}
|
}
|
||||||
cJSON_AddStringToObject(role_obj, "role", (role && *role) ? role : "main");
|
cJSON_AddItemToArray(params, selector_obj);
|
||||||
cJSON_AddItemToArray(params, role_obj);
|
|
||||||
|
|
||||||
cJSON_AddItemToObject(request, "params", params);
|
cJSON_AddItemToObject(request, "params", params);
|
||||||
|
|
||||||
@@ -793,7 +833,7 @@ static int nsigner_qrexec_call_string_method(const char *target_qube,
|
|||||||
return *result_out ? NT_NSIGNER_OK : NT_NSIGNER_E_IO;
|
return *result_out ? NT_NSIGNER_OK : NT_NSIGNER_E_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_get_public_key(const char *socket_name, const char *role, char *out_hex_65) {
|
int nsigner_get_public_key(const char *socket_name, const nt_nsigner_selector_t *selector, char *out_hex_65) {
|
||||||
char *result = NULL;
|
char *result = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
size_t len;
|
size_t len;
|
||||||
@@ -802,7 +842,7 @@ int nsigner_get_public_key(const char *socket_name, const char *role, char *out_
|
|||||||
return NT_NSIGNER_E_IO;
|
return NT_NSIGNER_E_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = nsigner_call_string_method(socket_name, role, "get_public_key", NULL, 0, &result);
|
rc = nsigner_call_string_method(socket_name, selector, "get_public_key", NULL, 0, &result);
|
||||||
if (rc != NT_NSIGNER_OK) {
|
if (rc != NT_NSIGNER_OK) {
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@@ -818,7 +858,7 @@ int nsigner_get_public_key(const char *socket_name, const char *role, char *out_
|
|||||||
return NT_NSIGNER_OK;
|
return NT_NSIGNER_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_sign_event(const char *socket_name, const char *role,
|
int nsigner_sign_event(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *unsigned_event_json, char **signed_event_json_out) {
|
const char *unsigned_event_json, char **signed_event_json_out) {
|
||||||
const char *args[1];
|
const char *args[1];
|
||||||
|
|
||||||
@@ -827,10 +867,10 @@ int nsigner_sign_event(const char *socket_name, const char *role,
|
|||||||
}
|
}
|
||||||
|
|
||||||
args[0] = unsigned_event_json;
|
args[0] = unsigned_event_json;
|
||||||
return nsigner_call_string_method(socket_name, role, "sign_event", args, 1, signed_event_json_out);
|
return nsigner_call_string_method(socket_name, selector, "sign_event", args, 1, signed_event_json_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_nip04_encrypt(const char *socket_name, const char *role,
|
int nsigner_nip04_encrypt(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *plaintext, char **cipher_out) {
|
const char *peer_pub_hex, const char *plaintext, char **cipher_out) {
|
||||||
const char *args[2];
|
const char *args[2];
|
||||||
|
|
||||||
@@ -840,10 +880,10 @@ int nsigner_nip04_encrypt(const char *socket_name, const char *role,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = plaintext;
|
args[1] = plaintext;
|
||||||
return nsigner_call_string_method(socket_name, role, "nip04_encrypt", args, 2, cipher_out);
|
return nsigner_call_string_method(socket_name, selector, "nip04_encrypt", args, 2, cipher_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_nip04_decrypt(const char *socket_name, const char *role,
|
int nsigner_nip04_decrypt(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *ciphertext, char **plain_out) {
|
const char *peer_pub_hex, const char *ciphertext, char **plain_out) {
|
||||||
const char *args[2];
|
const char *args[2];
|
||||||
|
|
||||||
@@ -853,10 +893,10 @@ int nsigner_nip04_decrypt(const char *socket_name, const char *role,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = ciphertext;
|
args[1] = ciphertext;
|
||||||
return nsigner_call_string_method(socket_name, role, "nip04_decrypt", args, 2, plain_out);
|
return nsigner_call_string_method(socket_name, selector, "nip04_decrypt", args, 2, plain_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_nip44_encrypt(const char *socket_name, const char *role,
|
int nsigner_nip44_encrypt(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *plaintext, char **cipher_out) {
|
const char *peer_pub_hex, const char *plaintext, char **cipher_out) {
|
||||||
const char *args[2];
|
const char *args[2];
|
||||||
|
|
||||||
@@ -866,10 +906,10 @@ int nsigner_nip44_encrypt(const char *socket_name, const char *role,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = plaintext;
|
args[1] = plaintext;
|
||||||
return nsigner_call_string_method(socket_name, role, "nip44_encrypt", args, 2, cipher_out);
|
return nsigner_call_string_method(socket_name, selector, "nip44_encrypt", args, 2, cipher_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_nip44_decrypt(const char *socket_name, const char *role,
|
int nsigner_nip44_decrypt(const char *socket_name, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *ciphertext, char **plain_out) {
|
const char *peer_pub_hex, const char *ciphertext, char **plain_out) {
|
||||||
const char *args[2];
|
const char *args[2];
|
||||||
|
|
||||||
@@ -879,10 +919,10 @@ int nsigner_nip44_decrypt(const char *socket_name, const char *role,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = ciphertext;
|
args[1] = ciphertext;
|
||||||
return nsigner_call_string_method(socket_name, role, "nip44_decrypt", args, 2, plain_out);
|
return nsigner_call_string_method(socket_name, selector, "nip44_decrypt", args, 2, plain_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_get_public_key_url(const char *url, const char *role, char *out_hex_65) {
|
int nsigner_get_public_key_url(const char *url, const nt_nsigner_selector_t *selector, char *out_hex_65) {
|
||||||
char *result = NULL;
|
char *result = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
size_t len;
|
size_t len;
|
||||||
@@ -891,7 +931,7 @@ int nsigner_get_public_key_url(const char *url, const char *role, char *out_hex_
|
|||||||
return NT_NSIGNER_E_IO;
|
return NT_NSIGNER_E_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = nsigner_call_string_method_url(url, role, "get_public_key", NULL, 0, &result);
|
rc = nsigner_call_string_method_url(url, selector, "get_public_key", NULL, 0, &result);
|
||||||
if (rc != NT_NSIGNER_OK) {
|
if (rc != NT_NSIGNER_OK) {
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@@ -907,7 +947,7 @@ int nsigner_get_public_key_url(const char *url, const char *role, char *out_hex_
|
|||||||
return NT_NSIGNER_OK;
|
return NT_NSIGNER_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_sign_event_url(const char *url, const char *role,
|
int nsigner_sign_event_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *unsigned_event_json, char **signed_event_json_out) {
|
const char *unsigned_event_json, char **signed_event_json_out) {
|
||||||
const char *args[1];
|
const char *args[1];
|
||||||
|
|
||||||
@@ -916,10 +956,10 @@ int nsigner_sign_event_url(const char *url, const char *role,
|
|||||||
}
|
}
|
||||||
|
|
||||||
args[0] = unsigned_event_json;
|
args[0] = unsigned_event_json;
|
||||||
return nsigner_call_string_method_url(url, role, "sign_event", args, 1, signed_event_json_out);
|
return nsigner_call_string_method_url(url, selector, "sign_event", args, 1, signed_event_json_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_nip04_encrypt_url(const char *url, const char *role,
|
int nsigner_nip04_encrypt_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *plaintext, char **cipher_out) {
|
const char *peer_pub_hex, const char *plaintext, char **cipher_out) {
|
||||||
const char *args[2];
|
const char *args[2];
|
||||||
|
|
||||||
@@ -929,10 +969,10 @@ int nsigner_nip04_encrypt_url(const char *url, const char *role,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = plaintext;
|
args[1] = plaintext;
|
||||||
return nsigner_call_string_method_url(url, role, "nip04_encrypt", args, 2, cipher_out);
|
return nsigner_call_string_method_url(url, selector, "nip04_encrypt", args, 2, cipher_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_nip04_decrypt_url(const char *url, const char *role,
|
int nsigner_nip04_decrypt_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *ciphertext, char **plain_out) {
|
const char *peer_pub_hex, const char *ciphertext, char **plain_out) {
|
||||||
const char *args[2];
|
const char *args[2];
|
||||||
|
|
||||||
@@ -942,10 +982,10 @@ int nsigner_nip04_decrypt_url(const char *url, const char *role,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = ciphertext;
|
args[1] = ciphertext;
|
||||||
return nsigner_call_string_method_url(url, role, "nip04_decrypt", args, 2, plain_out);
|
return nsigner_call_string_method_url(url, selector, "nip04_decrypt", args, 2, plain_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_nip44_encrypt_url(const char *url, const char *role,
|
int nsigner_nip44_encrypt_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *plaintext, char **cipher_out) {
|
const char *peer_pub_hex, const char *plaintext, char **cipher_out) {
|
||||||
const char *args[2];
|
const char *args[2];
|
||||||
|
|
||||||
@@ -955,10 +995,10 @@ int nsigner_nip44_encrypt_url(const char *url, const char *role,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = plaintext;
|
args[1] = plaintext;
|
||||||
return nsigner_call_string_method_url(url, role, "nip44_encrypt", args, 2, cipher_out);
|
return nsigner_call_string_method_url(url, selector, "nip44_encrypt", args, 2, cipher_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_nip44_decrypt_url(const char *url, const char *role,
|
int nsigner_nip44_decrypt_url(const char *url, const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex, const char *ciphertext, char **plain_out) {
|
const char *peer_pub_hex, const char *ciphertext, char **plain_out) {
|
||||||
const char *args[2];
|
const char *args[2];
|
||||||
|
|
||||||
@@ -968,12 +1008,12 @@ int nsigner_nip44_decrypt_url(const char *url, const char *role,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = ciphertext;
|
args[1] = ciphertext;
|
||||||
return nsigner_call_string_method_url(url, role, "nip44_decrypt", args, 2, plain_out);
|
return nsigner_call_string_method_url(url, selector, "nip44_decrypt", args, 2, plain_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_qrexec_get_public_key(const char *target_qube,
|
int nsigner_qrexec_get_public_key(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
char *out_hex_65) {
|
char *out_hex_65) {
|
||||||
char *result = NULL;
|
char *result = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
@@ -983,7 +1023,7 @@ int nsigner_qrexec_get_public_key(const char *target_qube,
|
|||||||
return NT_NSIGNER_E_IO;
|
return NT_NSIGNER_E_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = nsigner_qrexec_call_string_method(target_qube, service_name, role,
|
rc = nsigner_qrexec_call_string_method(target_qube, service_name, selector,
|
||||||
"get_public_key", NULL, 0, &result);
|
"get_public_key", NULL, 0, &result);
|
||||||
if (rc != NT_NSIGNER_OK) {
|
if (rc != NT_NSIGNER_OK) {
|
||||||
return rc;
|
return rc;
|
||||||
@@ -1002,7 +1042,7 @@ int nsigner_qrexec_get_public_key(const char *target_qube,
|
|||||||
|
|
||||||
int nsigner_qrexec_sign_event(const char *target_qube,
|
int nsigner_qrexec_sign_event(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *unsigned_event_json,
|
const char *unsigned_event_json,
|
||||||
char **signed_event_json_out) {
|
char **signed_event_json_out) {
|
||||||
const char *args[1];
|
const char *args[1];
|
||||||
@@ -1012,13 +1052,13 @@ int nsigner_qrexec_sign_event(const char *target_qube,
|
|||||||
}
|
}
|
||||||
|
|
||||||
args[0] = unsigned_event_json;
|
args[0] = unsigned_event_json;
|
||||||
return nsigner_qrexec_call_string_method(target_qube, service_name, role,
|
return nsigner_qrexec_call_string_method(target_qube, service_name, selector,
|
||||||
"sign_event", args, 1, signed_event_json_out);
|
"sign_event", args, 1, signed_event_json_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_qrexec_nip04_encrypt(const char *target_qube,
|
int nsigner_qrexec_nip04_encrypt(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex,
|
const char *peer_pub_hex,
|
||||||
const char *plaintext,
|
const char *plaintext,
|
||||||
char **cipher_out) {
|
char **cipher_out) {
|
||||||
@@ -1030,13 +1070,13 @@ int nsigner_qrexec_nip04_encrypt(const char *target_qube,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = plaintext;
|
args[1] = plaintext;
|
||||||
return nsigner_qrexec_call_string_method(target_qube, service_name, role,
|
return nsigner_qrexec_call_string_method(target_qube, service_name, selector,
|
||||||
"nip04_encrypt", args, 2, cipher_out);
|
"nip04_encrypt", args, 2, cipher_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_qrexec_nip04_decrypt(const char *target_qube,
|
int nsigner_qrexec_nip04_decrypt(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex,
|
const char *peer_pub_hex,
|
||||||
const char *ciphertext,
|
const char *ciphertext,
|
||||||
char **plain_out) {
|
char **plain_out) {
|
||||||
@@ -1048,13 +1088,13 @@ int nsigner_qrexec_nip04_decrypt(const char *target_qube,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = ciphertext;
|
args[1] = ciphertext;
|
||||||
return nsigner_qrexec_call_string_method(target_qube, service_name, role,
|
return nsigner_qrexec_call_string_method(target_qube, service_name, selector,
|
||||||
"nip04_decrypt", args, 2, plain_out);
|
"nip04_decrypt", args, 2, plain_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_qrexec_nip44_encrypt(const char *target_qube,
|
int nsigner_qrexec_nip44_encrypt(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex,
|
const char *peer_pub_hex,
|
||||||
const char *plaintext,
|
const char *plaintext,
|
||||||
char **cipher_out) {
|
char **cipher_out) {
|
||||||
@@ -1066,13 +1106,13 @@ int nsigner_qrexec_nip44_encrypt(const char *target_qube,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = plaintext;
|
args[1] = plaintext;
|
||||||
return nsigner_qrexec_call_string_method(target_qube, service_name, role,
|
return nsigner_qrexec_call_string_method(target_qube, service_name, selector,
|
||||||
"nip44_encrypt", args, 2, cipher_out);
|
"nip44_encrypt", args, 2, cipher_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsigner_qrexec_nip44_decrypt(const char *target_qube,
|
int nsigner_qrexec_nip44_decrypt(const char *target_qube,
|
||||||
const char *service_name,
|
const char *service_name,
|
||||||
const char *role,
|
const nt_nsigner_selector_t *selector,
|
||||||
const char *peer_pub_hex,
|
const char *peer_pub_hex,
|
||||||
const char *ciphertext,
|
const char *ciphertext,
|
||||||
char **plain_out) {
|
char **plain_out) {
|
||||||
@@ -1084,6 +1124,6 @@ int nsigner_qrexec_nip44_decrypt(const char *target_qube,
|
|||||||
|
|
||||||
args[0] = peer_pub_hex;
|
args[0] = peer_pub_hex;
|
||||||
args[1] = ciphertext;
|
args[1] = ciphertext;
|
||||||
return nsigner_qrexec_call_string_method(target_qube, service_name, role,
|
return nsigner_qrexec_call_string_method(target_qube, service_name, selector,
|
||||||
"nip44_decrypt", args, 2, plain_out);
|
"nip44_decrypt", args, 2, plain_out);
|
||||||
}
|
}
|
||||||
|
|||||||
73
src/signer.c
73
src/signer.c
@@ -16,7 +16,11 @@ nt_signer_t g_signer = {
|
|||||||
.kind = NT_SIGNER_LOCAL,
|
.kind = NT_SIGNER_LOCAL,
|
||||||
.socket_name = {0},
|
.socket_name = {0},
|
||||||
.endpoint_url = {0},
|
.endpoint_url = {0},
|
||||||
.role = "main",
|
.selector = {
|
||||||
|
.has_nostr_index = 1,
|
||||||
|
.nostr_index = 0,
|
||||||
|
.role = {0}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int signer_local_private_key(unsigned char out_priv[32]) {
|
static int signer_local_private_key(unsigned char out_priv[32]) {
|
||||||
@@ -29,13 +33,24 @@ static int signer_local_private_key(unsigned char out_priv[32]) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void signer_set_selector(int has_index, int index, const char *role) {
|
||||||
|
g_signer.selector.has_nostr_index = has_index ? 1 : 0;
|
||||||
|
g_signer.selector.nostr_index = (index < 0) ? 0 : index;
|
||||||
|
if (role && role[0] != '\0') {
|
||||||
|
snprintf(g_signer.selector.role, sizeof(g_signer.selector.role), "%s", role);
|
||||||
|
} else {
|
||||||
|
g_signer.selector.role[0] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void signer_init(void) {
|
void signer_init(void) {
|
||||||
|
nt_nsigner_selector_t sel = nsigner_selector_default();
|
||||||
g_signer.kind = NT_SIGNER_LOCAL;
|
g_signer.kind = NT_SIGNER_LOCAL;
|
||||||
g_signer.socket_name[0] = '\0';
|
g_signer.socket_name[0] = '\0';
|
||||||
g_signer.qrexec_target[0] = '\0';
|
g_signer.qrexec_target[0] = '\0';
|
||||||
g_signer.qrexec_service[0] = '\0';
|
g_signer.qrexec_service[0] = '\0';
|
||||||
g_signer.endpoint_url[0] = '\0';
|
g_signer.endpoint_url[0] = '\0';
|
||||||
snprintf(g_signer.role, sizeof(g_signer.role), "%s", "main");
|
signer_set_selector(sel.has_nostr_index, sel.nostr_index, sel.role);
|
||||||
}
|
}
|
||||||
|
|
||||||
int signer_init_local(void) {
|
int signer_init_local(void) {
|
||||||
@@ -43,7 +58,9 @@ int signer_init_local(void) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int signer_init_nsigner(const char *socket_name) {
|
int signer_init_nsigner(const char *socket_name, const nt_nsigner_selector_t *selector) {
|
||||||
|
nt_nsigner_selector_t sel = selector ? *selector : nsigner_selector_default();
|
||||||
|
|
||||||
if (!socket_name || socket_name[0] == '\0') {
|
if (!socket_name || socket_name[0] == '\0') {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -52,11 +69,13 @@ int signer_init_nsigner(const char *socket_name) {
|
|||||||
g_signer.qrexec_target[0] = '\0';
|
g_signer.qrexec_target[0] = '\0';
|
||||||
g_signer.qrexec_service[0] = '\0';
|
g_signer.qrexec_service[0] = '\0';
|
||||||
g_signer.endpoint_url[0] = '\0';
|
g_signer.endpoint_url[0] = '\0';
|
||||||
snprintf(g_signer.role, sizeof(g_signer.role), "%s", "main");
|
signer_set_selector(sel.has_nostr_index, sel.nostr_index, sel.role);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int signer_init_nsigner_qrexec(const char *target_qube, const char *service_name) {
|
int signer_init_nsigner_qrexec(const char *target_qube, const char *service_name, const nt_nsigner_selector_t *selector) {
|
||||||
|
nt_nsigner_selector_t sel = selector ? *selector : nsigner_selector_default();
|
||||||
|
|
||||||
if (!target_qube || target_qube[0] == '\0' || !service_name || service_name[0] == '\0') {
|
if (!target_qube || target_qube[0] == '\0' || !service_name || service_name[0] == '\0') {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -65,11 +84,13 @@ int signer_init_nsigner_qrexec(const char *target_qube, const char *service_name
|
|||||||
snprintf(g_signer.qrexec_target, sizeof(g_signer.qrexec_target), "%s", target_qube);
|
snprintf(g_signer.qrexec_target, sizeof(g_signer.qrexec_target), "%s", target_qube);
|
||||||
snprintf(g_signer.qrexec_service, sizeof(g_signer.qrexec_service), "%s", service_name);
|
snprintf(g_signer.qrexec_service, sizeof(g_signer.qrexec_service), "%s", service_name);
|
||||||
g_signer.endpoint_url[0] = '\0';
|
g_signer.endpoint_url[0] = '\0';
|
||||||
snprintf(g_signer.role, sizeof(g_signer.role), "%s", "main");
|
signer_set_selector(sel.has_nostr_index, sel.nostr_index, sel.role);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int signer_init_nsigner_url(const char *endpoint_url) {
|
int signer_init_nsigner_url(const char *endpoint_url, const nt_nsigner_selector_t *selector) {
|
||||||
|
nt_nsigner_selector_t sel = selector ? *selector : nsigner_selector_default();
|
||||||
|
|
||||||
if (!endpoint_url || endpoint_url[0] == '\0') {
|
if (!endpoint_url || endpoint_url[0] == '\0') {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -79,7 +100,7 @@ int signer_init_nsigner_url(const char *endpoint_url) {
|
|||||||
g_signer.qrexec_target[0] = '\0';
|
g_signer.qrexec_target[0] = '\0';
|
||||||
g_signer.qrexec_service[0] = '\0';
|
g_signer.qrexec_service[0] = '\0';
|
||||||
snprintf(g_signer.endpoint_url, sizeof(g_signer.endpoint_url), "%s", endpoint_url);
|
snprintf(g_signer.endpoint_url, sizeof(g_signer.endpoint_url), "%s", endpoint_url);
|
||||||
snprintf(g_signer.role, sizeof(g_signer.role), "%s", "main");
|
signer_set_selector(sel.has_nostr_index, sel.nostr_index, sel.role);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,7 +169,7 @@ int signer_create_and_sign(int kind,
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = nsigner_sign_event(g_signer.socket_name,
|
rc = nsigner_sign_event(g_signer.socket_name,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
unsigned_json,
|
unsigned_json,
|
||||||
signed_event_json_out);
|
signed_event_json_out);
|
||||||
|
|
||||||
@@ -199,7 +220,7 @@ int signer_create_and_sign(int kind,
|
|||||||
|
|
||||||
rc = nsigner_qrexec_sign_event(g_signer.qrexec_target,
|
rc = nsigner_qrexec_sign_event(g_signer.qrexec_target,
|
||||||
g_signer.qrexec_service,
|
g_signer.qrexec_service,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
unsigned_json,
|
unsigned_json,
|
||||||
signed_event_json_out);
|
signed_event_json_out);
|
||||||
|
|
||||||
@@ -249,7 +270,7 @@ int signer_create_and_sign(int kind,
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = nsigner_sign_event_url(g_signer.endpoint_url,
|
rc = nsigner_sign_event_url(g_signer.endpoint_url,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
unsigned_json,
|
unsigned_json,
|
||||||
signed_event_json_out);
|
signed_event_json_out);
|
||||||
|
|
||||||
@@ -307,7 +328,7 @@ int signer_sign_event_json(const char *unsigned_event_json, char **signed_event_
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
||||||
return nsigner_sign_event(g_signer.socket_name,
|
return nsigner_sign_event(g_signer.socket_name,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
unsigned_event_json,
|
unsigned_event_json,
|
||||||
signed_event_json_out);
|
signed_event_json_out);
|
||||||
}
|
}
|
||||||
@@ -315,14 +336,14 @@ int signer_sign_event_json(const char *unsigned_event_json, char **signed_event_
|
|||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
||||||
return nsigner_qrexec_sign_event(g_signer.qrexec_target,
|
return nsigner_qrexec_sign_event(g_signer.qrexec_target,
|
||||||
g_signer.qrexec_service,
|
g_signer.qrexec_service,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
unsigned_event_json,
|
unsigned_event_json,
|
||||||
signed_event_json_out);
|
signed_event_json_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
||||||
return nsigner_sign_event_url(g_signer.endpoint_url,
|
return nsigner_sign_event_url(g_signer.endpoint_url,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
unsigned_event_json,
|
unsigned_event_json,
|
||||||
signed_event_json_out);
|
signed_event_json_out);
|
||||||
}
|
}
|
||||||
@@ -385,7 +406,7 @@ int signer_nip04_encrypt(const char *peer_pub_hex, const char *plaintext, char *
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
||||||
return nsigner_nip04_encrypt(g_signer.socket_name,
|
return nsigner_nip04_encrypt(g_signer.socket_name,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
plaintext,
|
plaintext,
|
||||||
cipher_out);
|
cipher_out);
|
||||||
@@ -394,7 +415,7 @@ int signer_nip04_encrypt(const char *peer_pub_hex, const char *plaintext, char *
|
|||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
||||||
return nsigner_qrexec_nip04_encrypt(g_signer.qrexec_target,
|
return nsigner_qrexec_nip04_encrypt(g_signer.qrexec_target,
|
||||||
g_signer.qrexec_service,
|
g_signer.qrexec_service,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
plaintext,
|
plaintext,
|
||||||
cipher_out);
|
cipher_out);
|
||||||
@@ -402,7 +423,7 @@ int signer_nip04_encrypt(const char *peer_pub_hex, const char *plaintext, char *
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
||||||
return nsigner_nip04_encrypt_url(g_signer.endpoint_url,
|
return nsigner_nip04_encrypt_url(g_signer.endpoint_url,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
plaintext,
|
plaintext,
|
||||||
cipher_out);
|
cipher_out);
|
||||||
@@ -444,7 +465,7 @@ int signer_nip04_decrypt(const char *peer_pub_hex, const char *ciphertext, char
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
||||||
return nsigner_nip04_decrypt(g_signer.socket_name,
|
return nsigner_nip04_decrypt(g_signer.socket_name,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
ciphertext,
|
ciphertext,
|
||||||
plain_out);
|
plain_out);
|
||||||
@@ -453,7 +474,7 @@ int signer_nip04_decrypt(const char *peer_pub_hex, const char *ciphertext, char
|
|||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
||||||
return nsigner_qrexec_nip04_decrypt(g_signer.qrexec_target,
|
return nsigner_qrexec_nip04_decrypt(g_signer.qrexec_target,
|
||||||
g_signer.qrexec_service,
|
g_signer.qrexec_service,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
ciphertext,
|
ciphertext,
|
||||||
plain_out);
|
plain_out);
|
||||||
@@ -461,7 +482,7 @@ int signer_nip04_decrypt(const char *peer_pub_hex, const char *ciphertext, char
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
||||||
return nsigner_nip04_decrypt_url(g_signer.endpoint_url,
|
return nsigner_nip04_decrypt_url(g_signer.endpoint_url,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
ciphertext,
|
ciphertext,
|
||||||
plain_out);
|
plain_out);
|
||||||
@@ -503,7 +524,7 @@ int signer_nip44_encrypt(const char *peer_pub_hex, const char *plaintext, char *
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
||||||
return nsigner_nip44_encrypt(g_signer.socket_name,
|
return nsigner_nip44_encrypt(g_signer.socket_name,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
plaintext,
|
plaintext,
|
||||||
cipher_out);
|
cipher_out);
|
||||||
@@ -512,7 +533,7 @@ int signer_nip44_encrypt(const char *peer_pub_hex, const char *plaintext, char *
|
|||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
||||||
return nsigner_qrexec_nip44_encrypt(g_signer.qrexec_target,
|
return nsigner_qrexec_nip44_encrypt(g_signer.qrexec_target,
|
||||||
g_signer.qrexec_service,
|
g_signer.qrexec_service,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
plaintext,
|
plaintext,
|
||||||
cipher_out);
|
cipher_out);
|
||||||
@@ -520,7 +541,7 @@ int signer_nip44_encrypt(const char *peer_pub_hex, const char *plaintext, char *
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
||||||
return nsigner_nip44_encrypt_url(g_signer.endpoint_url,
|
return nsigner_nip44_encrypt_url(g_signer.endpoint_url,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
plaintext,
|
plaintext,
|
||||||
cipher_out);
|
cipher_out);
|
||||||
@@ -562,7 +583,7 @@ int signer_nip44_decrypt(const char *peer_pub_hex, const char *ciphertext, char
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER) {
|
||||||
return nsigner_nip44_decrypt(g_signer.socket_name,
|
return nsigner_nip44_decrypt(g_signer.socket_name,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
ciphertext,
|
ciphertext,
|
||||||
plain_out);
|
plain_out);
|
||||||
@@ -571,7 +592,7 @@ int signer_nip44_decrypt(const char *peer_pub_hex, const char *ciphertext, char
|
|||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_QREXEC) {
|
||||||
return nsigner_qrexec_nip44_decrypt(g_signer.qrexec_target,
|
return nsigner_qrexec_nip44_decrypt(g_signer.qrexec_target,
|
||||||
g_signer.qrexec_service,
|
g_signer.qrexec_service,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
ciphertext,
|
ciphertext,
|
||||||
plain_out);
|
plain_out);
|
||||||
@@ -579,7 +600,7 @@ int signer_nip44_decrypt(const char *peer_pub_hex, const char *ciphertext, char
|
|||||||
|
|
||||||
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
if (g_signer.kind == NT_SIGNER_NSIGNER_URL) {
|
||||||
return nsigner_nip44_decrypt_url(g_signer.endpoint_url,
|
return nsigner_nip44_decrypt_url(g_signer.endpoint_url,
|
||||||
g_signer.role,
|
&g_signer.selector,
|
||||||
peer_pub_hex,
|
peer_pub_hex,
|
||||||
ciphertext,
|
ciphertext,
|
||||||
plain_out);
|
plain_out);
|
||||||
|
|||||||
Reference in New Issue
Block a user