89b93c9bac29eb0167b8c446a91978836ae4eb21
[openssl.git] / doc / man3 / EVP_PKEY_new.pod
1 =pod
2
3 =head1 NAME
4
5 EVP_PKEY,
6 EVP_PKEY_new,
7 EVP_PKEY_up_ref,
8 EVP_PKEY_dup,
9 EVP_PKEY_free,
10 EVP_PKEY_get0_description,
11 EVP_PKEY_new_raw_private_key_ex,
12 EVP_PKEY_new_raw_private_key,
13 EVP_PKEY_new_raw_public_key_ex,
14 EVP_PKEY_new_raw_public_key,
15 EVP_PKEY_new_CMAC_key,
16 EVP_PKEY_new_mac_key,
17 EVP_PKEY_get_raw_private_key,
18 EVP_PKEY_get_raw_public_key
19 - public/private key allocation and raw key handling functions
20
21 =head1 SYNOPSIS
22
23  #include <openssl/evp.h>
24
25  typedef evp_pkey_st EVP_PKEY;
26
27  EVP_PKEY *EVP_PKEY_new(void);
28  int EVP_PKEY_up_ref(EVP_PKEY *key);
29  EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *key);
30  void EVP_PKEY_free(EVP_PKEY *key);
31  const char *EVP_PKEY_get0_description(const EVP_PKEY *key);
32
33  EVP_PKEY *EVP_PKEY_new_raw_private_key_ex(OSSL_LIB_CTX *libctx,
34                                            const char *keytype,
35                                            const char *propq,
36                                            const unsigned char *key,
37                                            size_t keylen);
38  EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e,
39                                         const unsigned char *key, size_t keylen);
40  EVP_PKEY *EVP_PKEY_new_raw_public_key_ex(OSSL_LIB_CTX *libctx,
41                                           const char *keytype,
42                                           const char *propq,
43                                           const unsigned char *key,
44                                           size_t keylen);
45  EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e,
46                                        const unsigned char *key, size_t keylen);
47  EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key,
48                                 int keylen);
49
50  int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv,
51                                   size_t *len);
52  int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub,
53                                  size_t *len);
54
55 Deprecated since OpenSSL 3.0, can be hidden entirely by defining
56 B<OPENSSL_API_COMPAT> with a suitable version value, see
57 L<openssl_user_macros(7)>:
58
59  EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv,
60                                  size_t len, const EVP_CIPHER *cipher);
61
62 =head1 DESCRIPTION
63
64 B<EVP_PKEY> is a generic structure to hold diverse types of asymmetric keys
65 (also known as "key pairs"), and can be used for diverse operations, like
66 signing, verifying signatures, key derivation, etc.  The asymmetric keys
67 themselves are often refered to as the "internal key", and are handled by
68 backends, such as providers (through L<EVP_KEYMGMT(3)>) or B<ENGINE>s.
69
70 Conceptually, an B<EVP_PKEY> internal key may hold a private key, a public
71 key, or both (a keypair), and along with those, key parameters if the key type
72 requires them.  The presence of these components determine what operations can
73 be made; for example, signing normally requires the presence of a private key,
74 and verifying normally requires the presence of a public key.
75
76 =for comment ED signature require both the private and public key...
77
78 B<EVP_PKEY> has also been used for MAC algorithm that were conceived as
79 producing signatures, although not being public key algorithms; "POLY1305",
80 "SIPHASH", "HMAC", "CMAC".  This usage is considered legacy and is discouraged
81 in favor of the L<EVP_MAC(3)> API.
82
83 The EVP_PKEY_new() function allocates an empty B<EVP_PKEY> structure which is
84 used by OpenSSL to store public and private keys. The reference count is set to
85 B<1>.
86
87 EVP_PKEY_up_ref() increments the reference count of I<key>.
88
89 EVP_PKEY_dup() duplicates the I<key>. The I<key> must not be ENGINE based or
90 a raw key, otherwise the duplication will fail.
91
92 EVP_PKEY_free() decrements the reference count of I<key> and, if the reference
93 count is zero, frees it up. If I<key> is NULL, nothing is done.
94
95 EVP_PKEY_get0_description() returns a description of the type of B<EVP_PKEY>,
96 meant for display and human consumption.  The description is at the
97 discretion of the key type implementation.
98
99 EVP_PKEY_new_raw_private_key_ex() allocates a new B<EVP_PKEY>. Unless an
100 engine should be used for the key type, a provider for the key is found using
101 the library context I<libctx> and the property query string I<propq>. The
102 I<keytype> argument indicates what kind of key this is. The value should be a
103 string for a public key algorithm that supports raw private keys, i.e one of
104 "X25519", "ED25519", "X448" or "ED448". I<key> points to the raw private key
105 data for this B<EVP_PKEY> which should be of length I<keylen>. The length
106 should be appropriate for the type of the key. The public key data will be
107 automatically derived from the given private key data (if appropriate for the
108 algorithm type).
109
110 EVP_PKEY_new_raw_private_key() does the same as
111 EVP_PKEY_new_raw_private_key_ex() except that the default library context and
112 default property query are used instead. If I<e> is non-NULL then the new
113 B<EVP_PKEY> structure is associated with the engine I<e>. The I<type> argument
114 indicates what kind of key this is. The value should be a NID for a public key
115 algorithm that supports raw private keys, i.e. one of B<EVP_PKEY_X25519>,
116 B<EVP_PKEY_ED25519>, B<EVP_PKEY_X448> or B<EVP_PKEY_ED448>.
117
118 EVP_PKEY_new_raw_private_key_ex() and EVP_PKEY_new_raw_private_key() may also
119 be used with most MACs implemented as public key algorithms, so key types such
120 as "HMAC", "POLY1305", "SIPHASH", or their NID form B<EVP_PKEY_POLY1305>,
121 B<EVP_PKEY_SIPHASH>, B<EVP_PKEY_HMAC> are also accepted.  This usage is,
122 as mentioned above, discouraged in favor of the L<EVP_MAC(3)> API.
123
124 EVP_PKEY_new_raw_public_key_ex() works in the same way as
125 EVP_PKEY_new_raw_private_key_ex() except that I<key> points to the raw
126 public key data. The B<EVP_PKEY> structure will be initialised without any
127 private key information. Algorithm types that support raw public keys are
128 "X25519", "ED25519", "X448" or "ED448".
129
130 EVP_PKEY_new_raw_public_key() works in the same way as
131 EVP_PKEY_new_raw_private_key() except that I<key> points to the raw public key
132 data. The B<EVP_PKEY> structure will be initialised without any private key
133 information. Algorithm types that support raw public keys are
134 B<EVP_PKEY_X25519>, B<EVP_PKEY_ED25519>, B<EVP_PKEY_X448> or B<EVP_PKEY_ED448>.
135
136 EVP_PKEY_new_mac_key() works in the same way as EVP_PKEY_new_raw_private_key().
137 New applications should use EVP_PKEY_new_raw_private_key() instead.
138
139 EVP_PKEY_get_raw_private_key() fills the buffer provided by I<priv> with raw
140 private key data. The size of the I<priv> buffer should be in I<*len> on entry
141 to the function, and on exit I<*len> is updated with the number of bytes
142 actually written. If the buffer I<priv> is NULL then I<*len> is populated with
143 the number of bytes required to hold the key. The calling application is
144 responsible for ensuring that the buffer is large enough to receive the private
145 key data. This function only works for algorithms that support raw private keys.
146 Currently this is: B<EVP_PKEY_HMAC>, B<EVP_PKEY_POLY1305>, B<EVP_PKEY_SIPHASH>,
147 B<EVP_PKEY_X25519>, B<EVP_PKEY_ED25519>, B<EVP_PKEY_X448> or B<EVP_PKEY_ED448>.
148
149 EVP_PKEY_get_raw_public_key() fills the buffer provided by I<pub> with raw
150 public key data. The size of the I<pub> buffer should be in I<*len> on entry
151 to the function, and on exit I<*len> is updated with the number of bytes
152 actually written. If the buffer I<pub> is NULL then I<*len> is populated with
153 the number of bytes required to hold the key. The calling application is
154 responsible for ensuring that the buffer is large enough to receive the public
155 key data. This function only works for algorithms that support raw public  keys.
156 Currently this is: B<EVP_PKEY_X25519>, B<EVP_PKEY_ED25519>, B<EVP_PKEY_X448> or
157 B<EVP_PKEY_ED448>.
158
159 EVP_PKEY_new_CMAC_key() works in the same way as EVP_PKEY_new_raw_private_key()
160 except it is only for the B<EVP_PKEY_CMAC> algorithm type. In addition to the
161 raw private key data, it also takes a cipher algorithm to be used during
162 creation of a CMAC in the B<cipher> argument. The cipher should be a standard
163 encryption-only cipher. For example AEAD and XTS ciphers should not be used.
164
165 Applications should use the L<EVP_MAC(3)> API instead
166 and set the B<OSSL_MAC_PARAM_CIPHER> parameter on the B<EVP_MAC_CTX> object
167 with the name of the cipher being used.
168
169 =head1 NOTES
170
171 The B<EVP_PKEY> structure is used by various OpenSSL functions which require a
172 general private key without reference to any particular algorithm.
173
174 The structure returned by EVP_PKEY_new() is empty. To add a private or public
175 key to this empty structure use the appropriate functions described in
176 L<EVP_PKEY_set1_RSA(3)>, L<EVP_PKEY_set1_DSA(3)>, L<EVP_PKEY_set1_DH(3)> or
177 L<EVP_PKEY_set1_EC_KEY(3)>.
178
179 =head1 RETURN VALUES
180
181 EVP_PKEY_new(), EVP_PKEY_new_raw_private_key(), EVP_PKEY_new_raw_public_key(),
182 EVP_PKEY_new_CMAC_key() and EVP_PKEY_new_mac_key() return either the newly
183 allocated B<EVP_PKEY> structure or NULL if an error occurred.
184
185 EVP_PKEY_dup() returns the key duplicate or NULL if an error occurred.
186
187 EVP_PKEY_up_ref(), EVP_PKEY_get_raw_private_key() and
188 EVP_PKEY_get_raw_public_key() return 1 for success and 0 for failure.
189
190 =head1 SEE ALSO
191
192 L<EVP_PKEY_set1_RSA(3)>, L<EVP_PKEY_set1_DSA(3)>, L<EVP_PKEY_set1_DH(3)> or
193 L<EVP_PKEY_set1_EC_KEY(3)>
194
195 =head1 HISTORY
196
197 The
198 EVP_PKEY_new() and EVP_PKEY_free() functions exist in all versions of OpenSSL.
199
200 The EVP_PKEY_up_ref() function was added in OpenSSL 1.1.0.
201
202 The
203 EVP_PKEY_new_raw_private_key(), EVP_PKEY_new_raw_public_key(),
204 EVP_PKEY_new_CMAC_key(), EVP_PKEY_new_raw_private_key() and
205 EVP_PKEY_get_raw_public_key() functions were added in OpenSSL 1.1.1.
206
207 The EVP_PKEY_dup(), EVP_PKEY_new_raw_private_key_ex(), and
208 EVP_PKEY_new_raw_public_key_ex()
209 functions were added in OpenSSL 3.0.
210
211 The EVP_PKEY_new_CMAC_key() was deprecated in OpenSSL 3.0.
212
213 The documentation of B<EVP_PKEY> was amended in OpenSSL 3.0 to allow there to
214 be the private part of the keypair without the public part, where this was
215 previously implied to be disallowed.
216
217 =head1 COPYRIGHT
218
219 Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved.
220
221 Licensed under the Apache License 2.0 (the "License").  You may not use
222 this file except in compliance with the License.  You can obtain a copy
223 in the file LICENSE in the source distribution or at
224 L<https://www.openssl.org/source/license.html>.
225
226 =cut