Blame doc/man3/EVP_PKEY_ASN1_METHOD.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
EVP_PKEY_ASN1_METHOD,
Packit c4476c
EVP_PKEY_asn1_new,
Packit c4476c
EVP_PKEY_asn1_copy,
Packit c4476c
EVP_PKEY_asn1_free,
Packit c4476c
EVP_PKEY_asn1_add0,
Packit c4476c
EVP_PKEY_asn1_add_alias,
Packit c4476c
EVP_PKEY_asn1_set_public,
Packit c4476c
EVP_PKEY_asn1_set_private,
Packit c4476c
EVP_PKEY_asn1_set_param,
Packit c4476c
EVP_PKEY_asn1_set_free,
Packit c4476c
EVP_PKEY_asn1_set_ctrl,
Packit c4476c
EVP_PKEY_asn1_set_item,
Packit c4476c
EVP_PKEY_asn1_set_siginf,
Packit c4476c
EVP_PKEY_asn1_set_check,
Packit c4476c
EVP_PKEY_asn1_set_public_check,
Packit c4476c
EVP_PKEY_asn1_set_param_check,
Packit c4476c
EVP_PKEY_asn1_set_security_bits,
Packit c4476c
EVP_PKEY_asn1_set_set_priv_key,
Packit c4476c
EVP_PKEY_asn1_set_set_pub_key,
Packit c4476c
EVP_PKEY_asn1_set_get_priv_key,
Packit c4476c
EVP_PKEY_asn1_set_get_pub_key,
Packit c4476c
EVP_PKEY_get0_asn1
Packit c4476c
- manipulating and registering EVP_PKEY_ASN1_METHOD structure
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/evp.h>
Packit c4476c
Packit c4476c
 typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD;
Packit c4476c
Packit c4476c
 EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags,
Packit c4476c
                                         const char *pem_str,
Packit c4476c
                                         const char *info);
Packit c4476c
 void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst,
Packit c4476c
                         const EVP_PKEY_ASN1_METHOD *src);
Packit c4476c
 void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);
Packit c4476c
 int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
Packit c4476c
 int EVP_PKEY_asn1_add_alias(int to, int from);
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                               int (*pub_decode) (EVP_PKEY *pk,
Packit c4476c
                                                  X509_PUBKEY *pub),
Packit c4476c
                               int (*pub_encode) (X509_PUBKEY *pub,
Packit c4476c
                                                  const EVP_PKEY *pk),
Packit c4476c
                               int (*pub_cmp) (const EVP_PKEY *a,
Packit c4476c
                                               const EVP_PKEY *b),
Packit c4476c
                               int (*pub_print) (BIO *out,
Packit c4476c
                                                 const EVP_PKEY *pkey,
Packit c4476c
                                                 int indent, ASN1_PCTX *pctx),
Packit c4476c
                               int (*pkey_size) (const EVP_PKEY *pk),
Packit c4476c
                               int (*pkey_bits) (const EVP_PKEY *pk));
Packit c4476c
 void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                                int (*priv_decode) (EVP_PKEY *pk,
Packit c4476c
                                                    const PKCS8_PRIV_KEY_INFO
Packit c4476c
                                                    *p8inf),
Packit c4476c
                                int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8,
Packit c4476c
                                                    const EVP_PKEY *pk),
Packit c4476c
                                int (*priv_print) (BIO *out,
Packit c4476c
                                                   const EVP_PKEY *pkey,
Packit c4476c
                                                   int indent,
Packit c4476c
                                                   ASN1_PCTX *pctx));
Packit c4476c
 void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                              int (*param_decode) (EVP_PKEY *pkey,
Packit c4476c
                                                   const unsigned char **pder,
Packit c4476c
                                                   int derlen),
Packit c4476c
                              int (*param_encode) (const EVP_PKEY *pkey,
Packit c4476c
                                                   unsigned char **pder),
