1*8fb009dcSAndroid Build Coastguard Worker /* Copyright (C) 1995-1998 Eric Young ([email protected]) 2*8fb009dcSAndroid Build Coastguard Worker * All rights reserved. 3*8fb009dcSAndroid Build Coastguard Worker * 4*8fb009dcSAndroid Build Coastguard Worker * This package is an SSL implementation written 5*8fb009dcSAndroid Build Coastguard Worker * by Eric Young ([email protected]). 6*8fb009dcSAndroid Build Coastguard Worker * The implementation was written so as to conform with Netscapes SSL. 7*8fb009dcSAndroid Build Coastguard Worker * 8*8fb009dcSAndroid Build Coastguard Worker * This library is free for commercial and non-commercial use as long as 9*8fb009dcSAndroid Build Coastguard Worker * the following conditions are aheared to. The following conditions 10*8fb009dcSAndroid Build Coastguard Worker * apply to all code found in this distribution, be it the RC4, RSA, 11*8fb009dcSAndroid Build Coastguard Worker * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12*8fb009dcSAndroid Build Coastguard Worker * included with this distribution is covered by the same copyright terms 13*8fb009dcSAndroid Build Coastguard Worker * except that the holder is Tim Hudson ([email protected]). 14*8fb009dcSAndroid Build Coastguard Worker * 15*8fb009dcSAndroid Build Coastguard Worker * Copyright remains Eric Young's, and as such any Copyright notices in 16*8fb009dcSAndroid Build Coastguard Worker * the code are not to be removed. 17*8fb009dcSAndroid Build Coastguard Worker * If this package is used in a product, Eric Young should be given attribution 18*8fb009dcSAndroid Build Coastguard Worker * as the author of the parts of the library used. 19*8fb009dcSAndroid Build Coastguard Worker * This can be in the form of a textual message at program startup or 20*8fb009dcSAndroid Build Coastguard Worker * in documentation (online or textual) provided with the package. 21*8fb009dcSAndroid Build Coastguard Worker * 22*8fb009dcSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 23*8fb009dcSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 24*8fb009dcSAndroid Build Coastguard Worker * are met: 25*8fb009dcSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the copyright 26*8fb009dcSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 27*8fb009dcSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 28*8fb009dcSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 29*8fb009dcSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 30*8fb009dcSAndroid Build Coastguard Worker * 3. All advertising materials mentioning features or use of this software 31*8fb009dcSAndroid Build Coastguard Worker * must display the following acknowledgement: 32*8fb009dcSAndroid Build Coastguard Worker * "This product includes cryptographic software written by 33*8fb009dcSAndroid Build Coastguard Worker * Eric Young ([email protected])" 34*8fb009dcSAndroid Build Coastguard Worker * The word 'cryptographic' can be left out if the rouines from the library 35*8fb009dcSAndroid Build Coastguard Worker * being used are not cryptographic related :-). 36*8fb009dcSAndroid Build Coastguard Worker * 4. If you include any Windows specific code (or a derivative thereof) from 37*8fb009dcSAndroid Build Coastguard Worker * the apps directory (application code) you must include an acknowledgement: 38*8fb009dcSAndroid Build Coastguard Worker * "This product includes software written by Tim Hudson ([email protected])" 39*8fb009dcSAndroid Build Coastguard Worker * 40*8fb009dcSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41*8fb009dcSAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42*8fb009dcSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43*8fb009dcSAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 44*8fb009dcSAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 45*8fb009dcSAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 46*8fb009dcSAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47*8fb009dcSAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 48*8fb009dcSAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49*8fb009dcSAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50*8fb009dcSAndroid Build Coastguard Worker * SUCH DAMAGE. 51*8fb009dcSAndroid Build Coastguard Worker * 52*8fb009dcSAndroid Build Coastguard Worker * The licence and distribution terms for any publically available version or 53*8fb009dcSAndroid Build Coastguard Worker * derivative of this code cannot be changed. i.e. this code cannot simply be 54*8fb009dcSAndroid Build Coastguard Worker * copied and put under another distribution licence 55*8fb009dcSAndroid Build Coastguard Worker * [including the GNU Public Licence.] */ 56*8fb009dcSAndroid Build Coastguard Worker 57*8fb009dcSAndroid Build Coastguard Worker #ifndef OPENSSL_HEADER_EVP_H 58*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_HEADER_EVP_H 59*8fb009dcSAndroid Build Coastguard Worker 60*8fb009dcSAndroid Build Coastguard Worker #include <openssl/base.h> 61*8fb009dcSAndroid Build Coastguard Worker 62*8fb009dcSAndroid Build Coastguard Worker #include <openssl/evp_errors.h> // IWYU pragma: export 63*8fb009dcSAndroid Build Coastguard Worker #include <openssl/thread.h> 64*8fb009dcSAndroid Build Coastguard Worker 65*8fb009dcSAndroid Build Coastguard Worker // OpenSSL included digest and cipher functions in this header so we include 66*8fb009dcSAndroid Build Coastguard Worker // them for users that still expect that. 67*8fb009dcSAndroid Build Coastguard Worker // 68*8fb009dcSAndroid Build Coastguard Worker // TODO(fork): clean up callers so that they include what they use. 69*8fb009dcSAndroid Build Coastguard Worker #include <openssl/aead.h> 70*8fb009dcSAndroid Build Coastguard Worker #include <openssl/base64.h> 71*8fb009dcSAndroid Build Coastguard Worker #include <openssl/cipher.h> 72*8fb009dcSAndroid Build Coastguard Worker #include <openssl/digest.h> 73*8fb009dcSAndroid Build Coastguard Worker #include <openssl/nid.h> 74*8fb009dcSAndroid Build Coastguard Worker 75*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) 76*8fb009dcSAndroid Build Coastguard Worker extern "C" { 77*8fb009dcSAndroid Build Coastguard Worker #endif 78*8fb009dcSAndroid Build Coastguard Worker 79*8fb009dcSAndroid Build Coastguard Worker 80*8fb009dcSAndroid Build Coastguard Worker // EVP abstracts over public/private key algorithms. 81*8fb009dcSAndroid Build Coastguard Worker 82*8fb009dcSAndroid Build Coastguard Worker 83*8fb009dcSAndroid Build Coastguard Worker // Public key objects. 84*8fb009dcSAndroid Build Coastguard Worker // 85*8fb009dcSAndroid Build Coastguard Worker // An |EVP_PKEY| object represents a public or private key. A given object may 86*8fb009dcSAndroid Build Coastguard Worker // be used concurrently on multiple threads by non-mutating functions, provided 87*8fb009dcSAndroid Build Coastguard Worker // no other thread is concurrently calling a mutating function. Unless otherwise 88*8fb009dcSAndroid Build Coastguard Worker // documented, functions which take a |const| pointer are non-mutating and 89*8fb009dcSAndroid Build Coastguard Worker // functions which take a non-|const| pointer are mutating. 90*8fb009dcSAndroid Build Coastguard Worker 91*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_new creates a new, empty public-key object and returns it or NULL 92*8fb009dcSAndroid Build Coastguard Worker // on allocation failure. 93*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new(void); 94*8fb009dcSAndroid Build Coastguard Worker 95*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_free frees all data referenced by |pkey| and then frees |pkey| 96*8fb009dcSAndroid Build Coastguard Worker // itself. 97*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void EVP_PKEY_free(EVP_PKEY *pkey); 98*8fb009dcSAndroid Build Coastguard Worker 99*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_up_ref increments the reference count of |pkey| and returns one. It 100*8fb009dcSAndroid Build Coastguard Worker // does not mutate |pkey| for thread-safety purposes and may be used 101*8fb009dcSAndroid Build Coastguard Worker // concurrently. 102*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_up_ref(EVP_PKEY *pkey); 103*8fb009dcSAndroid Build Coastguard Worker 104*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_is_opaque returns one if |pkey| is opaque. Opaque keys are backed by 105*8fb009dcSAndroid Build Coastguard Worker // custom implementations which do not expose key material and parameters. It is 106*8fb009dcSAndroid Build Coastguard Worker // an error to attempt to duplicate, export, or compare an opaque key. 107*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_is_opaque(const EVP_PKEY *pkey); 108*8fb009dcSAndroid Build Coastguard Worker 109*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_cmp compares |a| and |b| and returns one if they are equal, zero if 110*8fb009dcSAndroid Build Coastguard Worker // not and a negative number on error. 111*8fb009dcSAndroid Build Coastguard Worker // 112*8fb009dcSAndroid Build Coastguard Worker // WARNING: this differs from the traditional return value of a "cmp" 113*8fb009dcSAndroid Build Coastguard Worker // function. 114*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); 115*8fb009dcSAndroid Build Coastguard Worker 116*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_copy_parameters sets the parameters of |to| to equal the parameters 117*8fb009dcSAndroid Build Coastguard Worker // of |from|. It returns one on success and zero on error. 118*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); 119*8fb009dcSAndroid Build Coastguard Worker 120*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_missing_parameters returns one if |pkey| is missing needed 121*8fb009dcSAndroid Build Coastguard Worker // parameters or zero if not, or if the algorithm doesn't take parameters. 122*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); 123*8fb009dcSAndroid Build Coastguard Worker 124*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_size returns the maximum size, in bytes, of a signature signed by 125*8fb009dcSAndroid Build Coastguard Worker // |pkey|. For an RSA key, this returns the number of bytes needed to represent 126*8fb009dcSAndroid Build Coastguard Worker // the modulus. For an EC key, this returns the maximum size of a DER-encoded 127*8fb009dcSAndroid Build Coastguard Worker // ECDSA signature. 128*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_size(const EVP_PKEY *pkey); 129*8fb009dcSAndroid Build Coastguard Worker 130*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_bits returns the "size", in bits, of |pkey|. For an RSA key, this 131*8fb009dcSAndroid Build Coastguard Worker // returns the bit length of the modulus. For an EC key, this returns the bit 132*8fb009dcSAndroid Build Coastguard Worker // length of the group order. 133*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_bits(const EVP_PKEY *pkey); 134*8fb009dcSAndroid Build Coastguard Worker 135*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_id returns the type of |pkey|, which is one of the |EVP_PKEY_*| 136*8fb009dcSAndroid Build Coastguard Worker // values. 137*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_id(const EVP_PKEY *pkey); 138*8fb009dcSAndroid Build Coastguard Worker 139*8fb009dcSAndroid Build Coastguard Worker 140*8fb009dcSAndroid Build Coastguard Worker // Getting and setting concrete public key types. 141*8fb009dcSAndroid Build Coastguard Worker // 142*8fb009dcSAndroid Build Coastguard Worker // The following functions get and set the underlying public key in an 143*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY| object. The |set1| functions take an additional reference to the 144*8fb009dcSAndroid Build Coastguard Worker // underlying key and return one on success or zero if |key| is NULL. The 145*8fb009dcSAndroid Build Coastguard Worker // |assign| functions adopt the caller's reference and return one on success or 146*8fb009dcSAndroid Build Coastguard Worker // zero if |key| is NULL. The |get1| functions return a fresh reference to the 147*8fb009dcSAndroid Build Coastguard Worker // underlying object or NULL if |pkey| is not of the correct type. The |get0| 148*8fb009dcSAndroid Build Coastguard Worker // functions behave the same but return a non-owning pointer. 149*8fb009dcSAndroid Build Coastguard Worker // 150*8fb009dcSAndroid Build Coastguard Worker // The |get0| and |get1| functions take |const| pointers and are thus 151*8fb009dcSAndroid Build Coastguard Worker // non-mutating for thread-safety purposes, but mutating functions on the 152*8fb009dcSAndroid Build Coastguard Worker // returned lower-level objects are considered to also mutate the |EVP_PKEY| and 153*8fb009dcSAndroid Build Coastguard Worker // may not be called concurrently with other operations on the |EVP_PKEY|. 154*8fb009dcSAndroid Build Coastguard Worker 155*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key); 156*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key); 157*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey); 158*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT RSA *EVP_PKEY_get1_RSA(const EVP_PKEY *pkey); 159*8fb009dcSAndroid Build Coastguard Worker 160*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key); 161*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key); 162*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey); 163*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT DSA *EVP_PKEY_get1_DSA(const EVP_PKEY *pkey); 164*8fb009dcSAndroid Build Coastguard Worker 165*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key); 166*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key); 167*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey); 168*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EC_KEY *EVP_PKEY_get1_EC_KEY(const EVP_PKEY *pkey); 169*8fb009dcSAndroid Build Coastguard Worker 170*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key); 171*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key); 172*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey); 173*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT DH *EVP_PKEY_get1_DH(const EVP_PKEY *pkey); 174*8fb009dcSAndroid Build Coastguard Worker 175*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_NONE NID_undef 176*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_RSA NID_rsaEncryption 177*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_RSA_PSS NID_rsassaPss 178*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_DSA NID_dsa 179*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_EC NID_X9_62_id_ecPublicKey 180*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_ED25519 NID_ED25519 181*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_X25519 NID_X25519 182*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_HKDF NID_hkdf 183*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_DH NID_dhKeyAgreement 184*8fb009dcSAndroid Build Coastguard Worker 185*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_set_type sets the type of |pkey| to |type|. It returns one if 186*8fb009dcSAndroid Build Coastguard Worker // successful or zero if the |type| argument is not one of the |EVP_PKEY_*| 187*8fb009dcSAndroid Build Coastguard Worker // values. If |pkey| is NULL, it simply reports whether the type is known. 188*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); 189*8fb009dcSAndroid Build Coastguard Worker 190*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_cmp_parameters compares the parameters of |a| and |b|. It returns 191*8fb009dcSAndroid Build Coastguard Worker // one if they match, zero if not, or a negative number of on error. 192*8fb009dcSAndroid Build Coastguard Worker // 193*8fb009dcSAndroid Build Coastguard Worker // WARNING: the return value differs from the usual return value convention. 194*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, 195*8fb009dcSAndroid Build Coastguard Worker const EVP_PKEY *b); 196*8fb009dcSAndroid Build Coastguard Worker 197*8fb009dcSAndroid Build Coastguard Worker 198*8fb009dcSAndroid Build Coastguard Worker // ASN.1 functions 199*8fb009dcSAndroid Build Coastguard Worker 200*8fb009dcSAndroid Build Coastguard Worker // EVP_parse_public_key decodes a DER-encoded SubjectPublicKeyInfo structure 201*8fb009dcSAndroid Build Coastguard Worker // (RFC 5280) from |cbs| and advances |cbs|. It returns a newly-allocated 202*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY| or NULL on error. If the key is an EC key, the curve is guaranteed 203*8fb009dcSAndroid Build Coastguard Worker // to be set. 204*8fb009dcSAndroid Build Coastguard Worker // 205*8fb009dcSAndroid Build Coastguard Worker // The caller must check the type of the parsed public key to ensure it is 206*8fb009dcSAndroid Build Coastguard Worker // suitable and validate other desired key properties such as RSA modulus size 207*8fb009dcSAndroid Build Coastguard Worker // or EC curve. 208*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *EVP_parse_public_key(CBS *cbs); 209*8fb009dcSAndroid Build Coastguard Worker 210*8fb009dcSAndroid Build Coastguard Worker // EVP_marshal_public_key marshals |key| as a DER-encoded SubjectPublicKeyInfo 211*8fb009dcSAndroid Build Coastguard Worker // structure (RFC 5280) and appends the result to |cbb|. It returns one on 212*8fb009dcSAndroid Build Coastguard Worker // success and zero on error. 213*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_marshal_public_key(CBB *cbb, const EVP_PKEY *key); 214*8fb009dcSAndroid Build Coastguard Worker 215*8fb009dcSAndroid Build Coastguard Worker // EVP_parse_private_key decodes a DER-encoded PrivateKeyInfo structure (RFC 216*8fb009dcSAndroid Build Coastguard Worker // 5208) from |cbs| and advances |cbs|. It returns a newly-allocated |EVP_PKEY| 217*8fb009dcSAndroid Build Coastguard Worker // or NULL on error. 218*8fb009dcSAndroid Build Coastguard Worker // 219*8fb009dcSAndroid Build Coastguard Worker // The caller must check the type of the parsed private key to ensure it is 220*8fb009dcSAndroid Build Coastguard Worker // suitable and validate other desired key properties such as RSA modulus size 221*8fb009dcSAndroid Build Coastguard Worker // or EC curve. In particular, RSA private key operations scale cubicly, so 222*8fb009dcSAndroid Build Coastguard Worker // applications accepting RSA private keys from external sources may need to 223*8fb009dcSAndroid Build Coastguard Worker // bound key sizes (use |EVP_PKEY_bits| or |RSA_bits|) to avoid a DoS vector. 224*8fb009dcSAndroid Build Coastguard Worker // 225*8fb009dcSAndroid Build Coastguard Worker // A PrivateKeyInfo ends with an optional set of attributes. These are not 226*8fb009dcSAndroid Build Coastguard Worker // processed and so this function will silently ignore any trailing data in the 227*8fb009dcSAndroid Build Coastguard Worker // structure. 228*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *EVP_parse_private_key(CBS *cbs); 229*8fb009dcSAndroid Build Coastguard Worker 230*8fb009dcSAndroid Build Coastguard Worker // EVP_marshal_private_key marshals |key| as a DER-encoded PrivateKeyInfo 231*8fb009dcSAndroid Build Coastguard Worker // structure (RFC 5208) and appends the result to |cbb|. It returns one on 232*8fb009dcSAndroid Build Coastguard Worker // success and zero on error. 233*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key); 234*8fb009dcSAndroid Build Coastguard Worker 235*8fb009dcSAndroid Build Coastguard Worker 236*8fb009dcSAndroid Build Coastguard Worker // Raw keys 237*8fb009dcSAndroid Build Coastguard Worker // 238*8fb009dcSAndroid Build Coastguard Worker // Some keys types support a "raw" serialization. Currently the only supported 239*8fb009dcSAndroid Build Coastguard Worker // raw formats are X25519 and Ed25519, where the formats are those specified in 240*8fb009dcSAndroid Build Coastguard Worker // RFC 7748 and RFC 8032, respectively. Note the RFC 8032 private key format is 241*8fb009dcSAndroid Build Coastguard Worker // the 32-byte prefix of |ED25519_sign|'s 64-byte private key. 242*8fb009dcSAndroid Build Coastguard Worker 243*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_new_raw_private_key returns a newly allocated |EVP_PKEY| wrapping a 244*8fb009dcSAndroid Build Coastguard Worker // private key of the specified type. It returns one on success and zero on 245*8fb009dcSAndroid Build Coastguard Worker // error. 246*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *unused, 247*8fb009dcSAndroid Build Coastguard Worker const uint8_t *in, 248*8fb009dcSAndroid Build Coastguard Worker size_t len); 249*8fb009dcSAndroid Build Coastguard Worker 250*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_new_raw_public_key returns a newly allocated |EVP_PKEY| wrapping a 251*8fb009dcSAndroid Build Coastguard Worker // public key of the specified type. It returns one on success and zero on 252*8fb009dcSAndroid Build Coastguard Worker // error. 253*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused, 254*8fb009dcSAndroid Build Coastguard Worker const uint8_t *in, 255*8fb009dcSAndroid Build Coastguard Worker size_t len); 256*8fb009dcSAndroid Build Coastguard Worker 257*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_get_raw_private_key outputs the private key for |pkey| in raw form. 258*8fb009dcSAndroid Build Coastguard Worker // If |out| is NULL, it sets |*out_len| to the size of the raw private key. 259*8fb009dcSAndroid Build Coastguard Worker // Otherwise, it writes at most |*out_len| bytes to |out| and sets |*out_len| to 260*8fb009dcSAndroid Build Coastguard Worker // the number of bytes written. 261*8fb009dcSAndroid Build Coastguard Worker // 262*8fb009dcSAndroid Build Coastguard Worker // It returns one on success and zero if |pkey| has no private key, the key 263*8fb009dcSAndroid Build Coastguard Worker // type does not support a raw format, or the buffer is too small. 264*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, 265*8fb009dcSAndroid Build Coastguard Worker uint8_t *out, size_t *out_len); 266*8fb009dcSAndroid Build Coastguard Worker 267*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_get_raw_public_key outputs the public key for |pkey| in raw form. 268*8fb009dcSAndroid Build Coastguard Worker // If |out| is NULL, it sets |*out_len| to the size of the raw public key. 269*8fb009dcSAndroid Build Coastguard Worker // Otherwise, it writes at most |*out_len| bytes to |out| and sets |*out_len| to 270*8fb009dcSAndroid Build Coastguard Worker // the number of bytes written. 271*8fb009dcSAndroid Build Coastguard Worker // 272*8fb009dcSAndroid Build Coastguard Worker // It returns one on success and zero if |pkey| has no public key, the key 273*8fb009dcSAndroid Build Coastguard Worker // type does not support a raw format, or the buffer is too small. 274*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, 275*8fb009dcSAndroid Build Coastguard Worker uint8_t *out, size_t *out_len); 276*8fb009dcSAndroid Build Coastguard Worker 277*8fb009dcSAndroid Build Coastguard Worker 278*8fb009dcSAndroid Build Coastguard Worker // Signing 279*8fb009dcSAndroid Build Coastguard Worker 280*8fb009dcSAndroid Build Coastguard Worker // EVP_DigestSignInit sets up |ctx| for a signing operation with |type| and 281*8fb009dcSAndroid Build Coastguard Worker // |pkey|. The |ctx| argument must have been initialised with 282*8fb009dcSAndroid Build Coastguard Worker // |EVP_MD_CTX_init|. If |pctx| is not NULL, the |EVP_PKEY_CTX| of the signing 283*8fb009dcSAndroid Build Coastguard Worker // operation will be written to |*pctx|; this can be used to set alternative 284*8fb009dcSAndroid Build Coastguard Worker // signing options. 285*8fb009dcSAndroid Build Coastguard Worker // 286*8fb009dcSAndroid Build Coastguard Worker // For single-shot signing algorithms which do not use a pre-hash, such as 287*8fb009dcSAndroid Build Coastguard Worker // Ed25519, |type| should be NULL. The |EVP_MD_CTX| itself is unused but is 288*8fb009dcSAndroid Build Coastguard Worker // present so the API is uniform. See |EVP_DigestSign|. 289*8fb009dcSAndroid Build Coastguard Worker // 290*8fb009dcSAndroid Build Coastguard Worker // This function does not mutate |pkey| for thread-safety purposes and may be 291*8fb009dcSAndroid Build Coastguard Worker // used concurrently with other non-mutating functions on |pkey|. 292*8fb009dcSAndroid Build Coastguard Worker // 293*8fb009dcSAndroid Build Coastguard Worker // It returns one on success, or zero on error. 294*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, 295*8fb009dcSAndroid Build Coastguard Worker const EVP_MD *type, ENGINE *e, 296*8fb009dcSAndroid Build Coastguard Worker EVP_PKEY *pkey); 297*8fb009dcSAndroid Build Coastguard Worker 298*8fb009dcSAndroid Build Coastguard Worker // EVP_DigestSignUpdate appends |len| bytes from |data| to the data which will 299*8fb009dcSAndroid Build Coastguard Worker // be signed in |EVP_DigestSignFinal|. It returns one. 300*8fb009dcSAndroid Build Coastguard Worker // 301*8fb009dcSAndroid Build Coastguard Worker // This function performs a streaming signing operation and will fail for 302*8fb009dcSAndroid Build Coastguard Worker // signature algorithms which do not support this. Use |EVP_DigestSign| for a 303*8fb009dcSAndroid Build Coastguard Worker // single-shot operation. 304*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, 305*8fb009dcSAndroid Build Coastguard Worker size_t len); 306*8fb009dcSAndroid Build Coastguard Worker 307*8fb009dcSAndroid Build Coastguard Worker // EVP_DigestSignFinal signs the data that has been included by one or more 308*8fb009dcSAndroid Build Coastguard Worker // calls to |EVP_DigestSignUpdate|. If |out_sig| is NULL then |*out_sig_len| is 309*8fb009dcSAndroid Build Coastguard Worker // set to the maximum number of output bytes. Otherwise, on entry, 310*8fb009dcSAndroid Build Coastguard Worker // |*out_sig_len| must contain the length of the |out_sig| buffer. If the call 311*8fb009dcSAndroid Build Coastguard Worker // is successful, the signature is written to |out_sig| and |*out_sig_len| is 312*8fb009dcSAndroid Build Coastguard Worker // set to its length. 313*8fb009dcSAndroid Build Coastguard Worker // 314*8fb009dcSAndroid Build Coastguard Worker // This function performs a streaming signing operation and will fail for 315*8fb009dcSAndroid Build Coastguard Worker // signature algorithms which do not support this. Use |EVP_DigestSign| for a 316*8fb009dcSAndroid Build Coastguard Worker // single-shot operation. 317*8fb009dcSAndroid Build Coastguard Worker // 318*8fb009dcSAndroid Build Coastguard Worker // It returns one on success, or zero on error. 319*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_DigestSignFinal(EVP_MD_CTX *ctx, uint8_t *out_sig, 320*8fb009dcSAndroid Build Coastguard Worker size_t *out_sig_len); 321*8fb009dcSAndroid Build Coastguard Worker 322*8fb009dcSAndroid Build Coastguard Worker // EVP_DigestSign signs |data_len| bytes from |data| using |ctx|. If |out_sig| 323*8fb009dcSAndroid Build Coastguard Worker // is NULL then |*out_sig_len| is set to the maximum number of output 324*8fb009dcSAndroid Build Coastguard Worker // bytes. Otherwise, on entry, |*out_sig_len| must contain the length of the 325*8fb009dcSAndroid Build Coastguard Worker // |out_sig| buffer. If the call is successful, the signature is written to 326*8fb009dcSAndroid Build Coastguard Worker // |out_sig| and |*out_sig_len| is set to its length. 327*8fb009dcSAndroid Build Coastguard Worker // 328*8fb009dcSAndroid Build Coastguard Worker // It returns one on success and zero on error. 329*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_DigestSign(EVP_MD_CTX *ctx, uint8_t *out_sig, 330*8fb009dcSAndroid Build Coastguard Worker size_t *out_sig_len, const uint8_t *data, 331*8fb009dcSAndroid Build Coastguard Worker size_t data_len); 332*8fb009dcSAndroid Build Coastguard Worker 333*8fb009dcSAndroid Build Coastguard Worker 334*8fb009dcSAndroid Build Coastguard Worker // Verifying 335*8fb009dcSAndroid Build Coastguard Worker 336*8fb009dcSAndroid Build Coastguard Worker // EVP_DigestVerifyInit sets up |ctx| for a signature verification operation 337*8fb009dcSAndroid Build Coastguard Worker // with |type| and |pkey|. The |ctx| argument must have been initialised with 338*8fb009dcSAndroid Build Coastguard Worker // |EVP_MD_CTX_init|. If |pctx| is not NULL, the |EVP_PKEY_CTX| of the signing 339*8fb009dcSAndroid Build Coastguard Worker // operation will be written to |*pctx|; this can be used to set alternative 340*8fb009dcSAndroid Build Coastguard Worker // signing options. 341*8fb009dcSAndroid Build Coastguard Worker // 342*8fb009dcSAndroid Build Coastguard Worker // For single-shot signing algorithms which do not use a pre-hash, such as 343*8fb009dcSAndroid Build Coastguard Worker // Ed25519, |type| should be NULL. The |EVP_MD_CTX| itself is unused but is 344*8fb009dcSAndroid Build Coastguard Worker // present so the API is uniform. See |EVP_DigestVerify|. 345*8fb009dcSAndroid Build Coastguard Worker // 346*8fb009dcSAndroid Build Coastguard Worker // This function does not mutate |pkey| for thread-safety purposes and may be 347*8fb009dcSAndroid Build Coastguard Worker // used concurrently with other non-mutating functions on |pkey|. 348*8fb009dcSAndroid Build Coastguard Worker // 349*8fb009dcSAndroid Build Coastguard Worker // It returns one on success, or zero on error. 350*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, 351*8fb009dcSAndroid Build Coastguard Worker const EVP_MD *type, ENGINE *e, 352*8fb009dcSAndroid Build Coastguard Worker EVP_PKEY *pkey); 353*8fb009dcSAndroid Build Coastguard Worker 354*8fb009dcSAndroid Build Coastguard Worker // EVP_DigestVerifyUpdate appends |len| bytes from |data| to the data which 355*8fb009dcSAndroid Build Coastguard Worker // will be verified by |EVP_DigestVerifyFinal|. It returns one. 356*8fb009dcSAndroid Build Coastguard Worker // 357*8fb009dcSAndroid Build Coastguard Worker // This function performs streaming signature verification and will fail for 358*8fb009dcSAndroid Build Coastguard Worker // signature algorithms which do not support this. Use |EVP_PKEY_verify_message| 359*8fb009dcSAndroid Build Coastguard Worker // for a single-shot verification. 360*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, 361*8fb009dcSAndroid Build Coastguard Worker size_t len); 362*8fb009dcSAndroid Build Coastguard Worker 363*8fb009dcSAndroid Build Coastguard Worker // EVP_DigestVerifyFinal verifies that |sig_len| bytes of |sig| are a valid 364*8fb009dcSAndroid Build Coastguard Worker // signature for the data that has been included by one or more calls to 365*8fb009dcSAndroid Build Coastguard Worker // |EVP_DigestVerifyUpdate|. It returns one on success and zero otherwise. 366*8fb009dcSAndroid Build Coastguard Worker // 367*8fb009dcSAndroid Build Coastguard Worker // This function performs streaming signature verification and will fail for 368*8fb009dcSAndroid Build Coastguard Worker // signature algorithms which do not support this. Use |EVP_PKEY_verify_message| 369*8fb009dcSAndroid Build Coastguard Worker // for a single-shot verification. 370*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig, 371*8fb009dcSAndroid Build Coastguard Worker size_t sig_len); 372*8fb009dcSAndroid Build Coastguard Worker 373*8fb009dcSAndroid Build Coastguard Worker // EVP_DigestVerify verifies that |sig_len| bytes from |sig| are a valid 374*8fb009dcSAndroid Build Coastguard Worker // signature for |data|. It returns one on success or zero on error. 375*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_DigestVerify(EVP_MD_CTX *ctx, const uint8_t *sig, 376*8fb009dcSAndroid Build Coastguard Worker size_t sig_len, const uint8_t *data, 377*8fb009dcSAndroid Build Coastguard Worker size_t len); 378*8fb009dcSAndroid Build Coastguard Worker 379*8fb009dcSAndroid Build Coastguard Worker 380*8fb009dcSAndroid Build Coastguard Worker // Signing (old functions) 381*8fb009dcSAndroid Build Coastguard Worker 382*8fb009dcSAndroid Build Coastguard Worker // EVP_SignInit_ex configures |ctx|, which must already have been initialised, 383*8fb009dcSAndroid Build Coastguard Worker // for a fresh signing operation using the hash function |type|. It returns one 384*8fb009dcSAndroid Build Coastguard Worker // on success and zero otherwise. 385*8fb009dcSAndroid Build Coastguard Worker // 386*8fb009dcSAndroid Build Coastguard Worker // (In order to initialise |ctx|, either obtain it initialised with 387*8fb009dcSAndroid Build Coastguard Worker // |EVP_MD_CTX_create|, or use |EVP_MD_CTX_init|.) 388*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, 389*8fb009dcSAndroid Build Coastguard Worker ENGINE *impl); 390*8fb009dcSAndroid Build Coastguard Worker 391*8fb009dcSAndroid Build Coastguard Worker // EVP_SignInit is a deprecated version of |EVP_SignInit_ex|. 392*8fb009dcSAndroid Build Coastguard Worker // 393*8fb009dcSAndroid Build Coastguard Worker // TODO(fork): remove. 394*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type); 395*8fb009dcSAndroid Build Coastguard Worker 396*8fb009dcSAndroid Build Coastguard Worker // EVP_SignUpdate appends |len| bytes from |data| to the data which will be 397*8fb009dcSAndroid Build Coastguard Worker // signed in |EVP_SignFinal|. 398*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *data, 399*8fb009dcSAndroid Build Coastguard Worker size_t len); 400*8fb009dcSAndroid Build Coastguard Worker 401*8fb009dcSAndroid Build Coastguard Worker // EVP_SignFinal signs the data that has been included by one or more calls to 402*8fb009dcSAndroid Build Coastguard Worker // |EVP_SignUpdate|, using the key |pkey|, and writes it to |sig|. On entry, 403*8fb009dcSAndroid Build Coastguard Worker // |sig| must point to at least |EVP_PKEY_size(pkey)| bytes of space. The 404*8fb009dcSAndroid Build Coastguard Worker // actual size of the signature is written to |*out_sig_len|. 405*8fb009dcSAndroid Build Coastguard Worker // 406*8fb009dcSAndroid Build Coastguard Worker // It returns one on success and zero otherwise. 407*8fb009dcSAndroid Build Coastguard Worker // 408*8fb009dcSAndroid Build Coastguard Worker // It does not modify |ctx|, thus it's possible to continue to use |ctx| in 409*8fb009dcSAndroid Build Coastguard Worker // order to sign a longer message. It also does not mutate |pkey| for 410*8fb009dcSAndroid Build Coastguard Worker // thread-safety purposes and may be used concurrently with other non-mutating 411*8fb009dcSAndroid Build Coastguard Worker // functions on |pkey|. 412*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_SignFinal(const EVP_MD_CTX *ctx, uint8_t *sig, 413*8fb009dcSAndroid Build Coastguard Worker unsigned int *out_sig_len, EVP_PKEY *pkey); 414*8fb009dcSAndroid Build Coastguard Worker 415*8fb009dcSAndroid Build Coastguard Worker 416*8fb009dcSAndroid Build Coastguard Worker // Verifying (old functions) 417*8fb009dcSAndroid Build Coastguard Worker 418*8fb009dcSAndroid Build Coastguard Worker // EVP_VerifyInit_ex configures |ctx|, which must already have been 419*8fb009dcSAndroid Build Coastguard Worker // initialised, for a fresh signature verification operation using the hash 420*8fb009dcSAndroid Build Coastguard Worker // function |type|. It returns one on success and zero otherwise. 421*8fb009dcSAndroid Build Coastguard Worker // 422*8fb009dcSAndroid Build Coastguard Worker // (In order to initialise |ctx|, either obtain it initialised with 423*8fb009dcSAndroid Build Coastguard Worker // |EVP_MD_CTX_create|, or use |EVP_MD_CTX_init|.) 424*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, 425*8fb009dcSAndroid Build Coastguard Worker ENGINE *impl); 426*8fb009dcSAndroid Build Coastguard Worker 427*8fb009dcSAndroid Build Coastguard Worker // EVP_VerifyInit is a deprecated version of |EVP_VerifyInit_ex|. 428*8fb009dcSAndroid Build Coastguard Worker // 429*8fb009dcSAndroid Build Coastguard Worker // TODO(fork): remove. 430*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type); 431*8fb009dcSAndroid Build Coastguard Worker 432*8fb009dcSAndroid Build Coastguard Worker // EVP_VerifyUpdate appends |len| bytes from |data| to the data which will be 433*8fb009dcSAndroid Build Coastguard Worker // signed in |EVP_VerifyFinal|. 434*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *data, 435*8fb009dcSAndroid Build Coastguard Worker size_t len); 436*8fb009dcSAndroid Build Coastguard Worker 437*8fb009dcSAndroid Build Coastguard Worker // EVP_VerifyFinal verifies that |sig_len| bytes of |sig| are a valid 438*8fb009dcSAndroid Build Coastguard Worker // signature, by |pkey|, for the data that has been included by one or more 439*8fb009dcSAndroid Build Coastguard Worker // calls to |EVP_VerifyUpdate|. 440*8fb009dcSAndroid Build Coastguard Worker // 441*8fb009dcSAndroid Build Coastguard Worker // It returns one on success and zero otherwise. 442*8fb009dcSAndroid Build Coastguard Worker // 443*8fb009dcSAndroid Build Coastguard Worker // It does not modify |ctx|, thus it's possible to continue to use |ctx| in 444*8fb009dcSAndroid Build Coastguard Worker // order to verify a longer message. It also does not mutate |pkey| for 445*8fb009dcSAndroid Build Coastguard Worker // thread-safety purposes and may be used concurrently with other non-mutating 446*8fb009dcSAndroid Build Coastguard Worker // functions on |pkey|. 447*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_VerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig, 448*8fb009dcSAndroid Build Coastguard Worker size_t sig_len, EVP_PKEY *pkey); 449*8fb009dcSAndroid Build Coastguard Worker 450*8fb009dcSAndroid Build Coastguard Worker 451*8fb009dcSAndroid Build Coastguard Worker // Printing 452*8fb009dcSAndroid Build Coastguard Worker 453*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_print_public prints a textual representation of the public key in 454*8fb009dcSAndroid Build Coastguard Worker // |pkey| to |out|. Returns one on success or zero otherwise. 455*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, 456*8fb009dcSAndroid Build Coastguard Worker int indent, ASN1_PCTX *pctx); 457*8fb009dcSAndroid Build Coastguard Worker 458*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_print_private prints a textual representation of the private key in 459*8fb009dcSAndroid Build Coastguard Worker // |pkey| to |out|. Returns one on success or zero otherwise. 460*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, 461*8fb009dcSAndroid Build Coastguard Worker int indent, ASN1_PCTX *pctx); 462*8fb009dcSAndroid Build Coastguard Worker 463*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_print_params prints a textual representation of the parameters in 464*8fb009dcSAndroid Build Coastguard Worker // |pkey| to |out|. Returns one on success or zero otherwise. 465*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, 466*8fb009dcSAndroid Build Coastguard Worker int indent, ASN1_PCTX *pctx); 467*8fb009dcSAndroid Build Coastguard Worker 468*8fb009dcSAndroid Build Coastguard Worker 469*8fb009dcSAndroid Build Coastguard Worker // Password stretching. 470*8fb009dcSAndroid Build Coastguard Worker // 471*8fb009dcSAndroid Build Coastguard Worker // Password stretching functions take a low-entropy password and apply a slow 472*8fb009dcSAndroid Build Coastguard Worker // function that results in a key suitable for use in symmetric 473*8fb009dcSAndroid Build Coastguard Worker // cryptography. 474*8fb009dcSAndroid Build Coastguard Worker 475*8fb009dcSAndroid Build Coastguard Worker // PKCS5_PBKDF2_HMAC computes |iterations| iterations of PBKDF2 of |password| 476*8fb009dcSAndroid Build Coastguard Worker // and |salt|, using |digest|, and outputs |key_len| bytes to |out_key|. It 477*8fb009dcSAndroid Build Coastguard Worker // returns one on success and zero on allocation failure or if iterations is 0. 478*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len, 479*8fb009dcSAndroid Build Coastguard Worker const uint8_t *salt, size_t salt_len, 480*8fb009dcSAndroid Build Coastguard Worker uint32_t iterations, const EVP_MD *digest, 481*8fb009dcSAndroid Build Coastguard Worker size_t key_len, uint8_t *out_key); 482*8fb009dcSAndroid Build Coastguard Worker 483*8fb009dcSAndroid Build Coastguard Worker // PKCS5_PBKDF2_HMAC_SHA1 is the same as PKCS5_PBKDF2_HMAC, but with |digest| 484*8fb009dcSAndroid Build Coastguard Worker // fixed to |EVP_sha1|. 485*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PKCS5_PBKDF2_HMAC_SHA1(const char *password, 486*8fb009dcSAndroid Build Coastguard Worker size_t password_len, 487*8fb009dcSAndroid Build Coastguard Worker const uint8_t *salt, size_t salt_len, 488*8fb009dcSAndroid Build Coastguard Worker uint32_t iterations, size_t key_len, 489*8fb009dcSAndroid Build Coastguard Worker uint8_t *out_key); 490*8fb009dcSAndroid Build Coastguard Worker 491*8fb009dcSAndroid Build Coastguard Worker // EVP_PBE_scrypt expands |password| into a secret key of length |key_len| using 492*8fb009dcSAndroid Build Coastguard Worker // scrypt, as described in RFC 7914, and writes the result to |out_key|. It 493*8fb009dcSAndroid Build Coastguard Worker // returns one on success and zero on allocation failure, if the memory required 494*8fb009dcSAndroid Build Coastguard Worker // for the operation exceeds |max_mem|, or if any of the parameters are invalid 495*8fb009dcSAndroid Build Coastguard Worker // as described below. 496*8fb009dcSAndroid Build Coastguard Worker // 497*8fb009dcSAndroid Build Coastguard Worker // |N|, |r|, and |p| are as described in RFC 7914 section 6. They determine the 498*8fb009dcSAndroid Build Coastguard Worker // cost of the operation. If |max_mem| is zero, a defult limit of 32MiB will be 499*8fb009dcSAndroid Build Coastguard Worker // used. 500*8fb009dcSAndroid Build Coastguard Worker // 501*8fb009dcSAndroid Build Coastguard Worker // The parameters are considered invalid under any of the following conditions: 502*8fb009dcSAndroid Build Coastguard Worker // - |r| or |p| are zero 503*8fb009dcSAndroid Build Coastguard Worker // - |p| > (2^30 - 1) / |r| 504*8fb009dcSAndroid Build Coastguard Worker // - |N| is not a power of two 505*8fb009dcSAndroid Build Coastguard Worker // - |N| > 2^32 506*8fb009dcSAndroid Build Coastguard Worker // - |N| > 2^(128 * |r| / 8) 507*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PBE_scrypt(const char *password, size_t password_len, 508*8fb009dcSAndroid Build Coastguard Worker const uint8_t *salt, size_t salt_len, 509*8fb009dcSAndroid Build Coastguard Worker uint64_t N, uint64_t r, uint64_t p, 510*8fb009dcSAndroid Build Coastguard Worker size_t max_mem, uint8_t *out_key, 511*8fb009dcSAndroid Build Coastguard Worker size_t key_len); 512*8fb009dcSAndroid Build Coastguard Worker 513*8fb009dcSAndroid Build Coastguard Worker 514*8fb009dcSAndroid Build Coastguard Worker // Public key contexts. 515*8fb009dcSAndroid Build Coastguard Worker // 516*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY_CTX| objects hold the context of an operation (e.g. signing or 517*8fb009dcSAndroid Build Coastguard Worker // encrypting) that uses a public key. 518*8fb009dcSAndroid Build Coastguard Worker 519*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_new allocates a fresh |EVP_PKEY_CTX| for use with |pkey|. It 520*8fb009dcSAndroid Build Coastguard Worker // returns the context or NULL on error. 521*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); 522*8fb009dcSAndroid Build Coastguard Worker 523*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_new_id allocates a fresh |EVP_PKEY_CTX| for a key of type |id| 524*8fb009dcSAndroid Build Coastguard Worker // (e.g. |EVP_PKEY_HMAC|). This can be used for key generation where 525*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY_CTX_new| can't be used because there isn't an |EVP_PKEY| to pass 526*8fb009dcSAndroid Build Coastguard Worker // it. It returns the context or NULL on error. 527*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); 528*8fb009dcSAndroid Build Coastguard Worker 529*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_free frees |ctx| and the data it owns. 530*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); 531*8fb009dcSAndroid Build Coastguard Worker 532*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_dup allocates a fresh |EVP_PKEY_CTX| and sets it equal to the 533*8fb009dcSAndroid Build Coastguard Worker // state of |ctx|. It returns the fresh |EVP_PKEY_CTX| or NULL on error. 534*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); 535*8fb009dcSAndroid Build Coastguard Worker 536*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_get0_pkey returns the |EVP_PKEY| associated with |ctx|. 537*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); 538*8fb009dcSAndroid Build Coastguard Worker 539*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_sign_init initialises an |EVP_PKEY_CTX| for a signing operation. It 540*8fb009dcSAndroid Build Coastguard Worker // should be called before |EVP_PKEY_sign|. 541*8fb009dcSAndroid Build Coastguard Worker // 542*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 543*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); 544*8fb009dcSAndroid Build Coastguard Worker 545*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_sign signs |digest_len| bytes from |digest| using |ctx|. If |sig| is 546*8fb009dcSAndroid Build Coastguard Worker // NULL, the maximum size of the signature is written to |out_sig_len|. 547*8fb009dcSAndroid Build Coastguard Worker // Otherwise, |*sig_len| must contain the number of bytes of space available at 548*8fb009dcSAndroid Build Coastguard Worker // |sig|. If sufficient, the signature will be written to |sig| and |*sig_len| 549*8fb009dcSAndroid Build Coastguard Worker // updated with the true length. This function will fail for signature 550*8fb009dcSAndroid Build Coastguard Worker // algorithms like Ed25519 that do not support signing pre-hashed inputs. 551*8fb009dcSAndroid Build Coastguard Worker // 552*8fb009dcSAndroid Build Coastguard Worker // WARNING: |digest| must be the output of some hash function on the data to be 553*8fb009dcSAndroid Build Coastguard Worker // signed. Passing unhashed inputs will not result in a secure signature scheme. 554*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_DigestSignInit| to sign an unhashed input. 555*8fb009dcSAndroid Build Coastguard Worker // 556*8fb009dcSAndroid Build Coastguard Worker // WARNING: Setting |sig| to NULL only gives the maximum size of the 557*8fb009dcSAndroid Build Coastguard Worker // signature. The actual signature may be smaller. 558*8fb009dcSAndroid Build Coastguard Worker // 559*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. (Note: this differs from 560*8fb009dcSAndroid Build Coastguard Worker // OpenSSL, which can also return negative values to indicate an error. ) 561*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, uint8_t *sig, 562*8fb009dcSAndroid Build Coastguard Worker size_t *sig_len, const uint8_t *digest, 563*8fb009dcSAndroid Build Coastguard Worker size_t digest_len); 564*8fb009dcSAndroid Build Coastguard Worker 565*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_verify_init initialises an |EVP_PKEY_CTX| for a signature 566*8fb009dcSAndroid Build Coastguard Worker // verification operation. It should be called before |EVP_PKEY_verify|. 567*8fb009dcSAndroid Build Coastguard Worker // 568*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 569*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); 570*8fb009dcSAndroid Build Coastguard Worker 571*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_verify verifies that |sig_len| bytes from |sig| are a valid 572*8fb009dcSAndroid Build Coastguard Worker // signature for |digest|. This function will fail for signature 573*8fb009dcSAndroid Build Coastguard Worker // algorithms like Ed25519 that do not support signing pre-hashed inputs. 574*8fb009dcSAndroid Build Coastguard Worker // 575*8fb009dcSAndroid Build Coastguard Worker // WARNING: |digest| must be the output of some hash function on the data to be 576*8fb009dcSAndroid Build Coastguard Worker // verified. Passing unhashed inputs will not result in a secure signature 577*8fb009dcSAndroid Build Coastguard Worker // scheme. Use |EVP_DigestVerifyInit| to verify a signature given the unhashed 578*8fb009dcSAndroid Build Coastguard Worker // input. 579*8fb009dcSAndroid Build Coastguard Worker // 580*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 581*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig, 582*8fb009dcSAndroid Build Coastguard Worker size_t sig_len, const uint8_t *digest, 583*8fb009dcSAndroid Build Coastguard Worker size_t digest_len); 584*8fb009dcSAndroid Build Coastguard Worker 585*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_encrypt_init initialises an |EVP_PKEY_CTX| for an encryption 586*8fb009dcSAndroid Build Coastguard Worker // operation. It should be called before |EVP_PKEY_encrypt|. 587*8fb009dcSAndroid Build Coastguard Worker // 588*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 589*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); 590*8fb009dcSAndroid Build Coastguard Worker 591*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_encrypt encrypts |in_len| bytes from |in|. If |out| is NULL, the 592*8fb009dcSAndroid Build Coastguard Worker // maximum size of the ciphertext is written to |out_len|. Otherwise, |*out_len| 593*8fb009dcSAndroid Build Coastguard Worker // must contain the number of bytes of space available at |out|. If sufficient, 594*8fb009dcSAndroid Build Coastguard Worker // the ciphertext will be written to |out| and |*out_len| updated with the true 595*8fb009dcSAndroid Build Coastguard Worker // length. 596*8fb009dcSAndroid Build Coastguard Worker // 597*8fb009dcSAndroid Build Coastguard Worker // WARNING: Setting |out| to NULL only gives the maximum size of the 598*8fb009dcSAndroid Build Coastguard Worker // ciphertext. The actual ciphertext may be smaller. 599*8fb009dcSAndroid Build Coastguard Worker // 600*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 601*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out, 602*8fb009dcSAndroid Build Coastguard Worker size_t *out_len, const uint8_t *in, 603*8fb009dcSAndroid Build Coastguard Worker size_t in_len); 604*8fb009dcSAndroid Build Coastguard Worker 605*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_decrypt_init initialises an |EVP_PKEY_CTX| for a decryption 606*8fb009dcSAndroid Build Coastguard Worker // operation. It should be called before |EVP_PKEY_decrypt|. 607*8fb009dcSAndroid Build Coastguard Worker // 608*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 609*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); 610*8fb009dcSAndroid Build Coastguard Worker 611*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_decrypt decrypts |in_len| bytes from |in|. If |out| is NULL, the 612*8fb009dcSAndroid Build Coastguard Worker // maximum size of the plaintext is written to |out_len|. Otherwise, |*out_len| 613*8fb009dcSAndroid Build Coastguard Worker // must contain the number of bytes of space available at |out|. If sufficient, 614*8fb009dcSAndroid Build Coastguard Worker // the ciphertext will be written to |out| and |*out_len| updated with the true 615*8fb009dcSAndroid Build Coastguard Worker // length. 616*8fb009dcSAndroid Build Coastguard Worker // 617*8fb009dcSAndroid Build Coastguard Worker // WARNING: Setting |out| to NULL only gives the maximum size of the 618*8fb009dcSAndroid Build Coastguard Worker // plaintext. The actual plaintext may be smaller. 619*8fb009dcSAndroid Build Coastguard Worker // 620*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 621*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out, 622*8fb009dcSAndroid Build Coastguard Worker size_t *out_len, const uint8_t *in, 623*8fb009dcSAndroid Build Coastguard Worker size_t in_len); 624*8fb009dcSAndroid Build Coastguard Worker 625*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_verify_recover_init initialises an |EVP_PKEY_CTX| for a public-key 626*8fb009dcSAndroid Build Coastguard Worker // decryption operation. It should be called before |EVP_PKEY_verify_recover|. 627*8fb009dcSAndroid Build Coastguard Worker // 628*8fb009dcSAndroid Build Coastguard Worker // Public-key decryption is a very obscure operation that is only implemented 629*8fb009dcSAndroid Build Coastguard Worker // by RSA keys. It is effectively a signature verification operation that 630*8fb009dcSAndroid Build Coastguard Worker // returns the signed message directly. It is almost certainly not what you 631*8fb009dcSAndroid Build Coastguard Worker // want. 632*8fb009dcSAndroid Build Coastguard Worker // 633*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 634*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); 635*8fb009dcSAndroid Build Coastguard Worker 636*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_verify_recover decrypts |sig_len| bytes from |sig|. If |out| is 637*8fb009dcSAndroid Build Coastguard Worker // NULL, the maximum size of the plaintext is written to |out_len|. Otherwise, 638*8fb009dcSAndroid Build Coastguard Worker // |*out_len| must contain the number of bytes of space available at |out|. If 639*8fb009dcSAndroid Build Coastguard Worker // sufficient, the ciphertext will be written to |out| and |*out_len| updated 640*8fb009dcSAndroid Build Coastguard Worker // with the true length. 641*8fb009dcSAndroid Build Coastguard Worker // 642*8fb009dcSAndroid Build Coastguard Worker // WARNING: Setting |out| to NULL only gives the maximum size of the 643*8fb009dcSAndroid Build Coastguard Worker // plaintext. The actual plaintext may be smaller. 644*8fb009dcSAndroid Build Coastguard Worker // 645*8fb009dcSAndroid Build Coastguard Worker // See the warning about this operation in |EVP_PKEY_verify_recover_init|. It 646*8fb009dcSAndroid Build Coastguard Worker // is probably not what you want. 647*8fb009dcSAndroid Build Coastguard Worker // 648*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 649*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, uint8_t *out, 650*8fb009dcSAndroid Build Coastguard Worker size_t *out_len, const uint8_t *sig, 651*8fb009dcSAndroid Build Coastguard Worker size_t siglen); 652*8fb009dcSAndroid Build Coastguard Worker 653*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_derive_init initialises an |EVP_PKEY_CTX| for a key derivation 654*8fb009dcSAndroid Build Coastguard Worker // operation. It should be called before |EVP_PKEY_derive_set_peer| and 655*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY_derive|. 656*8fb009dcSAndroid Build Coastguard Worker // 657*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 658*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); 659*8fb009dcSAndroid Build Coastguard Worker 660*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_derive_set_peer sets the peer's key to be used for key derivation 661*8fb009dcSAndroid Build Coastguard Worker // by |ctx| to |peer|. It should be called after |EVP_PKEY_derive_init|. (For 662*8fb009dcSAndroid Build Coastguard Worker // example, this is used to set the peer's key in (EC)DH.) It returns one on 663*8fb009dcSAndroid Build Coastguard Worker // success and zero on error. 664*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); 665*8fb009dcSAndroid Build Coastguard Worker 666*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_derive derives a shared key from |ctx|. If |key| is non-NULL then, 667*8fb009dcSAndroid Build Coastguard Worker // on entry, |out_key_len| must contain the amount of space at |key|. If 668*8fb009dcSAndroid Build Coastguard Worker // sufficient then the shared key will be written to |key| and |*out_key_len| 669*8fb009dcSAndroid Build Coastguard Worker // will be set to the length. If |key| is NULL then |out_key_len| will be set to 670*8fb009dcSAndroid Build Coastguard Worker // the maximum length. 671*8fb009dcSAndroid Build Coastguard Worker // 672*8fb009dcSAndroid Build Coastguard Worker // WARNING: Setting |out| to NULL only gives the maximum size of the key. The 673*8fb009dcSAndroid Build Coastguard Worker // actual key may be smaller. 674*8fb009dcSAndroid Build Coastguard Worker // 675*8fb009dcSAndroid Build Coastguard Worker // It returns one on success and zero on error. 676*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, uint8_t *key, 677*8fb009dcSAndroid Build Coastguard Worker size_t *out_key_len); 678*8fb009dcSAndroid Build Coastguard Worker 679*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_keygen_init initialises an |EVP_PKEY_CTX| for a key generation 680*8fb009dcSAndroid Build Coastguard Worker // operation. It should be called before |EVP_PKEY_keygen|. 681*8fb009dcSAndroid Build Coastguard Worker // 682*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 683*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); 684*8fb009dcSAndroid Build Coastguard Worker 685*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_keygen performs a key generation operation using the values from 686*8fb009dcSAndroid Build Coastguard Worker // |ctx|. If |*out_pkey| is non-NULL, it overwrites |*out_pkey| with the 687*8fb009dcSAndroid Build Coastguard Worker // resulting key. Otherwise, it sets |*out_pkey| to a newly-allocated |EVP_PKEY| 688*8fb009dcSAndroid Build Coastguard Worker // containing the result. It returns one on success or zero on error. 689*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **out_pkey); 690*8fb009dcSAndroid Build Coastguard Worker 691*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_paramgen_init initialises an |EVP_PKEY_CTX| for a parameter 692*8fb009dcSAndroid Build Coastguard Worker // generation operation. It should be called before |EVP_PKEY_paramgen|. 693*8fb009dcSAndroid Build Coastguard Worker // 694*8fb009dcSAndroid Build Coastguard Worker // It returns one on success or zero on error. 695*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); 696*8fb009dcSAndroid Build Coastguard Worker 697*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_paramgen performs a parameter generation using the values from 698*8fb009dcSAndroid Build Coastguard Worker // |ctx|. If |*out_pkey| is non-NULL, it overwrites |*out_pkey| with the 699*8fb009dcSAndroid Build Coastguard Worker // resulting parameters, but no key. Otherwise, it sets |*out_pkey| to a 700*8fb009dcSAndroid Build Coastguard Worker // newly-allocated |EVP_PKEY| containing the result. It returns one on success 701*8fb009dcSAndroid Build Coastguard Worker // or zero on error. 702*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **out_pkey); 703*8fb009dcSAndroid Build Coastguard Worker 704*8fb009dcSAndroid Build Coastguard Worker 705*8fb009dcSAndroid Build Coastguard Worker // Generic control functions. 706*8fb009dcSAndroid Build Coastguard Worker 707*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_signature_md sets |md| as the digest to be used in a 708*8fb009dcSAndroid Build Coastguard Worker // signature operation. It returns one on success or zero on error. 709*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, 710*8fb009dcSAndroid Build Coastguard Worker const EVP_MD *md); 711*8fb009dcSAndroid Build Coastguard Worker 712*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_get_signature_md sets |*out_md| to the digest to be used in a 713*8fb009dcSAndroid Build Coastguard Worker // signature operation. It returns one on success or zero on error. 714*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, 715*8fb009dcSAndroid Build Coastguard Worker const EVP_MD **out_md); 716*8fb009dcSAndroid Build Coastguard Worker 717*8fb009dcSAndroid Build Coastguard Worker 718*8fb009dcSAndroid Build Coastguard Worker // RSA specific control functions. 719*8fb009dcSAndroid Build Coastguard Worker 720*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_padding sets the padding type to use. It should be one 721*8fb009dcSAndroid Build Coastguard Worker // of the |RSA_*_PADDING| values. Returns one on success or zero on error. By 722*8fb009dcSAndroid Build Coastguard Worker // default, the padding is |RSA_PKCS1_PADDING|. 723*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int padding); 724*8fb009dcSAndroid Build Coastguard Worker 725*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_get_rsa_padding sets |*out_padding| to the current padding 726*8fb009dcSAndroid Build Coastguard Worker // value, which is one of the |RSA_*_PADDING| values. Returns one on success or 727*8fb009dcSAndroid Build Coastguard Worker // zero on error. 728*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, 729*8fb009dcSAndroid Build Coastguard Worker int *out_padding); 730*8fb009dcSAndroid Build Coastguard Worker 731*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_pss_saltlen sets the length of the salt in a PSS-padded 732*8fb009dcSAndroid Build Coastguard Worker // signature. A value of -1 cause the salt to be the same length as the digest 733*8fb009dcSAndroid Build Coastguard Worker // in the signature. A value of -2 causes the salt to be the maximum length 734*8fb009dcSAndroid Build Coastguard Worker // that will fit when signing and recovered from the signature when verifying. 735*8fb009dcSAndroid Build Coastguard Worker // Otherwise the value gives the size of the salt in bytes. 736*8fb009dcSAndroid Build Coastguard Worker // 737*8fb009dcSAndroid Build Coastguard Worker // If unsure, use -1. 738*8fb009dcSAndroid Build Coastguard Worker // 739*8fb009dcSAndroid Build Coastguard Worker // Returns one on success or zero on error. 740*8fb009dcSAndroid Build Coastguard Worker // 741*8fb009dcSAndroid Build Coastguard Worker // TODO(davidben): The default is currently -2. Switch it to -1. 742*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, 743*8fb009dcSAndroid Build Coastguard Worker int salt_len); 744*8fb009dcSAndroid Build Coastguard Worker 745*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_get_rsa_pss_saltlen sets |*out_salt_len| to the salt length of 746*8fb009dcSAndroid Build Coastguard Worker // a PSS-padded signature. See the documentation for 747*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY_CTX_set_rsa_pss_saltlen| for details of the special values that it 748*8fb009dcSAndroid Build Coastguard Worker // can take. 749*8fb009dcSAndroid Build Coastguard Worker // 750*8fb009dcSAndroid Build Coastguard Worker // Returns one on success or zero on error. 751*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, 752*8fb009dcSAndroid Build Coastguard Worker int *out_salt_len); 753*8fb009dcSAndroid Build Coastguard Worker 754*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_keygen_bits sets the size of the desired RSA modulus, 755*8fb009dcSAndroid Build Coastguard Worker // in bits, for key generation. Returns one on success or zero on 756*8fb009dcSAndroid Build Coastguard Worker // error. 757*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, 758*8fb009dcSAndroid Build Coastguard Worker int bits); 759*8fb009dcSAndroid Build Coastguard Worker 760*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_keygen_pubexp sets |e| as the public exponent for key 761*8fb009dcSAndroid Build Coastguard Worker // generation. Returns one on success or zero on error. 762*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, 763*8fb009dcSAndroid Build Coastguard Worker BIGNUM *e); 764*8fb009dcSAndroid Build Coastguard Worker 765*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_oaep_md sets |md| as the digest used in OAEP padding. 766*8fb009dcSAndroid Build Coastguard Worker // Returns one on success or zero on error. If unset, the default is SHA-1. 767*8fb009dcSAndroid Build Coastguard Worker // Callers are recommended to overwrite this default. 768*8fb009dcSAndroid Build Coastguard Worker // 769*8fb009dcSAndroid Build Coastguard Worker // TODO(davidben): Remove the default and require callers specify this. 770*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, 771*8fb009dcSAndroid Build Coastguard Worker const EVP_MD *md); 772*8fb009dcSAndroid Build Coastguard Worker 773*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_get_rsa_oaep_md sets |*out_md| to the digest function used in 774*8fb009dcSAndroid Build Coastguard Worker // OAEP padding. Returns one on success or zero on error. 775*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, 776*8fb009dcSAndroid Build Coastguard Worker const EVP_MD **out_md); 777*8fb009dcSAndroid Build Coastguard Worker 778*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_mgf1_md sets |md| as the digest used in MGF1. Returns 779*8fb009dcSAndroid Build Coastguard Worker // one on success or zero on error. 780*8fb009dcSAndroid Build Coastguard Worker // 781*8fb009dcSAndroid Build Coastguard Worker // If unset, the default is the signing hash for |RSA_PKCS1_PSS_PADDING| and the 782*8fb009dcSAndroid Build Coastguard Worker // OAEP hash for |RSA_PKCS1_OAEP_PADDING|. Callers are recommended to use this 783*8fb009dcSAndroid Build Coastguard Worker // default and not call this function. 784*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, 785*8fb009dcSAndroid Build Coastguard Worker const EVP_MD *md); 786*8fb009dcSAndroid Build Coastguard Worker 787*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_get_rsa_mgf1_md sets |*out_md| to the digest function used in 788*8fb009dcSAndroid Build Coastguard Worker // MGF1. Returns one on success or zero on error. 789*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, 790*8fb009dcSAndroid Build Coastguard Worker const EVP_MD **out_md); 791*8fb009dcSAndroid Build Coastguard Worker 792*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set0_rsa_oaep_label sets |label_len| bytes from |label| as the 793*8fb009dcSAndroid Build Coastguard Worker // label used in OAEP. DANGER: On success, this call takes ownership of |label| 794*8fb009dcSAndroid Build Coastguard Worker // and will call |OPENSSL_free| on it when |ctx| is destroyed. 795*8fb009dcSAndroid Build Coastguard Worker // 796*8fb009dcSAndroid Build Coastguard Worker // Returns one on success or zero on error. 797*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, 798*8fb009dcSAndroid Build Coastguard Worker uint8_t *label, 799*8fb009dcSAndroid Build Coastguard Worker size_t label_len); 800*8fb009dcSAndroid Build Coastguard Worker 801*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_get0_rsa_oaep_label sets |*out_label| to point to the internal 802*8fb009dcSAndroid Build Coastguard Worker // buffer containing the OAEP label (which may be NULL) and returns the length 803*8fb009dcSAndroid Build Coastguard Worker // of the label or a negative value on error. 804*8fb009dcSAndroid Build Coastguard Worker // 805*8fb009dcSAndroid Build Coastguard Worker // WARNING: the return value differs from the usual return value convention. 806*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, 807*8fb009dcSAndroid Build Coastguard Worker const uint8_t **out_label); 808*8fb009dcSAndroid Build Coastguard Worker 809*8fb009dcSAndroid Build Coastguard Worker 810*8fb009dcSAndroid Build Coastguard Worker // EC specific control functions. 811*8fb009dcSAndroid Build Coastguard Worker 812*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_ec_paramgen_curve_nid sets the curve used for 813*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY_keygen| or |EVP_PKEY_paramgen| operations to |nid|. It returns one 814*8fb009dcSAndroid Build Coastguard Worker // on success and zero on error. 815*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, 816*8fb009dcSAndroid Build Coastguard Worker int nid); 817*8fb009dcSAndroid Build Coastguard Worker 818*8fb009dcSAndroid Build Coastguard Worker 819*8fb009dcSAndroid Build Coastguard Worker // Diffie-Hellman-specific control functions. 820*8fb009dcSAndroid Build Coastguard Worker 821*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_dh_pad configures configures whether |ctx|, which must be an 822*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY_derive| operation, configures the handling of leading zeros in the 823*8fb009dcSAndroid Build Coastguard Worker // Diffie-Hellman shared secret. If |pad| is zero, leading zeros are removed 824*8fb009dcSAndroid Build Coastguard Worker // from the secret. If |pad| is non-zero, the fixed-width shared secret is used 825*8fb009dcSAndroid Build Coastguard Worker // unmodified, as in PKCS #3. If this function is not called, the default is to 826*8fb009dcSAndroid Build Coastguard Worker // remove leading zeros. 827*8fb009dcSAndroid Build Coastguard Worker // 828*8fb009dcSAndroid Build Coastguard Worker // WARNING: The behavior when |pad| is zero leaks information about the shared 829*8fb009dcSAndroid Build Coastguard Worker // secret. This may result in side channel attacks such as 830*8fb009dcSAndroid Build Coastguard Worker // https://raccoon-attack.com/, particularly when the same private key is used 831*8fb009dcSAndroid Build Coastguard Worker // for multiple operations. 832*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad); 833*8fb009dcSAndroid Build Coastguard Worker 834*8fb009dcSAndroid Build Coastguard Worker 835*8fb009dcSAndroid Build Coastguard Worker // Deprecated functions. 836*8fb009dcSAndroid Build Coastguard Worker 837*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_RSA2 was historically an alternate form for RSA public keys (OID 838*8fb009dcSAndroid Build Coastguard Worker // 2.5.8.1.1), but is no longer accepted. 839*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_RSA2 NID_rsa 840*8fb009dcSAndroid Build Coastguard Worker 841*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_X448 is defined for OpenSSL compatibility, but we do not support 842*8fb009dcSAndroid Build Coastguard Worker // X448 and attempts to create keys will fail. 843*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_X448 NID_X448 844*8fb009dcSAndroid Build Coastguard Worker 845*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_ED448 is defined for OpenSSL compatibility, but we do not support 846*8fb009dcSAndroid Build Coastguard Worker // Ed448 and attempts to create keys will fail. 847*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_ED448 NID_ED448 848*8fb009dcSAndroid Build Coastguard Worker 849*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_get0 returns NULL. This function is provided for compatibility with 850*8fb009dcSAndroid Build Coastguard Worker // OpenSSL but does not return anything. Use the typed |EVP_PKEY_get0_*| 851*8fb009dcSAndroid Build Coastguard Worker // functions instead. 852*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void *EVP_PKEY_get0(const EVP_PKEY *pkey); 853*8fb009dcSAndroid Build Coastguard Worker 854*8fb009dcSAndroid Build Coastguard Worker // OpenSSL_add_all_algorithms does nothing. 855*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void OpenSSL_add_all_algorithms(void); 856*8fb009dcSAndroid Build Coastguard Worker 857*8fb009dcSAndroid Build Coastguard Worker // OPENSSL_add_all_algorithms_conf does nothing. 858*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void OPENSSL_add_all_algorithms_conf(void); 859*8fb009dcSAndroid Build Coastguard Worker 860*8fb009dcSAndroid Build Coastguard Worker // OpenSSL_add_all_ciphers does nothing. 861*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void OpenSSL_add_all_ciphers(void); 862*8fb009dcSAndroid Build Coastguard Worker 863*8fb009dcSAndroid Build Coastguard Worker // OpenSSL_add_all_digests does nothing. 864*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void OpenSSL_add_all_digests(void); 865*8fb009dcSAndroid Build Coastguard Worker 866*8fb009dcSAndroid Build Coastguard Worker // EVP_cleanup does nothing. 867*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void EVP_cleanup(void); 868*8fb009dcSAndroid Build Coastguard Worker 869*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void EVP_CIPHER_do_all_sorted( 870*8fb009dcSAndroid Build Coastguard Worker void (*callback)(const EVP_CIPHER *cipher, const char *name, 871*8fb009dcSAndroid Build Coastguard Worker const char *unused, void *arg), 872*8fb009dcSAndroid Build Coastguard Worker void *arg); 873*8fb009dcSAndroid Build Coastguard Worker 874*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void EVP_MD_do_all_sorted(void (*callback)(const EVP_MD *cipher, 875*8fb009dcSAndroid Build Coastguard Worker const char *name, 876*8fb009dcSAndroid Build Coastguard Worker const char *unused, 877*8fb009dcSAndroid Build Coastguard Worker void *arg), 878*8fb009dcSAndroid Build Coastguard Worker void *arg); 879*8fb009dcSAndroid Build Coastguard Worker 880*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void EVP_MD_do_all(void (*callback)(const EVP_MD *cipher, 881*8fb009dcSAndroid Build Coastguard Worker const char *name, 882*8fb009dcSAndroid Build Coastguard Worker const char *unused, 883*8fb009dcSAndroid Build Coastguard Worker void *arg), 884*8fb009dcSAndroid Build Coastguard Worker void *arg); 885*8fb009dcSAndroid Build Coastguard Worker 886*8fb009dcSAndroid Build Coastguard Worker // i2d_PrivateKey marshals a private key from |key| to type-specific format, as 887*8fb009dcSAndroid Build Coastguard Worker // described in |i2d_SAMPLE|. 888*8fb009dcSAndroid Build Coastguard Worker // 889*8fb009dcSAndroid Build Coastguard Worker // RSA keys are serialized as a DER-encoded RSAPublicKey (RFC 8017) structure. 890*8fb009dcSAndroid Build Coastguard Worker // EC keys are serialized as a DER-encoded ECPrivateKey (RFC 5915) structure. 891*8fb009dcSAndroid Build Coastguard Worker // 892*8fb009dcSAndroid Build Coastguard Worker // Use |RSA_marshal_private_key| or |EC_KEY_marshal_private_key| instead. 893*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_PrivateKey(const EVP_PKEY *key, uint8_t **outp); 894*8fb009dcSAndroid Build Coastguard Worker 895*8fb009dcSAndroid Build Coastguard Worker // i2d_PublicKey marshals a public key from |key| to a type-specific format, as 896*8fb009dcSAndroid Build Coastguard Worker // described in |i2d_SAMPLE|. 897*8fb009dcSAndroid Build Coastguard Worker // 898*8fb009dcSAndroid Build Coastguard Worker // RSA keys are serialized as a DER-encoded RSAPublicKey (RFC 8017) structure. 899*8fb009dcSAndroid Build Coastguard Worker // EC keys are serialized as an EC point per SEC 1. 900*8fb009dcSAndroid Build Coastguard Worker // 901*8fb009dcSAndroid Build Coastguard Worker // Use |RSA_marshal_public_key| or |EC_POINT_point2cbb| instead. 902*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_PublicKey(const EVP_PKEY *key, uint8_t **outp); 903*8fb009dcSAndroid Build Coastguard Worker 904*8fb009dcSAndroid Build Coastguard Worker // d2i_PrivateKey parses a DER-encoded private key from |len| bytes at |*inp|, 905*8fb009dcSAndroid Build Coastguard Worker // as described in |d2i_SAMPLE|. The private key must have type |type|, 906*8fb009dcSAndroid Build Coastguard Worker // otherwise it will be rejected. 907*8fb009dcSAndroid Build Coastguard Worker // 908*8fb009dcSAndroid Build Coastguard Worker // This function tries to detect one of several formats. Instead, use 909*8fb009dcSAndroid Build Coastguard Worker // |EVP_parse_private_key| for a PrivateKeyInfo, |RSA_parse_private_key| for an 910*8fb009dcSAndroid Build Coastguard Worker // RSAPrivateKey, and |EC_parse_private_key| for an ECPrivateKey. 911*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out, 912*8fb009dcSAndroid Build Coastguard Worker const uint8_t **inp, long len); 913*8fb009dcSAndroid Build Coastguard Worker 914*8fb009dcSAndroid Build Coastguard Worker // d2i_AutoPrivateKey acts the same as |d2i_PrivateKey|, but detects the type 915*8fb009dcSAndroid Build Coastguard Worker // of the private key. 916*8fb009dcSAndroid Build Coastguard Worker // 917*8fb009dcSAndroid Build Coastguard Worker // This function tries to detect one of several formats. Instead, use 918*8fb009dcSAndroid Build Coastguard Worker // |EVP_parse_private_key| for a PrivateKeyInfo, |RSA_parse_private_key| for an 919*8fb009dcSAndroid Build Coastguard Worker // RSAPrivateKey, and |EC_parse_private_key| for an ECPrivateKey. 920*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp, 921*8fb009dcSAndroid Build Coastguard Worker long len); 922*8fb009dcSAndroid Build Coastguard Worker 923*8fb009dcSAndroid Build Coastguard Worker // d2i_PublicKey parses a public key from |len| bytes at |*inp| in a type- 924*8fb009dcSAndroid Build Coastguard Worker // specific format specified by |type|, as described in |d2i_SAMPLE|. 925*8fb009dcSAndroid Build Coastguard Worker // 926*8fb009dcSAndroid Build Coastguard Worker // The only supported value for |type| is |EVP_PKEY_RSA|, which parses a 927*8fb009dcSAndroid Build Coastguard Worker // DER-encoded RSAPublicKey (RFC 8017) structure. Parsing EC keys is not 928*8fb009dcSAndroid Build Coastguard Worker // supported by this function. 929*8fb009dcSAndroid Build Coastguard Worker // 930*8fb009dcSAndroid Build Coastguard Worker // Use |RSA_parse_public_key| instead. 931*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **out, 932*8fb009dcSAndroid Build Coastguard Worker const uint8_t **inp, long len); 933*8fb009dcSAndroid Build Coastguard Worker 934*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_ec_param_enc returns one if |encoding| is 935*8fb009dcSAndroid Build Coastguard Worker // |OPENSSL_EC_NAMED_CURVE| or zero with an error otherwise. 936*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, 937*8fb009dcSAndroid Build Coastguard Worker int encoding); 938*8fb009dcSAndroid Build Coastguard Worker 939*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_set1_tls_encodedpoint replaces |pkey| with a public key encoded by 940*8fb009dcSAndroid Build Coastguard Worker // |in|. It returns one on success and zero on error. 941*8fb009dcSAndroid Build Coastguard Worker // 942*8fb009dcSAndroid Build Coastguard Worker // If |pkey| is an EC key, the format is an X9.62 point and |pkey| must already 943*8fb009dcSAndroid Build Coastguard Worker // have an EC group configured. If it is an X25519 key, it is the 32-byte X25519 944*8fb009dcSAndroid Build Coastguard Worker // public key representation. This function is not supported for other key types 945*8fb009dcSAndroid Build Coastguard Worker // and will fail. 946*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, 947*8fb009dcSAndroid Build Coastguard Worker const uint8_t *in, 948*8fb009dcSAndroid Build Coastguard Worker size_t len); 949*8fb009dcSAndroid Build Coastguard Worker 950*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_get1_tls_encodedpoint sets |*out_ptr| to a newly-allocated buffer 951*8fb009dcSAndroid Build Coastguard Worker // containing the raw encoded public key for |pkey|. The caller must call 952*8fb009dcSAndroid Build Coastguard Worker // |OPENSSL_free| to release this buffer. The function returns the length of the 953*8fb009dcSAndroid Build Coastguard Worker // buffer on success and zero on error. 954*8fb009dcSAndroid Build Coastguard Worker // 955*8fb009dcSAndroid Build Coastguard Worker // If |pkey| is an EC key, the format is an X9.62 point with uncompressed 956*8fb009dcSAndroid Build Coastguard Worker // coordinates. If it is an X25519 key, it is the 32-byte X25519 public key 957*8fb009dcSAndroid Build Coastguard Worker // representation. This function is not supported for other key types and will 958*8fb009dcSAndroid Build Coastguard Worker // fail. 959*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT size_t EVP_PKEY_get1_tls_encodedpoint(const EVP_PKEY *pkey, 960*8fb009dcSAndroid Build Coastguard Worker uint8_t **out_ptr); 961*8fb009dcSAndroid Build Coastguard Worker 962*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_base_id calls |EVP_PKEY_id|. 963*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_base_id(const EVP_PKEY *pkey); 964*8fb009dcSAndroid Build Coastguard Worker 965*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_pss_keygen_md returns 0. 966*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, 967*8fb009dcSAndroid Build Coastguard Worker const EVP_MD *md); 968*8fb009dcSAndroid Build Coastguard Worker 969*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen returns 0. 970*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, 971*8fb009dcSAndroid Build Coastguard Worker int salt_len); 972*8fb009dcSAndroid Build Coastguard Worker 973*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md returns 0. 974*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, 975*8fb009dcSAndroid Build Coastguard Worker const EVP_MD *md); 976*8fb009dcSAndroid Build Coastguard Worker 977*8fb009dcSAndroid Build Coastguard Worker // i2d_PUBKEY marshals |pkey| as a DER-encoded SubjectPublicKeyInfo, as 978*8fb009dcSAndroid Build Coastguard Worker // described in |i2d_SAMPLE|. 979*8fb009dcSAndroid Build Coastguard Worker // 980*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_marshal_public_key| instead. 981*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_PUBKEY(const EVP_PKEY *pkey, uint8_t **outp); 982*8fb009dcSAndroid Build Coastguard Worker 983*8fb009dcSAndroid Build Coastguard Worker // d2i_PUBKEY parses a DER-encoded SubjectPublicKeyInfo from |len| bytes at 984*8fb009dcSAndroid Build Coastguard Worker // |*inp|, as described in |d2i_SAMPLE|. 985*8fb009dcSAndroid Build Coastguard Worker // 986*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_parse_public_key| instead. 987*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *d2i_PUBKEY(EVP_PKEY **out, const uint8_t **inp, 988*8fb009dcSAndroid Build Coastguard Worker long len); 989*8fb009dcSAndroid Build Coastguard Worker 990*8fb009dcSAndroid Build Coastguard Worker // i2d_RSA_PUBKEY marshals |rsa| as a DER-encoded SubjectPublicKeyInfo 991*8fb009dcSAndroid Build Coastguard Worker // structure, as described in |i2d_SAMPLE|. 992*8fb009dcSAndroid Build Coastguard Worker // 993*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_marshal_public_key| instead. 994*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_RSA_PUBKEY(const RSA *rsa, uint8_t **outp); 995*8fb009dcSAndroid Build Coastguard Worker 996*8fb009dcSAndroid Build Coastguard Worker // d2i_RSA_PUBKEY parses an RSA public key as a DER-encoded SubjectPublicKeyInfo 997*8fb009dcSAndroid Build Coastguard Worker // from |len| bytes at |*inp|, as described in |d2i_SAMPLE|. 998*8fb009dcSAndroid Build Coastguard Worker // SubjectPublicKeyInfo structures containing other key types are rejected. 999*8fb009dcSAndroid Build Coastguard Worker // 1000*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_parse_public_key| instead. 1001*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT RSA *d2i_RSA_PUBKEY(RSA **out, const uint8_t **inp, long len); 1002*8fb009dcSAndroid Build Coastguard Worker 1003*8fb009dcSAndroid Build Coastguard Worker // i2d_DSA_PUBKEY marshals |dsa| as a DER-encoded SubjectPublicKeyInfo, as 1004*8fb009dcSAndroid Build Coastguard Worker // described in |i2d_SAMPLE|. 1005*8fb009dcSAndroid Build Coastguard Worker // 1006*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_marshal_public_key| instead. 1007*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_DSA_PUBKEY(const DSA *dsa, uint8_t **outp); 1008*8fb009dcSAndroid Build Coastguard Worker 1009*8fb009dcSAndroid Build Coastguard Worker // d2i_DSA_PUBKEY parses a DSA public key as a DER-encoded SubjectPublicKeyInfo 1010*8fb009dcSAndroid Build Coastguard Worker // from |len| bytes at |*inp|, as described in |d2i_SAMPLE|. 1011*8fb009dcSAndroid Build Coastguard Worker // SubjectPublicKeyInfo structures containing other key types are rejected. 1012*8fb009dcSAndroid Build Coastguard Worker // 1013*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_parse_public_key| instead. 1014*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT DSA *d2i_DSA_PUBKEY(DSA **out, const uint8_t **inp, long len); 1015*8fb009dcSAndroid Build Coastguard Worker 1016*8fb009dcSAndroid Build Coastguard Worker // i2d_EC_PUBKEY marshals |ec_key| as a DER-encoded SubjectPublicKeyInfo, as 1017*8fb009dcSAndroid Build Coastguard Worker // described in |i2d_SAMPLE|. 1018*8fb009dcSAndroid Build Coastguard Worker // 1019*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_marshal_public_key| instead. 1020*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_EC_PUBKEY(const EC_KEY *ec_key, uint8_t **outp); 1021*8fb009dcSAndroid Build Coastguard Worker 1022*8fb009dcSAndroid Build Coastguard Worker // d2i_EC_PUBKEY parses an EC public key as a DER-encoded SubjectPublicKeyInfo 1023*8fb009dcSAndroid Build Coastguard Worker // from |len| bytes at |*inp|, as described in |d2i_SAMPLE|. 1024*8fb009dcSAndroid Build Coastguard Worker // SubjectPublicKeyInfo structures containing other key types are rejected. 1025*8fb009dcSAndroid Build Coastguard Worker // 1026*8fb009dcSAndroid Build Coastguard Worker // Use |EVP_parse_public_key| instead. 1027*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EC_KEY *d2i_EC_PUBKEY(EC_KEY **out, const uint8_t **inp, 1028*8fb009dcSAndroid Build Coastguard Worker long len); 1029*8fb009dcSAndroid Build Coastguard Worker 1030*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_dsa_paramgen_bits returns zero. 1031*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, 1032*8fb009dcSAndroid Build Coastguard Worker int nbits); 1033*8fb009dcSAndroid Build Coastguard Worker 1034*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_CTX_set_dsa_paramgen_q_bits returns zero. 1035*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, 1036*8fb009dcSAndroid Build Coastguard Worker int qbits); 1037*8fb009dcSAndroid Build Coastguard Worker 1038*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_assign sets the underlying key of |pkey| to |key|, which must be of 1039*8fb009dcSAndroid Build Coastguard Worker // the given type. If successful, it returns one. If the |type| argument 1040*8fb009dcSAndroid Build Coastguard Worker // is not one of |EVP_PKEY_RSA|, |EVP_PKEY_DSA|, or |EVP_PKEY_EC| values or if 1041*8fb009dcSAndroid Build Coastguard Worker // |key| is NULL, it returns zero. This function may not be used with other 1042*8fb009dcSAndroid Build Coastguard Worker // |EVP_PKEY_*| types. 1043*8fb009dcSAndroid Build Coastguard Worker // 1044*8fb009dcSAndroid Build Coastguard Worker // Use the |EVP_PKEY_assign_*| functions instead. 1045*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); 1046*8fb009dcSAndroid Build Coastguard Worker 1047*8fb009dcSAndroid Build Coastguard Worker // EVP_PKEY_type returns |nid|. 1048*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int EVP_PKEY_type(int nid); 1049*8fb009dcSAndroid Build Coastguard Worker 1050*8fb009dcSAndroid Build Coastguard Worker 1051*8fb009dcSAndroid Build Coastguard Worker // Preprocessor compatibility section (hidden). 1052*8fb009dcSAndroid Build Coastguard Worker // 1053*8fb009dcSAndroid Build Coastguard Worker // Historically, a number of APIs were implemented in OpenSSL as macros and 1054*8fb009dcSAndroid Build Coastguard Worker // constants to 'ctrl' functions. To avoid breaking #ifdefs in consumers, this 1055*8fb009dcSAndroid Build Coastguard Worker // section defines a number of legacy macros. 1056*8fb009dcSAndroid Build Coastguard Worker 1057*8fb009dcSAndroid Build Coastguard Worker // |BORINGSSL_PREFIX| already makes each of these symbols into macros, so there 1058*8fb009dcSAndroid Build Coastguard Worker // is no need to define conflicting macros. 1059*8fb009dcSAndroid Build Coastguard Worker #if !defined(BORINGSSL_PREFIX) 1060*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_CTX_set_rsa_oaep_md EVP_PKEY_CTX_set_rsa_oaep_md 1061*8fb009dcSAndroid Build Coastguard Worker #define EVP_PKEY_CTX_set0_rsa_oaep_label EVP_PKEY_CTX_set0_rsa_oaep_label 1062*8fb009dcSAndroid Build Coastguard Worker #endif 1063*8fb009dcSAndroid Build Coastguard Worker 1064*8fb009dcSAndroid Build Coastguard Worker 1065*8fb009dcSAndroid Build Coastguard Worker // Nodejs compatibility section (hidden). 1066*8fb009dcSAndroid Build Coastguard Worker // 1067*8fb009dcSAndroid Build Coastguard Worker // These defines exist for node.js, with the hope that we can eliminate the 1068*8fb009dcSAndroid Build Coastguard Worker // need for them over time. 1069*8fb009dcSAndroid Build Coastguard Worker 1070*8fb009dcSAndroid Build Coastguard Worker #define EVPerr(function, reason) \ 1071*8fb009dcSAndroid Build Coastguard Worker ERR_put_error(ERR_LIB_EVP, 0, reason, __FILE__, __LINE__) 1072*8fb009dcSAndroid Build Coastguard Worker 1073*8fb009dcSAndroid Build Coastguard Worker 1074*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) 1075*8fb009dcSAndroid Build Coastguard Worker } // extern C 1076*8fb009dcSAndroid Build Coastguard Worker 1077*8fb009dcSAndroid Build Coastguard Worker extern "C++" { 1078*8fb009dcSAndroid Build Coastguard Worker BSSL_NAMESPACE_BEGIN 1079*8fb009dcSAndroid Build Coastguard Worker 1080*8fb009dcSAndroid Build Coastguard Worker BORINGSSL_MAKE_DELETER(EVP_PKEY, EVP_PKEY_free) 1081*8fb009dcSAndroid Build Coastguard Worker BORINGSSL_MAKE_UP_REF(EVP_PKEY, EVP_PKEY_up_ref) 1082*8fb009dcSAndroid Build Coastguard Worker BORINGSSL_MAKE_DELETER(EVP_PKEY_CTX, EVP_PKEY_CTX_free) 1083*8fb009dcSAndroid Build Coastguard Worker 1084*8fb009dcSAndroid Build Coastguard Worker BSSL_NAMESPACE_END 1085*8fb009dcSAndroid Build Coastguard Worker 1086*8fb009dcSAndroid Build Coastguard Worker } // extern C++ 1087*8fb009dcSAndroid Build Coastguard Worker 1088*8fb009dcSAndroid Build Coastguard Worker #endif 1089*8fb009dcSAndroid Build Coastguard Worker 1090*8fb009dcSAndroid Build Coastguard Worker #endif // OPENSSL_HEADER_EVP_H 1091