1d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * All rights reserved.
3d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
4d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * This package is an SSL implementation written
5d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * by Eric Young (eay@cryptsoft.com).
6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * The implementation was written so as to conform with Netscapes SSL.
7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * This library is free for commercial and non-commercial use as long as
9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the following conditions are aheared to.  The following conditions
10d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * apply to all code found in this distribution, be it the RC4, RSA,
11d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * included with this distribution is covered by the same copyright terms
13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Copyright remains Eric Young's, and as such any Copyright notices in
16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the code are not to be removed.
17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * If this package is used in a product, Eric Young should be given attribution
18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * as the author of the parts of the library used.
19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * This can be in the form of a textual message at program startup or
20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * in documentation (online or textual) provided with the package.
21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Redistribution and use in source and binary forms, with or without
23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * modification, are permitted provided that the following conditions
24d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * are met:
25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 1. Redistributions of source code must retain the copyright
26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    notice, this list of conditions and the following disclaimer.
27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 2. Redistributions in binary form must reproduce the above copyright
28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    notice, this list of conditions and the following disclaimer in the
29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    documentation and/or other materials provided with the distribution.
30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 3. All advertising materials mentioning features or use of this software
31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    must display the following acknowledgement:
32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    "This product includes cryptographic software written by
33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *     Eric Young (eay@cryptsoft.com)"
34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    The word 'cryptographic' can be left out if the rouines from the library
35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    being used are not cryptographic related :-).
36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 4. If you include any Windows specific code (or a derivative thereof) from
37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    the apps directory (application code) you must include an acknowledgement:
38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * SUCH DAMAGE.
51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * The licence and distribution terms for any publically available version or
53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * derivative of this code cannot be changed.  i.e. this code cannot simply be
54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * copied and put under another distribution licence
55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * [including the GNU Public Licence.] */
56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifndef OPENSSL_HEADER_EVP_H
58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define OPENSSL_HEADER_EVP_H
59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/base.h>
61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
6253b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley#include <openssl/thread.h>
6353b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley
64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* OpenSSL included digest and cipher functions in this header so we include
65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * them for users that still expect that.
66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * TODO(fork): clean up callers so that they include what they use. */
68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/aead.h>
69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/cipher.h>
70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/digest.h>
71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/obj.h>
72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if defined(__cplusplus)
74d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyextern "C" {
75d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
77d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP abstracts over public/private key algorithms. */
79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
80d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
81d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Public key objects. */
82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_new creates a new, empty public-key object and returns it or NULL
84d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * on allocation failure. */
85d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new(void);
86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
87d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_free frees all data referenced by |pkey| and then frees |pkey|
88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * itself. */
89d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void EVP_PKEY_free(EVP_PKEY *pkey);
90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
91e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* EVP_PKEY_up_ref increments the reference count of |pkey| and returns it. */
92e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_up_ref(EVP_PKEY *pkey);
93e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
94d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_is_opaque returns one if |pkey| is opaque. Opaque keys are backed by
95d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * custom implementations which do not expose key material and parameters. It is
96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * an error to attempt to duplicate, export, or compare an opaque key. */
97d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_is_opaque(const EVP_PKEY *pkey);
98d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_supports_digest returns one if |pkey| supports digests of
100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * type |md|. This is intended for use with EVP_PKEYs backing custom
101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * implementations which can't sign all digests. */
102d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_supports_digest(const EVP_PKEY *pkey,
103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                            const EVP_MD *md);
104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_cmp compares |a| and |b| and returns one if they are equal, zero if
106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * not and a negative number on error.
107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WARNING: this differs from the traditional return value of a "cmp"
109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * function. */
110d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_copy_parameters sets the parameters of |to| to equal the parameters
113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * of |from|. It returns one on success and zero on error. */
114d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_missing_parameters returns one if |pkey| is missing needed
117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * parameters or zero if not, or if the algorithm doesn't take parameters. */
118d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
120e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* EVP_PKEY_size returns the maximum size, in bytes, of a signature signed by
121e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * |pkey|. For an RSA key, this returns the number of bytes needed to represent
122e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * the modulus. For an EC key, this returns the maximum size of a DER-encoded
123e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * ECDSA signature. */
124d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_size(const EVP_PKEY *pkey);
125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
126e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* EVP_PKEY_bits returns the "size", in bits, of |pkey|. For an RSA key, this
127e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * returns the bit length of the modulus. For an EC key, this returns the bit
128e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * length of the group order. */
129d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_bits(EVP_PKEY *pkey);
130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_id returns the type of |pkey|, which is one of the |EVP_PKEY_*|
132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * values. */
133d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_id(const EVP_PKEY *pkey);
134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_type returns a canonicalised form of |NID|. For example,
136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_PKEY_RSA2| will be turned into |EVP_PKEY_RSA|. */
137d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_type(int nid);
138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Deprecated: EVP_PKEY_new_mac_key allocates a fresh |EVP_PKEY| of the given
140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * type (e.g. |EVP_PKEY_HMAC|), sets |mac_key| as the MAC key and "generates" a
141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * new key, suitable for signing. It returns the fresh |EVP_PKEY|, or NULL on
142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * error. Use |HMAC_CTX| directly instead. */
143d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *engine,
144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                              const uint8_t *mac_key,
145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                              size_t mac_key_len);
146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Getting and setting concrete public key types.
149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * The following functions get and set the underlying public key in an
151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_PKEY| object. The |set1| functions take an additional reference to the
152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * underlying key and return one on success or zero on error. The |assign|
153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * functions adopt the caller's reference. The getters return a fresh reference
154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * to the underlying object. */
155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
156d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
157d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
158d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
160d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key);
161d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
162d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
164d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key);
165d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
166d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
168d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key);
169d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
170d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_PKEY_NONE NID_undef
173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_PKEY_RSA NID_rsaEncryption
174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_PKEY_RSA2 NID_rsa
175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_PKEY_DSA NID_dsa
176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_PKEY_DH NID_dhKeyAgreement
177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_PKEY_DHX NID_dhpublicnumber
178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Deprecated: Use |HMAC_CTX| directly instead. */
181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_PKEY_HMAC NID_hmac
182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_assign sets the underlying key of |pkey| to |key|, which must be of
184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the given type. The |type| argument should be one of the |EVP_PKEY_*|
185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * values. */
186d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);
187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_set_type sets the type of |pkey| to |type|, which should be one of
189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the |EVP_PKEY_*| values. It returns one if sucessful or zero otherwise. If
190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |pkey| is NULL, it simply reports whether the type is known. */
191d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_cmp_parameters compares the parameters of |a| and |b|. It returns
194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * one if they match, zero if not, or a negative number of on error.
195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WARNING: the return value differs from the usual return value convention. */
197d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_cmp_parameters(const EVP_PKEY *a,
198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                           const EVP_PKEY *b);
199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* ASN.1 functions */
202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* d2i_PrivateKey parses an ASN.1, DER-encoded, private key from |len| bytes at
204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |*inp|. If |out| is not NULL then, on exit, a pointer to the result is in
205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |*out|. If |*out| is already non-NULL on entry then the result is written
206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * directly into |*out|, otherwise a fresh |EVP_PKEY| is allocated. On
207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * successful exit, |*inp| is advanced past the DER structure. It returns the
208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * result or NULL on error. */
209d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out,
210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                        const uint8_t **inp, long len);
211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* d2i_AutoPrivateKey acts the same as |d2i_PrivateKey|, but detects the type
213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * of the private key. */
214d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp,
215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                            long len);
216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* i2d_PrivateKey marshals a private key from |key| to an ASN.1, DER
218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * structure. If |outp| is not NULL then the result is written to |*outp| and
219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |*outp| is advanced just past the output. It returns the number of bytes in
220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the result, whether written or not, or a negative value on error. */
221d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int i2d_PrivateKey(const EVP_PKEY *key, uint8_t **outp);
222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* i2d_PublicKey marshals a public key from |key| to an ASN.1, DER
224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * structure. If |outp| is not NULL then the result is written to |*outp| and
225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |*outp| is advanced just past the output. It returns the number of bytes in
226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the result, whether written or not, or a negative value on error. */
227d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int i2d_PublicKey(EVP_PKEY *key, uint8_t **outp);
228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Signing */
231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_DigestSignInit sets up |ctx| for a signing operation with |type| and
233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |pkey|. The |ctx| argument must have been initialised with
234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_MD_CTX_init|. If |pctx| is not NULL, the |EVP_PKEY_CTX| of the signing
235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * operation will be written to |*pctx|; this can be used to set alternative
236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * signing options.
237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success, or zero on error. */
239d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                      const EVP_MD *type, ENGINE *e,
241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                      EVP_PKEY *pkey);
242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_DigestSignUpdate appends |len| bytes from |data| to the data which will
24453b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * be signed in |EVP_DigestSignFinal|. It returns one. */
245d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data,
246d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                        size_t len);
247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_DigestSignFinal signs the data that has been included by one or more
249d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * calls to |EVP_DigestSignUpdate|. If |out_sig| is NULL then |*out_sig_len| is
250d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * set to the maximum number of output bytes. Otherwise, on entry,
251d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |*out_sig_len| must contain the length of the |out_sig| buffer. If the call
252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * is successful, the signature is written to |out_sig| and |*out_sig_len| is
253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * set to its length.
254d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
255d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success, or zero on error. */
256d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_DigestSignFinal(EVP_MD_CTX *ctx, uint8_t *out_sig,
257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                       size_t *out_sig_len);
258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_DigestSignAlgorithm encodes the signing parameters of |ctx| as an
260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * AlgorithmIdentifer and saves the result in |algor|.
261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success, or zero on error.
263d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * TODO(davidben): This API should eventually lose the dependency on
265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * crypto/asn1/. */
266d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_DigestSignAlgorithm(EVP_MD_CTX *ctx, X509_ALGOR *algor);
267d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
268d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
269d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Verifying */
270d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
271d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_DigestVerifyInit sets up |ctx| for a signature verification operation
272d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * with |type| and |pkey|. The |ctx| argument must have been initialised with
273d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_MD_CTX_init|. If |pctx| is not NULL, the |EVP_PKEY_CTX| of the signing
274d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * operation will be written to |*pctx|; this can be used to set alternative
275d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * signing options.
276d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
277d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success, or zero on error. */
278d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
279d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                        const EVP_MD *type, ENGINE *e,
280d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                        EVP_PKEY *pkey);
281d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
282d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_DigestVerifyInitFromAlgorithm sets up |ctx| for a signature verification
283d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * operation with public key |pkey| and parameters from |algor|. The |ctx|
284d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * argument must have been initialised with |EVP_MD_CTX_init|.
285d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
286d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success, or zero on error.
287d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
288d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * TODO(davidben): This API should eventually lose the dependency on
289d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * crypto/asn1/. */
290d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_DigestVerifyInitFromAlgorithm(EVP_MD_CTX *ctx,
291d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                     X509_ALGOR *algor,
292d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                     EVP_PKEY *pkey);
293d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
294d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_DigestVerifyUpdate appends |len| bytes from |data| to the data which
29553b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * will be verified by |EVP_DigestVerifyFinal|. It returns one. */
296d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data,
297d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                          size_t len);
298d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
299d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_DigestVerifyFinal verifies that |sig_len| bytes of |sig| are a valid
300d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * signature for the data that has been included by one or more calls to
301d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_DigestVerifyUpdate|. It returns one on success and zero otherwise. */
302d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
303d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                         size_t sig_len);
304d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
305d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
306d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Signing (old functions) */
307d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
308d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_SignInit_ex configures |ctx|, which must already have been initialised,
309d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * for a fresh signing operation using the hash function |type|. It returns one
310d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * on success and zero otherwise.
311d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
312d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * (In order to initialise |ctx|, either obtain it initialised with
313d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_MD_CTX_create|, or use |EVP_MD_CTX_init|.) */
314d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
315d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                   ENGINE *impl);
316d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
317d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_SignInit is a deprecated version of |EVP_SignInit_ex|.
318d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
319d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * TODO(fork): remove. */
320d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type);
321d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
322d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_SignUpdate appends |len| bytes from |data| to the data which will be
323d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * signed in |EVP_SignFinal|. */
324d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *data,
325d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                  size_t len);
326d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
327d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_SignFinal signs the data that has been included by one or more calls to
328d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_SignUpdate|, using the key |pkey|, and writes it to |sig|. On entry,
329d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |sig| must point to at least |EVP_PKEY_size(pkey)| bytes of space. The
330d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * actual size of the signature is written to |*out_sig_len|.
331d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
332d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success and zero otherwise.
333d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
334d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It does not modify |ctx|, thus it's possible to continue to use |ctx| in
335d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * order to sign a longer message. */
336d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_SignFinal(const EVP_MD_CTX *ctx, uint8_t *sig,
337d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                 unsigned int *out_sig_len, EVP_PKEY *pkey);
338d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
339d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
340d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Verifying (old functions) */
341d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
342d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_VerifyInit_ex configures |ctx|, which must already have been
343d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * initialised, for a fresh signature verification operation using the hash
344d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * function |type|. It returns one on success and zero otherwise.
345d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
346d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * (In order to initialise |ctx|, either obtain it initialised with
347d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_MD_CTX_create|, or use |EVP_MD_CTX_init|.) */
348d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
349d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                     ENGINE *impl);
350d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
351d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_VerifyInit is a deprecated version of |EVP_VerifyInit_ex|.
352d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
353d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * TODO(fork): remove. */
354d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type);
355d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
356d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_VerifyUpdate appends |len| bytes from |data| to the data which will be
357d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * signed in |EVP_VerifyFinal|. */
358d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *data,
359d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                    size_t len);
360d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
361d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_VerifyFinal verifies that |sig_len| bytes of |sig| are a valid
362d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * signature, by |pkey|, for the data that has been included by one or more
363d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * calls to |EVP_VerifyUpdate|.
364d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
365d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success and zero otherwise.
366d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
367d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It does not modify |ctx|, thus it's possible to continue to use |ctx| in
368d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * order to sign a longer message. */
369d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_VerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
370d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                   size_t sig_len, EVP_PKEY *pkey);
371d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
372d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
373d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Printing */
374d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
375d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_print_public prints a textual representation of the public key in
376d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |pkey| to |out|. Returns one on success or zero otherwise. */
377d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
378d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                         int indent, ASN1_PCTX *pctx);
379d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
380d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_print_public prints a textual representation of the private key in
381d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |pkey| to |out|. Returns one on success or zero otherwise. */
382d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
383d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                          int indent, ASN1_PCTX *pctx);
384d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
385d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_print_public prints a textual representation of the parameters in
386d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |pkey| to |out|. Returns one on success or zero otherwise. */
387d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
388d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                         int indent, ASN1_PCTX *pctx);
389d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
390d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
391d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Password stretching.
392d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
393d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Password stretching functions take a low-entropy password and apply a slow
394d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * function that results in a key suitable for use in symmetric
395d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * cryptography. */
396d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
397d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* PKCS5_PBKDF2_HMAC computes |iterations| iterations of PBKDF2 of |password|
398d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * and |salt|, using |digest|, and outputs |key_len| bytes to |out_key|. It
399d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * returns one on success and zero on error. */
400d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len,
401d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                     const uint8_t *salt, size_t salt_len,
402d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                     unsigned iterations, const EVP_MD *digest,
403d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                     size_t key_len, uint8_t *out_key);
404d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
405d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* PKCS5_PBKDF2_HMAC_SHA1 is the same as PKCS5_PBKDF2_HMAC, but with |digest|
406d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * fixed to |EVP_sha1|. */
407d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int PKCS5_PBKDF2_HMAC_SHA1(const char *password,
408d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                          size_t password_len, const uint8_t *salt,
409d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                          size_t salt_len, unsigned iterations,
410d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                          size_t key_len, uint8_t *out_key);
411d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
412d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
413d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Public key contexts.
414d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
415d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_PKEY_CTX| objects hold the context of an operation (e.g. signing or
416d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * encrypting) that uses a public key. */
417d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
418d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_new allocates a fresh |EVP_PKEY_CTX| for use with |pkey|. It
419d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * returns the context or NULL on error. */
420d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
421d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
422d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_new allocates a fresh |EVP_PKEY_CTX| for a key of type |id|
423d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * (e.g. |EVP_PKEY_HMAC|). This can be used for key generation where
424d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_PKEY_CTX_new| can't be used because there isn't an |EVP_PKEY| to pass
425d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * it. It returns the context or NULL on error. */
426d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
427d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
428d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_KEY_CTX_free frees |ctx| and the data it owns. */
429d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
430d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
431d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_dup allocates a fresh |EVP_PKEY_CTX| and sets it equal to the
432d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * state of |ctx|. It returns the fresh |EVP_PKEY_CTX| or NULL on error. */
433d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
434d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
435d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_get0_pkey returns the |EVP_PKEY| associated with |ctx|. */
436d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
437d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
438d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set_app_data sets an opaque pointer on |ctx|. */
439d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
440d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
441d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_get_app_data returns the opaque pointer from |ctx| that was
442d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * previously set with |EVP_PKEY_CTX_set_app_data|, or NULL if none has been
443d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * set. */
444d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
445d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
446d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_sign_init initialises an |EVP_PKEY_CTX| for a signing operation. It
447d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * should be called before |EVP_PKEY_sign|.
448d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
449d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
450d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
451d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
452d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_sign signs |data_len| bytes from |data| using |ctx|. If |sig| is
453d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * NULL, the maximum size of the signature is written to
454d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out_sig_len|. Otherwise, |*sig_len| must contain the number of bytes of
455d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * space available at |sig|. If sufficient, the signature will be written to
456d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |sig| and |*sig_len| updated with the true length.
457d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
458d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WARNING: Setting |sig| to NULL only gives the maximum size of the
459d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * signature. The actual signature may be smaller.
460d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
461d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. (Note: this differs from
462d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * OpenSSL, which can also return negative values to indicate an error. ) */
463d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, uint8_t *sig,
464d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                 size_t *sig_len, const uint8_t *data,
465d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                 size_t data_len);
466d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
467d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_verify_init initialises an |EVP_PKEY_CTX| for a signature
468d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * verification operation. It should be called before |EVP_PKEY_verify|.
469d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
470d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
471d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
472d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
473d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_verify verifies that |sig_len| bytes from |sig| are a valid signature
474d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * for |data|.
475d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
476d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
477d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig,
478d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                   size_t sig_len, const uint8_t *data,
479d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                   size_t data_len);
480d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
481d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_encrypt_init initialises an |EVP_PKEY_CTX| for an encryption
482d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * operation. It should be called before |EVP_PKEY_encrypt|.
483d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
484d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
485d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
486d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
487d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_encrypt encrypts |in_len| bytes from |in|. If |out| is NULL, the
488d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * maximum size of the ciphertext is written to |out_len|. Otherwise, |*out_len|
489d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * must contain the number of bytes of space available at |out|. If sufficient,
490d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the ciphertext will be written to |out| and |*out_len| updated with the true
491d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * length.
492d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
493d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WARNING: Setting |out| to NULL only gives the maximum size of the
494d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * ciphertext. The actual ciphertext may be smaller.
495d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
496d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
497d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
498d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                    size_t *out_len, const uint8_t *in,
499d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                    size_t in_len);
500d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
501d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_decrypt_init initialises an |EVP_PKEY_CTX| for a decryption
502d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * operation. It should be called before |EVP_PKEY_decrypt|.
503d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
504d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
505d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
506d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
507d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_decrypt decrypts |in_len| bytes from |in|. If |out| is NULL, the
508d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * maximum size of the plaintext is written to |out_len|. Otherwise, |*out_len|
509d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * must contain the number of bytes of space available at |out|. If sufficient,
510d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the ciphertext will be written to |out| and |*out_len| updated with the true
511d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * length.
512d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
513d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WARNING: Setting |out| to NULL only gives the maximum size of the
514d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * plaintext. The actual plaintext may be smaller.
515d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
516d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
517d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
518d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                    size_t *out_len, const uint8_t *in,
519d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                    size_t in_len);
520d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
521d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_derive_init initialises an |EVP_PKEY_CTX| for a key derivation
522d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * operation. It should be called before |EVP_PKEY_derive_set_peer| and
523d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_PKEY_derive|.
524d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
525d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
526d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
527d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
528d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_derive_set_peer sets the peer's key to be used for key derivation
529d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * by |ctx| to |peer|. It should be called after |EVP_PKEY_derive_init|. (For
530d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * example, this is used to set the peer's key in (EC)DH.) It returns one on
531d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * success and zero on error. */
532d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
533d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
534d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_derive derives a shared key between the two keys configured in
535d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |ctx|. If |key| is non-NULL then, on entry, |out_key_len| must contain the
536d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * amount of space at |key|. If sufficient then the shared key will be written
537d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * to |key| and |*out_key_len| will be set to the length. If |key| is NULL then
538d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out_key_len| will be set to the maximum length.
539d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
540d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WARNING: Setting |out| to NULL only gives the maximum size of the key. The
541d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * actual key may be smaller.
542d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
543d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success and zero on error. */
544d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, uint8_t *key,
545d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                   size_t *out_key_len);
546d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
547d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_keygen_init initialises an |EVP_PKEY_CTX| for a key generation
548d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * operation. It should be called before |EVP_PKEY_keygen|.
549d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
550d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
551d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
552d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
553d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_keygen performs a key generation operation using the values from
554d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |ctx| and sets |*ppkey| to a fresh |EVP_PKEY| containing the resulting key.
555d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * It returns one on success or zero on error. */
556d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
557d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
558d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
559e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* Generic control functions. */
560d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
561d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set_signature_md sets |md| as the digest to be used in a
562e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * signature operation. It returns one on success or zero on error. */
563d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx,
564d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                 const EVP_MD *md);
565d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
566d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_get_signature_md sets |*out_md| to the digest to be used in a
567e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * signature operation. It returns one on success or zero on error. */
568d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx,
569d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                 const EVP_MD **out_md);
570d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
571d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
572d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* RSA specific control functions. */
573d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
574d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set_rsa_padding sets the padding type to use. It should be one
575e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * of the |RSA_*_PADDING| values. Returns one on success or zero on error. */
576d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int padding);
577d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
578d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_get_rsa_padding sets |*out_padding| to the current padding
579d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * value, which is one of the |RSA_*_PADDING| values. Returns one on success or
580e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * zero on error. */
581d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx,
582d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                int *out_padding);
583d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
584d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set_rsa_pss_saltlen sets the length of the salt in a PSS-padded
585d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * signature. A value of -1 cause the salt to be the same length as the digest
586d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * in the signature. A value of -2 causes the salt to be the maximum length
587d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * that will fit. Otherwise the value gives the size of the salt in bytes.
588d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
589e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * Returns one on success or zero on error. */
590d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx,
591d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                    int salt_len);
592d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
593d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_get_rsa_pss_saltlen sets |*out_salt_len| to the salt length of
594d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * a PSS-padded signature. See the documentation for
595d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |EVP_PKEY_CTX_set_rsa_pss_saltlen| for details of the special values that it
596d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * can take.
597d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
598e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * Returns one on success or zero on error. */
599d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx,
600d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                    int *out_salt_len);
601d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
602d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set_rsa_keygen_bits sets the size of the desired RSA modulus,
603e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * in bits, for key generation. Returns one on success or zero on
604e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * error. */
605d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx,
606d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                    int bits);
607d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
608d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set_rsa_keygen_pubexp sets |e| as the public exponent for key
609e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * generation. Returns one on success or zero on error. */
610d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx,
611d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                      BIGNUM *e);
612d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
613d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set_rsa_oaep_md sets |md| as the digest used in OAEP padding.
614e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * Returns one on success or zero on error. */
615d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx,
616d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                const EVP_MD *md);
617d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
618d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_get_rsa_oaep_md sets |*out_md| to the digest function used in
619e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * OAEP padding. Returns one on success or zero on error. */
620d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx,
621d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                const EVP_MD **out_md);
622d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
623d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set_rsa_mgf1_md sets |md| as the digest used in MGF1. Returns
624e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * one on success or zero on error. */
625d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx,
626d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                const EVP_MD *md);
627d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
628d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_get_rsa_mgf1_md sets |*out_md| to the digest function used in
629e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * MGF1. Returns one on success or zero on error. */
630d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx,
631d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                const EVP_MD **out_md);
632d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
633d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_set0_rsa_oaep_label sets |label_len| bytes from |label| as the
634e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * label used in OAEP. DANGER: On success, this call takes ownership of |label|
635e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * and will call |OPENSSL_free| on it when |ctx| is destroyed.
636d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
637e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * Returns one on success or zero on error. */
638d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
639d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                    const uint8_t *label,
640d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                    size_t label_len);
641d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
642d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_CTX_get0_rsa_oaep_label sets |*out_label| to point to the internal
643d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * buffer containing the OAEP label (which may be NULL) and returns the length
644e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * of the label or a negative value on error.
645e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *
646e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * WARNING: the return value differs from the usual return value convention. */
647d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
648d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                    const uint8_t **out_label);
649d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
650d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
651e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* Deprecated functions. */
652d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
653e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* EVP_PKEY_dup adds one to the reference count of |pkey| and returns
654e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * |pkey|.
655e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *
656e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * WARNING: this is a |_dup| function that doesn't actually duplicate! Use
657e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * |EVP_PKEY_up_ref| if you want to increment the reference count without
658e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * confusion. */
659e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyOPENSSL_EXPORT EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey);
660d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
661d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
662d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Private functions */
663d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
664d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* OpenSSL_add_all_algorithms does nothing. */
665d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void OpenSSL_add_all_algorithms(void);
666d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
66753b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley/* OpenSSL_add_all_ciphers does nothing. */
66853b272a2813a0b11f107d77100ff8805ada8fbd2Adam LangleyOPENSSL_EXPORT void OpenSSL_add_all_ciphers(void);
66953b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley
67053b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley/* OpenSSL_add_all_digests does nothing. */
67153b272a2813a0b11f107d77100ff8805ada8fbd2Adam LangleyOPENSSL_EXPORT void OpenSSL_add_all_digests(void);
67253b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley
673d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_cleanup does nothing. */
674d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void EVP_cleanup(void);
675d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
676d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* EVP_PKEY_asn1_find returns the ASN.1 method table for the given |nid|, which
677d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * should be one of the |EVP_PKEY_*| values. It returns NULL if |nid| is
678d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * unknown. */
679d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pengine,
680d9e397b599b13d642138480a28c14db7a136bf0Adam Langley                                                              int nid);
681d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
682d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* TODO(fork): move to PEM? */
683d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(
684d9e397b599b13d642138480a28c14db7a136bf0Adam Langley    ENGINE **pengine, const char *name, size_t len);
685d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
686d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystruct evp_pkey_st {
68753b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley  CRYPTO_refcount_t references;
688d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
689d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  /* type contains one of the EVP_PKEY_* values or NID_undef and determines
690d9e397b599b13d642138480a28c14db7a136bf0Adam Langley   * which element (if any) of the |pkey| union is valid. */
691d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  int type;
692d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
693d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  union {
694d9e397b599b13d642138480a28c14db7a136bf0Adam Langley    char *ptr;
695d9e397b599b13d642138480a28c14db7a136bf0Adam Langley    struct rsa_st *rsa; /* RSA */
696d9e397b599b13d642138480a28c14db7a136bf0Adam Langley    struct dsa_st *dsa; /* DSA */
697d9e397b599b13d642138480a28c14db7a136bf0Adam Langley    struct dh_st *dh; /* DH */
698d9e397b599b13d642138480a28c14db7a136bf0Adam Langley    struct ec_key_st *ec; /* ECC */
699d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  } pkey;
700d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
701d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  /* ameth contains a pointer to a method table that contains many ASN.1
702d9e397b599b13d642138480a28c14db7a136bf0Adam Langley   * methods for the key type. */
703d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  const EVP_PKEY_ASN1_METHOD *ameth;
704d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} /* EVP_PKEY */;
705d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
706d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
707d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if defined(__cplusplus)
708d9e397b599b13d642138480a28c14db7a136bf0Adam Langley}  /* extern C */
709d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
710d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
711e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_derive_init 108
712e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_encrypt 110
713e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_encrypt_init 111
714e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_get1_DH 112
715e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_get1_EC_KEY 114
716e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_get1_RSA 115
717d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_F_EVP_PKEY_keygen 116
718e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_sign 120
719e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_sign_init 121
720e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_verify 122
721e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_verify_init 123
722e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_d2i_AutoPrivateKey 125
723e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_d2i_PrivateKey 126
724e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_do_EC_KEY_print 127
725e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_do_sigver_init 129
726e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_eckey_param2type 130
727d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_F_eckey_param_decode 131
728e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_eckey_priv_decode 132
729e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_eckey_priv_encode 133
730e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_eckey_pub_decode 134
731e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_eckey_pub_encode 135
732e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_eckey_type2param 136
733e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_evp_pkey_ctx_new 137
734e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_hmac_signctx 138
735e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_i2d_PublicKey 139
736e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_old_ec_priv_decode 140
737e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_old_rsa_priv_decode 141
738e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_ec_ctrl 142
739e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_ec_derive 143
740e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_ec_keygen 144
741e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_ec_paramgen 145
742e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_ec_sign 146
743e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_rsa_ctrl 147
744e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_rsa_decrypt 148
745e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_rsa_encrypt 149
746e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_rsa_sign 150
747e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_rsa_algor_to_md 151
748e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_rsa_digest_verify_init_from_algorithm 152
749e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_rsa_mgf1_to_md 153
750e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_rsa_priv_decode 154
751e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_rsa_priv_encode 155
752e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_rsa_pss_to_ctx 156
753e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_rsa_pub_decode 157
754e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_pkey_hmac_ctrl 158
755e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_CTX_get0_rsa_oaep_label 159
756e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_DigestSignAlgorithm 160
757e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_DigestVerifyInitFromAlgorithm 161
758e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_CTX_ctrl 162
759e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_CTX_dup 163
760e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_copy_parameters 164
761e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_decrypt 165
762e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_decrypt_init 166
763e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_derive 167
764e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_derive_set_peer 168
765e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_get1_DSA 169
766e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_keygen_init 170
767e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_new 171
768e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_EVP_PKEY_set_type 172
769e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_check_padding_md 173
770e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_do_dsa_print 174
771e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_do_rsa_print 175
772e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_dsa_param_decode 176
773e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_dsa_priv_decode 177
774e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_dsa_priv_encode 178
775e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_dsa_pub_decode 179
776e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_dsa_pub_encode 180
777e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_dsa_sig_print 181
778e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_F_old_dsa_priv_decode 182
779e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_BUFFER_TOO_SMALL 100
780e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_COMMAND_NOT_SUPPORTED 101
781e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_DIFFERENT_KEY_TYPES 104
782e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_DIFFERENT_PARAMETERS 105
783e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_EXPECTING_AN_EC_KEY_KEY 107
784e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_EXPECTING_A_DH_KEY 109
785e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_EXPECTING_A_DSA_KEY 110
786e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 111
787e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_CURVE 112
788e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_DIGEST_LENGTH 113
789e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_DIGEST_TYPE 114
790e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_KEYBITS 115
791e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_MGF1_MD 116
792e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_PADDING_MODE 118
793e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_PSS_PARAMETERS 119
794e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_SALT_LENGTH 121
795e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_INVALID_TRAILER 122
796e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_KEYS_NOT_SET 123
797e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_MISSING_PARAMETERS 124
798e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_NO_DEFAULT_DIGEST 125
799e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_NO_KEY_SET 126
800e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_NO_MDC2_SUPPORT 127
801e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_NO_NID_FOR_CURVE 128
802e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_NO_OPERATION_SET 129
803e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_NO_PARAMETERS_SET 130
804e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 131
805e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_OPERATON_NOT_INITIALIZED 132
806e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_UNKNOWN_DIGEST 133
807e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_UNKNOWN_MASK_DIGEST 134
808e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_UNSUPPORTED_ALGORITHM 138
809e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_UNSUPPORTED_MASK_ALGORITHM 139
810d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_UNSUPPORTED_MASK_PARAMETER 140
811d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_EXPECTING_AN_RSA_KEY 141
812d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_INVALID_OPERATION 142
813d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_DECODE_ERROR 143
814d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_INVALID_PSS_SALTLEN 144
815d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_UNKNOWN_PUBLIC_KEY_TYPE 145
816d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_CONTEXT_NOT_INITIALISED 146
817d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 147
818d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_WRONG_PUBLIC_KEY_TYPE 148
819d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_UNKNOWN_SIGNATURE_ALGORITHM 149
820d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define EVP_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 150
821e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_BN_DECODE_ERROR 151
822e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_PARAMETER_ENCODING_ERROR 152
823e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE 153
824e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define EVP_R_UNSUPPORTED_SIGNATURE_TYPE 154
825d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
826d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif  /* OPENSSL_HEADER_EVP_H */
827