NAME
EC_KEY_METHOD_new
,
EC_KEY_METHOD_free
,
EC_KEY_METHOD_set_init
,
EC_KEY_METHOD_get_init
,
EC_KEY_METHOD_set_sign
,
EC_KEY_METHOD_get_sign
,
EC_KEY_METHOD_set_verify
,
EC_KEY_METHOD_get_verify
,
EC_KEY_METHOD_set_keygen
,
EC_KEY_METHOD_get_keygen
,
EC_KEY_METHOD_set_compute_key
,
EC_KEY_METHOD_get_compute_key
,
EC_KEY_OpenSSL
,
EC_KEY_set_default_method
,
EC_KEY_get_default_method
,
EC_KEY_new_method
,
EC_KEY_set_method
,
EC_KEY_get_method
—
custom EC_KEY
implementations
SYNOPSIS
#include
<openssl/ec.h>
EC_KEY_METHOD *
EC_KEY_METHOD_new
(const EC_KEY_METHOD
*meth);
void
EC_KEY_METHOD_free
(EC_KEY_METHOD
*meth);
void
EC_KEY_METHOD_set_init
(EC_KEY_METHOD
*meth, int (*init)(EC_KEY *key),
void (*finish)(EC_KEY *key), int
(*copy)(EC_KEY *dest, const EC_KEY *src), int
(*set_group)(EC_KEY *key, const EC_GROUP *grp), int
(*set_private)(EC_KEY *key, const BIGNUM *priv_key),
int (*set_public)(EC_KEY *key, const EC_POINT
*pub_key));
void
EC_KEY_METHOD_get_init
(const
EC_KEY_METHOD *meth, int (**pinit)(EC_KEY *key),
void (**pfinish)(EC_KEY *key), int
(**pcopy)(EC_KEY *dest, const EC_KEY *src), int
(**pset_group)(EC_KEY *key, const EC_GROUP *grp), int
(**pset_private)(EC_KEY *key, const BIGNUM *priv_key),
int (**pset_public)(EC_KEY *key, const EC_POINT
*pub_key));
void
EC_KEY_METHOD_set_sign
(EC_KEY_METHOD
*meth, int (*sign)(int type, const unsigned char
*dgst, int dgstlen, unsigned char *sig, unsigned int *siglen, const BIGNUM
*kinv, const BIGNUM *r, EC_KEY *eckey), int
(*sign_setup)(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp),
ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, int
dgstlen, const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey));
void
EC_KEY_METHOD_get_sign
(const
EC_KEY_METHOD *meth, int (**psign)(int type, const
unsigned char *dgst, int dgstlen, unsigned char *sig, unsigned int *siglen,
const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey),
int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx, BIGNUM
**kinv, BIGNUM **rp), ECDSA_SIG *(**psign_sig)(const
unsigned char *dgst, int dgstlen, const BIGNUM *kinv, const BIGNUM *rp,
EC_KEY *eckey));
void
EC_KEY_METHOD_set_verify
(EC_KEY_METHOD
*meth, int (*verify)(int type, const unsigned char
*dgst, int dgst_len, const unsigned char *sigbuf, int sig_len, EC_KEY
*eckey), int (*verify_sig)(const unsigned char *dgst,
int dgst_len, const ECDSA_SIG *sig, EC_KEY *eckey));
void
EC_KEY_METHOD_get_verify
(const
EC_KEY_METHOD *meth, int (**pverify)(int type, const
unsigned char *dgst, int dgst_len, const unsigned char *sigbuf, int sig_len,
EC_KEY *eckey), int (**pverify_sig)(const unsigned
char *dgst, int dgst_len, const ECDSA_SIG *sig, EC_KEY *eckey));
void
EC_KEY_METHOD_set_keygen
(EC_KEY_METHOD
*meth, int (*keygen)(EC_KEY *key));
void
EC_KEY_METHOD_get_keygen
(const
EC_KEY_METHOD *meth, int (**pkeygen)(EC_KEY
*key));
void
EC_KEY_METHOD_set_compute_key
(EC_KEY_METHOD
*meth, int (*ckey)(void *out, size_t outlen, const
EC_POINT *pub_key, EC_KEY *ecdh, void *(*KDF) (const void *in, size_t inlen,
void *out, size_t *outlen)));
void
EC_KEY_METHOD_get_compute_key
(const
EC_KEY_METHOD *meth, int (**pck)(void *out, size_t
outlen, const EC_POINT *pub_key, EC_KEY *ecdh, void *(*KDF) (const void *in,
size_t inlen, void *out, size_t *outlen)));
const EC_KEY_METHOD *
EC_KEY_OpenSSL
(void);
void
EC_KEY_set_default_method
(const
EC_KEY_METHOD *meth);
const EC_KEY_METHOD *
EC_KEY_get_default_method
(void);
EC_KEY *
EC_KEY_new_method
(ENGINE
*engine);
int
EC_KEY_set_method
(EC_KEY *key,
const EC_KEY_METHOD *meth);
const EC_KEY_METHOD *
EC_KEY_get_method
(const EC_KEY
*key);
DESCRIPTION
An EC_KEY_METHOD object holds function pointers used for EC_KEY operations.
EC_KEY_METHOD_new
()
creates a shallow copy of meth, or an empty
EC_KEY_METHOD object if meth is
NULL
.
EC_KEY_METHOD_free
()
frees meth. If meth is
NULL
or the return value of
EC_KEY_OpenSSL
(),
no action occurs.
EC_KEY_METHOD_set_init
()
and EC_KEY_METHOD_get_init
() set and retrieve
optional callback functions called at the following places:
- init
- at the end of
EC_KEY_new_method
() andEC_KEY_set_method
() - finish
- at the beginning of
EC_KEY_free(3),
EC_KEY_copy(3), and
EC_KEY_set_method
() - copy
- at the end of EC_KEY_copy(3)
- set_group
- at the end of EC_KEY_set_group(3) and EC_KEY_new_by_curve_name(3)
- set_private
- at the beginning of EC_KEY_set_private_key(3)
- set_public
- at the beginning of EC_KEY_set_public_key(3)
If any of these callbacks returns 0,
the calling function fails. By default, all these callbacks are
NULL
. Arguments of
EC_KEY_METHOD_get_init
()
can be set to NULL
to selectively retrieve callback
function pointers.
EC_KEY_METHOD_set_sign
()
and
EC_KEY_METHOD_get_sign
()
set and retrieve the functions implementing
ECDSA_sign(3) and
ECDSA_do_sign(3).
EC_KEY_METHOD_set_verify
()
and
EC_KEY_METHOD_get_verify
()
set and retrieve the functions implementing
ECDSA_verify(3) and
ECDSA_do_verify(3).
EC_KEY_METHOD_set_keygen
()
and
EC_KEY_METHOD_get_keygen
()
set and retrieve the function implementing
EC_KEY_generate_key(3).
EC_KEY_METHOD_set_compute_key
()
and
EC_KEY_METHOD_get_compute_key
()
set and retrieve the function implementing
ECDH_compute_key(3).
EC_KEY_set_default_method
()
chooses the meth to be used for the creation of new
EC_KEY objects by future invocations of
EC_KEY_new_method
(), or reverts to the default
implementation if meth is
NULL
.
EC_KEY_new_method
()
creates and initializes a new EC_KEY object using the
EC_KEY_METHOD set with
EC_KEY_set_default_method
(). The
ENGINE *engine argument is always ignored and passing
NULL
is recommended.
EC_KEY_set_method
()
dissociates the key from the
ENGINE it is using, if any, and causes it to use
meth in the future.
RETURN VALUES
EC_KEY_METHOD_new
() returns the newly
allocated EC_KEY_METHOD object or
NULL
if an error occurs.
EC_KEY_OpenSSL
() returns a static object
representing the default EC_KEY implementation.
EC_KEY_get_default_method
() returns the
EC_KEY_METHOD that
EC_KEY_new_method
() will use for the creation of new
EC_KEY objects in the future.
EC_KEY_new_method
() returns the newly
allocated EC_KEY object or NULL if an error
occurs.
EC_KEY_set_method
() returns 1 for success
or 0 for failure.
EC_KEY_get_method
() returns the EC_KEY
implementation used by the given key.
SEE ALSO
HISTORY
These functions first appeared in OpenSSL 1.1.0 and have been available since OpenBSD 6.5.