xref: /aosp_15_r20/external/boringssl/src/include/openssl/evp.h (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
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