blob: c4469841fd482527bf2ee5c8af1fafccb665af4c [file] [log] [blame]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2 * All rights reserved.
3 *
4 * This package is an SSL implementation written
5 * by Eric Young (eay@cryptsoft.com).
6 * The implementation was written so as to conform with Netscapes SSL.
7 *
8 * This library is free for commercial and non-commercial use as long as
9 * the following conditions are aheared to. The following conditions
10 * apply to all code found in this distribution, be it the RC4, RSA,
11 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12 * included with this distribution is covered by the same copyright terms
13 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14 *
15 * Copyright remains Eric Young's, and as such any Copyright notices in
16 * the code are not to be removed.
17 * If this package is used in a product, Eric Young should be given attribution
18 * as the author of the parts of the library used.
19 * This can be in the form of a textual message at program startup or
20 * in documentation (online or textual) provided with the package.
21 *
22 * Redistribution and use in source and binary forms, with or without
23 * modification, are permitted provided that the following conditions
24 * are met:
25 * 1. Redistributions of source code must retain the copyright
26 * notice, this list of conditions and the following disclaimer.
27 * 2. Redistributions in binary form must reproduce the above copyright
28 * notice, this list of conditions and the following disclaimer in the
29 * documentation and/or other materials provided with the distribution.
30 * 3. All advertising materials mentioning features or use of this software
31 * must display the following acknowledgement:
32 * "This product includes cryptographic software written by
33 * Eric Young (eay@cryptsoft.com)"
34 * The word 'cryptographic' can be left out if the rouines from the library
35 * being used are not cryptographic related :-).
36 * 4. If you include any Windows specific code (or a derivative thereof) from
37 * the apps directory (application code) you must include an acknowledgement:
38 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39 *
40 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50 * SUCH DAMAGE.
51 *
52 * The licence and distribution terms for any publically available version or
53 * derivative of this code cannot be changed. i.e. this code cannot simply be
54 * copied and put under another distribution licence
55 * [including the GNU Public Licence.] */
56
57#ifndef OPENSSL_HEADER_EVP_H
58#define OPENSSL_HEADER_EVP_H
59
60#include <openssl/base.h>
Adam Langleyd9e397b2015-01-22 14:27:53 -080061
Adam Langleyf4e42722015-06-04 17:45:09 -070062#include <openssl/thread.h>
63
Robert Sloan8f860b12017-08-28 07:37:06 -070064// OpenSSL included digest and cipher functions in this header so we include
65// them for users that still expect that.
66//
67// TODO(fork): clean up callers so that they include what they use.
Adam Langleyd9e397b2015-01-22 14:27:53 -080068#include <openssl/aead.h>
Kenny Rootb8494592015-09-25 02:29:14 +000069#include <openssl/base64.h>
Adam Langleyd9e397b2015-01-22 14:27:53 -080070#include <openssl/cipher.h>
71#include <openssl/digest.h>
David Benjamin4969cc92016-04-22 15:02:23 -040072#include <openssl/nid.h>
Adam Langleyd9e397b2015-01-22 14:27:53 -080073
74#if defined(__cplusplus)
75extern "C" {
76#endif
77
78
Robert Sloan8f860b12017-08-28 07:37:06 -070079// EVP abstracts over public/private key algorithms.
Adam Langleyd9e397b2015-01-22 14:27:53 -080080
81
Robert Sloan8f860b12017-08-28 07:37:06 -070082// Public key objects.
Robert Sloan1f278ae2018-09-04 13:56:45 -070083//
84// An |EVP_PKEY| object represents a public or private key. A given object may
85// be used concurrently on multiple threads by non-mutating functions, provided
86// no other thread is concurrently calling a mutating function. Unless otherwise
87// documented, functions which take a |const| pointer are non-mutating and
88// functions which take a non-|const| pointer are mutating.
Adam Langleyd9e397b2015-01-22 14:27:53 -080089
Robert Sloan8f860b12017-08-28 07:37:06 -070090// EVP_PKEY_new creates a new, empty public-key object and returns it or NULL
91// on allocation failure.
Adam Langleyd9e397b2015-01-22 14:27:53 -080092OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new(void);
93
Robert Sloan8f860b12017-08-28 07:37:06 -070094// EVP_PKEY_free frees all data referenced by |pkey| and then frees |pkey|
95// itself.
Adam Langleyd9e397b2015-01-22 14:27:53 -080096OPENSSL_EXPORT void EVP_PKEY_free(EVP_PKEY *pkey);
97
Robert Sloan1f278ae2018-09-04 13:56:45 -070098// EVP_PKEY_up_ref increments the reference count of |pkey| and returns one. It
99// does not mutate |pkey| for thread-safety purposes and may be used
100// concurrently.
David Benjaminc895d6b2016-08-11 13:26:41 -0400101OPENSSL_EXPORT int EVP_PKEY_up_ref(EVP_PKEY *pkey);
Adam Langleye9ada862015-05-11 17:20:37 -0700102
Robert Sloan8f860b12017-08-28 07:37:06 -0700103// EVP_PKEY_is_opaque returns one if |pkey| is opaque. Opaque keys are backed by
104// custom implementations which do not expose key material and parameters. It is
105// an error to attempt to duplicate, export, or compare an opaque key.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800106OPENSSL_EXPORT int EVP_PKEY_is_opaque(const EVP_PKEY *pkey);
107
Robert Sloan8f860b12017-08-28 07:37:06 -0700108// EVP_PKEY_cmp compares |a| and |b| and returns one if they are equal, zero if
109// not and a negative number on error.
110//
111// WARNING: this differs from the traditional return value of a "cmp"
112// function.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800113OPENSSL_EXPORT int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
114
Robert Sloan8f860b12017-08-28 07:37:06 -0700115// EVP_PKEY_copy_parameters sets the parameters of |to| to equal the parameters
116// of |from|. It returns one on success and zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800117OPENSSL_EXPORT int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
118
Robert Sloan8f860b12017-08-28 07:37:06 -0700119// EVP_PKEY_missing_parameters returns one if |pkey| is missing needed
120// parameters or zero if not, or if the algorithm doesn't take parameters.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800121OPENSSL_EXPORT int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
122
Robert Sloan8f860b12017-08-28 07:37:06 -0700123// EVP_PKEY_size returns the maximum size, in bytes, of a signature signed by
124// |pkey|. For an RSA key, this returns the number of bytes needed to represent
125// the modulus. For an EC key, this returns the maximum size of a DER-encoded
126// ECDSA signature.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800127OPENSSL_EXPORT int EVP_PKEY_size(const EVP_PKEY *pkey);
128
Robert Sloan8f860b12017-08-28 07:37:06 -0700129// EVP_PKEY_bits returns the "size", in bits, of |pkey|. For an RSA key, this
130// returns the bit length of the modulus. For an EC key, this returns the bit
131// length of the group order.
Robert Sloan1f278ae2018-09-04 13:56:45 -0700132OPENSSL_EXPORT int EVP_PKEY_bits(const EVP_PKEY *pkey);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800133
Robert Sloan8f860b12017-08-28 07:37:06 -0700134// EVP_PKEY_id returns the type of |pkey|, which is one of the |EVP_PKEY_*|
135// values.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800136OPENSSL_EXPORT int EVP_PKEY_id(const EVP_PKEY *pkey);
137
Robert Sloan8f860b12017-08-28 07:37:06 -0700138// EVP_PKEY_type returns |nid| if |nid| is a known key type and |NID_undef|
139// otherwise.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800140OPENSSL_EXPORT int EVP_PKEY_type(int nid);
141
Adam Langleyd9e397b2015-01-22 14:27:53 -0800142
Robert Sloan8f860b12017-08-28 07:37:06 -0700143// Getting and setting concrete public key types.
144//
145// The following functions get and set the underlying public key in an
146// |EVP_PKEY| object. The |set1| functions take an additional reference to the
Robert Sloand9e572d2018-08-27 12:27:00 -0700147// underlying key and return one on success or zero if |key| is NULL. The
148// |assign| functions adopt the caller's reference and return one on success or
149// zero if |key| is NULL. The |get1| functions return a fresh reference to the
150// underlying object or NULL if |pkey| is not of the correct type. The |get0|
151// functions behave the same but return a non-owning pointer.
Robert Sloan1f278ae2018-09-04 13:56:45 -0700152//
153// The |get0| and |get1| functions take |const| pointers and are thus
154// non-mutating for thread-safety purposes, but mutating functions on the
155// returned lower-level objects are considered to also mutate the |EVP_PKEY| and
156// may not be called concurrently with other operations on the |EVP_PKEY|.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800157
158OPENSSL_EXPORT int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
159OPENSSL_EXPORT int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
Robert Sloan1f278ae2018-09-04 13:56:45 -0700160OPENSSL_EXPORT RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey);
161OPENSSL_EXPORT RSA *EVP_PKEY_get1_RSA(const EVP_PKEY *pkey);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800162
Adam Langleyfad63272015-11-12 12:15:39 -0800163OPENSSL_EXPORT int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800164OPENSSL_EXPORT int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
Robert Sloan1f278ae2018-09-04 13:56:45 -0700165OPENSSL_EXPORT DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey);
166OPENSSL_EXPORT DSA *EVP_PKEY_get1_DSA(const EVP_PKEY *pkey);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800167
Adam Langleyfad63272015-11-12 12:15:39 -0800168OPENSSL_EXPORT int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800169OPENSSL_EXPORT int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
Robert Sloan1f278ae2018-09-04 13:56:45 -0700170OPENSSL_EXPORT EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
171OPENSSL_EXPORT EC_KEY *EVP_PKEY_get1_EC_KEY(const EVP_PKEY *pkey);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800172
Srinivas Paladugudd42a612019-08-09 19:30:39 +0000173// EVP_PKEY_new_ed25519_public returns a newly allocated |EVP_PKEY| wrapping an
174// Ed25519 public key, or NULL on allocation error.
175OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_ed25519_public(
176 const uint8_t public_key[32]);
177
178// EVP_PKEY_new_ed25519_private returns a newly allocated |EVP_PKEY| wrapping an
179// Ed25519 private key, or NULL on allocation error.
180OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_ed25519_private(
181 const uint8_t private_key[64]);
182
Adam Langleyd9e397b2015-01-22 14:27:53 -0800183#define EVP_PKEY_NONE NID_undef
184#define EVP_PKEY_RSA NID_rsaEncryption
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100185#define EVP_PKEY_RSA_PSS NID_rsassaPss
Adam Langleyd9e397b2015-01-22 14:27:53 -0800186#define EVP_PKEY_DSA NID_dsa
Adam Langleyd9e397b2015-01-22 14:27:53 -0800187#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
Robert Sloan8ff03552017-06-14 12:40:58 -0700188#define EVP_PKEY_ED25519 NID_ED25519
Adam Langleyd9e397b2015-01-22 14:27:53 -0800189
Robert Sloan8f860b12017-08-28 07:37:06 -0700190// EVP_PKEY_assign sets the underlying key of |pkey| to |key|, which must be of
Robert Sloand9e572d2018-08-27 12:27:00 -0700191// the given type. It returns one if successful or zero if the |type| argument
192// is not one of the |EVP_PKEY_*| values or if |key| is NULL.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800193OPENSSL_EXPORT int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);
194
Robert Sloand9e572d2018-08-27 12:27:00 -0700195// EVP_PKEY_set_type sets the type of |pkey| to |type|. It returns one if
196// successful or zero if the |type| argument is not one of the |EVP_PKEY_*|
197// values. If |pkey| is NULL, it simply reports whether the type is known.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800198OPENSSL_EXPORT int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
199
Robert Sloan8f860b12017-08-28 07:37:06 -0700200// EVP_PKEY_cmp_parameters compares the parameters of |a| and |b|. It returns
201// one if they match, zero if not, or a negative number of on error.
202//
203// WARNING: the return value differs from the usual return value convention.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800204OPENSSL_EXPORT int EVP_PKEY_cmp_parameters(const EVP_PKEY *a,
205 const EVP_PKEY *b);
206
207
Robert Sloan8f860b12017-08-28 07:37:06 -0700208// ASN.1 functions
Adam Langleyd9e397b2015-01-22 14:27:53 -0800209
Robert Sloan8f860b12017-08-28 07:37:06 -0700210// EVP_parse_public_key decodes a DER-encoded SubjectPublicKeyInfo structure
211// (RFC 5280) from |cbs| and advances |cbs|. It returns a newly-allocated
Robert Sloand9e572d2018-08-27 12:27:00 -0700212// |EVP_PKEY| or NULL on error. If the key is an EC key, the curve is guaranteed
213// to be set.
Robert Sloan8f860b12017-08-28 07:37:06 -0700214//
215// The caller must check the type of the parsed public key to ensure it is
216// suitable and validate other desired key properties such as RSA modulus size
217// or EC curve.
David Benjamin4969cc92016-04-22 15:02:23 -0400218OPENSSL_EXPORT EVP_PKEY *EVP_parse_public_key(CBS *cbs);
219
Robert Sloan8f860b12017-08-28 07:37:06 -0700220// EVP_marshal_public_key marshals |key| as a DER-encoded SubjectPublicKeyInfo
221// structure (RFC 5280) and appends the result to |cbb|. It returns one on
222// success and zero on error.
David Benjamin4969cc92016-04-22 15:02:23 -0400223OPENSSL_EXPORT int EVP_marshal_public_key(CBB *cbb, const EVP_PKEY *key);
224
Robert Sloan8f860b12017-08-28 07:37:06 -0700225// EVP_parse_private_key decodes a DER-encoded PrivateKeyInfo structure (RFC
226// 5208) from |cbs| and advances |cbs|. It returns a newly-allocated |EVP_PKEY|
227// or NULL on error.
228//
229// The caller must check the type of the parsed private key to ensure it is
230// suitable and validate other desired key properties such as RSA modulus size
231// or EC curve.
232//
233// A PrivateKeyInfo ends with an optional set of attributes. These are not
234// processed and so this function will silently ignore any trailing data in the
235// structure.
David Benjamin4969cc92016-04-22 15:02:23 -0400236OPENSSL_EXPORT EVP_PKEY *EVP_parse_private_key(CBS *cbs);
237
Robert Sloan8f860b12017-08-28 07:37:06 -0700238// EVP_marshal_private_key marshals |key| as a DER-encoded PrivateKeyInfo
239// structure (RFC 5208) and appends the result to |cbb|. It returns one on
240// success and zero on error.
David Benjamin4969cc92016-04-22 15:02:23 -0400241OPENSSL_EXPORT int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800242
243
Robert Sloan8f860b12017-08-28 07:37:06 -0700244// Signing
Adam Langleyd9e397b2015-01-22 14:27:53 -0800245
Robert Sloan8f860b12017-08-28 07:37:06 -0700246// EVP_DigestSignInit sets up |ctx| for a signing operation with |type| and
247// |pkey|. The |ctx| argument must have been initialised with
248// |EVP_MD_CTX_init|. If |pctx| is not NULL, the |EVP_PKEY_CTX| of the signing
249// operation will be written to |*pctx|; this can be used to set alternative
250// signing options.
251//
252// For single-shot signing algorithms which do not use a pre-hash, such as
253// Ed25519, |type| should be NULL. The |EVP_MD_CTX| itself is unused but is
254// present so the API is uniform. See |EVP_DigestSign|.
255//
Robert Sloan1f278ae2018-09-04 13:56:45 -0700256// This function does not mutate |pkey| for thread-safety purposes and may be
257// used concurrently with other non-mutating functions on |pkey|.
258//
Robert Sloan8f860b12017-08-28 07:37:06 -0700259// It returns one on success, or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800260OPENSSL_EXPORT int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
261 const EVP_MD *type, ENGINE *e,
262 EVP_PKEY *pkey);
263
Robert Sloan8f860b12017-08-28 07:37:06 -0700264// EVP_DigestSignUpdate appends |len| bytes from |data| to the data which will
265// be signed in |EVP_DigestSignFinal|. It returns one.
266//
267// This function performs a streaming signing operation and will fail for
268// signature algorithms which do not support this. Use |EVP_DigestSign| for a
269// single-shot operation.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800270OPENSSL_EXPORT int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data,
271 size_t len);
272
Robert Sloan8f860b12017-08-28 07:37:06 -0700273// EVP_DigestSignFinal signs the data that has been included by one or more
274// calls to |EVP_DigestSignUpdate|. If |out_sig| is NULL then |*out_sig_len| is
275// set to the maximum number of output bytes. Otherwise, on entry,
276// |*out_sig_len| must contain the length of the |out_sig| buffer. If the call
277// is successful, the signature is written to |out_sig| and |*out_sig_len| is
278// set to its length.
279//
280// This function performs a streaming signing operation and will fail for
281// signature algorithms which do not support this. Use |EVP_DigestSign| for a
282// single-shot operation.
283//
284// It returns one on success, or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800285OPENSSL_EXPORT int EVP_DigestSignFinal(EVP_MD_CTX *ctx, uint8_t *out_sig,
286 size_t *out_sig_len);
287
Robert Sloan8f860b12017-08-28 07:37:06 -0700288// EVP_DigestSign signs |data_len| bytes from |data| using |ctx|. If |out_sig|
289// is NULL then |*out_sig_len| is set to the maximum number of output
290// bytes. Otherwise, on entry, |*out_sig_len| must contain the length of the
291// |out_sig| buffer. If the call is successful, the signature is written to
292// |out_sig| and |*out_sig_len| is set to its length.
293//
294// It returns one on success and zero on error.
Robert Sloan8ff03552017-06-14 12:40:58 -0700295OPENSSL_EXPORT int EVP_DigestSign(EVP_MD_CTX *ctx, uint8_t *out_sig,
296 size_t *out_sig_len, const uint8_t *data,
297 size_t data_len);
298
Adam Langleyd9e397b2015-01-22 14:27:53 -0800299
Robert Sloan8f860b12017-08-28 07:37:06 -0700300// Verifying
Adam Langleyd9e397b2015-01-22 14:27:53 -0800301
Robert Sloan8f860b12017-08-28 07:37:06 -0700302// EVP_DigestVerifyInit sets up |ctx| for a signature verification operation
303// with |type| and |pkey|. The |ctx| argument must have been initialised with
304// |EVP_MD_CTX_init|. If |pctx| is not NULL, the |EVP_PKEY_CTX| of the signing
305// operation will be written to |*pctx|; this can be used to set alternative
306// signing options.
307//
308// For single-shot signing algorithms which do not use a pre-hash, such as
309// Ed25519, |type| should be NULL. The |EVP_MD_CTX| itself is unused but is
310// present so the API is uniform. See |EVP_DigestVerify|.
311//
Robert Sloan1f278ae2018-09-04 13:56:45 -0700312// This function does not mutate |pkey| for thread-safety purposes and may be
313// used concurrently with other non-mutating functions on |pkey|.
314//
Robert Sloan8f860b12017-08-28 07:37:06 -0700315// It returns one on success, or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800316OPENSSL_EXPORT int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
317 const EVP_MD *type, ENGINE *e,
318 EVP_PKEY *pkey);
319
Robert Sloan8f860b12017-08-28 07:37:06 -0700320// EVP_DigestVerifyUpdate appends |len| bytes from |data| to the data which
321// will be verified by |EVP_DigestVerifyFinal|. It returns one.
322//
323// This function performs streaming signature verification and will fail for
324// signature algorithms which do not support this. Use |EVP_PKEY_verify_message|
325// for a single-shot verification.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800326OPENSSL_EXPORT int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data,
327 size_t len);
328
Robert Sloan8f860b12017-08-28 07:37:06 -0700329// EVP_DigestVerifyFinal verifies that |sig_len| bytes of |sig| are a valid
330// signature for the data that has been included by one or more calls to
331// |EVP_DigestVerifyUpdate|. It returns one on success and zero otherwise.
332//
333// This function performs streaming signature verification and will fail for
334// signature algorithms which do not support this. Use |EVP_PKEY_verify_message|
335// for a single-shot verification.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800336OPENSSL_EXPORT int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
337 size_t sig_len);
338
Robert Sloan8f860b12017-08-28 07:37:06 -0700339// EVP_DigestVerify verifies that |sig_len| bytes from |sig| are a valid
340// signature for |data|. It returns one on success or zero on error.
Robert Sloan8ff03552017-06-14 12:40:58 -0700341OPENSSL_EXPORT int EVP_DigestVerify(EVP_MD_CTX *ctx, const uint8_t *sig,
342 size_t sig_len, const uint8_t *data,
343 size_t len);
344
Adam Langleyd9e397b2015-01-22 14:27:53 -0800345
Robert Sloan8f860b12017-08-28 07:37:06 -0700346// Signing (old functions)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800347
Robert Sloan8f860b12017-08-28 07:37:06 -0700348// EVP_SignInit_ex configures |ctx|, which must already have been initialised,
349// for a fresh signing operation using the hash function |type|. It returns one
350// on success and zero otherwise.
351//
352// (In order to initialise |ctx|, either obtain it initialised with
353// |EVP_MD_CTX_create|, or use |EVP_MD_CTX_init|.)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800354OPENSSL_EXPORT int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
355 ENGINE *impl);
356
Robert Sloan8f860b12017-08-28 07:37:06 -0700357// EVP_SignInit is a deprecated version of |EVP_SignInit_ex|.
358//
359// TODO(fork): remove.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800360OPENSSL_EXPORT int EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type);
361
Robert Sloan8f860b12017-08-28 07:37:06 -0700362// EVP_SignUpdate appends |len| bytes from |data| to the data which will be
363// signed in |EVP_SignFinal|.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800364OPENSSL_EXPORT int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *data,
365 size_t len);
366
Robert Sloan8f860b12017-08-28 07:37:06 -0700367// EVP_SignFinal signs the data that has been included by one or more calls to
368// |EVP_SignUpdate|, using the key |pkey|, and writes it to |sig|. On entry,
369// |sig| must point to at least |EVP_PKEY_size(pkey)| bytes of space. The
370// actual size of the signature is written to |*out_sig_len|.
371//
372// It returns one on success and zero otherwise.
373//
374// It does not modify |ctx|, thus it's possible to continue to use |ctx| in
Robert Sloan1f278ae2018-09-04 13:56:45 -0700375// order to sign a longer message. It also does not mutate |pkey| for
376// thread-safety purposes and may be used concurrently with other non-mutating
377// functions on |pkey|.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800378OPENSSL_EXPORT int EVP_SignFinal(const EVP_MD_CTX *ctx, uint8_t *sig,
379 unsigned int *out_sig_len, EVP_PKEY *pkey);
380
381
Robert Sloan8f860b12017-08-28 07:37:06 -0700382// Verifying (old functions)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800383
Robert Sloan8f860b12017-08-28 07:37:06 -0700384// EVP_VerifyInit_ex configures |ctx|, which must already have been
385// initialised, for a fresh signature verification operation using the hash
386// function |type|. It returns one on success and zero otherwise.
387//
388// (In order to initialise |ctx|, either obtain it initialised with
389// |EVP_MD_CTX_create|, or use |EVP_MD_CTX_init|.)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800390OPENSSL_EXPORT int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
391 ENGINE *impl);
392
Robert Sloan8f860b12017-08-28 07:37:06 -0700393// EVP_VerifyInit is a deprecated version of |EVP_VerifyInit_ex|.
394//
395// TODO(fork): remove.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800396OPENSSL_EXPORT int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type);
397
Robert Sloan8f860b12017-08-28 07:37:06 -0700398// EVP_VerifyUpdate appends |len| bytes from |data| to the data which will be
399// signed in |EVP_VerifyFinal|.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800400OPENSSL_EXPORT int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *data,
401 size_t len);
402
Robert Sloan8f860b12017-08-28 07:37:06 -0700403// EVP_VerifyFinal verifies that |sig_len| bytes of |sig| are a valid
404// signature, by |pkey|, for the data that has been included by one or more
405// calls to |EVP_VerifyUpdate|.
406//
407// It returns one on success and zero otherwise.
408//
409// It does not modify |ctx|, thus it's possible to continue to use |ctx| in
Robert Sloan1f278ae2018-09-04 13:56:45 -0700410// order to verify a longer message. It also does not mutate |pkey| for
411// thread-safety purposes and may be used concurrently with other non-mutating
412// functions on |pkey|.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800413OPENSSL_EXPORT int EVP_VerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
414 size_t sig_len, EVP_PKEY *pkey);
415
416
Robert Sloan8f860b12017-08-28 07:37:06 -0700417// Printing
Adam Langleyd9e397b2015-01-22 14:27:53 -0800418
Robert Sloan8f860b12017-08-28 07:37:06 -0700419// EVP_PKEY_print_public prints a textual representation of the public key in
420// |pkey| to |out|. Returns one on success or zero otherwise.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800421OPENSSL_EXPORT int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
422 int indent, ASN1_PCTX *pctx);
423
Robert Sloan8f860b12017-08-28 07:37:06 -0700424// EVP_PKEY_print_private prints a textual representation of the private key in
425// |pkey| to |out|. Returns one on success or zero otherwise.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800426OPENSSL_EXPORT int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
427 int indent, ASN1_PCTX *pctx);
428
Robert Sloan8f860b12017-08-28 07:37:06 -0700429// EVP_PKEY_print_params prints a textual representation of the parameters in
430// |pkey| to |out|. Returns one on success or zero otherwise.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800431OPENSSL_EXPORT int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
432 int indent, ASN1_PCTX *pctx);
433
434
Robert Sloan8f860b12017-08-28 07:37:06 -0700435// Password stretching.
436//
437// Password stretching functions take a low-entropy password and apply a slow
438// function that results in a key suitable for use in symmetric
439// cryptography.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800440
Robert Sloan8f860b12017-08-28 07:37:06 -0700441// PKCS5_PBKDF2_HMAC computes |iterations| iterations of PBKDF2 of |password|
442// and |salt|, using |digest|, and outputs |key_len| bytes to |out_key|. It
Robert Sloand9e572d2018-08-27 12:27:00 -0700443// returns one on success and zero on allocation failure or if iterations is 0.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800444OPENSSL_EXPORT int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len,
445 const uint8_t *salt, size_t salt_len,
446 unsigned iterations, const EVP_MD *digest,
447 size_t key_len, uint8_t *out_key);
448
Robert Sloan8f860b12017-08-28 07:37:06 -0700449// PKCS5_PBKDF2_HMAC_SHA1 is the same as PKCS5_PBKDF2_HMAC, but with |digest|
450// fixed to |EVP_sha1|.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800451OPENSSL_EXPORT int PKCS5_PBKDF2_HMAC_SHA1(const char *password,
Steven Valdezb0b45c62017-01-17 16:23:54 -0500452 size_t password_len,
453 const uint8_t *salt, size_t salt_len,
454 unsigned iterations, size_t key_len,
455 uint8_t *out_key);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800456
Robert Sloan8f860b12017-08-28 07:37:06 -0700457// EVP_PBE_scrypt expands |password| into a secret key of length |key_len| using
458// scrypt, as described in RFC 7914, and writes the result to |out_key|. It
Robert Sloand9e572d2018-08-27 12:27:00 -0700459// returns one on success and zero on allocation failure, if the memory required
460// for the operation exceeds |max_mem|, or if any of the parameters are invalid
461// as described below.
Robert Sloan8f860b12017-08-28 07:37:06 -0700462//
463// |N|, |r|, and |p| are as described in RFC 7914 section 6. They determine the
Robert Sloand9e572d2018-08-27 12:27:00 -0700464// cost of the operation. If |max_mem| is zero, a defult limit of 32MiB will be
465// used.
466//
467// The parameters are considered invalid under any of the following conditions:
468// - |r| or |p| are zero
469// - |p| > (2^30 - 1) / |r|
470// - |N| is not a power of two
471// - |N| > 2^32
472// - |N| > 2^(128 * |r| / 8)
Robert Sloan8ff03552017-06-14 12:40:58 -0700473OPENSSL_EXPORT int EVP_PBE_scrypt(const char *password, size_t password_len,
474 const uint8_t *salt, size_t salt_len,
475 uint64_t N, uint64_t r, uint64_t p,
476 size_t max_mem, uint8_t *out_key,
477 size_t key_len);
478
Adam Langleyd9e397b2015-01-22 14:27:53 -0800479
Robert Sloan8f860b12017-08-28 07:37:06 -0700480// Public key contexts.
481//
482// |EVP_PKEY_CTX| objects hold the context of an operation (e.g. signing or
483// encrypting) that uses a public key.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800484
Robert Sloan8f860b12017-08-28 07:37:06 -0700485// EVP_PKEY_CTX_new allocates a fresh |EVP_PKEY_CTX| for use with |pkey|. It
486// returns the context or NULL on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800487OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
488
Robert Sloan8f860b12017-08-28 07:37:06 -0700489// EVP_PKEY_CTX_new_id allocates a fresh |EVP_PKEY_CTX| for a key of type |id|
490// (e.g. |EVP_PKEY_HMAC|). This can be used for key generation where
491// |EVP_PKEY_CTX_new| can't be used because there isn't an |EVP_PKEY| to pass
492// it. It returns the context or NULL on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800493OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
494
Robert Sloan8f860b12017-08-28 07:37:06 -0700495// EVP_PKEY_CTX_free frees |ctx| and the data it owns.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800496OPENSSL_EXPORT void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
497
Robert Sloan8f860b12017-08-28 07:37:06 -0700498// EVP_PKEY_CTX_dup allocates a fresh |EVP_PKEY_CTX| and sets it equal to the
499// state of |ctx|. It returns the fresh |EVP_PKEY_CTX| or NULL on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800500OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
501
Robert Sloan8f860b12017-08-28 07:37:06 -0700502// EVP_PKEY_CTX_get0_pkey returns the |EVP_PKEY| associated with |ctx|.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800503OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
504
Robert Sloan8f860b12017-08-28 07:37:06 -0700505// EVP_PKEY_sign_init initialises an |EVP_PKEY_CTX| for a signing operation. It
506// should be called before |EVP_PKEY_sign|.
507//
508// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800509OPENSSL_EXPORT int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
510
Robert Sloan8f860b12017-08-28 07:37:06 -0700511// EVP_PKEY_sign signs |digest_len| bytes from |digest| using |ctx|. If |sig| is
512// NULL, the maximum size of the signature is written to
513// |out_sig_len|. Otherwise, |*sig_len| must contain the number of bytes of
514// space available at |sig|. If sufficient, the signature will be written to
515// |sig| and |*sig_len| updated with the true length.
516//
517// This function expects a pre-hashed input and will fail for signature
518// algorithms which do not support this. Use |EVP_DigestSignInit| to sign an
519// unhashed input.
520//
521// WARNING: Setting |sig| to NULL only gives the maximum size of the
522// signature. The actual signature may be smaller.
523//
524// It returns one on success or zero on error. (Note: this differs from
525// OpenSSL, which can also return negative values to indicate an error. )
Adam Langleyd9e397b2015-01-22 14:27:53 -0800526OPENSSL_EXPORT int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, uint8_t *sig,
Robert Sloan572a4e22017-04-17 10:52:19 -0700527 size_t *sig_len, const uint8_t *digest,
528 size_t digest_len);
529
Robert Sloan8f860b12017-08-28 07:37:06 -0700530// EVP_PKEY_verify_init initialises an |EVP_PKEY_CTX| for a signature
531// verification operation. It should be called before |EVP_PKEY_verify|.
532//
533// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800534OPENSSL_EXPORT int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
535
Robert Sloan8f860b12017-08-28 07:37:06 -0700536// EVP_PKEY_verify verifies that |sig_len| bytes from |sig| are a valid
537// signature for |digest|.
538//
539// This function expects a pre-hashed input and will fail for signature
540// algorithms which do not support this. Use |EVP_DigestVerifyInit| to verify a
541// signature given the unhashed input.
542//
543// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800544OPENSSL_EXPORT int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig,
Robert Sloan572a4e22017-04-17 10:52:19 -0700545 size_t sig_len, const uint8_t *digest,
546 size_t digest_len);
547
Robert Sloan8f860b12017-08-28 07:37:06 -0700548// EVP_PKEY_encrypt_init initialises an |EVP_PKEY_CTX| for an encryption
549// operation. It should be called before |EVP_PKEY_encrypt|.
550//
551// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800552OPENSSL_EXPORT int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
553
Robert Sloan8f860b12017-08-28 07:37:06 -0700554// EVP_PKEY_encrypt encrypts |in_len| bytes from |in|. If |out| is NULL, the
555// maximum size of the ciphertext is written to |out_len|. Otherwise, |*out_len|
556// must contain the number of bytes of space available at |out|. If sufficient,
557// the ciphertext will be written to |out| and |*out_len| updated with the true
558// length.
559//
560// WARNING: Setting |out| to NULL only gives the maximum size of the
561// ciphertext. The actual ciphertext may be smaller.
562//
563// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800564OPENSSL_EXPORT int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
565 size_t *out_len, const uint8_t *in,
566 size_t in_len);
567
Robert Sloan8f860b12017-08-28 07:37:06 -0700568// EVP_PKEY_decrypt_init initialises an |EVP_PKEY_CTX| for a decryption
569// operation. It should be called before |EVP_PKEY_decrypt|.
570//
571// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800572OPENSSL_EXPORT int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
573
Robert Sloan8f860b12017-08-28 07:37:06 -0700574// EVP_PKEY_decrypt decrypts |in_len| bytes from |in|. If |out| is NULL, the
575// maximum size of the plaintext is written to |out_len|. Otherwise, |*out_len|
576// must contain the number of bytes of space available at |out|. If sufficient,
577// the ciphertext will be written to |out| and |*out_len| updated with the true
578// length.
579//
580// WARNING: Setting |out| to NULL only gives the maximum size of the
581// plaintext. The actual plaintext may be smaller.
582//
583// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800584OPENSSL_EXPORT int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
585 size_t *out_len, const uint8_t *in,
586 size_t in_len);
587
Robert Sloan8f860b12017-08-28 07:37:06 -0700588// EVP_PKEY_verify_recover_init initialises an |EVP_PKEY_CTX| for a public-key
589// decryption operation. It should be called before |EVP_PKEY_verify_recover|.
590//
591// Public-key decryption is a very obscure operation that is only implemented
592// by RSA keys. It is effectively a signature verification operation that
593// returns the signed message directly. It is almost certainly not what you
594// want.
595//
596// It returns one on success or zero on error.
David Benjamin4969cc92016-04-22 15:02:23 -0400597OPENSSL_EXPORT int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
598
Robert Sloan8f860b12017-08-28 07:37:06 -0700599// EVP_PKEY_verify_recover decrypts |sig_len| bytes from |sig|. If |out| is
600// NULL, the maximum size of the plaintext is written to |out_len|. Otherwise,
601// |*out_len| must contain the number of bytes of space available at |out|. If
602// sufficient, the ciphertext will be written to |out| and |*out_len| updated
603// with the true length.
604//
605// WARNING: Setting |out| to NULL only gives the maximum size of the
606// plaintext. The actual plaintext may be smaller.
607//
608// See the warning about this operation in |EVP_PKEY_verify_recover_init|. It
609// is probably not what you want.
610//
611// It returns one on success or zero on error.
David Benjamin4969cc92016-04-22 15:02:23 -0400612OPENSSL_EXPORT int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, uint8_t *out,
613 size_t *out_len, const uint8_t *sig,
614 size_t siglen);
615
Robert Sloan8f860b12017-08-28 07:37:06 -0700616// EVP_PKEY_derive_init initialises an |EVP_PKEY_CTX| for a key derivation
617// operation. It should be called before |EVP_PKEY_derive_set_peer| and
618// |EVP_PKEY_derive|.
619//
620// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800621OPENSSL_EXPORT int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
622
Robert Sloan8f860b12017-08-28 07:37:06 -0700623// EVP_PKEY_derive_set_peer sets the peer's key to be used for key derivation
624// by |ctx| to |peer|. It should be called after |EVP_PKEY_derive_init|. (For
625// example, this is used to set the peer's key in (EC)DH.) It returns one on
626// success and zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800627OPENSSL_EXPORT int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
628
Robert Sloan8f860b12017-08-28 07:37:06 -0700629// EVP_PKEY_derive derives a shared key between the two keys configured in
630// |ctx|. If |key| is non-NULL then, on entry, |out_key_len| must contain the
631// amount of space at |key|. If sufficient then the shared key will be written
632// to |key| and |*out_key_len| will be set to the length. If |key| is NULL then
633// |out_key_len| will be set to the maximum length.
634//
635// WARNING: Setting |out| to NULL only gives the maximum size of the key. The
636// actual key may be smaller.
637//
638// It returns one on success and zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800639OPENSSL_EXPORT int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, uint8_t *key,
640 size_t *out_key_len);
641
Robert Sloan8f860b12017-08-28 07:37:06 -0700642// EVP_PKEY_keygen_init initialises an |EVP_PKEY_CTX| for a key generation
643// operation. It should be called before |EVP_PKEY_keygen|.
644//
645// It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800646OPENSSL_EXPORT int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
647
Robert Sloan8f860b12017-08-28 07:37:06 -0700648// EVP_PKEY_keygen performs a key generation operation using the values from
Robert Sloan4c22c5f2019-03-01 15:53:37 -0800649// |ctx|. If |*out_pkey| is non-NULL, it overwrites |*out_pkey| with the
650// resulting key. Otherwise, it sets |*out_pkey| to a newly-allocated |EVP_PKEY|
651// containing the result. It returns one on success or zero on error.
652OPENSSL_EXPORT int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **out_pkey);
653
654// EVP_PKEY_paramgen_init initialises an |EVP_PKEY_CTX| for a parameter
655// generation operation. It should be called before |EVP_PKEY_paramgen|.
656//
Robert Sloan8f860b12017-08-28 07:37:06 -0700657// It returns one on success or zero on error.
Robert Sloan4c22c5f2019-03-01 15:53:37 -0800658OPENSSL_EXPORT int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
659
660// EVP_PKEY_paramgen performs a parameter generation using the values from
661// |ctx|. If |*out_pkey| is non-NULL, it overwrites |*out_pkey| with the
662// resulting parameters, but no key. Otherwise, it sets |*out_pkey| to a
663// newly-allocated |EVP_PKEY| containing the result. It returns one on success
664// or zero on error.
665OPENSSL_EXPORT int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **out_pkey);
Adam Langleyd9e397b2015-01-22 14:27:53 -0800666
667
Robert Sloan8f860b12017-08-28 07:37:06 -0700668// Generic control functions.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800669
Robert Sloan8f860b12017-08-28 07:37:06 -0700670// EVP_PKEY_CTX_set_signature_md sets |md| as the digest to be used in a
671// signature operation. It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800672OPENSSL_EXPORT int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx,
673 const EVP_MD *md);
674
Robert Sloan8f860b12017-08-28 07:37:06 -0700675// EVP_PKEY_CTX_get_signature_md sets |*out_md| to the digest to be used in a
676// signature operation. It returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800677OPENSSL_EXPORT int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx,
678 const EVP_MD **out_md);
679
Adam Langleyd9e397b2015-01-22 14:27:53 -0800680
Robert Sloan8f860b12017-08-28 07:37:06 -0700681// RSA specific control functions.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800682
Robert Sloan8f860b12017-08-28 07:37:06 -0700683// EVP_PKEY_CTX_set_rsa_padding sets the padding type to use. It should be one
684// of the |RSA_*_PADDING| values. Returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800685OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int padding);
686
Robert Sloan8f860b12017-08-28 07:37:06 -0700687// EVP_PKEY_CTX_get_rsa_padding sets |*out_padding| to the current padding
688// value, which is one of the |RSA_*_PADDING| values. Returns one on success or
689// zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800690OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx,
691 int *out_padding);
692
Robert Sloan8f860b12017-08-28 07:37:06 -0700693// EVP_PKEY_CTX_set_rsa_pss_saltlen sets the length of the salt in a PSS-padded
694// signature. A value of -1 cause the salt to be the same length as the digest
695// in the signature. A value of -2 causes the salt to be the maximum length
696// that will fit when signing and recovered from the signature when verifying.
697// Otherwise the value gives the size of the salt in bytes.
698//
699// If unsure, use -1.
700//
701// Returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800702OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx,
703 int salt_len);
704
Robert Sloan8f860b12017-08-28 07:37:06 -0700705// EVP_PKEY_CTX_get_rsa_pss_saltlen sets |*out_salt_len| to the salt length of
706// a PSS-padded signature. See the documentation for
707// |EVP_PKEY_CTX_set_rsa_pss_saltlen| for details of the special values that it
708// can take.
709//
710// Returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800711OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx,
712 int *out_salt_len);
713
Robert Sloan8f860b12017-08-28 07:37:06 -0700714// EVP_PKEY_CTX_set_rsa_keygen_bits sets the size of the desired RSA modulus,
715// in bits, for key generation. Returns one on success or zero on
716// error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800717OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx,
718 int bits);
719
Robert Sloan8f860b12017-08-28 07:37:06 -0700720// EVP_PKEY_CTX_set_rsa_keygen_pubexp sets |e| as the public exponent for key
721// generation. Returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800722OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx,
723 BIGNUM *e);
724
Robert Sloan8f860b12017-08-28 07:37:06 -0700725// EVP_PKEY_CTX_set_rsa_oaep_md sets |md| as the digest used in OAEP padding.
726// Returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800727OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx,
728 const EVP_MD *md);
729
Robert Sloan8f860b12017-08-28 07:37:06 -0700730// EVP_PKEY_CTX_get_rsa_oaep_md sets |*out_md| to the digest function used in
731// OAEP padding. Returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800732OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx,
733 const EVP_MD **out_md);
734
Robert Sloan8f860b12017-08-28 07:37:06 -0700735// EVP_PKEY_CTX_set_rsa_mgf1_md sets |md| as the digest used in MGF1. Returns
736// one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800737OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx,
738 const EVP_MD *md);
739
Robert Sloan8f860b12017-08-28 07:37:06 -0700740// EVP_PKEY_CTX_get_rsa_mgf1_md sets |*out_md| to the digest function used in
741// MGF1. Returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800742OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx,
743 const EVP_MD **out_md);
744
Robert Sloan8f860b12017-08-28 07:37:06 -0700745// EVP_PKEY_CTX_set0_rsa_oaep_label sets |label_len| bytes from |label| as the
746// label used in OAEP. DANGER: On success, this call takes ownership of |label|
747// and will call |OPENSSL_free| on it when |ctx| is destroyed.
748//
749// Returns one on success or zero on error.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800750OPENSSL_EXPORT int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
David Benjamin4969cc92016-04-22 15:02:23 -0400751 uint8_t *label,
Adam Langleyd9e397b2015-01-22 14:27:53 -0800752 size_t label_len);
753
Robert Sloan8f860b12017-08-28 07:37:06 -0700754// EVP_PKEY_CTX_get0_rsa_oaep_label sets |*out_label| to point to the internal
755// buffer containing the OAEP label (which may be NULL) and returns the length
756// of the label or a negative value on error.
757//
758// WARNING: the return value differs from the usual return value convention.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800759OPENSSL_EXPORT int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
760 const uint8_t **out_label);
761
762
Robert Sloan4c22c5f2019-03-01 15:53:37 -0800763// EC specific control functions.
764
765// EVP_PKEY_CTX_set_ec_paramgen_curve_nid sets the curve used for
766// |EVP_PKEY_keygen| or |EVP_PKEY_paramgen| operations to |nid|. It returns one
767// on success and zero on error.
768OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx,
769 int nid);
770
771
Robert Sloan8f860b12017-08-28 07:37:06 -0700772// Deprecated functions.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800773
Robert Sloan8f860b12017-08-28 07:37:06 -0700774// EVP_PKEY_DH is defined for compatibility, but it is impossible to create an
775// |EVP_PKEY| of that type.
Adam Langley4139edb2016-01-13 15:00:54 -0800776#define EVP_PKEY_DH NID_dhKeyAgreement
777
Robert Sloan8f860b12017-08-28 07:37:06 -0700778// EVP_PKEY_RSA2 was historically an alternate form for RSA public keys (OID
779// 2.5.8.1.1), but is no longer accepted.
David Benjamin4969cc92016-04-22 15:02:23 -0400780#define EVP_PKEY_RSA2 NID_rsa
781
Robert Sloan8f860b12017-08-28 07:37:06 -0700782// OpenSSL_add_all_algorithms does nothing.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800783OPENSSL_EXPORT void OpenSSL_add_all_algorithms(void);
784
Robert Sloan8f860b12017-08-28 07:37:06 -0700785// OPENSSL_add_all_algorithms_conf does nothing.
David Benjaminc895d6b2016-08-11 13:26:41 -0400786OPENSSL_EXPORT void OPENSSL_add_all_algorithms_conf(void);
David Benjamin6e899c72016-06-09 18:02:18 -0400787
Robert Sloan8f860b12017-08-28 07:37:06 -0700788// OpenSSL_add_all_ciphers does nothing.
Adam Langleyf4e42722015-06-04 17:45:09 -0700789OPENSSL_EXPORT void OpenSSL_add_all_ciphers(void);
790
Robert Sloan8f860b12017-08-28 07:37:06 -0700791// OpenSSL_add_all_digests does nothing.
Adam Langleyf4e42722015-06-04 17:45:09 -0700792OPENSSL_EXPORT void OpenSSL_add_all_digests(void);
793
Robert Sloan8f860b12017-08-28 07:37:06 -0700794// EVP_cleanup does nothing.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800795OPENSSL_EXPORT void EVP_cleanup(void);
796
David Benjamin4969cc92016-04-22 15:02:23 -0400797OPENSSL_EXPORT void EVP_CIPHER_do_all_sorted(
798 void (*callback)(const EVP_CIPHER *cipher, const char *name,
799 const char *unused, void *arg),
800 void *arg);
Kenny Rootb8494592015-09-25 02:29:14 +0000801
David Benjamin4969cc92016-04-22 15:02:23 -0400802OPENSSL_EXPORT void EVP_MD_do_all_sorted(void (*callback)(const EVP_MD *cipher,
803 const char *name,
804 const char *unused,
805 void *arg),
806 void *arg);
Kenny Rootb8494592015-09-25 02:29:14 +0000807
Robert Sloan8f860b12017-08-28 07:37:06 -0700808// i2d_PrivateKey marshals a private key from |key| to an ASN.1, DER
809// structure. If |outp| is not NULL then the result is written to |*outp| and
810// |*outp| is advanced just past the output. It returns the number of bytes in
811// the result, whether written or not, or a negative value on error.
812//
813// RSA keys are serialized as a DER-encoded RSAPublicKey (RFC 3447) structure.
814// EC keys are serialized as a DER-encoded ECPrivateKey (RFC 5915) structure.
815//
Robert Sloan309a31e2018-01-29 10:22:47 -0800816// Use |RSA_marshal_private_key| or |EC_KEY_marshal_private_key| instead.
David Benjamin4969cc92016-04-22 15:02:23 -0400817OPENSSL_EXPORT int i2d_PrivateKey(const EVP_PKEY *key, uint8_t **outp);
818
Robert Sloan8f860b12017-08-28 07:37:06 -0700819// i2d_PublicKey marshals a public key from |key| to a type-specific format.
820// If |outp| is not NULL then the result is written to |*outp| and
821// |*outp| is advanced just past the output. It returns the number of bytes in
822// the result, whether written or not, or a negative value on error.
823//
824// RSA keys are serialized as a DER-encoded RSAPublicKey (RFC 3447) structure.
825// EC keys are serialized as an EC point per SEC 1.
826//
827// Use |RSA_marshal_public_key| or |EC_POINT_point2cbb| instead.
Robert Sloan1f278ae2018-09-04 13:56:45 -0700828OPENSSL_EXPORT int i2d_PublicKey(const EVP_PKEY *key, uint8_t **outp);
David Benjamin4969cc92016-04-22 15:02:23 -0400829
Robert Sloan8f860b12017-08-28 07:37:06 -0700830// d2i_PrivateKey parses an ASN.1, DER-encoded, private key from |len| bytes at
831// |*inp|. If |out| is not NULL then, on exit, a pointer to the result is in
832// |*out|. Note that, even if |*out| is already non-NULL on entry, it will not
833// be written to. Rather, a fresh |EVP_PKEY| is allocated and the previous one
834// is freed. On successful exit, |*inp| is advanced past the DER structure. It
835// returns the result or NULL on error.
836//
837// This function tries to detect one of several formats. Instead, use
838// |EVP_parse_private_key| for a PrivateKeyInfo, |RSA_parse_private_key| for an
839// RSAPrivateKey, and |EC_parse_private_key| for an ECPrivateKey.
David Benjamin4969cc92016-04-22 15:02:23 -0400840OPENSSL_EXPORT EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out,
841 const uint8_t **inp, long len);
842
Robert Sloan8f860b12017-08-28 07:37:06 -0700843// d2i_AutoPrivateKey acts the same as |d2i_PrivateKey|, but detects the type
844// of the private key.
845//
846// This function tries to detect one of several formats. Instead, use
847// |EVP_parse_private_key| for a PrivateKeyInfo, |RSA_parse_private_key| for an
848// RSAPrivateKey, and |EC_parse_private_key| for an ECPrivateKey.
David Benjamin4969cc92016-04-22 15:02:23 -0400849OPENSSL_EXPORT EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp,
850 long len);
851
Robert Sloan4c22c5f2019-03-01 15:53:37 -0800852// d2i_PublicKey parse a public key from |len| bytes at |*inp| in a type-
853// specific format specified by |type|. If |out| is not NULL then, on exit, a
854// pointer to the result is in |*out|. Note that, even if |*out| is already non-
855// NULL on entry, it will not be written to. Rather, a fresh |EVP_PKEY| is
856// allocated and the previous one is freed. On successful exit, |*inp| is
857// advanced past the decoded key. It returns the result or NULL on error.
858//
859// RSA keys are parsed as a DER-encoded RSAPublicKey (RFC 3447) structure.
860// Parsing EC keys is not supported by this function.
861//
862// Use |RSA_parse_public_key| instead.
863OPENSSL_EXPORT EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **out,
864 const uint8_t **inp, long len);
865
Robert Sloan8f860b12017-08-28 07:37:06 -0700866// EVP_PKEY_get0_DH returns NULL.
Robert Sloan1f278ae2018-09-04 13:56:45 -0700867OPENSSL_EXPORT DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
David Benjaminc895d6b2016-08-11 13:26:41 -0400868
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100869// EVP_PKEY_get1_DH returns NULL.
Robert Sloan1f278ae2018-09-04 13:56:45 -0700870OPENSSL_EXPORT DH *EVP_PKEY_get1_DH(const EVP_PKEY *pkey);
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100871
Robert Sloan4c22c5f2019-03-01 15:53:37 -0800872// EVP_PKEY_CTX_set_ec_param_enc returns one if |encoding| is
873// |OPENSSL_EC_NAMED_CURVE| or zero with an error otherwise.
874OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx,
875 int encoding);
876
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100877
878// Preprocessor compatibility section (hidden).
879//
880// Historically, a number of APIs were implemented in OpenSSL as macros and
881// constants to 'ctrl' functions. To avoid breaking #ifdefs in consumers, this
882// section defines a number of legacy macros.
883
Robert Sloan726e9d12018-09-11 11:45:04 -0700884// |BORINGSSL_PREFIX| already makes each of these symbols into macros, so there
885// is no need to define conflicting macros.
886#if !defined(BORINGSSL_PREFIX)
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100887#define EVP_PKEY_CTX_set_rsa_oaep_md EVP_PKEY_CTX_set_rsa_oaep_md
888#define EVP_PKEY_CTX_set0_rsa_oaep_label EVP_PKEY_CTX_set0_rsa_oaep_label
Robert Sloan726e9d12018-09-11 11:45:04 -0700889#endif
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100890
David Benjamin4969cc92016-04-22 15:02:23 -0400891
Robert Sloan8f860b12017-08-28 07:37:06 -0700892// Private structures.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800893
894struct evp_pkey_st {
Adam Langleyf4e42722015-06-04 17:45:09 -0700895 CRYPTO_refcount_t references;
Adam Langleyd9e397b2015-01-22 14:27:53 -0800896
Robert Sloan8f860b12017-08-28 07:37:06 -0700897 // type contains one of the EVP_PKEY_* values or NID_undef and determines
898 // which element (if any) of the |pkey| union is valid.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800899 int type;
900
Adam Langleyd9e397b2015-01-22 14:27:53 -0800901 union {
Robert Sloan572a4e22017-04-17 10:52:19 -0700902 void *ptr;
Kenny Rootb8494592015-09-25 02:29:14 +0000903 RSA *rsa;
904 DSA *dsa;
905 DH *dh;
906 EC_KEY *ec;
Adam Langleyd9e397b2015-01-22 14:27:53 -0800907 } pkey;
908
Robert Sloan8f860b12017-08-28 07:37:06 -0700909 // ameth contains a pointer to a method table that contains many ASN.1
910 // methods for the key type.
Adam Langleyd9e397b2015-01-22 14:27:53 -0800911 const EVP_PKEY_ASN1_METHOD *ameth;
Adam Langleyd9e397b2015-01-22 14:27:53 -0800912} /* EVP_PKEY */;
913
914
915#if defined(__cplusplus)
Robert Sloan8f860b12017-08-28 07:37:06 -0700916} // extern C
David Benjaminf0c4a6c2016-08-11 13:26:41 -0400917
918extern "C++" {
Robert Sloan726e9d12018-09-11 11:45:04 -0700919BSSL_NAMESPACE_BEGIN
David Benjaminf0c4a6c2016-08-11 13:26:41 -0400920
921BORINGSSL_MAKE_DELETER(EVP_PKEY, EVP_PKEY_free)
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100922BORINGSSL_MAKE_UP_REF(EVP_PKEY, EVP_PKEY_up_ref)
David Benjaminf0c4a6c2016-08-11 13:26:41 -0400923BORINGSSL_MAKE_DELETER(EVP_PKEY_CTX, EVP_PKEY_CTX_free)
924
Robert Sloan726e9d12018-09-11 11:45:04 -0700925BSSL_NAMESPACE_END
David Benjaminf0c4a6c2016-08-11 13:26:41 -0400926
Robert Sloan8f860b12017-08-28 07:37:06 -0700927} // extern C++
David Benjaminf0c4a6c2016-08-11 13:26:41 -0400928
Adam Langleyd9e397b2015-01-22 14:27:53 -0800929#endif
930
Adam Langleye9ada862015-05-11 17:20:37 -0700931#define EVP_R_BUFFER_TOO_SMALL 100
932#define EVP_R_COMMAND_NOT_SUPPORTED 101
David Benjamin4969cc92016-04-22 15:02:23 -0400933#define EVP_R_DECODE_ERROR 102
934#define EVP_R_DIFFERENT_KEY_TYPES 103
935#define EVP_R_DIFFERENT_PARAMETERS 104
936#define EVP_R_ENCODE_ERROR 105
937#define EVP_R_EXPECTING_AN_EC_KEY_KEY 106
938#define EVP_R_EXPECTING_AN_RSA_KEY 107
939#define EVP_R_EXPECTING_A_DSA_KEY 108
940#define EVP_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 109
941#define EVP_R_INVALID_DIGEST_LENGTH 110
942#define EVP_R_INVALID_DIGEST_TYPE 111
943#define EVP_R_INVALID_KEYBITS 112
944#define EVP_R_INVALID_MGF1_MD 113
945#define EVP_R_INVALID_OPERATION 114
946#define EVP_R_INVALID_PADDING_MODE 115
947#define EVP_R_INVALID_PSS_SALTLEN 116
948#define EVP_R_KEYS_NOT_SET 117
949#define EVP_R_MISSING_PARAMETERS 118
950#define EVP_R_NO_DEFAULT_DIGEST 119
951#define EVP_R_NO_KEY_SET 120
952#define EVP_R_NO_MDC2_SUPPORT 121
953#define EVP_R_NO_NID_FOR_CURVE 122
954#define EVP_R_NO_OPERATION_SET 123
955#define EVP_R_NO_PARAMETERS_SET 124
956#define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 125
957#define EVP_R_OPERATON_NOT_INITIALIZED 126
958#define EVP_R_UNKNOWN_PUBLIC_KEY_TYPE 127
959#define EVP_R_UNSUPPORTED_ALGORITHM 128
960#define EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE 129
Robert Sloan572a4e22017-04-17 10:52:19 -0700961#define EVP_R_NOT_A_PRIVATE_KEY 130
962#define EVP_R_INVALID_SIGNATURE 131
Robert Sloan8ff03552017-06-14 12:40:58 -0700963#define EVP_R_MEMORY_LIMIT_EXCEEDED 132
964#define EVP_R_INVALID_PARAMETERS 133
Adam Langleyd9e397b2015-01-22 14:27:53 -0800965
Robert Sloan8f860b12017-08-28 07:37:06 -0700966#endif // OPENSSL_HEADER_EVP_H