commit c39a33d21544fdff0db6f7a8eda46ff86f5d3e66
parent cee688d5d14c1a3c20f08c2e78ea787997ee0216
Author: William Casarin <jb55@jb55.com>
Date: Tue, 25 Jul 2023 12:29:55 -0700
type-erase any secp stuff so it's not in the ndb header
Diffstat:
2 files changed, 22 insertions(+), 21 deletions(-)
diff --git a/nostrdb.c b/nostrdb.c
@@ -8,6 +8,16 @@
#include <stdlib.h>
#include <limits.h>
+#include "secp256k1.h"
+#include "secp256k1_ecdh.h"
+#include "secp256k1_schnorrsig.h"
+
+struct ndb_keypair {
+ unsigned char pubkey[32];
+ unsigned char secret[32];
+ secp256k1_keypair pair;
+};
+
struct ndb_json_parser {
const char *json;
int json_len;
@@ -278,7 +288,7 @@ int ndb_calculate_id(struct ndb_note *note, unsigned char *buf, int buflen) {
return 1;
}
-int ndb_sign_id(secp256k1_context *ctx, struct ndb_keypair *keypair,
+int ndb_sign_id(void *secp_ctx, struct ndb_keypair *keypair,
unsigned char id[32], unsigned char sig[64])
{
unsigned char aux[32];
@@ -286,27 +296,26 @@ int ndb_sign_id(secp256k1_context *ctx, struct ndb_keypair *keypair,
if (!fill_random(aux, sizeof(aux)))
return 0;
- return secp256k1_schnorrsig_sign32(ctx, sig, id, &keypair->pair, aux);
+ return secp256k1_schnorrsig_sign32(secp_ctx, sig, id, &keypair->pair, aux);
}
-int ndb_create_keypair(secp256k1_context *ctx, struct ndb_keypair *key)
+int ndb_create_keypair(void *secp_ctx, struct ndb_keypair *key)
{
secp256k1_xonly_pubkey pubkey;
/* Try to create a keypair with a valid context, it should only
* fail if the secret key is zero or out of range. */
- if (!secp256k1_keypair_create(ctx, &key->pair, key->secret))
+ if (!secp256k1_keypair_create(secp_ctx, &key->pair, key->secret))
return 0;
- if (!secp256k1_keypair_xonly_pub(ctx, &pubkey, NULL, &key->pair))
+ if (!secp256k1_keypair_xonly_pub(secp_ctx, &pubkey, NULL, &key->pair))
return 0;
/* Serialize the public key. Should always return 1 for a valid public key. */
- return secp256k1_xonly_pubkey_serialize(ctx, key->pubkey, &pubkey);
+ return secp256k1_xonly_pubkey_serialize(secp_ctx, key->pubkey, &pubkey);
}
-int ndb_decode_key(secp256k1_context *ctx, const char *secstr,
- struct ndb_keypair *keypair)
+int ndb_decode_key(void *ctx, const char *secstr, struct ndb_keypair *keypair)
{
if (!hex_decode(secstr, strlen(secstr), keypair->secret, 32)) {
fprintf(stderr, "could not hex decode secret key\n");
diff --git a/nostrdb.h b/nostrdb.h
@@ -4,10 +4,6 @@
#include <inttypes.h>
#include "cursor.h"
-#include "secp256k1.h"
-#include "secp256k1_ecdh.h"
-#include "secp256k1_schnorrsig.h"
-
struct ndb_str {
unsigned char flag;
union {
@@ -16,12 +12,8 @@ struct ndb_str {
};
};
-struct ndb_keypair {
- unsigned char pubkey[32];
- unsigned char secret[32];
- secp256k1_keypair pair;
-};
-
+struct secp256k1_context;
+struct ndb_keypair;
// these must be byte-aligned, they are directly accessing the serialized data
// representation
@@ -91,9 +83,9 @@ struct ndb_iterator {
// HELPERS
int ndb_calculate_id(struct ndb_note *note, unsigned char *buf, int buflen);
-int ndb_sign_id(secp256k1_context *ctx, struct ndb_keypair *keypair, unsigned char id[32], unsigned char sig[64]);
-int ndb_create_keypair(secp256k1_context *ctx, struct ndb_keypair *key);
-int ndb_decode_key(secp256k1_context *ctx, const char *secstr, struct ndb_keypair *keypair);
+int ndb_sign_id(void *secp_ctx, struct ndb_keypair *keypair, unsigned char id[32], unsigned char sig[64]);
+int ndb_create_keypair(void *secp_ctx, struct ndb_keypair *key);
+int ndb_decode_key(void *secp_ctx, const char *secstr, struct ndb_keypair *keypair);
// BUILDER
int ndb_note_from_json(const char *json, int len, struct ndb_note **, unsigned char *buf, int buflen);