Packit c4476c
                              int (*param_missing) (const EVP_PKEY *pk),
Packit c4476c
                              int (*param_copy) (EVP_PKEY *to,
Packit c4476c
                                                 const EVP_PKEY *from),
Packit c4476c
                              int (*param_cmp) (const EVP_PKEY *a,
Packit c4476c
                                                const EVP_PKEY *b),
Packit c4476c
                              int (*param_print) (BIO *out,
Packit c4476c
                                                  const EVP_PKEY *pkey,
Packit c4476c
                                                  int indent,
Packit c4476c
                                                  ASN1_PCTX *pctx));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                             void (*pkey_free) (EVP_PKEY *pkey));
Packit c4476c
 void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                             int (*pkey_ctrl) (EVP_PKEY *pkey, int op,
Packit c4476c
                                               long arg1, void *arg2));
Packit c4476c
 void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                             int (*item_verify) (EVP_MD_CTX *ctx,
Packit c4476c
                                                 const ASN1_ITEM *it,
Packit c4476c
                                                 void *asn,
Packit c4476c
                                                 X509_ALGOR *a,
Packit c4476c
                                                 ASN1_BIT_STRING *sig,
Packit c4476c
                                                 EVP_PKEY *pkey),
Packit c4476c
                             int (*item_sign) (EVP_MD_CTX *ctx,
Packit c4476c
                                               const ASN1_ITEM *it,
Packit c4476c
                                               void *asn,
Packit c4476c
                                               X509_ALGOR *alg1,
Packit c4476c
                                               X509_ALGOR *alg2,
Packit c4476c
                                               ASN1_BIT_STRING *sig));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                               int (*siginf_set) (X509_SIG_INFO *siginf,
Packit c4476c
                                                  const X509_ALGOR *alg,
Packit c4476c
                                                  const ASN1_STRING *sig));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                              int (*pkey_check) (const EVP_PKEY *pk));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                                     int (*pkey_pub_check) (const EVP_PKEY *pk));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                                    int (*pkey_param_check) (const EVP_PKEY *pk));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                                      int (*pkey_security_bits) (const EVP_PKEY
Packit c4476c
                                                                 *pk));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                                     int (*set_priv_key) (EVP_PKEY *pk,
Packit c4476c
                                                          const unsigned char
Packit c4476c
                                                             *priv,
Packit c4476c
                                                          size_t len));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                                    int (*set_pub_key) (EVP_PKEY *pk,
Packit c4476c
                                                        const unsigned char *pub,
Packit c4476c
                                                        size_t len));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                                     int (*get_priv_key) (const EVP_PKEY *pk,
Packit c4476c
                                                          unsigned char *priv,
Packit c4476c
                                                          size_t *len));
Packit c4476c
Packit c4476c
 void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth,
Packit c4476c
                                    int (*get_pub_key) (const EVP_PKEY *pk,
Packit c4476c
                                                        unsigned char *pub,
Packit c4476c
                                                        size_t *len));
Packit c4476c
Packit c4476c
 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey);
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
B<EVP_PKEY_ASN1_METHOD> is a structure which holds a set of ASN.1
Packit c4476c
conversion, printing and information methods for a specific public key
Packit c4476c
algorithm.
Packit c4476c
Packit c4476c
There are two places where the B<EVP_PKEY_ASN1_METHOD> objects are
Packit c4476c
stored: one is a built-in array representing the standard methods for
Packit c4476c
different algorithms, and the other one is a stack of user-defined
Packit c4476c
application-specific methods, which can be manipulated by using
Packit c4476c
L<EVP_PKEY_asn1_add0(3)>.
Packit c4476c
Packit c4476c
=head2 Methods
Packit c4476c
Packit c4476c
The methods are the underlying implementations of a particular public
Packit c4476c
key algorithm present by the B<EVP_PKEY> object.
Packit c4476c
Packit c4476c
 int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub);
