Blame doc/man3/EVP_PKEY_set1_RSA.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
EVP_PKEY_set1_RSA, EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH, EVP_PKEY_set1_EC_KEY,
Packit c4476c
EVP_PKEY_get1_RSA, EVP_PKEY_get1_DSA, EVP_PKEY_get1_DH, EVP_PKEY_get1_EC_KEY,
Packit c4476c
EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH, EVP_PKEY_get0_EC_KEY,
Packit c4476c
EVP_PKEY_assign_RSA, EVP_PKEY_assign_DSA, EVP_PKEY_assign_DH,
Packit c4476c
EVP_PKEY_assign_EC_KEY, EVP_PKEY_assign_POLY1305, EVP_PKEY_assign_SIPHASH,
Packit c4476c
EVP_PKEY_get0_hmac, EVP_PKEY_get0_poly1305, EVP_PKEY_get0_siphash,
Packit c4476c
EVP_PKEY_type, EVP_PKEY_id, EVP_PKEY_base_id, EVP_PKEY_set_alias_type,
Packit c4476c
EVP_PKEY_set1_engine, EVP_PKEY_get0_engine - EVP_PKEY assignment functions
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/evp.h>
Packit c4476c
Packit c4476c
 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
Packit c4476c
 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
Packit c4476c
 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key);
Packit c4476c
 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
Packit c4476c
Packit c4476c
 RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
Packit c4476c
 DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
Packit c4476c
 DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
Packit c4476c
 EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
Packit c4476c
Packit c4476c
 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
Packit c4476c
 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len);
Packit c4476c
 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len);
Packit c4476c
 RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey);
Packit c4476c
 DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey);
Packit c4476c
 DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey);
Packit c4476c
 EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey);
Packit c4476c
Packit c4476c
 int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
Packit c4476c
 int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
Packit c4476c
 int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
Packit c4476c
 int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
Packit c4476c
 int EVP_PKEY_assign_POLY1305(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
Packit c4476c
 int EVP_PKEY_assign_SIPHASH(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
Packit c4476c
Packit c4476c
 int EVP_PKEY_id(const EVP_PKEY *pkey);
Packit c4476c
 int EVP_PKEY_base_id(const EVP_PKEY *pkey);
Packit c4476c
 int EVP_PKEY_type(int type);
Packit c4476c
 int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type);
Packit c4476c
Packit c4476c
 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey);
