DragonFly On-Line Manual Pages
EVP_PKEY_ASN1_METH... DragonFly Library Functions Manual EVP_PKEY_ASN1_METH...
NAME
EVP_PKEY_asn1_new, EVP_PKEY_asn1_copy, EVP_PKEY_asn1_free,
EVP_PKEY_asn1_add0, EVP_PKEY_asn1_add_alias, EVP_PKEY_asn1_set_public,
EVP_PKEY_asn1_set_private, EVP_PKEY_asn1_set_param,
EVP_PKEY_asn1_set_free, EVP_PKEY_asn1_set_ctrl -- manipulating and regis-
tering an EVP_PKEY_ASN1_METHOD structure
SYNOPSIS
#include <openssl/evp.h>
EVP_PKEY_ASN1_METHOD *
EVP_PKEY_asn1_new(int id, int flags, const char *pem_str,
const char *info);
void
EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst,
const EVP_PKEY_ASN1_METHOD *src);
void
EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);
int
EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
int
EVP_PKEY_asn1_add_alias(int to, int from);
void
EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,
int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub),
int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk),
int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b),
int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx),
int (*pkey_size)(const EVP_PKEY *pk),
int (*pkey_bits)(const EVP_PKEY *pk));
void
EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,
int (*priv_decode)(EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf),
int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk),
int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx));
void
EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,
int (*param_decode)(EVP_PKEY *pkey, const unsigned char **pder, int derlen),
int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder),
int (*param_missing)(const EVP_PKEY *pk),
int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from),
int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b),
int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx));
void
EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
void (*pkey_free)(EVP_PKEY *pkey));
void
EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
int (*pkey_ctrl)(EVP_PKEY *pkey, int op, long arg1, void *arg2));
DESCRIPTION
EVP_PKEY_ASN1_METHOD is a structure which holds a set of ASN.1 conver-
sion, printing and information methods for a specific public key algo-
rithm.
There are two places where the EVP_PKEY_ASN1_METHOD objects are stored:
one is a built-in array representing the standard methods for different
algorithms, and the other one is a stack of user-defined application-spe-
cific methods, which can be manipulated by using EVP_PKEY_asn1_add0().
Methods
The methods are the underlying implementations of a particular public key
algorithm present by the EVP_PKEY object.
int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub)
int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk)
int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b)
int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)
The pub_decode() and pub_encode() methods are called to decode and encode
X509_PUBKEY ASN.1 parameters to and from pk. They must return 0 on error
and 1 on success. They are called by X509_PUBKEY_get(3) and
X509_PUBKEY_set(3).
The pub_cmp() method is called when two public keys are compared. It
must return 1 when the keys are equal and 0 otherwise. It is called by
EVP_PKEY_cmp(3).
The pub_print() method is called to print a public key in humanly read-
able text to out, indented indent spaces. It must return 0 on error and
1 on success. It is called by EVP_PKEY_print_public(3).
int (*priv_decode)(EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf)
int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk)
int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)
The priv_decode() and priv_encode() methods are called to decode and
encode PKCS8_PRIV_KEY_INFO form private key to and from pk. They must
return 0 on error, 1 on success. They are called by EVP_PKCS82PKEY() and
EVP_PKEY2PKCS8().
The priv_print() method is called to print a private key in humanly read-
able text to out, indented indent spaces. It must return 0 on error and
1 on success. It is called by EVP_PKEY_print_private(3).
int (*pkey_size)(const EVP_PKEY *pk)
int (*pkey_bits)(const EVP_PKEY *pk);
The pkey_size() method returns the key size in bytes. It is called by
EVP_PKEY_size(3).
The pkey_bits() method returns the key size in bits. It is called by
EVP_PKEY_bits(3).
int (*param_decode)(EVP_PKEY *pkey, const unsigned char **pder, int derlen)
int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder)
int (*param_missing)(const EVP_PKEY *pk)
int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from)
int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b)
int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)
The param_decode() and param_encode() methods are called to decode and
encode DER formatted parameters to and from pk. They must return 0 on
error and 1 on success. They are called by PEM_read_bio_Parameters().
The param_missing() method returns 0 if a key parameter is missing or
otherwise 1. It is called by EVP_PKEY_missing_parameters(3).
The param_copy() method copies key parameters from from to to. It must
return 0 on error and 1 on success. It is called by
EVP_PKEY_copy_parameters(3).
The param_cmp() method compares the parameters of the keys a and b. It
must return 1 when the keys are equal, 0 when not equal, and a negative
number on error. It is called by EVP_PKEY_cmp_parameters(3).
The param_print() method prints the private key parameters in humanly
readable text to out, indented indent spaces. It must return 0 on error
and 1 on success. It is called by EVP_PKEY_print_params(3).
void (*pkey_free)(EVP_PKEY *pkey)
The pkey_free() method helps freeing the internals of pkey. It is called
by EVP_PKEY_free(3), EVP_PKEY_set_type(), EVP_PKEY_set_type_str(), and
EVP_PKEY_assign().
int (*pkey_ctrl)(EVP_PKEY *pkey, int op, long arg1, void *arg2)
The pkey_ctrl() method adds extra algorithm specific control. It is
called by EVP_PKEY_get_default_digest_nid(3), PKCS7_SIGNER_INFO_set(),
PKCS7_RECIP_INFO_set(), and other functions.
Functions
EVP_PKEY_asn1_new() creates and returns a new EVP_PKEY_ASN1_METHOD
object, and associates the given id, flags, pem_str and info. id is a
NID, pem_str is the PEM type string, info is a descriptive string. If
ASN1_PKEY_SIGPARAM_NULL is set in flags, the signature algorithm parame-
ters are given the type V_ASN1_NULL by default, otherwise they will be
given the type V_ASN1_UNDEF (i.e. the parameter is omitted). See
X509_ALGOR_set0(3) for more information.
EVP_PKEY_asn1_copy() copies an EVP_PKEY_ASN1_METHOD object from src to
dst. This function is not thread safe, it is recommended to only use
this when initializing the application.
EVP_PKEY_asn1_free() frees an existing EVP_PKEY_ASN1_METHOD pointed by
ameth.
EVP_PKEY_asn1_add0() adds ameth to the user defined stack of methods
unless another EVP_PKEY_ASN1_METHOD with the same NID is already there.
This function is not thread safe, it is recommended to only use this when
initializing the application.
EVP_PKEY_asn1_add_alias() creates an alias with the NID to for the
EVP_PKEY_ASN1_METHOD with NID from unless another EVP_PKEY_ASN1_METHOD
with the same NID is already added. This function is not thread safe,
it's recommended to only use this when initializing the application.
EVP_PKEY_asn1_set_public(), EVP_PKEY_asn1_set_private(),
EVP_PKEY_asn1_set_param(), EVP_PKEY_asn1_set_free(), and
EVP_PKEY_asn1_set_ctrl() set the diverse methods of the given
EVP_PKEY_ASN1_METHOD object.
RETURN VALUES
EVP_PKEY_asn1_new() returns a pointer to an EVP_PKEY_ASN1_METHOD object
or NULL on error.
EVP_PKEY_asn1_add0() and EVP_PKEY_asn1_add_alias() return 0 on error or 1
on success.
HISTORY
These functions first appeared in OpenSSL 1.0.0 and have been available
since OpenBSD 4.9.
DragonFly 5.5 May 13, 2018 DragonFly 5.5