Packit c4476c
 int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk);
Packit c4476c
 int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b);
Packit c4476c
 int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent,
Packit c4476c
                   ASN1_PCTX *pctx);
Packit c4476c
Packit c4476c
The pub_decode() and pub_encode() methods are called to decode /
Packit c4476c
encode B<X509_PUBKEY> ASN.1 parameters to / from B<pk>.
Packit c4476c
They MUST return 0 on error, 1 on success.
Packit c4476c
They're called by L<X509_PUBKEY_get0(3)> and L<X509_PUBKEY_set(3)>.
Packit c4476c
Packit c4476c
The pub_cmp() method is called when two public keys are to be
Packit c4476c
compared.
Packit c4476c
It MUST return 1 when the keys are equal, 0 otherwise.
Packit c4476c
It's called by L<EVP_PKEY_cmp(3)>.
Packit c4476c
Packit c4476c
The pub_print() method is called to print a public key in humanly
Packit c4476c
readable text to B<out>, indented B<indent> spaces.
Packit c4476c
It MUST return 0 on error, 1 on success.
Packit c4476c
It's called by L<EVP_PKEY_print_public(3)>.
Packit c4476c
Packit c4476c
 int (*priv_decode) (EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf);
Packit c4476c
 int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk);
Packit c4476c
 int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent,
Packit c4476c
                    ASN1_PCTX *pctx);
Packit c4476c
Packit c4476c
The priv_decode() and priv_encode() methods are called to decode /
Packit c4476c
encode B<PKCS8_PRIV_KEY_INFO> form private key to / from B<pk>.
Packit c4476c
They MUST return 0 on error, 1 on success.
Packit c4476c
They're called by L<EVP_PKCS82PKEY(3)> and L<EVP_PKEY2PKCS8(3)>.
Packit c4476c
Packit c4476c
The priv_print() method is called to print a private key in humanly
Packit c4476c
readable text to B<out>, indented B<indent> spaces.
Packit c4476c
It MUST return 0 on error, 1 on success.
Packit c4476c
It's called by L<EVP_PKEY_print_private(3)>.
Packit c4476c
Packit c4476c
 int (*pkey_size) (const EVP_PKEY *pk);
Packit c4476c
 int (*pkey_bits) (const EVP_PKEY *pk);
Packit c4476c
 int (*pkey_security_bits) (const EVP_PKEY *pk);
Packit c4476c
Packit c4476c
The pkey_size() method returns the key size in bytes.
Packit c4476c
It's called by L<EVP_PKEY_size(3)>.
Packit c4476c
Packit c4476c
The pkey_bits() method returns the key size in bits.
Packit c4476c
It's called by L<EVP_PKEY_bits(3)>.
Packit c4476c
Packit c4476c
 int (*param_decode) (EVP_PKEY *pkey,
Packit c4476c
                      const unsigned char **pder, int derlen);
Packit c4476c
 int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder);
Packit c4476c
 int (*param_missing) (const EVP_PKEY *pk);
Packit c4476c
 int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from);
Packit c4476c
 int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b);
Packit c4476c
 int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent,
Packit c4476c
                     ASN1_PCTX *pctx);