Packit c4476c
 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *engine);
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
EVP_PKEY_set1_RSA(), EVP_PKEY_set1_DSA(), EVP_PKEY_set1_DH() and
Packit c4476c
EVP_PKEY_set1_EC_KEY() set the key referenced by B<pkey> to B<key>.
Packit c4476c
Packit c4476c
EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and
Packit c4476c
EVP_PKEY_get1_EC_KEY() return the referenced key in B<pkey> or
Packit c4476c
B<NULL> if the key is not of the correct type.
Packit c4476c
Packit c4476c
EVP_PKEY_get0_hmac(), EVP_PKEY_get0_poly1305(), EVP_PKEY_get0_siphash(),
Packit c4476c
EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(), EVP_PKEY_get0_DH()
Packit c4476c
and EVP_PKEY_get0_EC_KEY() also return the referenced key in B<pkey> or B<NULL>
Packit c4476c
if the key is not of the correct type but the reference count of the
Packit c4476c
returned key is B<not> incremented and so must not be freed up after use.
Packit c4476c
Packit c4476c
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
Packit c4476c
EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305() and
Packit c4476c
EVP_PKEY_assign_SIPHASH() also set the referenced key to B<key>
Packit c4476c
however these use the supplied B<key> internally and so B<key>
Packit c4476c
will be freed when the parent B<pkey> is freed.
Packit c4476c
Packit c4476c
EVP_PKEY_base_id() returns the type of B<pkey>. For example
Packit c4476c
an RSA key will return B<EVP_PKEY_RSA>.
Packit c4476c
Packit c4476c
EVP_PKEY_id() returns the actual OID associated with B<pkey>. Historically keys
Packit c4476c
using the same algorithm could use different OIDs. For example an RSA key could
Packit c4476c
use the OIDs corresponding to the NIDs B<NID_rsaEncryption> (equivalent to
Packit c4476c
B<EVP_PKEY_RSA>) or B<NID_rsa> (equivalent to B<EVP_PKEY_RSA2>). The use of
Packit c4476c
alternative non-standard OIDs is now rare so B<EVP_PKEY_RSA2> et al are not
Packit c4476c
often seen in practice.
Packit c4476c
Packit c4476c
EVP_PKEY_type() returns the underlying type of the NID B<type>. For example
Packit c4476c
EVP_PKEY_type(EVP_PKEY_RSA2) will return B<EVP_PKEY_RSA>.
Packit c4476c
Packit c4476c
EVP_PKEY_get0_engine() returns a reference to the ENGINE handling B<pkey>.
Packit c4476c
Packit c4476c
EVP_PKEY_set1_engine() sets the ENGINE handling B<pkey> to B<engine>. It
Packit c4476c
must be called after the key algorithm and components are set up.
Packit c4476c
If B<engine> does not include an B<EVP_PKEY_METHOD> for B<pkey> an
Packit c4476c
error occurs.
Packit c4476c
Packit c4476c
EVP_PKEY_set_alias_type() allows modifying a EVP_PKEY to use a
Packit c4476c
different set of algorithms than the default. This is currently used
Packit c4476c
to support SM2 keys, which use an identical encoding to ECDSA.
Packit c4476c
Packit c4476c
=head1 NOTES
Packit c4476c
Packit c4476c
In accordance with the OpenSSL naming convention the key obtained
Packit c4476c
from or assigned to the B<pkey> using the B<1> functions must be
Packit c4476c
freed as well as B<pkey>.
Packit c4476c
Packit c4476c
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
Packit c4476c
EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305()
Packit c4476c
and EVP_PKEY_assign_SIPHASH() are implemented as macros.
Packit c4476c
Packit c4476c
Most applications wishing to know a key type will simply call
Packit c4476c
EVP_PKEY_base_id() and will not care about the actual type:
Packit c4476c
which will be identical in almost all cases.
Packit c4476c
Packit c4476c
Previous versions of this document suggested using EVP_PKEY_type(pkey->type)
Packit c4476c
to determine the type of a key. Since B<EVP_PKEY> is now opaque this
Packit c4476c
is no longer possible: the equivalent is EVP_PKEY_base_id(pkey).
Packit c4476c
Packit c4476c
EVP_PKEY_set1_engine() is typically used by an ENGINE returning an HSM
Packit c4476c
key as part of its routine to load a private key.
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
EVP_PKEY_set1_RSA(), EVP_PKEY_set1_DSA(), EVP_PKEY_set1_DH() and
Packit c4476c
EVP_PKEY_set1_EC_KEY() return 1 for success or 0 for failure.
Packit c4476c
Packit c4476c
EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and
Packit c4476c
EVP_PKEY_get1_EC_KEY() return the referenced key or B<NULL> if
Packit c4476c
an error occurred.
Packit c4476c
Packit c4476c
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
Packit c4476c
EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305()
Packit c4476c
and EVP_PKEY_assign_SIPHASH() return 1 for success and 0 for failure.
Packit c4476c
Packit c4476c
EVP_PKEY_base_id(), EVP_PKEY_id() and EVP_PKEY_type() return a key
Packit c4476c
type or B<NID_undef> (equivalently B<EVP_PKEY_NONE>) on error.
Packit c4476c
Packit c4476c
EVP_PKEY_set1_engine() returns 1 for success and 0 for failure.
Packit c4476c
Packit c4476c
EVP_PKEY_set_alias_type() returns 1 for success and 0 for error.
Packit c4476c
Packit c4476c
=head1 EXAMPLES
Packit c4476c
Packit c4476c
After loading an ECC key, it is possible to convert it to using SM2
Packit c4476c
algorithms with EVP_PKEY_set_alias_type:
Packit c4476c
Packit c4476c
 EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2);
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<EVP_PKEY_new(3)>
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2002-2019 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