rust-secp256k1-unsafe-fast/secp256k1-sys/depend/secp256k1/include/secp256k1_recovery.h

114 lines
4.8 KiB
C
Raw Normal View History

#ifndef SECP256K1_RECOVERY_H
#define SECP256K1_RECOVERY_H
2015-10-26 14:54:21 +00:00
#include "secp256k1.h"
2015-10-26 14:54:21 +00:00
#ifdef __cplusplus
2015-10-26 14:54:21 +00:00
extern "C" {
#endif
2015-10-26 14:54:21 +00:00
/** Opaque data structured 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
2023-09-27 18:37:09 +00:00
* the rustsecp256k1_v0_9_0_ecdsa_signature_serialize_* and
* rustsecp256k1_v0_9_0_ecdsa_signature_parse_* functions.
2015-10-26 14:54:21 +00:00
*
* Furthermore, it is guaranteed that identical signatures (including their
* recoverability) will have identical representation, so they can be
* memcmp'ed.
*/
typedef struct {
unsigned char data[65];
2023-09-27 18:37:09 +00:00
} rustsecp256k1_v0_9_0_ecdsa_recoverable_signature;
2015-10-26 14:54:21 +00:00
/** Parse a compact ECDSA signature (64 bytes + recovery id).
*
* Returns: 1 when the signature could be parsed, 0 otherwise
* Args: ctx: a secp256k1 context object
* Out: sig: a pointer to a signature object
* In: input64: a pointer to a 64-byte compact signature
* recid: the recovery id (0, 1, 2 or 3)
*/
2023-09-27 18:37:09 +00:00
SECP256K1_API int rustsecp256k1_v0_9_0_ecdsa_recoverable_signature_parse_compact(
const rustsecp256k1_v0_9_0_context *ctx,
rustsecp256k1_v0_9_0_ecdsa_recoverable_signature *sig,
2015-10-26 14:54:21 +00:00
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: a secp256k1 context object.
* Out: sig: a pointer to a normal signature.
* In: sigin: a pointer to a recoverable signature.
2015-10-26 14:54:21 +00:00
*/
2023-09-27 18:37:09 +00:00
SECP256K1_API int rustsecp256k1_v0_9_0_ecdsa_recoverable_signature_convert(
const rustsecp256k1_v0_9_0_context *ctx,
rustsecp256k1_v0_9_0_ecdsa_signature *sig,
const rustsecp256k1_v0_9_0_ecdsa_recoverable_signature *sigin
2015-10-26 14:54:21 +00:00
) 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: a secp256k1 context object.
* Out: output64: a pointer to a 64-byte array of the compact signature.
* recid: a pointer to an integer to hold the recovery id.
* In: sig: a pointer to an initialized signature object.
2015-10-26 14:54:21 +00:00
*/
2023-09-27 18:37:09 +00:00
SECP256K1_API int rustsecp256k1_v0_9_0_ecdsa_recoverable_signature_serialize_compact(
const rustsecp256k1_v0_9_0_context *ctx,
2015-10-26 14:54:21 +00:00
unsigned char *output64,
int *recid,
2023-09-27 18:37:09 +00:00
const rustsecp256k1_v0_9_0_ecdsa_recoverable_signature *sig
2015-10-26 14:54:21 +00:00
) 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.
2023-09-27 18:37:09 +00:00
* Args: ctx: pointer to a context object (not rustsecp256k1_v0_9_0_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,
2023-09-27 18:37:09 +00:00
* rustsecp256k1_v0_9_0_nonce_function_default is used.
* ndata: pointer to arbitrary data used by the nonce generation function
2023-09-27 18:37:09 +00:00
* (can be NULL for rustsecp256k1_v0_9_0_nonce_function_default).
2015-10-26 14:54:21 +00:00
*/
2023-09-27 18:37:09 +00:00
SECP256K1_API int rustsecp256k1_v0_9_0_ecdsa_sign_recoverable(
const rustsecp256k1_v0_9_0_context *ctx,
rustsecp256k1_v0_9_0_ecdsa_recoverable_signature *sig,
const unsigned char *msghash32,
2015-10-26 14:54:21 +00:00
const unsigned char *seckey,
2023-09-27 18:37:09 +00:00
rustsecp256k1_v0_9_0_nonce_function noncefp,
2015-10-26 14:54:21 +00:00
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.
Upgrade the vendored libsecp256k1 code `libsecp256k1` v0.2.0 was just released. Update the vendored code using `./vendor-libsecp.sh depend 0_8_0 21ffe4b` ``` git show 21ffe4b commit 21ffe4b22a9683cf24ae0763359e401d1284cc7a (tag: v0.2.0) Merge: 8c949f5 e025ccd Author: Pieter Wuille <pieter@wuille.net> Date: Mon Dec 12 17:00:52 2022 -0500 Merge bitcoin-core/secp256k1#1055: Prepare initial release e025ccdf7473702a76bb13d763dc096548ffefba release: prepare for initial release 0.2.0 (Jonas Nick) 6d1784a2e2c1c5a8d89ffb08a7f76fa15e84fff5 build: add missing files to EXTRA_DIST (Jonas Nick) 13bf1b6b324f2ed1c1fb4c8d17a4febd3556839e changelog: make order of change types match keepachangelog.com (Jonas Nick) b1f992a552785395d2e60b10862626fd11f66f84 doc: improve release process (Jonas Nick) ad39e2dc417f85c1577a6a6a9c519f5c60453def build: change package version to 0.1.0-dev (Jonas Nick) 90618e9263ebc2a0d73d487d6d94fd3af96b973c doc: move CHANGELOG from doc/ to root directory (Jonas Nick) Pull request description: Based on #964 ACKs for top commit: sipa: ACK e025ccdf7473702a76bb13d763dc096548ffefba Tree-SHA512: b9ab71d7362537d383a32b5e321ef44069f00e3e92340375bcd662267bc5a60c2bad60222998e6602cfac24ad65efb23d772eac37c86065036b90ef090b54c49 ``` Requires a new version of `secp256k1-sys`, use v0.8.0 - Update the `secp256k1-sys` manifest (including links field) - Update symbols to use 0_8_0 - Add a changelog entry - depend on the new version in `secp256k1` Which in turn requires a new version of `secp256k1`, use v0.26.0
2022-12-20 21:11:14 +00:00
* 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.
2015-10-26 14:54:21 +00:00
*/
2023-09-27 18:37:09 +00:00
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int rustsecp256k1_v0_9_0_ecdsa_recover(
const rustsecp256k1_v0_9_0_context *ctx,
rustsecp256k1_v0_9_0_pubkey *pubkey,
const rustsecp256k1_v0_9_0_ecdsa_recoverable_signature *sig,
const unsigned char *msghash32
2015-10-26 14:54:21 +00:00
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
#ifdef __cplusplus
2015-10-26 14:54:21 +00:00
}
#endif
#endif /* SECP256K1_RECOVERY_H */