Packit c4476c
Packit c4476c
The param_decode() and param_encode() methods are called to decode /
Packit c4476c
encode DER formatted parameters to / from B<pk>.
Packit c4476c
They MUST return 0 on error, 1 on success.
Packit c4476c
They're called by L<PEM_read_bio_Parameters(3)> and the B<file:>
Packit c4476c
L<OSSL_STORE_LOADER(3)>.
Packit c4476c
Packit c4476c
The param_missing() method returns 0 if a key parameter is missing,
Packit c4476c
otherwise 1.
Packit c4476c
It's called by L<EVP_PKEY_missing_parameters(3)>.
Packit c4476c
Packit c4476c
The param_copy() method copies key parameters from B<from> to B<to>.
Packit c4476c
It MUST return 0 on error, 1 on success.
Packit c4476c
It's called by L<EVP_PKEY_copy_parameters(3)>.
Packit c4476c
Packit c4476c
The param_cmp() method compares the parameters of keys B and B.
Packit c4476c
It MUST return 1 when the keys are equal, 0 when not equal, or a
Packit c4476c
negative number on error.
Packit c4476c
It's called by L<EVP_PKEY_cmp_parameters(3)>.
Packit c4476c
Packit c4476c
The param_print() method prints the private key parameters in humanly
Packit c4476c
readable text to B<out>, indented B<indent> spaces.
Packit c4476c
It MUST return 0 on error, 1 on success.
Packit c4476c
It's called by L<EVP_PKEY_print_params(3)>.
Packit c4476c
Packit c4476c
 int (*sig_print) (BIO *out,
Packit c4476c
                   const X509_ALGOR *sigalg, const ASN1_STRING *sig,
Packit c4476c
                   int indent, ASN1_PCTX *pctx);
Packit c4476c
Packit c4476c
The sig_print() method prints a signature in humanly readable text to
Packit c4476c
B<out>, indented B<indent> spaces.
Packit c4476c
B<sigalg> contains the exact signature algorithm.
Packit c4476c
If the signature in B<sig> doesn't correspond to what this method
Packit c4476c
expects, X509_signature_dump() must be used as a last resort.
Packit c4476c
It MUST return 0 on error, 1 on success.
Packit c4476c
It's called by L<X509_signature_print(3)>.
Packit c4476c
Packit c4476c
 void (*pkey_free) (EVP_PKEY *pkey);
Packit c4476c
Packit c4476c
The pkey_free() method helps freeing the internals of B<pkey>.
Packit c4476c
It's called by L<EVP_PKEY_free(3)>, L<EVP_PKEY_set_type(3)>,
Packit c4476c
L<EVP_PKEY_set_type_str(3)>, and L<EVP_PKEY_assign(3)>.
Packit c4476c
Packit c4476c
 int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2);
Packit c4476c
Packit c4476c
The pkey_ctrl() method adds extra algorithm specific control.
Packit c4476c
It's called by L<EVP_PKEY_get_default_digest_nid(3)>,
Packit c4476c
L<EVP_PKEY_set1_tls_encodedpoint(3)>,
Packit c4476c
L<EVP_PKEY_get1_tls_encodedpoint(3)>, L<PKCS7_SIGNER_INFO_set(3)>,
Packit c4476c
L<PKCS7_RECIP_INFO_set(3)>, ...
Packit c4476c
Packit c4476c
 int (*old_priv_decode) (EVP_PKEY *pkey,
Packit c4476c
                         const unsigned char **pder, int derlen);
Packit c4476c
 int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder);
Packit c4476c
Packit c4476c
The old_priv_decode() and old_priv_encode() methods decode / encode
Packit c4476c
they private key B<pkey> from / to a DER formatted array.
Packit c4476c
These are exclusively used to help decoding / encoding older (pre
Packit c4476c
PKCS#8) PEM formatted encrypted private keys.
Packit c4476c
old_priv_decode() MUST return 0 on error, 1 on success.
Packit c4476c
old_priv_encode() MUST the return same kind of values as
Packit c4476c
i2d_PrivateKey().
Packit c4476c
They're called by L<d2i_PrivateKey(3)> and L<i2d_PrivateKey(3)>.
Packit c4476c
Packit c4476c
 int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
Packit c4476c
                     X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey);
Packit c4476c
 int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
Packit c4476c
                   X509_ALGOR *alg1, X509_ALGOR *alg2,
Packit c4476c
                   ASN1_BIT_STRING *sig);
