27 unsigned char randomize[32];
28 unsigned char auxrand1[32];
29 unsigned char auxrand2[32];
30 unsigned char seckey1[32];
31 unsigned char seckey2[32];
32 unsigned char ellswift_pubkey1[64];
33 unsigned char ellswift_pubkey2[64];
34 unsigned char shared_secret1[32];
35 unsigned char shared_secret2[32];
41 printf(
"Failed to generate randomness\n");
52 printf(
"Failed to generate randomness\n");
59 printf(
"Generated secret key is invalid. This indicates an issue with the random number generator.\n");
67 printf(
"Failed to generate randomness\n");
92 return_val = memcmp(shared_secret1, shared_secret2,
sizeof(shared_secret1));
97 printf(
"EllSwift Pubkey1: ");
98 print_hex(ellswift_pubkey1,
sizeof(ellswift_pubkey1));
99 printf(
"\n Secret Key2: ");
101 printf(
"EllSwift Pubkey2: ");
102 print_hex(ellswift_pubkey2,
sizeof(ellswift_pubkey2));
103 printf(
"\n Shared Secret: ");
104 print_hex(shared_secret1,
sizeof(shared_secret1));
int main(void)
This file demonstrates how to use the ElligatorSwift module to perform a key exchange according to BI...
static int fill_random(unsigned char *data, size_t size)
static void secure_erase(void *ptr, size_t len)
static void print_hex(unsigned char *data, size_t size)
SECP256K1_API void secp256k1_context_destroy(secp256k1_context *ctx) SECP256K1_ARG_NONNULL(1)
Destroy a secp256k1 context object (created in dynamically allocated memory).
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize(secp256k1_context *ctx, const unsigned char *seed32) SECP256K1_ARG_NONNULL(1)
Randomizes the context to provide enhanced protection against side-channel leakage.
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify(const secp256k1_context *ctx, const unsigned char *seckey) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2)
Verify an elliptic curve secret key.
SECP256K1_API secp256k1_context * secp256k1_context_create(unsigned int flags) SECP256K1_WARN_UNUSED_RESULT
Create a secp256k1 context object (in dynamically allocated memory).
#define SECP256K1_CONTEXT_NONE
Context flags to pass to secp256k1_context_create, secp256k1_context_preallocated_size,...
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ellswift_create(const secp256k1_context *ctx, unsigned char *ell64, const unsigned char *seckey32, const unsigned char *auxrnd32) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3)
Compute an ElligatorSwift public key for a secret key.
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ellswift_xdh(const secp256k1_context *ctx, unsigned char *output, const unsigned char *ell_a64, const unsigned char *ell_b64, const unsigned char *seckey32, int party, secp256k1_ellswift_xdh_hash_function hashfp, void *data) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5) SECP256K1_ARG_NONNULL(7)
Given a private key, and ElligatorSwift public keys sent in both directions, compute a shared secret ...
SECP256K1_API const secp256k1_ellswift_xdh_hash_function secp256k1_ellswift_xdh_hash_function_bip324
An implementation of an secp256k1_ellswift_xdh_hash_function compatible with BIP324.