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