Packit c4476c
Packit c4476c
The item_sign() and  item_verify() methods make it possible to have
Packit c4476c
algorithm specific signatures and verification of them.
Packit c4476c
Packit c4476c
item_sign() MUST return one of:
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item <=0
Packit c4476c
Packit c4476c
error
Packit c4476c
Packit c4476c
=item Z<>1
Packit c4476c
Packit c4476c
item_sign() did everything, OpenSSL internals just needs to pass the
Packit c4476c
signature length back.
Packit c4476c
Packit c4476c
=item Z<>2
Packit c4476c
Packit c4476c
item_sign() did nothing, OpenSSL internal standard routines are
Packit c4476c
expected to continue with the default signature production.
Packit c4476c
Packit c4476c
=item Z<>3
Packit c4476c
Packit c4476c
item_sign() set the algorithm identifier B<algor1> and B<algor2>,
Packit c4476c
OpenSSL internals should just sign using those algorithms.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
item_verify() MUST return one of:
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item <=0
Packit c4476c
Packit c4476c
error
Packit c4476c
Packit c4476c
=item Z<>1
Packit c4476c
Packit c4476c
item_sign() did everything, OpenSSL internals just needs to pass the
Packit c4476c
signature length back.
Packit c4476c
Packit c4476c
=item Z<>2
Packit c4476c
Packit c4476c
item_sign() did nothing, OpenSSL internal standard routines are
Packit c4476c
expected to continue with the default signature production.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
item_verify() and item_sign() are called by L<ASN1_item_verify(3)> and
Packit c4476c
L<ASN1_item_sign(3)>, and by extension, L<X509_verify(3)>,
Packit c4476c
L<X509_REQ_verify(3)>, L<X509_sign(3)>, L<X509_REQ_sign(3)>, ...
Packit c4476c
Packit c4476c
 int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg,
Packit c4476c
                    const ASN1_STRING *sig);
Packit c4476c
Packit c4476c
The siginf_set() method is used to set custom B<X509_SIG_INFO>
Packit c4476c
parameters.
Packit c4476c
It MUST return 0 on error, or 1 on success.
Packit c4476c
It's called as part of L<X509_check_purpose(3)>, L<X509_check_ca(3)>
Packit c4476c
and L<X509_check_issued(3)>.
Packit c4476c
Packit c4476c
 int (*pkey_check) (const EVP_PKEY *pk);
Packit c4476c
 int (*pkey_public_check) (const EVP_PKEY *pk);
Packit c4476c
 int (*pkey_param_check) (const EVP_PKEY *pk);
Packit c4476c
Packit c4476c
The pkey_check(), pkey_public_check() and pkey_param_check() methods are used
Packit c4476c
to check the validity of B<pk> for key-pair, public component and parameters,
Packit c4476c
respectively.
Packit c4476c
They MUST return 0 for an invalid key, or 1 for a valid key.
Packit c4476c
They are called by L<EVP_PKEY_check(3)>, L<EVP_PKEY_public_check(3)> and
Packit c4476c
L<EVP_PKEY_param_check(3)> respectively.
Packit c4476c
Packit c4476c
 int (*set_priv_key) (EVP_PKEY *pk, const unsigned char *priv, size_t len);
Packit c4476c
 int (*set_pub_key) (EVP_PKEY *pk, const unsigned char *pub, size_t len);
Packit c4476c
Packit c4476c
The set_priv_key() and set_pub_key() methods are used to set the raw private and
Packit c4476c
public key data for an EVP_PKEY. They MUST return 0 on error, or 1 on success.
Packit c4476c
They are called by L<EVP_PKEY_new_raw_private_key(3)>, and
Packit c4476c
L<EVP_PKEY_new_raw_public_key(3)> respectively.
Packit c4476c
Packit c4476c
=head2 Functions
Packit c4476c
Packit c4476c
EVP_PKEY_asn1_new() creates and returns a new B<EVP_PKEY_ASN1_METHOD>
Packit c4476c
object, and associates the given B<id>, B<flags>, B<pem_str> and
Packit c4476c
B<info>.
Packit c4476c
B<id> is a NID, B<pem_str> is the PEM type string, B<info> is a
Packit c4476c
descriptive string.
Packit c4476c
The following B<flags> are supported:
Packit c4476c
Packit c4476c
 ASN1_PKEY_SIGPARAM_NULL
