aboutsummaryrefslogtreecommitdiff
path: root/vendor/secp256k1/include
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2024-11-13 22:25:32 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2024-11-13 22:25:32 -0500
commit5cf1addc4a7b70aafda5ad8953f114a206df93cc (patch)
treed478524ea1ed7676f530f2eb26af644024d6aeca /vendor/secp256k1/include
parent0baa4afd4716ad4d6d2f37b9d4af4fc839d16d7c (diff)
integrate mbedtls testing and remove mbedtls fetch
Diffstat (limited to 'vendor/secp256k1/include')
-rw-r--r--vendor/secp256k1/include/secp256k1/secp256k1.h899
-rw-r--r--vendor/secp256k1/include/secp256k1/secp256k1_ecdh.h63
-rw-r--r--vendor/secp256k1/include/secp256k1/secp256k1_ellswift.h200
-rw-r--r--vendor/secp256k1/include/secp256k1/secp256k1_extrakeys.h250
-rw-r--r--vendor/secp256k1/include/secp256k1/secp256k1_musig.h588
-rw-r--r--vendor/secp256k1/include/secp256k1/secp256k1_preallocated.h134
-rw-r--r--vendor/secp256k1/include/secp256k1/secp256k1_recovery.h113
-rw-r--r--vendor/secp256k1/include/secp256k1/secp256k1_schnorrsig.h190
8 files changed, 0 insertions, 2437 deletions
diff --git a/vendor/secp256k1/include/secp256k1/secp256k1.h b/vendor/secp256k1/include/secp256k1/secp256k1.h
deleted file mode 100644
index c6e9417..0000000
--- a/vendor/secp256k1/include/secp256k1/secp256k1.h
+++ /dev/null
@@ -1,899 +0,0 @@
-#ifndef SECP256K1_H
-#define SECP256K1_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-
-/** Unless explicitly stated all pointer arguments must not be NULL.
- *
- * The following rules specify the order of arguments in API calls:
- *
- * 1. Context pointers go first, followed by output arguments, combined
- * output/input arguments, and finally input-only arguments.
- * 2. Array lengths always immediately follow the argument whose length
- * they describe, even if this violates rule 1.
- * 3. Within the OUT/OUTIN/IN groups, pointers to data that is typically generated
- * later go first. This means: signatures, public nonces, secret nonces,
- * messages, public keys, secret keys, tweaks.
- * 4. Arguments that are not data pointers go last, from more complex to less
- * complex: function pointers, algorithm names, messages, void pointers,
- * counts, flags, booleans.
- * 5. Opaque data pointers follow the function pointer they are to be passed to.
- */
-
-/** Opaque data structure that holds context information
- *
- * The primary purpose of context objects is to store randomization data for
- * enhanced protection against side-channel leakage. This protection is only
- * effective if the context is randomized after its creation. See
- * secp256k1_context_create for creation of contexts and
- * secp256k1_context_randomize for randomization.
- *
- * A secondary purpose of context objects is to store pointers to callback
- * functions that the library will call when certain error states arise. See
- * secp256k1_context_set_error_callback as well as
- * secp256k1_context_set_illegal_callback for details. Future library versions
- * may use context objects for additional purposes.
- *
- * A constructed context can safely be used from multiple threads
- * simultaneously, but API calls that take a non-const pointer to a context
- * need exclusive access to it. In particular this is the case for
- * secp256k1_context_destroy, secp256k1_context_preallocated_destroy,
- * and secp256k1_context_randomize.
- *
- * Regarding randomization, either do it once at creation time (in which case
- * you do not need any locking for the other calls), or use a read-write lock.
- */
-typedef struct secp256k1_context_struct secp256k1_context;
-
-/** Opaque data structure that holds a parsed and valid public key.
- *
- * The exact representation of data inside is implementation defined and not
- * guaranteed to be portable between different platforms or versions. It is
- * however guaranteed to be 64 bytes in size, and can be safely copied/moved.
- * If you need to convert to a format suitable for storage or transmission,
- * use secp256k1_ec_pubkey_serialize and secp256k1_ec_pubkey_parse. To
- * compare keys, use secp256k1_ec_pubkey_cmp.
- */
-typedef struct secp256k1_pubkey {
- unsigned char data[64];
-} secp256k1_pubkey;
-
-/** Opaque data structure that holds a parsed ECDSA signature.
- *
- * The exact representation of data inside is implementation defined and not
- * guaranteed to be portable between different platforms or versions. It is
- * however guaranteed to be 64 bytes in size, and can be safely copied/moved.
- * If you need to convert to a format suitable for storage, transmission, or
- * comparison, use the secp256k1_ecdsa_signature_serialize_* and
- * secp256k1_ecdsa_signature_parse_* functions.
- */
-typedef struct secp256k1_ecdsa_signature {
- unsigned char data[64];
-} secp256k1_ecdsa_signature;
-
-/** A pointer to a function to deterministically generate a nonce.
- *
- * Returns: 1 if a nonce was successfully generated. 0 will cause signing to fail.
- * Out: nonce32: pointer to a 32-byte array to be filled by the function.
- * In: msg32: the 32-byte message hash being verified (will not be NULL)
- * key32: pointer to a 32-byte secret key (will not be NULL)
- * algo16: pointer to a 16-byte array describing the signature
- * algorithm (will be NULL for ECDSA for compatibility).
- * data: Arbitrary data pointer that is passed through.
- * attempt: how many iterations we have tried to find a nonce.
- * This will almost always be 0, but different attempt values
- * are required to result in a different nonce.
- *
- * Except for test cases, this function should compute some cryptographic hash of
- * the message, the algorithm, the key and the attempt.
- */
-typedef int (*secp256k1_nonce_function)(
- unsigned char *nonce32,
- const unsigned char *msg32,
- const unsigned char *key32,
- const unsigned char *algo16,
- void *data,
- unsigned int attempt
-);
-
-# if !defined(SECP256K1_GNUC_PREREQ)
-# if defined(__GNUC__)&&defined(__GNUC_MINOR__)
-# define SECP256K1_GNUC_PREREQ(_maj,_min) \
- ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))
-# else
-# define SECP256K1_GNUC_PREREQ(_maj,_min) 0
-# endif
-# endif
-
-/* When this header is used at build-time the SECP256K1_BUILD define needs to be set
- * to correctly setup export attributes and nullness checks. This is normally done
- * by secp256k1.c but to guard against this header being included before secp256k1.c
- * has had a chance to set the define (e.g. via test harnesses that just includes
- * secp256k1.c) we set SECP256K1_NO_BUILD when this header is processed without the
- * BUILD define so this condition can be caught.
- */
-#ifndef SECP256K1_BUILD
-# define SECP256K1_NO_BUILD
-#endif
-
-/* Symbol visibility. */
-#if defined(_WIN32)
- /* GCC for Windows (e.g., MinGW) accepts the __declspec syntax
- * for MSVC compatibility. A __declspec declaration implies (but is not
- * exactly equivalent to) __attribute__ ((visibility("default"))), and so we
- * actually want __declspec even on GCC, see "Microsoft Windows Function
- * Attributes" in the GCC manual and the recommendations in
- * https://gcc.gnu.org/wiki/Visibility. */
-# if defined(SECP256K1_BUILD)
-# if defined(DLL_EXPORT) || defined(SECP256K1_DLL_EXPORT)
- /* Building libsecp256k1 as a DLL.
- * 1. If using Libtool, it defines DLL_EXPORT automatically.
- * 2. In other cases, SECP256K1_DLL_EXPORT must be defined. */
-# define SECP256K1_API extern __declspec (dllexport)
-# else
- /* Building libsecp256k1 as a static library on Windows.
- * No declspec is needed, and so we would want the non-Windows-specific
- * logic below take care of this case. However, this may result in setting
- * __attribute__ ((visibility("default"))), which is supposed to be a noop
- * on Windows but may trigger warnings when compiling with -flto due to a
- * bug in GCC, see
- * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116478 . */
-# define SECP256K1_API extern
-# endif
- /* The user must define SECP256K1_STATIC when consuming libsecp256k1 as a static
- * library on Windows. */
-# elif !defined(SECP256K1_STATIC)
- /* Consuming libsecp256k1 as a DLL. */
-# define SECP256K1_API extern __declspec (dllimport)
-# endif
-#endif
-#ifndef SECP256K1_API
-/* All cases not captured by the Windows-specific logic. */
-# if defined(__GNUC__) && (__GNUC__ >= 4) && defined(SECP256K1_BUILD)
- /* Building libsecp256k1 using GCC or compatible. */
-# define SECP256K1_API extern __attribute__ ((visibility ("default")))
-# else
- /* Fall back to standard C's extern. */
-# define SECP256K1_API extern
-# endif
-#endif
-
-/* Warning attributes
- * NONNULL is not used if SECP256K1_BUILD is set to avoid the compiler optimizing out
- * some paranoid null checks. */
-# if defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4)
-# define SECP256K1_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
-# else
-# define SECP256K1_WARN_UNUSED_RESULT
-# endif
-# if !defined(SECP256K1_BUILD) && defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4)
-# define SECP256K1_ARG_NONNULL(_x) __attribute__ ((__nonnull__(_x)))
-# else
-# define SECP256K1_ARG_NONNULL(_x)
-# endif
-
-/* Attribute for marking functions, types, and variables as deprecated */
-#if !defined(SECP256K1_BUILD) && defined(__has_attribute)
-# if __has_attribute(__deprecated__)
-# define SECP256K1_DEPRECATED(_msg) __attribute__ ((__deprecated__(_msg)))
-# else
-# define SECP256K1_DEPRECATED(_msg)
-# endif
-#else
-# define SECP256K1_DEPRECATED(_msg)
-#endif
-
-/* All flags' lower 8 bits indicate what they're for. Do not use directly. */
-#define SECP256K1_FLAGS_TYPE_MASK ((1 << 8) - 1)
-#define SECP256K1_FLAGS_TYPE_CONTEXT (1 << 0)
-#define SECP256K1_FLAGS_TYPE_COMPRESSION (1 << 1)
-/* The higher bits contain the actual data. Do not use directly. */
-#define SECP256K1_FLAGS_BIT_CONTEXT_VERIFY (1 << 8)
-#define SECP256K1_FLAGS_BIT_CONTEXT_SIGN (1 << 9)
-#define SECP256K1_FLAGS_BIT_CONTEXT_DECLASSIFY (1 << 10)
-#define SECP256K1_FLAGS_BIT_COMPRESSION (1 << 8)
-
-/** Context flags to pass to secp256k1_context_create, secp256k1_context_preallocated_size, and
- * secp256k1_context_preallocated_create. */
-#define SECP256K1_CONTEXT_NONE (SECP256K1_FLAGS_TYPE_CONTEXT)
-
-/** Deprecated context flags. These flags are treated equivalent to SECP256K1_CONTEXT_NONE. */
-#define SECP256K1_CONTEXT_VERIFY (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_VERIFY)
-#define SECP256K1_CONTEXT_SIGN (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_SIGN)
-
-/* Testing flag. Do not use. */
-#define SECP256K1_CONTEXT_DECLASSIFY (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_DECLASSIFY)
-
-/** Flag to pass to secp256k1_ec_pubkey_serialize. */
-#define SECP256K1_EC_COMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION | SECP256K1_FLAGS_BIT_COMPRESSION)
-#define SECP256K1_EC_UNCOMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION)
-
-/** Prefix byte used to tag various encoded curvepoints for specific purposes */
-#define SECP256K1_TAG_PUBKEY_EVEN 0x02
-#define SECP256K1_TAG_PUBKEY_ODD 0x03
-#define SECP256K1_TAG_PUBKEY_UNCOMPRESSED 0x04
-#define SECP256K1_TAG_PUBKEY_HYBRID_EVEN 0x06
-#define SECP256K1_TAG_PUBKEY_HYBRID_ODD 0x07
-
-/** A built-in constant secp256k1 context object with static storage duration, to be
- * used in conjunction with secp256k1_selftest.
- *
- * This context object offers *only limited functionality* , i.e., it cannot be used
- * for API functions that perform computations involving secret keys, e.g., signing
- * and public key generation. If this restriction applies to a specific API function,
- * it is mentioned in its documentation. See secp256k1_context_create if you need a
- * full context object that supports all functionality offered by the library.
- *
- * It is highly recommended to call secp256k1_selftest before using this context.
- */
-SECP256K1_API const secp256k1_context *secp256k1_context_static;
-
-/** Deprecated alias for secp256k1_context_static. */
-SECP256K1_API const secp256k1_context *secp256k1_context_no_precomp
-SECP256K1_DEPRECATED("Use secp256k1_context_static instead");
-
-/** Perform basic self tests (to be used in conjunction with secp256k1_context_static)
- *
- * This function performs self tests that detect some serious usage errors and
- * similar conditions, e.g., when the library is compiled for the wrong endianness.
- * This is a last resort measure to be used in production. The performed tests are
- * very rudimentary and are not intended as a replacement for running the test
- * binaries.
- *
- * It is highly recommended to call this before using secp256k1_context_static.
- * It is not necessary to call this function before using a context created with
- * secp256k1_context_create (or secp256k1_context_preallocated_create), which will
- * take care of performing the self tests.
- *
- * If the tests fail, this function will call the default error handler to abort the
- * program (see secp256k1_context_set_error_callback).
- */
-SECP256K1_API void secp256k1_selftest(void);
-
-
-/** Create a secp256k1 context object (in dynamically allocated memory).
- *
- * This function uses malloc to allocate memory. It is guaranteed that malloc is
- * called at most once for every call of this function. If you need to avoid dynamic
- * memory allocation entirely, see secp256k1_context_static and the functions in
- * secp256k1_preallocated.h.
- *
- * Returns: pointer to a newly created context object.
- * In: flags: Always set to SECP256K1_CONTEXT_NONE (see below).
- *
- * The only valid non-deprecated flag in recent library versions is
- * SECP256K1_CONTEXT_NONE, which will create a context sufficient for all functionality
- * offered by the library. All other (deprecated) flags will be treated as equivalent
- * to the SECP256K1_CONTEXT_NONE flag. Though the flags parameter primarily exists for
- * historical reasons, future versions of the library may introduce new flags.
- *
- * If the context is intended to be used for API functions that perform computations
- * involving secret keys, e.g., signing and public key generation, then it is highly
- * recommended to call secp256k1_context_randomize on the context before calling
- * those API functions. This will provide enhanced protection against side-channel
- * leakage, see secp256k1_context_randomize for details.
- *
- * Do not create a new context object for each operation, as construction and
- * randomization can take non-negligible time.
- */
-SECP256K1_API secp256k1_context *secp256k1_context_create(
- unsigned int flags
-) SECP256K1_WARN_UNUSED_RESULT;
-
-/** Copy a secp256k1 context object (into dynamically allocated memory).
- *
- * This function uses malloc to allocate memory. It is guaranteed that malloc is
- * called at most once for every call of this function. If you need to avoid dynamic
- * memory allocation entirely, see the functions in secp256k1_preallocated.h.
- *
- * Cloning secp256k1_context_static is not possible, and should not be emulated by
- * the caller (e.g., using memcpy). Create a new context instead.
- *
- * Returns: pointer to a newly created context object.
- * Args: ctx: pointer to a context to copy (not secp256k1_context_static).
- */
-SECP256K1_API secp256k1_context *secp256k1_context_clone(
- const secp256k1_context *ctx
-) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT;
-
-/** Destroy a secp256k1 context object (created in dynamically allocated memory).
- *
- * The context pointer may not be used afterwards.
- *
- * The context to destroy must have been created using secp256k1_context_create
- * or secp256k1_context_clone. If the context has instead been created using
- * secp256k1_context_preallocated_create or secp256k1_context_preallocated_clone, the
- * behaviour is undefined. In that case, secp256k1_context_preallocated_destroy must
- * be used instead.
- *
- * Args: ctx: pointer to a context to destroy, constructed using
- * secp256k1_context_create or secp256k1_context_clone
- * (i.e., not secp256k1_context_static).
- */
-SECP256K1_API void secp256k1_context_destroy(
- secp256k1_context *ctx
-) SECP256K1_ARG_NONNULL(1);
-
-/** Set a callback function to be called when an illegal argument is passed to
- * an API call. It will only trigger for violations that are mentioned
- * explicitly in the header.
- *
- * The philosophy is that these shouldn't be dealt with through a
- * specific return value, as calling code should not have branches to deal with
- * the case that this code itself is broken.
- *
- * On the other hand, during debug stage, one would want to be informed about
- * such mistakes, and the default (crashing) may be inadvisable.
- * When this callback is triggered, the API function called is guaranteed not
- * to cause a crash, though its return value and output arguments are
- * undefined.
- *
- * When this function has not been called (or called with fn==NULL), then the
- * default handler will be used. The library provides a default handler which
- * writes the message to stderr and calls abort. This default handler can be
- * replaced at link time if the preprocessor macro
- * USE_EXTERNAL_DEFAULT_CALLBACKS is defined, which is the case if the build
- * has been configured with --enable-external-default-callbacks. Then the
- * following two symbols must be provided to link against:
- * - void secp256k1_default_illegal_callback_fn(const char *message, void *data);
- * - void secp256k1_default_error_callback_fn(const char *message, void *data);
- * The library can call these default handlers even before a proper callback data
- * pointer could have been set using secp256k1_context_set_illegal_callback or
- * secp256k1_context_set_error_callback, e.g., when the creation of a context
- * fails. In this case, the corresponding default handler will be called with
- * the data pointer argument set to NULL.
- *
- * Args: ctx: pointer to a context object.
- * In: fun: pointer to a function to call when an illegal argument is
- * passed to the API, taking a message and an opaque pointer.
- * (NULL restores the default handler.)
- * data: the opaque pointer to pass to fun above, must be NULL for the default handler.
- *
- * See also secp256k1_context_set_error_callback.
- */
-SECP256K1_API void secp256k1_context_set_illegal_callback(
- secp256k1_context *ctx,
- void (*fun)(const char *message, void *data),
- const void *data
-) SECP256K1_ARG_NONNULL(1);
-
-/** Set a callback function to be called when an internal consistency check
- * fails.
- *
- * The default callback writes an error message to stderr and calls abort
- * to abort the program.
- *
- * This can only trigger in case of a hardware failure, miscompilation,
- * memory corruption, serious bug in the library, or other error would can
- * otherwise result in undefined behaviour. It will not trigger due to mere
- * incorrect usage of the API (see secp256k1_context_set_illegal_callback
- * for that). After this callback returns, anything may happen, including
- * crashing.
- *
- * Args: ctx: pointer to a context object.
- * In: fun: pointer to a function to call when an internal error occurs,
- * taking a message and an opaque pointer (NULL restores the
- * default handler, see secp256k1_context_set_illegal_callback
- * for details).
- * data: the opaque pointer to pass to fun above, must be NULL for the default handler.
- *
- * See also secp256k1_context_set_illegal_callback.
- */
-SECP256K1_API void secp256k1_context_set_error_callback(
- secp256k1_context *ctx,
- void (*fun)(const char *message, void *data),
- const void *data
-) SECP256K1_ARG_NONNULL(1);
-
-/** Parse a variable-length public key into the pubkey object.
- *
- * Returns: 1 if the public key was fully valid.
- * 0 if the public key could not be parsed or is invalid.
- * Args: ctx: pointer to a context object.
- * Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to a
- * parsed version of input. If not, its value is undefined.
- * In: input: pointer to a serialized public key
- * inputlen: length of the array pointed to by input
- *
- * This function supports parsing compressed (33 bytes, header byte 0x02 or
- * 0x03), uncompressed (65 bytes, header byte 0x04), or hybrid (65 bytes, header
- * byte 0x06 or 0x07) format public keys.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse(
- const secp256k1_context *ctx,
- secp256k1_pubkey *pubkey,
- const unsigned char *input,
- size_t inputlen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize a pubkey object into a serialized byte sequence.
- *
- * Returns: 1 always.
- * Args: ctx: pointer to a context object.
- * Out: output: pointer to a 65-byte (if compressed==0) or 33-byte (if
- * compressed==1) byte array to place the serialized key
- * in.
- * In/Out: outputlen: pointer to an integer which is initially set to the
- * size of output, and is overwritten with the written
- * size.
- * In: pubkey: pointer to a secp256k1_pubkey containing an
- * initialized public key.
- * flags: SECP256K1_EC_COMPRESSED if serialization should be in
- * compressed format, otherwise SECP256K1_EC_UNCOMPRESSED.
- */
-SECP256K1_API int secp256k1_ec_pubkey_serialize(
- const secp256k1_context *ctx,
- unsigned char *output,
- size_t *outputlen,
- const secp256k1_pubkey *pubkey,
- unsigned int flags
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Compare two public keys using lexicographic (of compressed serialization) order
- *
- * Returns: <0 if the first public key is less than the second
- * >0 if the first public key is greater than the second
- * 0 if the two public keys are equal
- * Args: ctx: pointer to a context object
- * In: pubkey1: first public key to compare
- * pubkey2: second public key to compare
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_cmp(
- const secp256k1_context *ctx,
- const secp256k1_pubkey *pubkey1,
- const secp256k1_pubkey *pubkey2
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Sort public keys using lexicographic (of compressed serialization) order
- *
- * Returns: 0 if the arguments are invalid. 1 otherwise.
- *
- * Args: ctx: pointer to a context object
- * In: pubkeys: array of pointers to pubkeys to sort
- * n_pubkeys: number of elements in the pubkeys array
- */
-SECP256K1_API int secp256k1_ec_pubkey_sort(
- const secp256k1_context *ctx,
- const secp256k1_pubkey **pubkeys,
- size_t n_pubkeys
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
-
-/** Parse an ECDSA signature in compact (64 bytes) format.
- *
- * Returns: 1 when the signature could be parsed, 0 otherwise.
- * Args: ctx: pointer to a context object
- * Out: sig: pointer to a signature object
- * In: input64: pointer to the 64-byte array to parse
- *
- * The signature must consist of a 32-byte big endian R value, followed by a
- * 32-byte big endian S value. If R or S fall outside of [0..order-1], the
- * encoding is invalid. R and S with value 0 are allowed in the encoding.
- *
- * After the call, sig will always be initialized. If parsing failed or R or
- * S are zero, the resulting sig value is guaranteed to fail verification for
- * any message and public key.
- */
-SECP256K1_API int secp256k1_ecdsa_signature_parse_compact(
- const secp256k1_context *ctx,
- secp256k1_ecdsa_signature *sig,
- const unsigned char *input64
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Parse a DER ECDSA signature.
- *
- * Returns: 1 when the signature could be parsed, 0 otherwise.
- * Args: ctx: pointer to a context object
- * Out: sig: pointer to a signature object
- * In: input: pointer to the signature to be parsed
- * inputlen: the length of the array pointed to be input
- *
- * This function will accept any valid DER encoded signature, even if the
- * encoded numbers are out of range.
- *
- * After the call, sig will always be initialized. If parsing failed or the
- * encoded numbers are out of range, signature verification with it is
- * guaranteed to fail for every message and public key.
- */
-SECP256K1_API int secp256k1_ecdsa_signature_parse_der(
- const secp256k1_context *ctx,
- secp256k1_ecdsa_signature *sig,
- const unsigned char *input,
- size_t inputlen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize an ECDSA signature in DER format.
- *
- * Returns: 1 if enough space was available to serialize, 0 otherwise
- * Args: ctx: pointer to a context object
- * Out: output: pointer to an array to store the DER serialization
- * In/Out: outputlen: pointer to a length integer. Initially, this integer
- * should be set to the length of output. After the call
- * it will be set to the length of the serialization (even
- * if 0 was returned).
- * In: sig: pointer to an initialized signature object
- */
-SECP256K1_API int secp256k1_ecdsa_signature_serialize_der(
- const secp256k1_context *ctx,
- unsigned char *output,
- size_t *outputlen,
- const secp256k1_ecdsa_signature *sig
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Serialize an ECDSA signature in compact (64 byte) format.
- *
- * Returns: 1
- * Args: ctx: pointer to a context object
- * Out: output64: pointer to a 64-byte array to store the compact serialization
- * In: sig: pointer to an initialized signature object
- *
- * See secp256k1_ecdsa_signature_parse_compact for details about the encoding.
- */
-SECP256K1_API int secp256k1_ecdsa_signature_serialize_compact(
- const secp256k1_context *ctx,
- unsigned char *output64,
- const secp256k1_ecdsa_signature *sig
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Verify an ECDSA signature.
- *
- * Returns: 1: correct signature
- * 0: incorrect or unparseable signature
- * Args: ctx: pointer to a context object
- * In: sig: the signature being verified.
- * msghash32: the 32-byte message hash being verified.
- * The verifier must make sure to apply a cryptographic
- * hash function to the message by itself and not accept an
- * msghash32 value directly. Otherwise, it would be easy to
- * create a "valid" signature without knowledge of the
- * secret key. See also
- * https://bitcoin.stackexchange.com/a/81116/35586 for more
- * background on this topic.
- * pubkey: pointer to an initialized public key to verify with.
- *
- * To avoid accepting malleable signatures, only ECDSA signatures in lower-S
- * form are accepted.
- *
- * If you need to accept ECDSA signatures from sources that do not obey this
- * rule, apply secp256k1_ecdsa_signature_normalize to the signature prior to
- * verification, but be aware that doing so results in malleable signatures.
- *
- * For details, see the comments for that function.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_verify(
- const secp256k1_context *ctx,
- const secp256k1_ecdsa_signature *sig,
- const unsigned char *msghash32,
- const secp256k1_pubkey *pubkey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Convert a signature to a normalized lower-S form.
- *
- * Returns: 1 if sigin was not normalized, 0 if it already was.
- * Args: ctx: pointer to a context object
- * Out: sigout: pointer to a signature to fill with the normalized form,
- * or copy if the input was already normalized. (can be NULL if
- * you're only interested in whether the input was already
- * normalized).
- * In: sigin: pointer to a signature to check/normalize (can be identical to sigout)
- *
- * With ECDSA a third-party can forge a second distinct signature of the same
- * message, given a single initial signature, but without knowing the key. This
- * is done by negating the S value modulo the order of the curve, 'flipping'
- * the sign of the random point R which is not included in the signature.
- *
- * Forgery of the same message isn't universally problematic, but in systems
- * where message malleability or uniqueness of signatures is important this can
- * cause issues. This forgery can be blocked by all verifiers forcing signers
- * to use a normalized form.
- *
- * The lower-S form reduces the size of signatures slightly on average when
- * variable length encodings (such as DER) are used and is cheap to verify,
- * making it a good choice. Security of always using lower-S is assured because
- * anyone can trivially modify a signature after the fact to enforce this
- * property anyway.
- *
- * The lower S value is always between 0x1 and
- * 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
- * inclusive.
- *
- * No other forms of ECDSA malleability are known and none seem likely, but
- * there is no formal proof that ECDSA, even with this additional restriction,
- * is free of other malleability. Commonly used serialization schemes will also
- * accept various non-unique encodings, so care should be taken when this
- * property is required for an application.
- *
- * The secp256k1_ecdsa_sign function will by default create signatures in the
- * lower-S form, and secp256k1_ecdsa_verify will not accept others. In case
- * signatures come from a system that cannot enforce this property,
- * secp256k1_ecdsa_signature_normalize must be called before verification.
- */
-SECP256K1_API int secp256k1_ecdsa_signature_normalize(
- const secp256k1_context *ctx,
- secp256k1_ecdsa_signature *sigout,
- const secp256k1_ecdsa_signature *sigin
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3);
-
-/** An implementation of RFC6979 (using HMAC-SHA256) as nonce generation function.
- * If a data pointer is passed, it is assumed to be a pointer to 32 bytes of
- * extra entropy.
- */
-SECP256K1_API const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
-
-/** A default safe nonce generation function (currently equal to secp256k1_nonce_function_rfc6979). */
-SECP256K1_API const secp256k1_nonce_function secp256k1_nonce_function_default;
-
-/** Create an ECDSA signature.
- *
- * Returns: 1: signature created
- * 0: the nonce generation function failed, or the secret key was invalid.
- * Args: ctx: pointer to a context object (not secp256k1_context_static).
- * Out: sig: pointer to an array where the signature will be placed.
- * In: msghash32: the 32-byte message hash being signed.
- * seckey: pointer to a 32-byte secret key.
- * noncefp: pointer to a nonce generation function. If NULL,
- * secp256k1_nonce_function_default is used.
- * ndata: pointer to arbitrary data used by the nonce generation function
- * (can be NULL). If it is non-NULL and
- * secp256k1_nonce_function_default is used, then ndata must be a
- * pointer to 32-bytes of additional data.
- *
- * The created signature is always in lower-S form. See
- * secp256k1_ecdsa_signature_normalize for more details.
- */
-SECP256K1_API int secp256k1_ecdsa_sign(
- const secp256k1_context *ctx,
- secp256k1_ecdsa_signature *sig,
- const unsigned char *msghash32,
- const unsigned char *seckey,
- secp256k1_nonce_function noncefp,
- const void *ndata
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Verify an elliptic curve secret key.
- *
- * A secret key is valid if it is not 0 and less than the secp256k1 curve order
- * when interpreted as an integer (most significant byte first). The
- * probability of choosing a 32-byte string uniformly at random which is an
- * invalid secret key is negligible. However, if it does happen it should
- * be assumed that the randomness source is severely broken and there should
- * be no retry.
- *
- * Returns: 1: secret key is valid
- * 0: secret key is invalid
- * Args: ctx: pointer to a context object.
- * In: seckey: pointer to a 32-byte secret key.
- */
-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);
-
-/** Compute the public key for a secret key.
- *
- * Returns: 1: secret was valid, public key stores.
- * 0: secret was invalid, try again.
- * Args: ctx: pointer to a context object (not secp256k1_context_static).
- * Out: pubkey: pointer to the created public key.
- * In: seckey: pointer to a 32-byte secret key.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create(
- const secp256k1_context *ctx,
- secp256k1_pubkey *pubkey,
- const unsigned char *seckey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Negates a secret key in place.
- *
- * Returns: 0 if the given secret key is invalid according to
- * secp256k1_ec_seckey_verify. 1 otherwise
- * Args: ctx: pointer to a context object
- * In/Out: seckey: pointer to the 32-byte secret key to be negated. If the
- * secret key is invalid according to
- * secp256k1_ec_seckey_verify, this function returns 0 and
- * seckey will be set to some unspecified value.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_negate(
- const secp256k1_context *ctx,
- unsigned char *seckey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
-
-/** Same as secp256k1_ec_seckey_negate, but DEPRECATED. Will be removed in
- * future versions. */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_negate(
- const secp256k1_context *ctx,
- unsigned char *seckey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2)
- SECP256K1_DEPRECATED("Use secp256k1_ec_seckey_negate instead");
-
-/** Negates a public key in place.
- *
- * Returns: 1 always
- * Args: ctx: pointer to a context object
- * In/Out: pubkey: pointer to the public key to be negated.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_negate(
- const secp256k1_context *ctx,
- secp256k1_pubkey *pubkey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
-
-/** Tweak a secret key by adding tweak to it.
- *
- * Returns: 0 if the arguments are invalid or the resulting secret key would be
- * invalid (only when the tweak is the negation of the secret key). 1
- * otherwise.
- * Args: ctx: pointer to a context object.
- * In/Out: seckey: pointer to a 32-byte secret key. If the secret key is
- * invalid according to secp256k1_ec_seckey_verify, this
- * function returns 0. seckey will be set to some unspecified
- * value if this function returns 0.
- * In: tweak32: pointer to a 32-byte tweak, which must be valid according to
- * secp256k1_ec_seckey_verify or 32 zero bytes. For uniformly
- * random 32-byte tweaks, the chance of being invalid is
- * negligible (around 1 in 2^128).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_tweak_add(
- const secp256k1_context *ctx,
- unsigned char *seckey,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Same as secp256k1_ec_seckey_tweak_add, but DEPRECATED. Will be removed in
- * future versions. */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add(
- const secp256k1_context *ctx,
- unsigned char *seckey,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3)
- SECP256K1_DEPRECATED("Use secp256k1_ec_seckey_tweak_add instead");
-
-/** Tweak a public key by adding tweak times the generator to it.
- *
- * Returns: 0 if the arguments are invalid or the resulting public key would be
- * invalid (only when the tweak is the negation of the corresponding
- * secret key). 1 otherwise.
- * Args: ctx: pointer to a context object.
- * In/Out: pubkey: pointer to a public key object. pubkey will be set to an
- * invalid value if this function returns 0.
- * In: tweak32: pointer to a 32-byte tweak, which must be valid according to
- * secp256k1_ec_seckey_verify or 32 zero bytes. For uniformly
- * random 32-byte tweaks, the chance of being invalid is
- * negligible (around 1 in 2^128).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add(
- const secp256k1_context *ctx,
- secp256k1_pubkey *pubkey,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Tweak a secret key by multiplying it by a tweak.
- *
- * Returns: 0 if the arguments are invalid. 1 otherwise.
- * Args: ctx: pointer to a context object.
- * In/Out: seckey: pointer to a 32-byte secret key. If the secret key is
- * invalid according to secp256k1_ec_seckey_verify, this
- * function returns 0. seckey will be set to some unspecified
- * value if this function returns 0.
- * In: tweak32: pointer to a 32-byte tweak. If the tweak is invalid according to
- * secp256k1_ec_seckey_verify, this function returns 0. For
- * uniformly random 32-byte arrays the chance of being invalid
- * is negligible (around 1 in 2^128).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_tweak_mul(
- const secp256k1_context *ctx,
- unsigned char *seckey,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Same as secp256k1_ec_seckey_tweak_mul, but DEPRECATED. Will be removed in
- * future versions. */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul(
- const secp256k1_context *ctx,
- unsigned char *seckey,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3)
- SECP256K1_DEPRECATED("Use secp256k1_ec_seckey_tweak_mul instead");
-
-/** Tweak a public key by multiplying it by a tweak value.
- *
- * Returns: 0 if the arguments are invalid. 1 otherwise.
- * Args: ctx: pointer to a context object.
- * In/Out: pubkey: pointer to a public key object. pubkey will be set to an
- * invalid value if this function returns 0.
- * In: tweak32: pointer to a 32-byte tweak. If the tweak is invalid according to
- * secp256k1_ec_seckey_verify, this function returns 0. For
- * uniformly random 32-byte arrays the chance of being invalid
- * is negligible (around 1 in 2^128).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul(
- const secp256k1_context *ctx,
- secp256k1_pubkey *pubkey,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Randomizes the context to provide enhanced protection against side-channel leakage.
- *
- * Returns: 1: randomization successful
- * 0: error
- * Args: ctx: pointer to a context object (not secp256k1_context_static).
- * In: seed32: pointer to a 32-byte random seed (NULL resets to initial state).
- *
- * While secp256k1 code is written and tested to be constant-time no matter what
- * secret values are, it is possible that a compiler may output code which is not,
- * and also that the CPU may not emit the same radio frequencies or draw the same
- * amount of power for all values. Randomization of the context shields against
- * side-channel observations which aim to exploit secret-dependent behaviour in
- * certain computations which involve secret keys.
- *
- * It is highly recommended to call this function on contexts returned from
- * secp256k1_context_create or secp256k1_context_clone (or from the corresponding
- * functions in secp256k1_preallocated.h) before using these contexts to call API
- * functions that perform computations involving secret keys, e.g., signing and
- * public key generation. It is possible to call this function more than once on
- * the same context, and doing so before every few computations involving secret
- * keys is recommended as a defense-in-depth measure. Randomization of the static
- * context secp256k1_context_static is not supported.
- *
- * Currently, the random seed is mainly used for blinding multiplications of a
- * secret scalar with the elliptic curve base point. Multiplications of this
- * kind are performed by exactly those API functions which are documented to
- * require a context that is not secp256k1_context_static. As a rule of thumb,
- * these are all functions which take a secret key (or a keypair) as an input.
- * A notable exception to that rule is the ECDH module, which relies on a different
- * kind of elliptic curve point multiplication and thus does not benefit from
- * enhanced protection against side-channel leakage currently.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize(
- secp256k1_context *ctx,
- const unsigned char *seed32
-) SECP256K1_ARG_NONNULL(1);
-
-/** Add a number of public keys together.
- *
- * Returns: 1: the sum of the public keys is valid.
- * 0: the sum of the public keys is not valid.
- * Args: ctx: pointer to a context object.
- * Out: out: pointer to a public key object for placing the resulting public key.
- * In: ins: pointer to array of pointers to public keys.
- * n: the number of public keys to add together (must be at least 1).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_combine(
- const secp256k1_context *ctx,
- secp256k1_pubkey *out,
- const secp256k1_pubkey * const *ins,
- size_t n
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Compute a tagged hash as defined in BIP-340.
- *
- * This is useful for creating a message hash and achieving domain separation
- * through an application-specific tag. This function returns
- * SHA256(SHA256(tag)||SHA256(tag)||msg). Therefore, tagged hash
- * implementations optimized for a specific tag can precompute the SHA256 state
- * after hashing the tag hashes.
- *
- * Returns: 1 always.
- * Args: ctx: pointer to a context object
- * Out: hash32: pointer to a 32-byte array to store the resulting hash
- * In: tag: pointer to an array containing the tag
- * taglen: length of the tag array
- * msg: pointer to an array containing the message
- * msglen: length of the message array
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_tagged_sha256(
- const secp256k1_context *ctx,
- unsigned char *hash32,
- const unsigned char *tag,
- size_t taglen,
- const unsigned char *msg,
- size_t msglen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(5);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SECP256K1_H */
diff --git a/vendor/secp256k1/include/secp256k1/secp256k1_ecdh.h b/vendor/secp256k1/include/secp256k1/secp256k1_ecdh.h
deleted file mode 100644
index 4d9da34..0000000
--- a/vendor/secp256k1/include/secp256k1/secp256k1_ecdh.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef SECP256K1_ECDH_H
-#define SECP256K1_ECDH_H
-
-#include "secp256k1.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** A pointer to a function that hashes an EC point to obtain an ECDH secret
- *
- * Returns: 1 if the point was successfully hashed.
- * 0 will cause secp256k1_ecdh to fail and return 0.
- * Other return values are not allowed, and the behaviour of
- * secp256k1_ecdh is undefined for other return values.
- * Out: output: pointer to an array to be filled by the function
- * In: x32: pointer to a 32-byte x coordinate
- * y32: pointer to a 32-byte y coordinate
- * data: arbitrary data pointer that is passed through
- */
-typedef int (*secp256k1_ecdh_hash_function)(
- unsigned char *output,
- const unsigned char *x32,
- const unsigned char *y32,
- void *data
-);
-
-/** An implementation of SHA256 hash function that applies to compressed public key.
- * Populates the output parameter with 32 bytes. */
-SECP256K1_API const secp256k1_ecdh_hash_function secp256k1_ecdh_hash_function_sha256;
-
-/** A default ECDH hash function (currently equal to secp256k1_ecdh_hash_function_sha256).
- * Populates the output parameter with 32 bytes. */
-SECP256K1_API const secp256k1_ecdh_hash_function secp256k1_ecdh_hash_function_default;
-
-/** Compute an EC Diffie-Hellman secret in constant time
- *
- * Returns: 1: exponentiation was successful
- * 0: scalar was invalid (zero or overflow) or hashfp returned 0
- * Args: ctx: pointer to a context object.
- * Out: output: pointer to an array to be filled by hashfp.
- * In: pubkey: pointer to a secp256k1_pubkey containing an initialized public key.
- * seckey: a 32-byte scalar with which to multiply the point.
- * hashfp: pointer to a hash function. If NULL,
- * secp256k1_ecdh_hash_function_sha256 is used
- * (in which case, 32 bytes will be written to output).
- * data: arbitrary data pointer that is passed through to hashfp
- * (can be NULL for secp256k1_ecdh_hash_function_sha256).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdh(
- const secp256k1_context *ctx,
- unsigned char *output,
- const secp256k1_pubkey *pubkey,
- const unsigned char *seckey,
- secp256k1_ecdh_hash_function hashfp,
- void *data
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SECP256K1_ECDH_H */
diff --git a/vendor/secp256k1/include/secp256k1/secp256k1_ellswift.h b/vendor/secp256k1/include/secp256k1/secp256k1_ellswift.h
deleted file mode 100644
index 0d1293e..0000000
--- a/vendor/secp256k1/include/secp256k1/secp256k1_ellswift.h
+++ /dev/null
@@ -1,200 +0,0 @@
-#ifndef SECP256K1_ELLSWIFT_H
-#define SECP256K1_ELLSWIFT_H
-
-#include "secp256k1.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* This module provides an implementation of ElligatorSwift as well as a
- * version of x-only ECDH using it (including compatibility with BIP324).
- *
- * ElligatorSwift is described in https://eprint.iacr.org/2022/759 by
- * Chavez-Saab, Rodriguez-Henriquez, and Tibouchi. It permits encoding
- * uniformly chosen public keys as 64-byte arrays which are indistinguishable
- * from uniformly random arrays.
- *
- * Let f be the function from pairs of field elements to point X coordinates,
- * defined as follows (all operations modulo p = 2^256 - 2^32 - 977)
- * f(u,t):
- * - Let C = 0xa2d2ba93507f1df233770c2a797962cc61f6d15da14ecd47d8d27ae1cd5f852,
- * a square root of -3.
- * - If u=0, set u=1 instead.
- * - If t=0, set t=1 instead.
- * - If u^3 + t^2 + 7 = 0, multiply t by 2.
- * - Let X = (u^3 + 7 - t^2) / (2 * t)
- * - Let Y = (X + t) / (C * u)
- * - Return the first in [u + 4 * Y^2, (-X/Y - u) / 2, (X/Y - u) / 2] that is an
- * X coordinate on the curve (at least one of them is, for any u and t).
- *
- * Then an ElligatorSwift encoding of x consists of the 32-byte big-endian
- * encodings of field elements u and t concatenated, where f(u,t) = x.
- * The encoding algorithm is described in the paper, and effectively picks a
- * uniformly random pair (u,t) among those which encode x.
- *
- * If the Y coordinate is relevant, it is given the same parity as t.
- *
- * Changes w.r.t. the paper:
- * - The u=0, t=0, and u^3+t^2+7=0 conditions result in decoding to the point
- * at infinity in the paper. Here they are remapped to finite points.
- * - The paper uses an additional encoding bit for the parity of y. Here the
- * parity of t is used (negating t does not affect the decoded x coordinate,
- * so this is possible).
- *
- * For mathematical background about the scheme, see the doc/ellswift.md file.
- */
-
-/** A pointer to a function used by secp256k1_ellswift_xdh to hash the shared X
- * coordinate along with the encoded public keys to a uniform shared secret.
- *
- * Returns: 1 if a shared secret was successfully computed.
- * 0 will cause secp256k1_ellswift_xdh to fail and return 0.
- * Other return values are not allowed, and the behaviour of
- * secp256k1_ellswift_xdh is undefined for other return values.
- * Out: output: pointer to an array to be filled by the function
- * In: x32: pointer to the 32-byte serialized X coordinate
- * of the resulting shared point (will not be NULL)
- * ell_a64: pointer to the 64-byte encoded public key of party A
- * (will not be NULL)
- * ell_b64: pointer to the 64-byte encoded public key of party B
- * (will not be NULL)
- * data: arbitrary data pointer that is passed through
- */
-typedef int (*secp256k1_ellswift_xdh_hash_function)(
- unsigned char *output,
- const unsigned char *x32,
- const unsigned char *ell_a64,
- const unsigned char *ell_b64,
- void *data
-);
-
-/** An implementation of an secp256k1_ellswift_xdh_hash_function which uses
- * SHA256(prefix64 || ell_a64 || ell_b64 || x32), where prefix64 is the 64-byte
- * array pointed to by data. */
-SECP256K1_API const secp256k1_ellswift_xdh_hash_function secp256k1_ellswift_xdh_hash_function_prefix;
-
-/** An implementation of an secp256k1_ellswift_xdh_hash_function compatible with
- * BIP324. It returns H_tag(ell_a64 || ell_b64 || x32), where H_tag is the
- * BIP340 tagged hash function with tag "bip324_ellswift_xonly_ecdh". Equivalent
- * to secp256k1_ellswift_xdh_hash_function_prefix with prefix64 set to
- * SHA256("bip324_ellswift_xonly_ecdh")||SHA256("bip324_ellswift_xonly_ecdh").
- * The data argument is ignored. */
-SECP256K1_API const secp256k1_ellswift_xdh_hash_function secp256k1_ellswift_xdh_hash_function_bip324;
-
-/** Construct a 64-byte ElligatorSwift encoding of a given pubkey.
- *
- * Returns: 1 always.
- * Args: ctx: pointer to a context object
- * Out: ell64: pointer to a 64-byte array to be filled
- * In: pubkey: pointer to a secp256k1_pubkey containing an
- * initialized public key
- * rnd32: pointer to 32 bytes of randomness
- *
- * It is recommended that rnd32 consists of 32 uniformly random bytes, not
- * known to any adversary trying to detect whether public keys are being
- * encoded, though 16 bytes of randomness (padded to an array of 32 bytes,
- * e.g., with zeros) suffice to make the result indistinguishable from
- * uniform. The randomness in rnd32 must not be a deterministic function of
- * the pubkey (it can be derived from the private key, though).
- *
- * It is not guaranteed that the computed encoding is stable across versions
- * of the library, even if all arguments to this function (including rnd32)
- * are the same.
- *
- * This function runs in variable time.
- */
-SECP256K1_API int secp256k1_ellswift_encode(
- const secp256k1_context *ctx,
- unsigned char *ell64,
- const secp256k1_pubkey *pubkey,
- const unsigned char *rnd32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Decode a 64-bytes ElligatorSwift encoded public key.
- *
- * Returns: always 1
- * Args: ctx: pointer to a context object
- * Out: pubkey: pointer to a secp256k1_pubkey that will be filled
- * In: ell64: pointer to a 64-byte array to decode
- *
- * This function runs in variable time.
- */
-SECP256K1_API int secp256k1_ellswift_decode(
- const secp256k1_context *ctx,
- secp256k1_pubkey *pubkey,
- const unsigned char *ell64
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Compute an ElligatorSwift public key for a secret key.
- *
- * Returns: 1: secret was valid, public key was stored.
- * 0: secret was invalid, try again.
- * Args: ctx: pointer to a context object
- * Out: ell64: pointer to a 64-byte array to receive the ElligatorSwift
- * public key
- * In: seckey32: pointer to a 32-byte secret key
- * auxrnd32: (optional) pointer to 32 bytes of randomness
- *
- * Constant time in seckey and auxrnd32, but not in the resulting public key.
- *
- * It is recommended that auxrnd32 contains 32 uniformly random bytes, though
- * it is optional (and does result in encodings that are indistinguishable from
- * uniform even without any auxrnd32). It differs from the (mandatory) rnd32
- * argument to secp256k1_ellswift_encode in this regard.
- *
- * This function can be used instead of calling secp256k1_ec_pubkey_create
- * followed by secp256k1_ellswift_encode. It is safer, as it uses the secret
- * key as entropy for the encoding (supplemented with auxrnd32, if provided).
- *
- * Like secp256k1_ellswift_encode, this function does not guarantee that the
- * computed encoding is stable across versions of the library, even if all
- * arguments (including auxrnd32) are the same.
- */
-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);
-
-/** Given a private key, and ElligatorSwift public keys sent in both directions,
- * compute a shared secret using x-only Elliptic Curve Diffie-Hellman (ECDH).
- *
- * Returns: 1: shared secret was successfully computed
- * 0: secret was invalid or hashfp returned 0
- * Args: ctx: pointer to a context object.
- * Out: output: pointer to an array to be filled by hashfp.
- * In: ell_a64: pointer to the 64-byte encoded public key of party A
- * (will not be NULL)
- * ell_b64: pointer to the 64-byte encoded public key of party B
- * (will not be NULL)
- * seckey32: pointer to our 32-byte secret key
- * party: boolean indicating which party we are: zero if we are
- * party A, non-zero if we are party B. seckey32 must be
- * the private key corresponding to that party's ell_?64.
- * This correspondence is not checked.
- * hashfp: pointer to a hash function.
- * data: arbitrary data pointer passed through to hashfp.
- *
- * Constant time in seckey32.
- *
- * This function is more efficient than decoding the public keys, and performing
- * ECDH on them.
- */
-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);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SECP256K1_ELLSWIFT_H */
diff --git a/vendor/secp256k1/include/secp256k1/secp256k1_extrakeys.h b/vendor/secp256k1/include/secp256k1/secp256k1_extrakeys.h
deleted file mode 100644
index 48c9869..0000000
--- a/vendor/secp256k1/include/secp256k1/secp256k1_extrakeys.h
+++ /dev/null
@@ -1,250 +0,0 @@
-#ifndef SECP256K1_EXTRAKEYS_H
-#define SECP256K1_EXTRAKEYS_H
-
-#include "secp256k1.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Opaque data structure that holds a parsed and valid "x-only" public key.
- * An x-only pubkey encodes a point whose Y coordinate is even. It is
- * serialized using only its X coordinate (32 bytes). See BIP-340 for more
- * information about x-only pubkeys.
- *
- * The exact representation of data inside is implementation defined and not
- * guaranteed to be portable between different platforms or versions. It is
- * however guaranteed to be 64 bytes in size, and can be safely copied/moved.
- * If you need to convert to a format suitable for storage, transmission, use
- * use secp256k1_xonly_pubkey_serialize and secp256k1_xonly_pubkey_parse. To
- * compare keys, use secp256k1_xonly_pubkey_cmp.
- */
-typedef struct secp256k1_xonly_pubkey {
- unsigned char data[64];
-} secp256k1_xonly_pubkey;
-
-/** Opaque data structure that holds a keypair consisting of a secret and a
- * public key.
- *
- * The exact representation of data inside is implementation defined and not
- * guaranteed to be portable between different platforms or versions. It is
- * however guaranteed to be 96 bytes in size, and can be safely copied/moved.
- */
-typedef struct secp256k1_keypair {
- unsigned char data[96];
-} secp256k1_keypair;
-
-/** Parse a 32-byte sequence into a xonly_pubkey object.
- *
- * Returns: 1 if the public key was fully valid.
- * 0 if the public key could not be parsed or is invalid.
- *
- * Args: ctx: pointer to a context object.
- * Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to a
- * parsed version of input. If not, it's set to an invalid value.
- * In: input32: pointer to a serialized xonly_pubkey.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_parse(
- const secp256k1_context *ctx,
- secp256k1_xonly_pubkey *pubkey,
- const unsigned char *input32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize an xonly_pubkey object into a 32-byte sequence.
- *
- * Returns: 1 always.
- *
- * Args: ctx: pointer to a context object.
- * Out: output32: pointer to a 32-byte array to place the serialized key in.
- * In: pubkey: pointer to a secp256k1_xonly_pubkey containing an initialized public key.
- */
-SECP256K1_API int secp256k1_xonly_pubkey_serialize(
- const secp256k1_context *ctx,
- unsigned char *output32,
- const secp256k1_xonly_pubkey *pubkey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Compare two x-only public keys using lexicographic order
- *
- * Returns: <0 if the first public key is less than the second
- * >0 if the first public key is greater than the second
- * 0 if the two public keys are equal
- * Args: ctx: pointer to a context object.
- * In: pubkey1: first public key to compare
- * pubkey2: second public key to compare
- */
-SECP256K1_API int secp256k1_xonly_pubkey_cmp(
- const secp256k1_context *ctx,
- const secp256k1_xonly_pubkey *pk1,
- const secp256k1_xonly_pubkey *pk2
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Converts a secp256k1_pubkey into a secp256k1_xonly_pubkey.
- *
- * Returns: 1 always.
- *
- * Args: ctx: pointer to a context object.
- * Out: xonly_pubkey: pointer to an x-only public key object for placing the converted public key.
- * pk_parity: Ignored if NULL. Otherwise, pointer to an integer that
- * will be set to 1 if the point encoded by xonly_pubkey is
- * the negation of the pubkey and set to 0 otherwise.
- * In: pubkey: pointer to a public key that is converted.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_from_pubkey(
- const secp256k1_context *ctx,
- secp256k1_xonly_pubkey *xonly_pubkey,
- int *pk_parity,
- const secp256k1_pubkey *pubkey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4);
-
-/** Tweak an x-only public key by adding the generator multiplied with tweak32
- * to it.
- *
- * Note that the resulting point can not in general be represented by an x-only
- * pubkey because it may have an odd Y coordinate. Instead, the output_pubkey
- * is a normal secp256k1_pubkey.
- *
- * Returns: 0 if the arguments are invalid or the resulting public key would be
- * invalid (only when the tweak is the negation of the corresponding
- * secret key). 1 otherwise.
- *
- * Args: ctx: pointer to a context object.
- * Out: output_pubkey: pointer to a public key to store the result. Will be set
- * to an invalid value if this function returns 0.
- * In: internal_pubkey: pointer to an x-only pubkey to apply the tweak to.
- * tweak32: pointer to a 32-byte tweak, which must be valid
- * according to secp256k1_ec_seckey_verify or 32 zero
- * bytes. For uniformly random 32-byte tweaks, the chance of
- * being invalid is negligible (around 1 in 2^128).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_tweak_add(
- const secp256k1_context *ctx,
- secp256k1_pubkey *output_pubkey,
- const secp256k1_xonly_pubkey *internal_pubkey,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Checks that a tweaked pubkey is the result of calling
- * secp256k1_xonly_pubkey_tweak_add with internal_pubkey and tweak32.
- *
- * The tweaked pubkey is represented by its 32-byte x-only serialization and
- * its pk_parity, which can both be obtained by converting the result of
- * tweak_add to a secp256k1_xonly_pubkey.
- *
- * Note that this alone does _not_ verify that the tweaked pubkey is a
- * commitment. If the tweak is not chosen in a specific way, the tweaked pubkey
- * can easily be the result of a different internal_pubkey and tweak.
- *
- * Returns: 0 if the arguments are invalid or the tweaked pubkey is not the
- * result of tweaking the internal_pubkey with tweak32. 1 otherwise.
- * Args: ctx: pointer to a context object.
- * In: tweaked_pubkey32: pointer to a serialized xonly_pubkey.
- * tweaked_pk_parity: the parity of the tweaked pubkey (whose serialization
- * is passed in as tweaked_pubkey32). This must match the
- * pk_parity value that is returned when calling
- * secp256k1_xonly_pubkey with the tweaked pubkey, or
- * this function will fail.
- * internal_pubkey: pointer to an x-only public key object to apply the tweak to.
- * tweak32: pointer to a 32-byte tweak.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_tweak_add_check(
- const secp256k1_context *ctx,
- const unsigned char *tweaked_pubkey32,
- int tweaked_pk_parity,
- const secp256k1_xonly_pubkey *internal_pubkey,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5);
-
-/** Compute the keypair for a valid secret key.
- *
- * See the documentation of `secp256k1_ec_seckey_verify` for more information
- * about the validity of secret keys.
- *
- * Returns: 1: secret key is valid
- * 0: secret key is invalid
- * Args: ctx: pointer to a context object (not secp256k1_context_static).
- * Out: keypair: pointer to the created keypair.
- * In: seckey: pointer to a 32-byte secret key.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_create(
- const secp256k1_context *ctx,
- secp256k1_keypair *keypair,
- const unsigned char *seckey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Get the secret key from a keypair.
- *
- * Returns: 1 always.
- * Args: ctx: pointer to a context object.
- * Out: seckey: pointer to a 32-byte buffer for the secret key.
- * In: keypair: pointer to a keypair.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_sec(
- const secp256k1_context *ctx,
- unsigned char *seckey,
- const secp256k1_keypair *keypair
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Get the public key from a keypair.
- *
- * Returns: 1 always.
- * Args: ctx: pointer to a context object.
- * Out: pubkey: pointer to a pubkey object, set to the keypair public key.
- * In: keypair: pointer to a keypair.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_pub(
- const secp256k1_context *ctx,
- secp256k1_pubkey *pubkey,
- const secp256k1_keypair *keypair
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Get the x-only public key from a keypair.
- *
- * This is the same as calling secp256k1_keypair_pub and then
- * secp256k1_xonly_pubkey_from_pubkey.
- *
- * Returns: 1 always.
- * Args: ctx: pointer to a context object.
- * Out: pubkey: pointer to an xonly_pubkey object, set to the keypair
- * public key after converting it to an xonly_pubkey.
- * pk_parity: Ignored if NULL. Otherwise, pointer to an integer that will be set to the
- * pk_parity argument of secp256k1_xonly_pubkey_from_pubkey.
- * In: keypair: pointer to a keypair.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_xonly_pub(
- const secp256k1_context *ctx,
- secp256k1_xonly_pubkey *pubkey,
- int *pk_parity,
- const secp256k1_keypair *keypair
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4);
-
-/** Tweak a keypair by adding tweak32 to the secret key and updating the public
- * key accordingly.
- *
- * Calling this function and then secp256k1_keypair_pub results in the same
- * public key as calling secp256k1_keypair_xonly_pub and then
- * secp256k1_xonly_pubkey_tweak_add.
- *
- * Returns: 0 if the arguments are invalid or the resulting keypair would be
- * invalid (only when the tweak is the negation of the keypair's
- * secret key). 1 otherwise.
- *
- * Args: ctx: pointer to a context object.
- * In/Out: keypair: pointer to a keypair to apply the tweak to. Will be set to
- * an invalid value if this function returns 0.
- * In: tweak32: pointer to a 32-byte tweak, which must be valid according to
- * secp256k1_ec_seckey_verify or 32 zero bytes. For uniformly
- * random 32-byte tweaks, the chance of being invalid is
- * negligible (around 1 in 2^128).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_xonly_tweak_add(
- const secp256k1_context *ctx,
- secp256k1_keypair *keypair,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SECP256K1_EXTRAKEYS_H */
diff --git a/vendor/secp256k1/include/secp256k1/secp256k1_musig.h b/vendor/secp256k1/include/secp256k1/secp256k1_musig.h
deleted file mode 100644
index 11b8f08..0000000
--- a/vendor/secp256k1/include/secp256k1/secp256k1_musig.h
+++ /dev/null
@@ -1,588 +0,0 @@
-#ifndef SECP256K1_MUSIG_H
-#define SECP256K1_MUSIG_H
-
-#include "secp256k1_extrakeys.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-
-/** This module implements BIP 327 "MuSig2 for BIP340-compatible
- * Multi-Signatures"
- * (https://github.com/bitcoin/bips/blob/master/bip-0327.mediawiki)
- * v1.0.0. You can find an example demonstrating the musig module in
- * examples/musig.c.
- *
- * The module also supports BIP 341 ("Taproot") public key tweaking.
- *
- * It is recommended to read the documentation in this include file carefully.
- * Further notes on API usage can be found in doc/musig.md
- *
- * Since the first version of MuSig is essentially replaced by MuSig2, we use
- * MuSig, musig and MuSig2 synonymously unless noted otherwise.
- */
-
-/** Opaque data structures
- *
- * The exact representation of data inside the opaque data structures is
- * implementation defined and not guaranteed to be portable between different
- * platforms or versions. With the exception of `secp256k1_musig_secnonce`, the
- * data structures can be safely copied/moved. If you need to convert to a
- * format suitable for storage, transmission, or comparison, use the
- * corresponding serialization and parsing functions.
- */
-
-/** Opaque data structure that caches information about public key aggregation.
- *
- * Guaranteed to be 197 bytes in size. No serialization and parsing functions
- * (yet).
- */
-typedef struct secp256k1_musig_keyagg_cache {
- unsigned char data[197];
-} secp256k1_musig_keyagg_cache;
-
-/** Opaque data structure that holds a signer's _secret_ nonce.
- *
- * Guaranteed to be 132 bytes in size.
- *
- * WARNING: This structure MUST NOT be copied or read or written to directly. A
- * signer who is online throughout the whole process and can keep this
- * structure in memory can use the provided API functions for a safe standard
- * workflow.
- *
- * Copying this data structure can result in nonce reuse which will leak the
- * secret signing key.
- */
-typedef struct secp256k1_musig_secnonce {
- unsigned char data[132];
-} secp256k1_musig_secnonce;
-
-/** Opaque data structure that holds a signer's public nonce.
- *
- * Guaranteed to be 132 bytes in size. Serialized and parsed with
- * `musig_pubnonce_serialize` and `musig_pubnonce_parse`.
- */
-typedef struct secp256k1_musig_pubnonce {
- unsigned char data[132];
-} secp256k1_musig_pubnonce;
-
-/** Opaque data structure that holds an aggregate public nonce.
- *
- * Guaranteed to be 132 bytes in size. Serialized and parsed with
- * `musig_aggnonce_serialize` and `musig_aggnonce_parse`.
- */
-typedef struct secp256k1_musig_aggnonce {
- unsigned char data[132];
-} secp256k1_musig_aggnonce;
-
-/** Opaque data structure that holds a MuSig session.
- *
- * This structure is not required to be kept secret for the signing protocol to
- * be secure. Guaranteed to be 133 bytes in size. No serialization and parsing
- * functions (yet).
- */
-typedef struct secp256k1_musig_session {
- unsigned char data[133];
-} secp256k1_musig_session;
-
-/** Opaque data structure that holds a partial MuSig signature.
- *
- * Guaranteed to be 36 bytes in size. Serialized and parsed with
- * `musig_partial_sig_serialize` and `musig_partial_sig_parse`.
- */
-typedef struct secp256k1_musig_partial_sig {
- unsigned char data[36];
-} secp256k1_musig_partial_sig;
-
-/** Parse a signer's public nonce.
- *
- * Returns: 1 when the nonce could be parsed, 0 otherwise.
- * Args: ctx: pointer to a context object
- * Out: nonce: pointer to a nonce object
- * In: in66: pointer to the 66-byte nonce to be parsed
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_pubnonce_parse(
- const secp256k1_context *ctx,
- secp256k1_musig_pubnonce *nonce,
- const unsigned char *in66
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize a signer's public nonce
- *
- * Returns: 1 always
- * Args: ctx: pointer to a context object
- * Out: out66: pointer to a 66-byte array to store the serialized nonce
- * In: nonce: pointer to the nonce
- */
-SECP256K1_API int secp256k1_musig_pubnonce_serialize(
- const secp256k1_context *ctx,
- unsigned char *out66,
- const secp256k1_musig_pubnonce *nonce
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Parse an aggregate public nonce.
- *
- * Returns: 1 when the nonce could be parsed, 0 otherwise.
- * Args: ctx: pointer to a context object
- * Out: nonce: pointer to a nonce object
- * In: in66: pointer to the 66-byte nonce to be parsed
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_aggnonce_parse(
- const secp256k1_context *ctx,
- secp256k1_musig_aggnonce *nonce,
- const unsigned char *in66
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize an aggregate public nonce
- *
- * Returns: 1 always
- * Args: ctx: pointer to a context object
- * Out: out66: pointer to a 66-byte array to store the serialized nonce
- * In: nonce: pointer to the nonce
- */
-SECP256K1_API int secp256k1_musig_aggnonce_serialize(
- const secp256k1_context *ctx,
- unsigned char *out66,
- const secp256k1_musig_aggnonce *nonce
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Parse a MuSig partial signature.
- *
- * Returns: 1 when the signature could be parsed, 0 otherwise.
- * Args: ctx: pointer to a context object
- * Out: sig: pointer to a signature object
- * In: in32: pointer to the 32-byte signature to be parsed
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_partial_sig_parse(
- const secp256k1_context *ctx,
- secp256k1_musig_partial_sig *sig,
- const unsigned char *in32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize a MuSig partial signature
- *
- * Returns: 1 always
- * Args: ctx: pointer to a context object
- * Out: out32: pointer to a 32-byte array to store the serialized signature
- * In: sig: pointer to the signature
- */
-SECP256K1_API int secp256k1_musig_partial_sig_serialize(
- const secp256k1_context *ctx,
- unsigned char *out32,
- const secp256k1_musig_partial_sig *sig
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Computes an aggregate public key and uses it to initialize a keyagg_cache
- *
- * Different orders of `pubkeys` result in different `agg_pk`s.
- *
- * Before aggregating, the pubkeys can be sorted with `secp256k1_ec_pubkey_sort`
- * which ensures the same `agg_pk` result for the same multiset of pubkeys.
- * This is useful to do before `pubkey_agg`, such that the order of pubkeys
- * does not affect the aggregate public key.
- *
- * Returns: 0 if the arguments are invalid, 1 otherwise
- * Args: ctx: pointer to a context object
- * Out: agg_pk: the MuSig-aggregated x-only public key. If you do not need it,
- * this arg can be NULL.
- * keyagg_cache: if non-NULL, pointer to a musig_keyagg_cache struct that
- * is required for signing (or observing the signing session
- * and verifying partial signatures).
- * In: pubkeys: input array of pointers to public keys to aggregate. The order
- * is important; a different order will result in a different
- * aggregate public key.
- * n_pubkeys: length of pubkeys array. Must be greater than 0.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_pubkey_agg(
- const secp256k1_context *ctx,
- secp256k1_xonly_pubkey *agg_pk,
- secp256k1_musig_keyagg_cache *keyagg_cache,
- const secp256k1_pubkey * const *pubkeys,
- size_t n_pubkeys
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(4);
-
-/** Obtain the aggregate public key from a keyagg_cache.
- *
- * This is only useful if you need the non-xonly public key, in particular for
- * plain (non-xonly) tweaking or batch-verifying multiple key aggregations
- * (not implemented).
- *
- * Returns: 0 if the arguments are invalid, 1 otherwise
- * Args: ctx: pointer to a context object
- * Out: agg_pk: the MuSig-aggregated public key.
- * In: keyagg_cache: pointer to a `musig_keyagg_cache` struct initialized by
- * `musig_pubkey_agg`
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_pubkey_get(
- const secp256k1_context *ctx,
- secp256k1_pubkey *agg_pk,
- const secp256k1_musig_keyagg_cache *keyagg_cache
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Apply plain "EC" tweaking to a public key in a given keyagg_cache by adding
- * the generator multiplied with `tweak32` to it. This is useful for deriving
- * child keys from an aggregate public key via BIP 32 where `tweak32` is set to
- * a hash as defined in BIP 32.
- *
- * Callers are responsible for deriving `tweak32` in a way that does not reduce
- * the security of MuSig (for example, by following BIP 32).
- *
- * The tweaking method is the same as `secp256k1_ec_pubkey_tweak_add`. So after
- * the following pseudocode buf and buf2 have identical contents (absent
- * earlier failures).
- *
- * secp256k1_musig_pubkey_agg(..., keyagg_cache, pubkeys, ...)
- * secp256k1_musig_pubkey_get(..., agg_pk, keyagg_cache)
- * secp256k1_musig_pubkey_ec_tweak_add(..., output_pk, tweak32, keyagg_cache)
- * secp256k1_ec_pubkey_serialize(..., buf, ..., output_pk, ...)
- * secp256k1_ec_pubkey_tweak_add(..., agg_pk, tweak32)
- * secp256k1_ec_pubkey_serialize(..., buf2, ..., agg_pk, ...)
- *
- * This function is required if you want to _sign_ for a tweaked aggregate key.
- * If you are only computing a public key but not intending to create a
- * signature for it, use `secp256k1_ec_pubkey_tweak_add` instead.
- *
- * Returns: 0 if the arguments are invalid, 1 otherwise
- * Args: ctx: pointer to a context object
- * Out: output_pubkey: pointer to a public key to store the result. Will be set
- * to an invalid value if this function returns 0. If you
- * do not need it, this arg can be NULL.
- * In/Out: keyagg_cache: pointer to a `musig_keyagg_cache` struct initialized by
- * `musig_pubkey_agg`
- * In: tweak32: pointer to a 32-byte tweak. The tweak is valid if it passes
- * `secp256k1_ec_seckey_verify` and is not equal to the
- * secret key corresponding to the public key represented
- * by keyagg_cache or its negation. For uniformly random
- * 32-byte arrays the chance of being invalid is
- * negligible (around 1 in 2^128).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_pubkey_ec_tweak_add(
- const secp256k1_context *ctx,
- secp256k1_pubkey *output_pubkey,
- secp256k1_musig_keyagg_cache *keyagg_cache,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Apply x-only tweaking to a public key in a given keyagg_cache by adding the
- * generator multiplied with `tweak32` to it. This is useful for creating
- * Taproot outputs where `tweak32` is set to a TapTweak hash as defined in BIP
- * 341.
- *
- * Callers are responsible for deriving `tweak32` in a way that does not reduce
- * the security of MuSig (for example, by following Taproot BIP 341).
- *
- * The tweaking method is the same as `secp256k1_xonly_pubkey_tweak_add`. So in
- * the following pseudocode xonly_pubkey_tweak_add_check (absent earlier
- * failures) returns 1.
- *
- * secp256k1_musig_pubkey_agg(..., agg_pk, keyagg_cache, pubkeys, ...)
- * secp256k1_musig_pubkey_xonly_tweak_add(..., output_pk, keyagg_cache, tweak32)
- * secp256k1_xonly_pubkey_serialize(..., buf, output_pk)
- * secp256k1_xonly_pubkey_tweak_add_check(..., buf, ..., agg_pk, tweak32)
- *
- * This function is required if you want to _sign_ for a tweaked aggregate key.
- * If you are only computing a public key but not intending to create a
- * signature for it, use `secp256k1_xonly_pubkey_tweak_add` instead.
- *
- * Returns: 0 if the arguments are invalid, 1 otherwise
- * Args: ctx: pointer to a context object
- * Out: output_pubkey: pointer to a public key to store the result. Will be set
- * to an invalid value if this function returns 0. If you
- * do not need it, this arg can be NULL.
- * In/Out: keyagg_cache: pointer to a `musig_keyagg_cache` struct initialized by
- * `musig_pubkey_agg`
- * In: tweak32: pointer to a 32-byte tweak. The tweak is valid if it passes
- * `secp256k1_ec_seckey_verify` and is not equal to the
- * secret key corresponding to the public key represented
- * by keyagg_cache or its negation. For uniformly random
- * 32-byte arrays the chance of being invalid is
- * negligible (around 1 in 2^128).
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_pubkey_xonly_tweak_add(
- const secp256k1_context *ctx,
- secp256k1_pubkey *output_pubkey,
- secp256k1_musig_keyagg_cache *keyagg_cache,
- const unsigned char *tweak32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Starts a signing session by generating a nonce
- *
- * This function outputs a secret nonce that will be required for signing and a
- * corresponding public nonce that is intended to be sent to other signers.
- *
- * MuSig differs from regular Schnorr signing in that implementers _must_ take
- * special care to not reuse a nonce. This can be ensured by following these rules:
- *
- * 1. Each call to this function must have a UNIQUE session_secrand32 that must
- * NOT BE REUSED in subsequent calls to this function and must be KEPT
- * SECRET (even from other signers).
- * 2. If you already know the seckey, message or aggregate public key
- * cache, they can be optionally provided to derive the nonce and increase
- * misuse-resistance. The extra_input32 argument can be used to provide
- * additional data that does not repeat in normal scenarios, such as the
- * current time.
- * 3. Avoid copying (or serializing) the secnonce. This reduces the possibility
- * that it is used more than once for signing.
- *
- * If you don't have access to good randomness for session_secrand32, but you
- * have access to a non-repeating counter, then see
- * secp256k1_musig_nonce_gen_counter.
- *
- * Remember that nonce reuse will leak the secret key!
- * Note that using the same seckey for multiple MuSig sessions is fine.
- *
- * Returns: 0 if the arguments are invalid and 1 otherwise
- * Args: ctx: pointer to a context object (not secp256k1_context_static)
- * Out: secnonce: pointer to a structure to store the secret nonce
- * pubnonce: pointer to a structure to store the public nonce
- * In/Out:
- * session_secrand32: a 32-byte session_secrand32 as explained above. Must be unique to this
- * call to secp256k1_musig_nonce_gen and must be uniformly
- * random. If the function call is successful, the
- * session_secrand32 buffer is invalidated to prevent reuse.
- * In:
- * seckey: the 32-byte secret key that will later be used for signing, if
- * already known (can be NULL)
- * pubkey: public key of the signer creating the nonce. The secnonce
- * output of this function cannot be used to sign for any
- * other public key. While the public key should correspond
- * to the provided seckey, a mismatch will not cause the
- * function to return 0.
- * msg32: the 32-byte message that will later be signed, if already known
- * (can be NULL)
- * keyagg_cache: pointer to the keyagg_cache that was used to create the aggregate
- * (and potentially tweaked) public key if already known
- * (can be NULL)
- * extra_input32: an optional 32-byte array that is input to the nonce
- * derivation function (can be NULL)
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_nonce_gen(
- const secp256k1_context *ctx,
- secp256k1_musig_secnonce *secnonce,
- secp256k1_musig_pubnonce *pubnonce,
- unsigned char *session_secrand32,
- const unsigned char *seckey,
- const secp256k1_pubkey *pubkey,
- const unsigned char *msg32,
- const secp256k1_musig_keyagg_cache *keyagg_cache,
- const unsigned char *extra_input32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(6);
-
-
-/** Alternative way to generate a nonce and start a signing session
- *
- * This function outputs a secret nonce that will be required for signing and a
- * corresponding public nonce that is intended to be sent to other signers.
- *
- * This function differs from `secp256k1_musig_nonce_gen` by accepting a
- * non-repeating counter value instead of a secret random value. This requires
- * that a secret key is provided to `secp256k1_musig_nonce_gen_counter`
- * (through the keypair argument), as opposed to `secp256k1_musig_nonce_gen`
- * where the seckey argument is optional.
- *
- * MuSig differs from regular Schnorr signing in that implementers _must_ take
- * special care to not reuse a nonce. This can be ensured by following these rules:
- *
- * 1. The nonrepeating_cnt argument must be a counter value that never repeats,
- * i.e., you must never call `secp256k1_musig_nonce_gen_counter` twice with
- * the same keypair and nonrepeating_cnt value. For example, this implies
- * that if the same keypair is used with `secp256k1_musig_nonce_gen_counter`
- * on multiple devices, none of the devices should have the same counter
- * value as any other device.
- * 2. If the seckey, message or aggregate public key cache is already available
- * at this stage, any of these can be optionally provided, in which case
- * they will be used in the derivation of the nonce and increase
- * misuse-resistance. The extra_input32 argument can be used to provide
- * additional data that does not repeat in normal scenarios, such as the
- * current time.
- * 3. Avoid copying (or serializing) the secnonce. This reduces the possibility
- * that it is used more than once for signing.
- *
- * Remember that nonce reuse will leak the secret key!
- * Note that using the same keypair for multiple MuSig sessions is fine.
- *
- * Returns: 0 if the arguments are invalid and 1 otherwise
- * Args: ctx: pointer to a context object (not secp256k1_context_static)
- * Out: secnonce: pointer to a structure to store the secret nonce
- * pubnonce: pointer to a structure to store the public nonce
- * In:
- * nonrepeating_cnt: the value of a counter as explained above. Must be
- * unique to this call to secp256k1_musig_nonce_gen.
- * keypair: keypair of the signer creating the nonce. The secnonce
- * output of this function cannot be used to sign for any
- * other keypair.
- * msg32: the 32-byte message that will later be signed, if already known
- * (can be NULL)
- * keyagg_cache: pointer to the keyagg_cache that was used to create the aggregate
- * (and potentially tweaked) public key if already known
- * (can be NULL)
- * extra_input32: an optional 32-byte array that is input to the nonce
- * derivation function (can be NULL)
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_nonce_gen_counter(
- const secp256k1_context *ctx,
- secp256k1_musig_secnonce *secnonce,
- secp256k1_musig_pubnonce *pubnonce,
- uint64_t nonrepeating_cnt,
- const secp256k1_keypair *keypair,
- const unsigned char *msg32,
- const secp256k1_musig_keyagg_cache *keyagg_cache,
- const unsigned char *extra_input32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(5);
-
-/** Aggregates the nonces of all signers into a single nonce
- *
- * This can be done by an untrusted party to reduce the communication
- * between signers. Instead of everyone sending nonces to everyone else, there
- * can be one party receiving all nonces, aggregating the nonces with this
- * function and then sending only the aggregate nonce back to the signers.
- *
- * If the aggregator does not compute the aggregate nonce correctly, the final
- * signature will be invalid.
- *
- * Returns: 0 if the arguments are invalid, 1 otherwise
- * Args: ctx: pointer to a context object
- * Out: aggnonce: pointer to an aggregate public nonce object for
- * musig_nonce_process
- * In: pubnonces: array of pointers to public nonces sent by the
- * signers
- * n_pubnonces: number of elements in the pubnonces array. Must be
- * greater than 0.
- */
-SECP256K1_API int secp256k1_musig_nonce_agg(
- const secp256k1_context *ctx,
- secp256k1_musig_aggnonce *aggnonce,
- const secp256k1_musig_pubnonce * const *pubnonces,
- size_t n_pubnonces
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Takes the aggregate nonce and creates a session that is required for signing
- * and verification of partial signatures.
- *
- * Returns: 0 if the arguments are invalid, 1 otherwise
- * Args: ctx: pointer to a context object
- * Out: session: pointer to a struct to store the session
- * In: aggnonce: pointer to an aggregate public nonce object that is the
- * output of musig_nonce_agg
- * msg32: the 32-byte message to sign
- * keyagg_cache: pointer to the keyagg_cache that was used to create the
- * aggregate (and potentially tweaked) pubkey
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_nonce_process(
- const secp256k1_context *ctx,
- secp256k1_musig_session *session,
- const secp256k1_musig_aggnonce *aggnonce,
- const unsigned char *msg32,
- const secp256k1_musig_keyagg_cache *keyagg_cache
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5);
-
-/** Produces a partial signature
- *
- * This function overwrites the given secnonce with zeros and will abort if given a
- * secnonce that is all zeros. This is a best effort attempt to protect against nonce
- * reuse. However, this is of course easily defeated if the secnonce has been
- * copied (or serialized). Remember that nonce reuse will leak the secret key!
- *
- * For signing to succeed, the secnonce provided to this function must have
- * been generated for the provided keypair. This means that when signing for a
- * keypair consisting of a seckey and pubkey, the secnonce must have been
- * created by calling musig_nonce_gen with that pubkey. Otherwise, the
- * illegal_callback is called.
- *
- * This function does not verify the output partial signature, deviating from
- * the BIP 327 specification. It is recommended to verify the output partial
- * signature with `secp256k1_musig_partial_sig_verify` to prevent random or
- * adversarially provoked computation errors.
- *
- * Returns: 0 if the arguments are invalid or the provided secnonce has already
- * been used for signing, 1 otherwise
- * Args: ctx: pointer to a context object
- * Out: partial_sig: pointer to struct to store the partial signature
- * In/Out: secnonce: pointer to the secnonce struct created in
- * musig_nonce_gen that has been never used in a
- * partial_sign call before and has been created for the
- * keypair
- * In: keypair: pointer to keypair to sign the message with
- * keyagg_cache: pointer to the keyagg_cache that was output when the
- * aggregate public key for this session
- * session: pointer to the session that was created with
- * musig_nonce_process
- */
-SECP256K1_API int secp256k1_musig_partial_sign(
- const secp256k1_context *ctx,
- secp256k1_musig_partial_sig *partial_sig,
- secp256k1_musig_secnonce *secnonce,
- const secp256k1_keypair *keypair,
- const secp256k1_musig_keyagg_cache *keyagg_cache,
- const secp256k1_musig_session *session
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5) SECP256K1_ARG_NONNULL(6);
-
-/** Verifies an individual signer's partial signature
- *
- * The signature is verified for a specific signing session. In order to avoid
- * accidentally verifying a signature from a different or non-existing signing
- * session, you must ensure the following:
- * 1. The `keyagg_cache` argument is identical to the one used to create the
- * `session` with `musig_nonce_process`.
- * 2. The `pubkey` argument must be identical to the one sent by the signer
- * before aggregating it with `musig_pubkey_agg` to create the
- * `keyagg_cache`.
- * 3. The `pubnonce` argument must be identical to the one sent by the signer
- * before aggregating it with `musig_nonce_agg` and using the result to
- * create the `session` with `musig_nonce_process`.
- *
- * It is not required to call this function in regular MuSig sessions, because
- * if any partial signature does not verify, the final signature will not
- * verify either, so the problem will be caught. However, this function
- * provides the ability to identify which specific partial signature fails
- * verification.
- *
- * Returns: 0 if the arguments are invalid or the partial signature does not
- * verify, 1 otherwise
- * Args ctx: pointer to a context object
- * In: partial_sig: pointer to partial signature to verify, sent by
- * the signer associated with `pubnonce` and `pubkey`
- * pubnonce: public nonce of the signer in the signing session
- * pubkey: public key of the signer in the signing session
- * keyagg_cache: pointer to the keyagg_cache that was output when the
- * aggregate public key for this signing session
- * session: pointer to the session that was created with
- * `musig_nonce_process`
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_musig_partial_sig_verify(
- const secp256k1_context *ctx,
- const secp256k1_musig_partial_sig *partial_sig,
- const secp256k1_musig_pubnonce *pubnonce,
- const secp256k1_pubkey *pubkey,
- const secp256k1_musig_keyagg_cache *keyagg_cache,
- const secp256k1_musig_session *session
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5) SECP256K1_ARG_NONNULL(6);
-
-/** Aggregates partial signatures
- *
- * Returns: 0 if the arguments are invalid, 1 otherwise (which does NOT mean
- * the resulting signature verifies).
- * Args: ctx: pointer to a context object
- * Out: sig64: complete (but possibly invalid) Schnorr signature
- * In: session: pointer to the session that was created with
- * musig_nonce_process
- * partial_sigs: array of pointers to partial signatures to aggregate
- * n_sigs: number of elements in the partial_sigs array. Must be
- * greater than 0.
- */
-SECP256K1_API int secp256k1_musig_partial_sig_agg(
- const secp256k1_context *ctx,
- unsigned char *sig64,
- const secp256k1_musig_session *session,
- const secp256k1_musig_partial_sig * const *partial_sigs,
- size_t n_sigs
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/vendor/secp256k1/include/secp256k1/secp256k1_preallocated.h b/vendor/secp256k1/include/secp256k1/secp256k1_preallocated.h
deleted file mode 100644
index f2d95c2..0000000
--- a/vendor/secp256k1/include/secp256k1/secp256k1_preallocated.h
+++ /dev/null
@@ -1,134 +0,0 @@
-#ifndef SECP256K1_PREALLOCATED_H
-#define SECP256K1_PREALLOCATED_H
-
-#include "secp256k1.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The module provided by this header file is intended for settings in which it
- * is not possible or desirable to rely on dynamic memory allocation. It provides
- * functions for creating, cloning, and destroying secp256k1 context objects in a
- * contiguous fixed-size block of memory provided by the caller.
- *
- * Context objects created by functions in this module can be used like contexts
- * objects created by functions in secp256k1.h, i.e., they can be passed to any
- * API function that expects a context object (see secp256k1.h for details). The
- * only exception is that context objects created by functions in this module
- * must be destroyed using secp256k1_context_preallocated_destroy (in this
- * module) instead of secp256k1_context_destroy (in secp256k1.h).
- *
- * It is guaranteed that functions in this module will not call malloc or its
- * friends realloc, calloc, and free.
- */
-
-/** Determine the memory size of a secp256k1 context object to be created in
- * caller-provided memory.
- *
- * The purpose of this function is to determine how much memory must be provided
- * to secp256k1_context_preallocated_create.
- *
- * Returns: the required size of the caller-provided memory block
- * In: flags: which parts of the context to initialize.
- */
-SECP256K1_API size_t secp256k1_context_preallocated_size(
- unsigned int flags
-) SECP256K1_WARN_UNUSED_RESULT;
-
-/** Create a secp256k1 context object in caller-provided memory.
- *
- * The caller must provide a pointer to a rewritable contiguous block of memory
- * of size at least secp256k1_context_preallocated_size(flags) bytes, suitably
- * aligned to hold an object of any type.
- *
- * The block of memory is exclusively owned by the created context object during
- * the lifetime of this context object, which begins with the call to this
- * function and ends when a call to secp256k1_context_preallocated_destroy
- * (which destroys the context object again) returns. During the lifetime of the
- * context object, the caller is obligated not to access this block of memory,
- * i.e., the caller may not read or write the memory, e.g., by copying the memory
- * contents to a different location or trying to create a second context object
- * in the memory. In simpler words, the prealloc pointer (or any pointer derived
- * from it) should not be used during the lifetime of the context object.
- *
- * Returns: pointer to newly created context object.
- * In: prealloc: pointer to a rewritable contiguous block of memory of
- * size at least secp256k1_context_preallocated_size(flags)
- * bytes, as detailed above.
- * flags: which parts of the context to initialize.
- *
- * See secp256k1_context_create (in secp256k1.h) for further details.
- *
- * See also secp256k1_context_randomize (in secp256k1.h)
- * and secp256k1_context_preallocated_destroy.
- */
-SECP256K1_API secp256k1_context *secp256k1_context_preallocated_create(
- void *prealloc,
- unsigned int flags
-) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT;
-
-/** Determine the memory size of a secp256k1 context object to be copied into
- * caller-provided memory.
- *
- * Returns: the required size of the caller-provided memory block.
- * In: ctx: pointer to a context to copy.
- */
-SECP256K1_API size_t secp256k1_context_preallocated_clone_size(
- const secp256k1_context *ctx
-) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT;
-
-/** Copy a secp256k1 context object into caller-provided memory.
- *
- * The caller must provide a pointer to a rewritable contiguous block of memory
- * of size at least secp256k1_context_preallocated_size(flags) bytes, suitably
- * aligned to hold an object of any type.
- *
- * The block of memory is exclusively owned by the created context object during
- * the lifetime of this context object, see the description of
- * secp256k1_context_preallocated_create for details.
- *
- * Cloning secp256k1_context_static is not possible, and should not be emulated by
- * the caller (e.g., using memcpy). Create a new context instead.
- *
- * Returns: pointer to a newly created context object.
- * Args: ctx: pointer to a context to copy (not secp256k1_context_static).
- * In: prealloc: pointer to a rewritable contiguous block of memory of
- * size at least secp256k1_context_preallocated_size(flags)
- * bytes, as detailed above.
- */
-SECP256K1_API secp256k1_context *secp256k1_context_preallocated_clone(
- const secp256k1_context *ctx,
- void *prealloc
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_WARN_UNUSED_RESULT;
-
-/** Destroy a secp256k1 context object that has been created in
- * caller-provided memory.
- *
- * The context pointer may not be used afterwards.
- *
- * The context to destroy must have been created using
- * secp256k1_context_preallocated_create or secp256k1_context_preallocated_clone.
- * If the context has instead been created using secp256k1_context_create or
- * secp256k1_context_clone, the behaviour is undefined. In that case,
- * secp256k1_context_destroy must be used instead.
- *
- * If required, it is the responsibility of the caller to deallocate the block
- * of memory properly after this function returns, e.g., by calling free on the
- * preallocated pointer given to secp256k1_context_preallocated_create or
- * secp256k1_context_preallocated_clone.
- *
- * Args: ctx: pointer to a context to destroy, constructed using
- * secp256k1_context_preallocated_create or
- * secp256k1_context_preallocated_clone
- * (i.e., not secp256k1_context_static).
- */
-SECP256K1_API void secp256k1_context_preallocated_destroy(
- secp256k1_context *ctx
-) SECP256K1_ARG_NONNULL(1);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SECP256K1_PREALLOCATED_H */
diff --git a/vendor/secp256k1/include/secp256k1/secp256k1_recovery.h b/vendor/secp256k1/include/secp256k1/secp256k1_recovery.h
deleted file mode 100644
index 93a2e4c..0000000
--- a/vendor/secp256k1/include/secp256k1/secp256k1_recovery.h
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef SECP256K1_RECOVERY_H
-#define SECP256K1_RECOVERY_H
-
-#include "secp256k1.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Opaque data structure that holds a parsed ECDSA signature,
- * supporting pubkey recovery.
- *
- * The exact representation of data inside is implementation defined and not
- * guaranteed to be portable between different platforms or versions. It is
- * however guaranteed to be 65 bytes in size, and can be safely copied/moved.
- * If you need to convert to a format suitable for storage or transmission, use
- * the secp256k1_ecdsa_signature_serialize_* and
- * secp256k1_ecdsa_signature_parse_* functions.
- *
- * Furthermore, it is guaranteed that identical signatures (including their
- * recoverability) will have identical representation, so they can be
- * memcmp'ed.
- */
-typedef struct secp256k1_ecdsa_recoverable_signature {
- unsigned char data[65];
-} secp256k1_ecdsa_recoverable_signature;
-
-/** Parse a compact ECDSA signature (64 bytes + recovery id).
- *
- * Returns: 1 when the signature could be parsed, 0 otherwise
- * Args: ctx: pointer to a context object
- * Out: sig: pointer to a signature object
- * In: input64: pointer to a 64-byte compact signature
- * recid: the recovery id (0, 1, 2 or 3)
- */
-SECP256K1_API int secp256k1_ecdsa_recoverable_signature_parse_compact(
- const secp256k1_context *ctx,
- secp256k1_ecdsa_recoverable_signature *sig,
- const unsigned char *input64,
- int recid
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Convert a recoverable signature into a normal signature.
- *
- * Returns: 1
- * Args: ctx: pointer to a context object.
- * Out: sig: pointer to a normal signature.
- * In: sigin: pointer to a recoverable signature.
- */
-SECP256K1_API int secp256k1_ecdsa_recoverable_signature_convert(
- const secp256k1_context *ctx,
- secp256k1_ecdsa_signature *sig,
- const secp256k1_ecdsa_recoverable_signature *sigin
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize an ECDSA signature in compact format (64 bytes + recovery id).
- *
- * Returns: 1
- * Args: ctx: pointer to a context object.
- * Out: output64: pointer to a 64-byte array of the compact signature.
- * recid: pointer to an integer to hold the recovery id.
- * In: sig: pointer to an initialized signature object.
- */
-SECP256K1_API int secp256k1_ecdsa_recoverable_signature_serialize_compact(
- const secp256k1_context *ctx,
- unsigned char *output64,
- int *recid,
- const secp256k1_ecdsa_recoverable_signature *sig
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Create a recoverable ECDSA signature.
- *
- * Returns: 1: signature created
- * 0: the nonce generation function failed, or the secret key was invalid.
- * Args: ctx: pointer to a context object (not secp256k1_context_static).
- * Out: sig: pointer to an array where the signature will be placed.
- * In: msghash32: the 32-byte message hash being signed.
- * seckey: pointer to a 32-byte secret key.
- * noncefp: pointer to a nonce generation function. If NULL,
- * secp256k1_nonce_function_default is used.
- * ndata: pointer to arbitrary data used by the nonce generation function
- * (can be NULL for secp256k1_nonce_function_default).
- */
-SECP256K1_API int secp256k1_ecdsa_sign_recoverable(
- const secp256k1_context *ctx,
- secp256k1_ecdsa_recoverable_signature *sig,
- const unsigned char *msghash32,
- const unsigned char *seckey,
- secp256k1_nonce_function noncefp,
- const void *ndata
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Recover an ECDSA public key from a signature.
- *
- * Returns: 1: public key successfully recovered (which guarantees a correct signature).
- * 0: otherwise.
- * Args: ctx: pointer to a context object.
- * Out: pubkey: pointer to the recovered public key.
- * In: sig: pointer to initialized signature that supports pubkey recovery.
- * msghash32: the 32-byte message hash assumed to be signed.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_recover(
- const secp256k1_context *ctx,
- secp256k1_pubkey *pubkey,
- const secp256k1_ecdsa_recoverable_signature *sig,
- const unsigned char *msghash32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SECP256K1_RECOVERY_H */
diff --git a/vendor/secp256k1/include/secp256k1/secp256k1_schnorrsig.h b/vendor/secp256k1/include/secp256k1/secp256k1_schnorrsig.h
deleted file mode 100644
index 013d4ee..0000000
--- a/vendor/secp256k1/include/secp256k1/secp256k1_schnorrsig.h
+++ /dev/null
@@ -1,190 +0,0 @@
-#ifndef SECP256K1_SCHNORRSIG_H
-#define SECP256K1_SCHNORRSIG_H
-
-#include "secp256k1.h"
-#include "secp256k1_extrakeys.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** This module implements a variant of Schnorr signatures compliant with
- * Bitcoin Improvement Proposal 340 "Schnorr Signatures for secp256k1"
- * (https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki).
- */
-
-/** A pointer to a function to deterministically generate a nonce.
- *
- * Same as secp256k1_nonce function with the exception of accepting an
- * additional pubkey argument and not requiring an attempt argument. The pubkey
- * argument can protect signature schemes with key-prefixed challenge hash
- * inputs against reusing the nonce when signing with the wrong precomputed
- * pubkey.
- *
- * Returns: 1 if a nonce was successfully generated. 0 will cause signing to
- * return an error.
- * Out: nonce32: pointer to a 32-byte array to be filled by the function
- * In: msg: the message being verified. Is NULL if and only if msglen
- * is 0.
- * msglen: the length of the message
- * key32: pointer to a 32-byte secret key (will not be NULL)
- * xonly_pk32: the 32-byte serialized xonly pubkey corresponding to key32
- * (will not be NULL)
- * algo: pointer to an array describing the signature
- * algorithm (will not be NULL)
- * algolen: the length of the algo array
- * data: arbitrary data pointer that is passed through
- *
- * Except for test cases, this function should compute some cryptographic hash of
- * the message, the key, the pubkey, the algorithm description, and data.
- */
-typedef int (*secp256k1_nonce_function_hardened)(
- unsigned char *nonce32,
- const unsigned char *msg,
- size_t msglen,
- const unsigned char *key32,
- const unsigned char *xonly_pk32,
- const unsigned char *algo,
- size_t algolen,
- void *data
-);
-
-/** An implementation of the nonce generation function as defined in Bitcoin
- * Improvement Proposal 340 "Schnorr Signatures for secp256k1"
- * (https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki).
- *
- * If a data pointer is passed, it is assumed to be a pointer to 32 bytes of
- * auxiliary random data as defined in BIP-340. If the data pointer is NULL,
- * the nonce derivation procedure follows BIP-340 by setting the auxiliary
- * random data to zero. The algo argument must be non-NULL, otherwise the
- * function will fail and return 0. The hash will be tagged with algo.
- * Therefore, to create BIP-340 compliant signatures, algo must be set to
- * "BIP0340/nonce" and algolen to 13.
- */
-SECP256K1_API const secp256k1_nonce_function_hardened secp256k1_nonce_function_bip340;
-
-/** Data structure that contains additional arguments for schnorrsig_sign_custom.
- *
- * A schnorrsig_extraparams structure object can be initialized correctly by
- * setting it to SECP256K1_SCHNORRSIG_EXTRAPARAMS_INIT.
- *
- * Members:
- * magic: set to SECP256K1_SCHNORRSIG_EXTRAPARAMS_MAGIC at initialization
- * and has no other function than making sure the object is
- * initialized.
- * noncefp: pointer to a nonce generation function. If NULL,
- * secp256k1_nonce_function_bip340 is used
- * ndata: pointer to arbitrary data used by the nonce generation function
- * (can be NULL). If it is non-NULL and
- * secp256k1_nonce_function_bip340 is used, then ndata must be a
- * pointer to 32-byte auxiliary randomness as per BIP-340.
- */
-typedef struct secp256k1_schnorrsig_extraparams {
- unsigned char magic[4];
- secp256k1_nonce_function_hardened noncefp;
- void *ndata;
-} secp256k1_schnorrsig_extraparams;
-
-#define SECP256K1_SCHNORRSIG_EXTRAPARAMS_MAGIC { 0xda, 0x6f, 0xb3, 0x8c }
-#define SECP256K1_SCHNORRSIG_EXTRAPARAMS_INIT {\
- SECP256K1_SCHNORRSIG_EXTRAPARAMS_MAGIC,\
- NULL,\
- NULL\
-}
-
-/** Create a Schnorr signature.
- *
- * Does _not_ strictly follow BIP-340 because it does not verify the resulting
- * signature. Instead, you can manually use secp256k1_schnorrsig_verify and
- * abort if it fails.
- *
- * This function only signs 32-byte messages. If you have messages of a
- * different size (or the same size but without a context-specific tag
- * prefix), it is recommended to create a 32-byte message hash with
- * secp256k1_tagged_sha256 and then sign the hash. Tagged hashing allows
- * providing an context-specific tag for domain separation. This prevents
- * signatures from being valid in multiple contexts by accident.
- *
- * Returns 1 on success, 0 on failure.
- * Args: ctx: pointer to a context object (not secp256k1_context_static).
- * Out: sig64: pointer to a 64-byte array to store the serialized signature.
- * In: msg32: the 32-byte message being signed.
- * keypair: pointer to an initialized keypair.
- * aux_rand32: 32 bytes of fresh randomness. While recommended to provide
- * this, it is only supplemental to security and can be NULL. A
- * NULL argument is treated the same as an all-zero one. See
- * BIP-340 "Default Signing" for a full explanation of this
- * argument and for guidance if randomness is expensive.
- */
-SECP256K1_API int secp256k1_schnorrsig_sign32(
- const secp256k1_context *ctx,
- unsigned char *sig64,
- const unsigned char *msg32,
- const secp256k1_keypair *keypair,
- const unsigned char *aux_rand32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Same as secp256k1_schnorrsig_sign32, but DEPRECATED. Will be removed in
- * future versions. */
-SECP256K1_API int secp256k1_schnorrsig_sign(
- const secp256k1_context *ctx,
- unsigned char *sig64,
- const unsigned char *msg32,
- const secp256k1_keypair *keypair,
- const unsigned char *aux_rand32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4)
- SECP256K1_DEPRECATED("Use secp256k1_schnorrsig_sign32 instead");
-
-/** Create a Schnorr signature with a more flexible API.
- *
- * Same arguments as secp256k1_schnorrsig_sign except that it allows signing
- * variable length messages and accepts a pointer to an extraparams object that
- * allows customizing signing by passing additional arguments.
- *
- * Equivalent to secp256k1_schnorrsig_sign32(..., aux_rand32) if msglen is 32
- * and extraparams is initialized as follows:
- * ```
- * secp256k1_schnorrsig_extraparams extraparams = SECP256K1_SCHNORRSIG_EXTRAPARAMS_INIT;
- * extraparams.ndata = (unsigned char*)aux_rand32;
- * ```
- *
- * Returns 1 on success, 0 on failure.
- * Args: ctx: pointer to a context object (not secp256k1_context_static).
- * Out: sig64: pointer to a 64-byte array to store the serialized signature.
- * In: msg: the message being signed. Can only be NULL if msglen is 0.
- * msglen: length of the message.
- * keypair: pointer to an initialized keypair.
- * extraparams: pointer to an extraparams object (can be NULL).
- */
-SECP256K1_API int secp256k1_schnorrsig_sign_custom(
- const secp256k1_context *ctx,
- unsigned char *sig64,
- const unsigned char *msg,
- size_t msglen,
- const secp256k1_keypair *keypair,
- secp256k1_schnorrsig_extraparams *extraparams
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(5);
-
-/** Verify a Schnorr signature.
- *
- * Returns: 1: correct signature
- * 0: incorrect signature
- * Args: ctx: pointer to a context object.
- * In: sig64: pointer to the 64-byte signature to verify.
- * msg: the message being verified. Can only be NULL if msglen is 0.
- * msglen: length of the message
- * pubkey: pointer to an x-only public key to verify with
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorrsig_verify(
- const secp256k1_context *ctx,
- const unsigned char *sig64,
- const unsigned char *msg,
- size_t msglen,
- const secp256k1_xonly_pubkey *pubkey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(5);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SECP256K1_SCHNORRSIG_H */