14c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
24c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * All rights reserved.
34c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
44c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This package is an SSL implementation written
54c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * by Eric Young (eay@cryptsoft.com).
64c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The implementation was written so as to conform with Netscapes SSL.
74c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
84c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This library is free for commercial and non-commercial use as long as
94c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the following conditions are aheared to.  The following conditions
104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * apply to all code found in this distribution, be it the RC4, RSA,
114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * included with this distribution is covered by the same copyright terms
134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com).
144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Copyright remains Eric Young's, and as such any Copyright notices in
164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the code are not to be removed.
174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * If this package is used in a product, Eric Young should be given attribution
184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * as the author of the parts of the library used.
194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This can be in the form of a textual message at program startup or
204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * in documentation (online or textual) provided with the package.
214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Redistribution and use in source and binary forms, with or without
234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * modification, are permitted provided that the following conditions
244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * are met:
254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 1. Redistributions of source code must retain the copyright
264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    notice, this list of conditions and the following disclaimer.
274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 2. Redistributions in binary form must reproduce the above copyright
284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    notice, this list of conditions and the following disclaimer in the
294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    documentation and/or other materials provided with the distribution.
304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3. All advertising materials mentioning features or use of this software
314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    must display the following acknowledgement:
324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    "This product includes cryptographic software written by
334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *     Eric Young (eay@cryptsoft.com)"
344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    The word 'cryptographic' can be left out if the rouines from the library
354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    being used are not cryptographic related :-).
364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 4. If you include any Windows specific code (or a derivative thereof) from
374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    the apps directory (application code) you must include an acknowledgement:
384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SUCH DAMAGE.
514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The licence and distribution terms for any publically available version or
534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * derivative of this code cannot be changed.  i.e. this code cannot simply be
544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * copied and put under another distribution licence
554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * [including the GNU Public Licence.] */
564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_HEADER_EVP_H
584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define OPENSSL_HEADER_EVP_H
594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/base.h>
614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/stack.h>
624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* OpenSSL included digest and cipher functions in this header so we include
644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * them for users that still expect that.
654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * TODO(fork): clean up callers so that they include what they use. */
674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/aead.h>
684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/cipher.h>
694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/digest.h>
704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/mem.h>
714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/obj.h>
724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/thread.h>
734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#if defined(__cplusplus)
754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleyextern "C" {
764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP abstracts over public/private key algorithms. */
804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Public key objects. */
834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_new creates a new, empty public-key object and returns it or NULL
854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * on allocation failure. */
86c44d2f4cb8a892a603edbbe710fa82bcd30f9cb5David BenjaminOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new(void);
874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_free frees all data referenced by |pkey| and then frees |pkey|
894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * itself. */
90eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void EVP_PKEY_free(EVP_PKEY *pkey);
914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
92ecc0ce7e67b7dcfdfc57ffa99d70c9a04996e15bDavid Benjamin/* EVP_PKEY_is_opaque returns one if |pkey| is opaque. Opaque keys are backed by
93ecc0ce7e67b7dcfdfc57ffa99d70c9a04996e15bDavid Benjamin * custom implementations which do not expose key material and parameters. It is
94ecc0ce7e67b7dcfdfc57ffa99d70c9a04996e15bDavid Benjamin * an error to attempt to duplicate, export, or compare an opaque key. */
95eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_is_opaque(const EVP_PKEY *pkey);
96ecc0ce7e67b7dcfdfc57ffa99d70c9a04996e15bDavid Benjamin
974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_cmp compares |a| and |b| and returns one if they are equal, zero if
984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * not and a negative number on error.
994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * WARNING: this differs from the traditional return value of a "cmp"
1014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * function. */
102eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
1034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_dup adds one to the reference count of |pkey| and returns
1054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |pkey|. */
106eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey);
1074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_copy_parameters sets the parameters of |to| to equal the parameters
1094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * of |from|. It returns one on success and zero on error. */
110eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
1114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_missing_parameters returns one if |pkey| is missing needed
1134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * parameters or zero if not, or if the algorithm doesn't take parameters. */
114eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
1154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_size returns the "size", in bytes, of |pkey|. For example, for an
1174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * RSA key this returns the number of bytes needed to represent the modulus. */
118eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_size(const EVP_PKEY *pkey);
1194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_bits returns the "size", in bits, of |pkey|. For example, for an
1214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * RSA key, this returns the bit length of the modulus. */
122eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_bits(EVP_PKEY *pkey);
1234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_id returns the type of |pkey|, which is one of the |EVP_PKEY_*|
1254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * values. */
126eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_id(const EVP_PKEY *pkey);
1274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_type returns a canonicalised form of |NID|. For example,
1294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_RSA2| will be turned into |EVP_PKEY_RSA|. */
130eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_type(int nid);
1314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_new_mac_key allocates a fresh |EVP_PKEY| of the given type (e.g.
1334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_HMAC|), sets |mac_key| as the MAC key and "generates" a new key,
1344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * suitable for signing. It returns the fresh |EVP_PKEY|, or NULL on error. */
135eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *engine,
136eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                              const uint8_t *mac_key,
137eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                              size_t mac_key_len);
1384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Getting and setting concrete public key types.
1414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The following functions get and set the underlying public key in an
143389e3f0daac08b7b004afb613365bb60a1bd866aAdam Langley * |EVP_PKEY| object. The |set1| functions take an additional reference to the
1444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * underlying key and return one on success or zero on error. The |assign|
1454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * functions adopt the caller's reference. The getters return a fresh reference
1464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to the underlying object. */
1474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
148eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
149eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
150eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
1514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
152eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key);
153eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
154eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
1554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
156eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key);
157eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
158eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
1594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
160eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key);
161eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
162eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
1634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_NONE NID_undef
1654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_RSA NID_rsaEncryption
1664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_RSA2 NID_rsa
1674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_DSA NID_dsa
1684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_DH NID_dhKeyAgreement
1694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_DHX NID_dhpublicnumber
1704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
1714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_HMAC NID_hmac
1724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_assign sets the underlying key of |pkey| to |key|, which must be of
1744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the given type. The |type| argument should be one of the |EVP_PKEY_*|
1754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * values. */
176eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);
1774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_set_type sets the type of |pkey| to |type|, which should be one of
1794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the |EVP_PKEY_*| values. It returns one if sucessful or zero otherwise. If
1804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |pkey| is NULL, it simply reports whether the type is known. */
181eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
1824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_cmp_parameters compares the parameters of |a| and |b|. It returns
1844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * one if they match, zero if not, or a negative number of on error.
1854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * WARNING: the return value differs from the usual return value convention. */
187eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_cmp_parameters(const EVP_PKEY *a,
188eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                           const EVP_PKEY *b);
1894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ASN.1 functions */
1924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* d2i_PrivateKey parses an ASN.1, DER-encoded, private key from |len| bytes at
1944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |*inp|. If |out| is not NULL then, on exit, a pointer to the result is in
1954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |*out|. If |*out| is already non-NULL on entry then the result is written
1964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * directly into |*out|, otherwise a fresh |EVP_PKEY| is allocated. On
1974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * successful exit, |*inp| is advanced past the DER structure. It returns the
1984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * result or NULL on error. */
199eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out,
200eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                        const uint8_t **inp, long len);
2014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* d2i_AutoPrivateKey acts the same as |d2i_PrivateKey|, but detects the type
2034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * of the private key. */
204eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp,
205eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                            long len);
2064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* i2d_PrivateKey marshals a private key from |key| to an ASN.1, DER
2084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * structure. If |outp| is not NULL then the result is written to |*outp| and
2094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |*outp| is advanced just past the output. It returns the number of bytes in
2104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the result, whether written or not, or a negative value on error. */
211eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2d_PrivateKey(const EVP_PKEY *key, uint8_t **outp);
2124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* i2d_PublicKey marshals a public key from |key| to an ASN.1, DER
2144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * structure. If |outp| is not NULL then the result is written to |*outp| and
2154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |*outp| is advanced just past the output. It returns the number of bytes in
2164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the result, whether written or not, or a negative value on error. */
217eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2d_PublicKey(EVP_PKEY *key, uint8_t **outp);
2184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Signing */
2214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_DigestSignInit sets up |ctx| for a signing operation with |type| and
2234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |pkey|. The |ctx| argument must have been initialised with
2244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_MD_CTX_init|. If |pctx| is not NULL, the |EVP_PKEY_CTX| of the signing
2254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * operation will be written to |*pctx|; this can be used to set alternative
2264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signing options.
2274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
2285129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success, or zero on error. */
229eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
230eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                      const EVP_MD *type, ENGINE *e,
231eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                      EVP_PKEY *pkey);
2324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_DigestSignUpdate appends |len| bytes from |data| to the data which will
2344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * be signed in |EVP_DigestSignFinal|. It returns one on success and zero
2354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * otherwise. */
236eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data,
237eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                        size_t len);
2384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_DigestSignFinal signs the data that has been included by one or more
2404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * calls to |EVP_DigestSignUpdate|. If |out_sig| is NULL then |*out_sig_len| is
2414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * set to the maximum number of output bytes. Otherwise, on entry,
2424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |*out_sig_len| must contain the length of the |out_sig| buffer. If the call
2434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * is successful, the signature is written to |out_sig| and |*out_sig_len| is
2444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * set to its length.
2454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
2465129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success, or zero on error. */
247eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_DigestSignFinal(EVP_MD_CTX *ctx, uint8_t *out_sig,
248eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                       size_t *out_sig_len);
2494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Verifying */
2524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_DigestVerifyInit sets up |ctx| for a signature verification operation
2544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * with |type| and |pkey|. The |ctx| argument must have been initialised with
2554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_MD_CTX_init|. If |pctx| is not NULL, the |EVP_PKEY_CTX| of the signing
2564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * operation will be written to |*pctx|; this can be used to set alternative
2574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signing options.
2584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
2595129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success, or zero on error. */
260eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
261eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                        const EVP_MD *type, ENGINE *e,
262eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                        EVP_PKEY *pkey);
2634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_DigestVerifyUpdate appends |len| bytes from |data| to the data which
2654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * will be verified by |EVP_DigestVerifyFinal|. It returns one on success and
2664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * zero otherwise. */
267eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data,
268eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                          size_t len);
2694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_DigestVerifyFinal verifies that |sig_len| bytes of |sig| are a valid
2714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signature for the data that has been included by one or more calls to
2724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_DigestVerifyUpdate|.
2734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
2744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It returns one on success and <= 0 on error. WARNING: this differs from the
2754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * usual return value convention. */
276eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
277eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                         size_t sig_len);
2784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Signing (old functions) */
2814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_SignInit_ex configures |ctx|, which must already have been initialised,
2834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * for a fresh signing operation using the hash function |type|. It returns one
2844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * on success and zero otherwise.
2854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
2864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * (In order to initialise |ctx|, either obtain it initialised with
2874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_MD_CTX_create|, or use |EVP_MD_CTX_init|.) */
288eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
289eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                   ENGINE *impl);
2904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_SignInit is a deprecated version of |EVP_SignInit_ex|.
2924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
2934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * TODO(fork): remove. */
294eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type);
2954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_SignUpdate appends |len| bytes from |data| to the data which will be
2974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signed in |EVP_SignFinal|. */
298eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *data,
299eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                  size_t len);
3004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_SignFinal signs the data that has been included by one or more calls to
3024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_SignUpdate|, using the key |pkey|, and writes it to |sig|. On entry,
3034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |sig| must point to at least |EVP_PKEY_size(pkey)| bytes of space. The
3044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * actual size of the signature is written to |*out_sig_len|.
3054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
3064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It returns one on success and zero otherwise.
3074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
3084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It does not modify |ctx|, thus it's possible to continue to use |ctx| in
3094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * order to sign a longer message. */
310eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_SignFinal(const EVP_MD_CTX *ctx, uint8_t *sig,
311eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                 unsigned int *out_sig_len, EVP_PKEY *pkey);
3124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Verifying (old functions) */
3154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_VerifyInit_ex configures |ctx|, which must already have been
3174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * initialised, for a fresh signature verification operation using the hash
3184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * function |type|. It returns one on success and zero otherwise.
3194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
3204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * (In order to initialise |ctx|, either obtain it initialised with
3214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_MD_CTX_create|, or use |EVP_MD_CTX_init|.) */
322eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
323eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                     ENGINE *impl);
3244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_VerifyInit is a deprecated version of |EVP_VerifyInit_ex|.
3264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
3274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * TODO(fork): remove. */
328eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type);
3294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_VerifyUpdate appends |len| bytes from |data| to the data which will be
3314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signed in |EVP_VerifyFinal|. */
332eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *data,
333eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                    size_t len);
3344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_VerifyFinal verifies that |sig_len| bytes of |sig| are a valid
3364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signature, by |pkey|, for the data that has been included by one or more
3374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * calls to |EVP_VerifyUpdate|.
3384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
3394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It returns one on success and zero otherwise.
3404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
3414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It does not modify |ctx|, thus it's possible to continue to use |ctx| in
3424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * order to sign a longer message. */
343eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_VerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
344eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                   size_t sig_len, EVP_PKEY *pkey);
3454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Printing */
3484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_print_public prints a textual representation of the public key in
3504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |pkey| to |out|. Returns one on success or zero otherwise. */
351eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
352eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                         int indent, ASN1_PCTX *pctx);
3534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_print_public prints a textual representation of the private key in
3554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |pkey| to |out|. Returns one on success or zero otherwise. */
356eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
357eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                          int indent, ASN1_PCTX *pctx);
3584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_print_public prints a textual representation of the parameters in
3604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |pkey| to |out|. Returns one on success or zero otherwise. */
361eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
362eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                         int indent, ASN1_PCTX *pctx);
3634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Password stretching.
3664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
3674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Password stretching functions take a low-entropy password and apply a slow
3684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * function that results in a key suitable for use in symmetric
3694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * cryptography. */
3704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* PKCS5_PBKDF2_HMAC computes |iterations| iterations of PBKDF2 of |password|
3724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * and |salt|, using |digest|, and outputs |key_len| bytes to |out_key|. It
3734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * returns one on success and zero on error. */
374eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int PKCS5_PBKDF2_HMAC(const char *password, int password_len,
375eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                     const uint8_t *salt, size_t salt_len,
376eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                     unsigned iterations, const EVP_MD *digest,
377eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                     size_t key_len, uint8_t *out_key);
3784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* PKCS5_PBKDF2_HMAC_SHA1 is the same as PKCS5_PBKDF2_HMAC, but with |digest|
3804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * fixed to |EVP_sha1|. */
381eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int PKCS5_PBKDF2_HMAC_SHA1(const char *password,
382eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                          int password_len, const uint8_t *salt,
383eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                          size_t salt_len, unsigned iterations,
384eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                          size_t key_len, uint8_t *out_key);
3854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Public key contexts.
3884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
3894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_CTX| objects hold the context of an operation (e.g. signing or
3904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * encrypting) that uses a public key. */
3914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_new allocates a fresh |EVP_PKEY_CTX| for use with |pkey|. It
3934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * returns the context or NULL on error. */
394eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
3954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_new allocates a fresh |EVP_PKEY_CTX| for a key of type |id|
3974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * (e.g. |EVP_PKEY_HMAC|). This can be used for key generation where
3984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_CTX_new| can't be used because there isn't an |EVP_PKEY| to pass
3994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * it. It returns the context or NULL on error. */
400eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
4014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_KEY_CTX_free frees |ctx| and the data it owns. */
403eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
4044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_dup allocates a fresh |EVP_PKEY_CTX| and sets it equal to the
4064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * state of |ctx|. It returns the fresh |EVP_PKEY_CTX| or NULL on error. */
407eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
4084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_get0_pkey returns the |EVP_PKEY| associated with |ctx|. */
410eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
4114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set_app_data sets an opaque pointer on |ctx|. */
413eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
4144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_get_app_data returns the opaque pointer from |ctx| that was
4164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * previously set with |EVP_PKEY_CTX_set_app_data|, or NULL if none has been
4174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * set. */
418eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
4194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_ctrl performs |cmd| on |ctx|. The |keytype| and |optype|
4214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * arguments can be -1 to specify that any type and operation are acceptable,
4224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * otherwise |keytype| must match the type of |ctx| and the bits of |optype|
4234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * must intersect the operation flags set on |ctx|.
4244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The |p1| and |p2| arguments depend on the value of |cmd|.
4264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It returns -2 if |cmd| is not recognised, -1 on error or a |cmd| specific
4284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * value otherwise. */
429eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
430eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                     int cmd, int p1, void *p2);
4314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_sign_init initialises an |EVP_PKEY_CTX| for a signing operation. It
4334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * should be called before |EVP_PKEY_sign|.
4344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4355129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
436eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
4374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_sign signs |data_len| bytes from |data| using |ctx|. If |sig| is
4394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * NULL, the maximum size of the signature is written to
4404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out_sig_len|. Otherwise, |*sig_len| must contain the number of bytes of
4414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * space available at |sig|. If sufficient, the signature will be written to
4424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |sig| and |*sig_len| updated with the true length.
4434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * WARNING: Setting |out| to NULL only gives the maximum size of the
4454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * plaintext. The actual plaintext may be smaller.
4464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It returns one on success or zero on error. (Note: this differs from
4484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OpenSSL, which can also return negative values to indicate an error. ) */
449eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, uint8_t *sig,
450eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                 size_t *sig_len, const uint8_t *data,
451eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                 size_t data_len);
4524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_verify_init initialises an |EVP_PKEY_CTX| for a signature
4544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * verification operation. It should be called before |EVP_PKEY_verify|.
4554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4565129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
457eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
4584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_verify verifies that |sig_len| bytes from |sig| are a valid signature
4604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * for |data|.
4614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4625129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
463eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig,
464eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                   size_t sig_len, const uint8_t *data,
465eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                   size_t data_len);
4664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_encrypt_init initialises an |EVP_PKEY_CTX| for an encryption
4684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * operation. It should be called before |EVP_PKEY_encrypt|.
4694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4705129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
471eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
4724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_encrypt encrypts |in_len| bytes from |in|. If |out| is NULL, the
4744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * maximum size of the ciphertext is written to |out_len|. Otherwise, |*out_len|
4754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * must contain the number of bytes of space available at |out|. If sufficient,
4764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the ciphertext will be written to |out| and |*out_len| updated with the true
4774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * length.
4784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * WARNING: Setting |out| to NULL only gives the maximum size of the
4804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ciphertext. The actual ciphertext may be smaller.
4814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4825129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
483eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
484eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                    size_t *out_len, const uint8_t *in,
485eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                    size_t in_len);
4864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_decrypt_init initialises an |EVP_PKEY_CTX| for a decryption
4884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * operation. It should be called before |EVP_PKEY_decrypt|.
4894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4905129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
491eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
4924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_decrypt decrypts |in_len| bytes from |in|. If |out| is NULL, the
4944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * maximum size of the plaintext is written to |out_len|. Otherwise, |*out_len|
4954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * must contain the number of bytes of space available at |out|. If sufficient,
4964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the ciphertext will be written to |out| and |*out_len| updated with the true
4974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * length.
4984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
4994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * WARNING: Setting |out| to NULL only gives the maximum size of the
5004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * plaintext. The actual plaintext may be smaller.
5014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
5025129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
503eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
504eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                    size_t *out_len, const uint8_t *in,
505eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                    size_t in_len);
5064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_derive_init initialises an |EVP_PKEY_CTX| for a key derivation
5084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * operation. It should be called before |EVP_PKEY_derive_set_peer| and
5094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_derive|.
5104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
5115129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
512eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
5134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_derive_set_peer sets the peer's key to be used for key derivation
5154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * by |ctx| to |peer|. It should be called after |EVP_PKEY_derive_init|. (For
5164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * example, this is used to set the peer's key in (EC)DH.) It returns one on
5175129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * success and zero on error. */
518eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
5194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_derive derives a shared key between the two keys configured in
5214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |ctx|. If |key| is non-NULL then, on entry, |out_key_len| must contain the
5224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * amount of space at |key|. If sufficient then the shared key will be written
5234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to |key| and |*out_key_len| will be set to the length. If |key| is NULL then
5244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out_key_len| will be set to the maximum length.
5254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
5264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * WARNING: Setting |out| to NULL only gives the maximum size of the key. The
5274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * actual key may be smaller.
5284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
5295129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success and zero on error. */
530eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, uint8_t *key,
531eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                   size_t *out_key_len);
5324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_keygen_init initialises an |EVP_PKEY_CTX| for a key generation
5344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * operation. It should be called before |EVP_PKEY_keygen|.
5354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
5365129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
537eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
5384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_keygen performs a key generation operation using the values from
5404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |ctx| and sets |*ppkey| to a fresh |EVP_PKEY| containing the resulting key.
5415129e2d69582c0c54a335eb7e0bc794a02418403Adam Langley * It returns one on success or zero on error. */
542eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
5434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_ctrl operations.
5464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
5474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * These values are passed as the |cmd| argument to
5484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * EVP_PKEY_CTX_ctrl */
5494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Generic. */
5514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set_signature_md sets |md| as the digest to be used in a
5534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signature operation. It returns one on success or otherwise on error. See
5544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the return values of |EVP_PKEY_CTX_ctrl| for details. */
555eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx,
556eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                 const EVP_MD *md);
5574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_get_signature_md sets |*out_md| to the digest to be used in a
5594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signature operation. It returns one on success or otherwise on error. See
5604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the return values of |EVP_PKEY_CTX_ctrl| for details. */
561eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx,
562eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                 const EVP_MD **out_md);
5634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTRL_DIGESTINIT is an internal value. It's called by
5654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * EVP_DigestInit_ex to signal the |EVP_PKEY| that a digest operation is
5664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * starting. */
5674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_DIGESTINIT 3
5684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTRL_PEER_KEY is called with different values of |p1|:
5704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *   0: Is called from |EVP_PKEY_derive_set_peer| and |p2| contains a peer key.
5714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *      If the return value is <= 0, the key is rejected.
5724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *   1: Is called at the end of |EVP_PKEY_derive_set_peer| and |p2| contains a
5734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *      peer key. If the return value is <= 0, the key is rejected.
5744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *   2: Is called with |p2| == NULL to test whether the peer's key was used.
5754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *      (EC)DH always return one in this case.
5764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *   3: Is called with |p2| == NULL to set whether the peer's key was used.
5774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *      (EC)DH always return one in this case. This was only used for GOST. */
5784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_PEER_KEY 4
5794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTRL_SET_MAC_KEY sets a MAC key. For example, this can be done an
5814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_CTX| prior to calling |EVP_PKEY_keygen| in order to generate an
5824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * HMAC |EVP_PKEY| with the given key. It returns one on success and zero on
5834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * error. */
5844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_SET_MAC_KEY 5
5854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_ALG_CTRL is the base value from which key-type specific ctrl
5874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * commands are numbered. */
5884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_ALG_CTRL 0x1000
5894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* RSA specific control functions. */
5924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set_rsa_padding sets the padding type to use. It should be one
5944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * of the |RSA_*_PADDING| values. Returns one on success or another value on
5954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * error. See |EVP_PKEY_CTX_ctrl| for the other return values, which are
5964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * non-standard. */
597eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int padding);
5984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_get_rsa_padding sets |*out_padding| to the current padding
6004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * value, which is one of the |RSA_*_PADDING| values. Returns one on success or
6014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * another value on error. See |EVP_PKEY_CTX_ctrl| for the other return values,
6024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * which are non-standard. */
603eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx,
604eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                int *out_padding);
6054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set_rsa_pss_saltlen sets the length of the salt in a PSS-padded
6074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signature. A value of -1 cause the salt to be the same length as the digest
6084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * in the signature. A value of -2 causes the salt to be the maximum length
6094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * that will fit. Otherwise the value gives the size of the salt in bytes.
6104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
6114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Returns one on success or another value on error. See |EVP_PKEY_CTX_ctrl|
6124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * for the other return values, which are non-standard. */
613eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx,
614eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                    int salt_len);
6154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_get_rsa_pss_saltlen sets |*out_salt_len| to the salt length of
6174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * a PSS-padded signature. See the documentation for
6184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_CTX_set_rsa_pss_saltlen| for details of the special values that it
6194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * can take.
6204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
6214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Returns one on success or another value on error. See |EVP_PKEY_CTX_ctrl|
6224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * for the other return values, which are non-standard. */
623eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx,
624eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                    int *out_salt_len);
6254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set_rsa_keygen_bits sets the size of the desired RSA modulus,
6274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * in bits, for key generation. Returns one on success or another value on
6284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * error. See |EVP_PKEY_CTX_ctrl| for the other return values, which are
6294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * non-standard. */
630eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx,
631eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                    int bits);
6324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set_rsa_keygen_pubexp sets |e| as the public exponent for key
6344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * generation. Returns one on success or another value on error. See
6354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_CTX_ctrl| for the other return values, which are non-standard. */
636eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx,
637eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                      BIGNUM *e);
6384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set_rsa_oaep_md sets |md| as the digest used in OAEP padding.
6404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Returns one on success or another value on error. See |EVP_PKEY_CTX_ctrl|
6414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * for the other return values, which are non-standard. */
642eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx,
643eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                const EVP_MD *md);
6444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_get_rsa_oaep_md sets |*out_md| to the digest function used in
6464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OAEP padding. Returns one on success or another value on error. See
6474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_CTX_ctrl| for the other return values, which are non-standard. */
648eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx,
649eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                const EVP_MD **out_md);
6504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set_rsa_mgf1_md sets |md| as the digest used in MGF1. Returns
6524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * one on success or another value on error. See |EVP_PKEY_CTX_ctrl| for the
6534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * other return values, which are non-standard. */
654eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx,
655eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                const EVP_MD *md);
6564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_get_rsa_mgf1_md sets |*out_md| to the digest function used in
6584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * MGF1. Returns one on success or another value on error. See
6594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |EVP_PKEY_CTX_ctrl| for the other return values, which are non-standard. */
660eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx,
661eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                const EVP_MD **out_md);
6624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_set0_rsa_oaep_label sets |label_len| bytes from |label| as the
6644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * label used in OAEP. DANGER: this call takes ownership of |label| and will
6654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * call |free| on it when |ctx| is destroyed.
6664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
6674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Returns one on success or another value on error. See |EVP_PKEY_CTX_ctrl|
6684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * for the other return values, which are non-standard. */
669eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
670eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                    const uint8_t *label,
671eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                    size_t label_len);
6724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_CTX_get0_rsa_oaep_label sets |*out_label| to point to the internal
6744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * buffer containing the OAEP label (which may be NULL) and returns the length
6754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * of the label or a negative value on error. */
676eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
677eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                    const uint8_t **out_label);
6784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EC specific */
6814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID		(EVP_PKEY_ALG_CTRL + 1)
6834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_EC_PARAM_ENC			(EVP_PKEY_ALG_CTRL + 2)
6844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_EC_ECDH_COFACTOR			(EVP_PKEY_ALG_CTRL + 3)
6854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_EC_KDF_TYPE			(EVP_PKEY_ALG_CTRL + 4)
6864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_EC_KDF_MD				(EVP_PKEY_ALG_CTRL + 5)
6874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_GET_EC_KDF_MD			(EVP_PKEY_ALG_CTRL + 6)
6884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_EC_KDF_OUTLEN			(EVP_PKEY_ALG_CTRL + 7)
6894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN			(EVP_PKEY_ALG_CTRL + 8)
6904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_EC_KDF_UKM			(EVP_PKEY_ALG_CTRL + 9)
6914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_CTRL_GET_EC_KDF_UKM			(EVP_PKEY_ALG_CTRL + 10)
6924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_ECDH_KDF_NONE 1
6944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_PKEY_ECDH_KDF_X9_62 2
6954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* PKEY ctrl commands.
6984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
6994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * These values are passed as the |op| argument to
7004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * EVP_PKEY_ASN1_METHOD.pkey_ctrl. */
7014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ASN1_PKEY_CTRL_DEFAULT_MD_NID expects |arg2| to be an |int*| and sets the
7034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * pointed at int to be the NID of the default hash function used in
7044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * signing. */
7054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3
7064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Private functions */
7094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* OpenSSL_add_all_algorithms does nothing. */
711c44d2f4cb8a892a603edbbe710fa82bcd30f9cb5David BenjaminOPENSSL_EXPORT void OpenSSL_add_all_algorithms(void);
7124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_cleanup does nothing. */
714c44d2f4cb8a892a603edbbe710fa82bcd30f9cb5David BenjaminOPENSSL_EXPORT void EVP_cleanup(void);
7154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EVP_PKEY_asn1_find returns the ASN.1 method table for the given |nid|, which
7174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * should be one of the |EVP_PKEY_*| values. It returns NULL if |nid| is
7184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * unknown. */
719eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pengine,
720eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley                                                              int nid);
7214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* TODO(fork): move to PEM? */
723eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(
724eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley    ENGINE **pengine, const char *name, size_t len);
7254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct evp_pkey_st {
7274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  int references;
7284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  /* type contains one of the EVP_PKEY_* values or NID_undef and determines
7304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley   * which element (if any) of the |pkey| union is valid. */
7314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  int type;
7324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  /* TODO(fork): document */
7344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  int save_type;
7354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  union {
7374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley    char *ptr;
7384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley    struct rsa_st *rsa; /* RSA */
7394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley    struct dsa_st *dsa; /* DSA */
7404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley    struct dh_st *dh; /* DH */
7414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley    struct ec_key_st *ec; /* ECC */
7424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  } pkey;
7434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  ENGINE *engine;
7454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  /* TODO(fork): document */
7474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  int save_parameters;
7484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  /* ameth contains a pointer to a method table that contains many ASN.1
7494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley   * methods for the key type. */
7504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  const EVP_PKEY_ASN1_METHOD *ameth;
7514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  /* TODO(fork): document; */
7534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley  STACK_OF(X509_ATTRIBUTE) * attributes; /* [ 0 ] */
7544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley} /* EVP_PKEY */;
7554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#if defined(__cplusplus)
7584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley}  /* extern C */
7594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
7604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_rsa_item_verify 100
7624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_do_sigver_init 101
7634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_eckey_priv_decode 102
7644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_ec_sign 103
7654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_sign_init 104
7664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_d2i_PrivateKey 105
7674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_rsa_priv_encode 106
7684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_rsa_mgf1_to_md 107
7694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_get1_DH 108
7704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_sign 109
7714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_old_ec_priv_decode 110
7724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_get1_RSA 111
7734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_ec_ctrl 112
7744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_evp_pkey_ctx_new 113
7754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_verify 114
7764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_encrypt 115
7774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_keygen 116
7784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_eckey_type2param 117
7794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_eckey_priv_encode 118
7804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_do_EC_KEY_print 119
7814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_ec_keygen 120
7824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_encrypt_init 121
7834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_rsa_ctrl 122
7844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_rsa_priv_decode 123
7854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_rsa_pss_to_ctx 124
7864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_get1_EC_KEY 125
7874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_verify_init 126
7884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_derive_init 127
7894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_eckey_param2type 128
7904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_eckey_pub_decode 129
7914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_d2i_AutoPrivateKey 130
7924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_eckey_param_decode 131
7934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_new 132
7944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_ec_derive 133
7954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_ec_paramgen 134
7964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_CTX_ctrl 135
7974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_decrypt_init 136
7984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_decrypt 137
7994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_copy_parameters 138
8004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_set_type 139
8014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_derive 140
8024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_keygen_init 141
8034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_do_rsa_print 142
8044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_old_rsa_priv_decode 143
8054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_rsa_algor_to_md 144
8064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_eckey_pub_encode 145
8074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_derive_set_peer 146
8084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_rsa_sign 147
8094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_check_padding_md 148
8104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_i2d_PublicKey 149
8114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_rsa_pub_decode 150
8124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_EVP_PKEY_get1_DSA 151
8134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_rsa_encrypt 152
8144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_pkey_rsa_decrypt 153
8154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_F_hmac_signctx 154
8164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE 100
8174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_UNSUPPORTED_SIGNATURE_TYPE 101
8184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_DIGEST_TYPE 102
8194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_EXPECTING_A_DH_KEY 103
8204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_OPERATON_NOT_INITIALIZED 104
8214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_MISSING_PARAMETERS 105
8224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_NO_DEFAULT_DIGEST 106
8234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_UNKNOWN_DIGEST 107
8244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_KEYS_NOT_SET 108
8254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_X931_UNSUPPORTED 109
8264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_DIGEST_DOES_NOT_MATCH 110
8274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_DIFFERENT_PARAMETERS 111
8284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 112
8294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_DIFFERENT_KEY_TYPES 113
8304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_NO_PARAMETERS_SET 114
8314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_NO_NID_FOR_CURVE 115
8324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_NO_OPERATION_SET 116
8334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_UNSUPPORTED_ALGORITHM 117
8344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_EXPECTING_AN_DSA_KEY 118
8354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_UNKNOWN_MASK_DIGEST 119
8364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_SALT_LENGTH 120
8374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_BUFFER_TOO_SMALL 121
8384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_PADDING_MODE 122
8394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_MGF1_MD 123
8404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_SHARED_INFO_ERROR 124
8414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_KEYBITS 125
8424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_PEER_KEY_ERROR 126
8434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_EXPECTING_A_DSA_KEY 127
8444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_UNSUPPORTED_MASK_ALGORITHM 128
8454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_EXPECTING_AN_EC_KEY_KEY 129
8464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_TRAILER 130
8474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_DIGEST_LENGTH 131
8484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_COMMAND_NOT_SUPPORTED 132
8494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_EXPLICIT_EC_PARAMETERS_NOT_SUPPORTED 133
8504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 134
8514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_NO_MDC2_SUPPORT 135
8524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_CURVE 136
8534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_NO_KEY_SET 137
8544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_PSS_PARAMETERS 138
8554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_KDF_PARAMETER_ERROR 139
8564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_UNSUPPORTED_MASK_PARAMETER 140
8574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_EXPECTING_AN_RSA_KEY 141
8584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_OPERATION 142
8594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_DECODE_ERROR 143
8604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_INVALID_PSS_SALTLEN 144
8614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define EVP_R_UNKNOWN_PUBLIC_KEY_TYPE 145
8624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif  /* OPENSSL_HEADER_EVP_H */
864