Packit c4476c
Packit c4476c
If B<ASN1_PKEY_SIGPARAM_NULL> is set, then the signature algorithm
Packit c4476c
parameters are given the type B<V_ASN1_NULL> by default, otherwise
Packit c4476c
they will be given the type B<V_ASN1_UNDEF> (i.e. the parameter is
Packit c4476c
omitted).
Packit c4476c
See L<X509_ALGOR_set0(3)> for more information.
Packit c4476c
Packit c4476c
EVP_PKEY_asn1_copy() copies an B<EVP_PKEY_ASN1_METHOD> object from
Packit c4476c
B<src> to B<dst>.
Packit c4476c
This function is not thread safe, it's recommended to only use this
Packit c4476c
when initializing the application.
Packit c4476c
Packit c4476c
EVP_PKEY_asn1_free() frees an existing B<EVP_PKEY_ASN1_METHOD> pointed
Packit c4476c
by B<ameth>.
Packit c4476c
Packit c4476c
EVP_PKEY_asn1_add0() adds B<ameth> to the user defined stack of
Packit c4476c
methods unless another B<EVP_PKEY_ASN1_METHOD> with the same NID is
Packit c4476c
already there.
Packit c4476c
This function is not thread safe, it's recommended to only use this
Packit c4476c
when initializing the application.
Packit c4476c
Packit c4476c
EVP_PKEY_asn1_add_alias() creates an alias with the NID B<to> for the
Packit c4476c
B<EVP_PKEY_ASN1_METHOD> with NID B<from> unless another
Packit c4476c
B<EVP_PKEY_ASN1_METHOD> with the same NID is already added.
Packit c4476c
This function is not thread safe, it's recommended to only use this
Packit c4476c
when initializing the application.
Packit c4476c
Packit c4476c
EVP_PKEY_asn1_set_public(), EVP_PKEY_asn1_set_private(),
Packit c4476c
EVP_PKEY_asn1_set_param(), EVP_PKEY_asn1_set_free(),
Packit c4476c
EVP_PKEY_asn1_set_ctrl(), EVP_PKEY_asn1_set_item(),
Packit c4476c
EVP_PKEY_asn1_set_siginf(), EVP_PKEY_asn1_set_check(),
Packit c4476c
EVP_PKEY_asn1_set_public_check(), EVP_PKEY_asn1_set_param_check(),
Packit c4476c
EVP_PKEY_asn1_set_security_bits(), EVP_PKEY_asn1_set_set_priv_key(),
Packit c4476c
EVP_PKEY_asn1_set_set_pub_key(), EVP_PKEY_asn1_set_get_priv_key() and
Packit c4476c
EVP_PKEY_asn1_set_get_pub_key() set the diverse methods of the given
Packit c4476c
B<EVP_PKEY_ASN1_METHOD> object.
Packit c4476c
Packit c4476c
EVP_PKEY_get0_asn1() finds the B<EVP_PKEY_ASN1_METHOD> associated
Packit c4476c
with the key B<pkey>.
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
EVP_PKEY_asn1_new() returns NULL on error, or a pointer to an
Packit c4476c
B<EVP_PKEY_ASN1_METHOD> object otherwise.
Packit c4476c
Packit c4476c
EVP_PKEY_asn1_add0() and EVP_PKEY_asn1_add_alias() return 0 on error,
Packit c4476c
or 1 on success.
Packit c4476c
Packit c4476c
EVP_PKEY_get0_asn1() returns NULL on error, or a pointer to a constant
Packit c4476c
B<EVP_PKEY_ASN1_METHOD> object otherwise.
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut