]> git.ipfire.org Git - thirdparty/openssl.git/blame - include/openssl/ssl.h
TLS 1.3 client sigalgs test no longer needs TLS 1.2
[thirdparty/openssl.git] / include / openssl / ssl.h
CommitLineData
21dcbebc
RS
1/*
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
8c74b5e5 3 *
21dcbebc
RS
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8c74b5e5 8 */
21dcbebc 9
ea262260
BM
10/* ====================================================================
11 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
0f113f3e 12 * ECC cipher suite support in OpenSSL originally developed by
ea262260
BM
13 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
14 */
ddac1974
NL
15/* ====================================================================
16 * Copyright 2005 Nokia. All rights reserved.
17 *
18 * The portions of the attached software ("Contribution") is developed by
19 * Nokia Corporation and is licensed pursuant to the OpenSSL open source
20 * license.
21 *
22 * The Contribution, originally written by Mika Kousa and Pasi Eronen of
23 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
24 * support (see RFC 4279) to OpenSSL.
25 *
26 * No patent licenses or other rights except those expressly stated in
27 * the OpenSSL open source license shall be deemed granted or received
28 * expressly, by implication, estoppel, or otherwise.
29 *
30 * No assurances are provided by Nokia that the Contribution does not
31 * infringe the patent or other intellectual property rights of any third
32 * party or that the license provides you with all the necessary rights
33 * to make use of the Contribution.
34 *
35 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
36 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
37 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
38 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
39 * OTHERWISE.
40 */
d02b48c6 41
0f113f3e
MC
42#ifndef HEADER_SSL_H
43# define HEADER_SSL_H
d02b48c6 44
0f113f3e 45# include <openssl/e_os2.h>
98186eb4 46# include <openssl/opensslconf.h>
9a555706 47# include <openssl/comp.h>
a00ae6c4 48# include <openssl/bio.h>
98186eb4 49# if OPENSSL_API_COMPAT < 0x10100000L
a00ae6c4 50# include <openssl/x509.h>
0f113f3e
MC
51# include <openssl/crypto.h>
52# include <openssl/lhash.h>
53# include <openssl/buffer.h>
54# endif
55# include <openssl/pem.h>
56# include <openssl/hmac.h>
ff75a257 57# include <openssl/async.h>
d095b68d 58
0f113f3e
MC
59# include <openssl/safestack.h>
60# include <openssl/symhacks.h>
3c27208f 61# include <openssl/ct.h>
52df25cf 62# include <openssl/sslerr.h>
82271cee 63
d02b48c6
RE
64#ifdef __cplusplus
65extern "C" {
66#endif
67
b0700d2c 68/* OpenSSL version number for ASN.1 encoding of the session information */
c80fd6b2
MC
69/*-
70 * Version 0 - initial version
d02b48c6
RE
71 * Version 1 - added the optional peer certificate
72 */
0f113f3e 73# define SSL_SESSION_ASN1_VERSION 0x0001
d02b48c6 74
0f113f3e
MC
75# define SSL_MAX_SSL_SESSION_ID_LENGTH 32
76# define SSL_MAX_SID_CTX_LENGTH 32
77
78# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8)
79# define SSL_MAX_KEY_ARG_LENGTH 8
1a3392c8
MC
80# define SSL_MAX_MASTER_KEY_LENGTH 48
81# define TLS13_MAX_RESUMPTION_MASTER_LENGTH 64
52b8dad8 82
d102d9df
MC
83/* The maximum number of encrypt/decrypt pipelines we can support */
84# define SSL_MAX_PIPELINES 32
85
55a9a16f
MC
86/* text strings for the ciphers */
87
d02b48c6 88/* These are used to specify which ciphers to use and not to use */
52b8dad8 89
0f113f3e
MC
90# define SSL_TXT_LOW "LOW"
91# define SSL_TXT_MEDIUM "MEDIUM"
92# define SSL_TXT_HIGH "HIGH"
93# define SSL_TXT_FIPS "FIPS"
94
0f113f3e
MC
95# define SSL_TXT_aNULL "aNULL"
96# define SSL_TXT_eNULL "eNULL"
97# define SSL_TXT_NULL "NULL"
98
99# define SSL_TXT_kRSA "kRSA"
100# define SSL_TXT_kDHr "kDHr"
101# define SSL_TXT_kDHd "kDHd"
102# define SSL_TXT_kDH "kDH"
103# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */
104# define SSL_TXT_kDHE "kDHE"
0f113f3e
MC
105# define SSL_TXT_kECDHr "kECDHr"
106# define SSL_TXT_kECDHe "kECDHe"
107# define SSL_TXT_kECDH "kECDH"
108# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */
109# define SSL_TXT_kECDHE "kECDHE"
110# define SSL_TXT_kPSK "kPSK"
0096d8f7
DSH
111# define SSL_TXT_kRSAPSK "kRSAPSK"
112# define SSL_TXT_kECDHEPSK "kECDHEPSK"
113# define SSL_TXT_kDHEPSK "kDHEPSK"
0f113f3e
MC
114# define SSL_TXT_kGOST "kGOST"
115# define SSL_TXT_kSRP "kSRP"
116
117# define SSL_TXT_aRSA "aRSA"
118# define SSL_TXT_aDSS "aDSS"
119# define SSL_TXT_aDH "aDH"
120# define SSL_TXT_aECDH "aECDH"
0f113f3e
MC
121# define SSL_TXT_aECDSA "aECDSA"
122# define SSL_TXT_aPSK "aPSK"
e44380a9
DB
123# define SSL_TXT_aGOST94 "aGOST94"
124# define SSL_TXT_aGOST01 "aGOST01"
125# define SSL_TXT_aGOST12 "aGOST12"
126# define SSL_TXT_aGOST "aGOST"
0f113f3e
MC
127# define SSL_TXT_aSRP "aSRP"
128
129# define SSL_TXT_DSS "DSS"
130# define SSL_TXT_DH "DH"
131# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */
132# define SSL_TXT_EDH "EDH"/* alias for DHE */
133# define SSL_TXT_ADH "ADH"
134# define SSL_TXT_RSA "RSA"
135# define SSL_TXT_ECDH "ECDH"
136# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */
137# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */
138# define SSL_TXT_AECDH "AECDH"
139# define SSL_TXT_ECDSA "ECDSA"
0f113f3e
MC
140# define SSL_TXT_PSK "PSK"
141# define SSL_TXT_SRP "SRP"
142
143# define SSL_TXT_DES "DES"
144# define SSL_TXT_3DES "3DES"
145# define SSL_TXT_RC4 "RC4"
146# define SSL_TXT_RC2 "RC2"
147# define SSL_TXT_IDEA "IDEA"
148# define SSL_TXT_SEED "SEED"
149# define SSL_TXT_AES128 "AES128"
150# define SSL_TXT_AES256 "AES256"
151# define SSL_TXT_AES "AES"
152# define SSL_TXT_AES_GCM "AESGCM"
e75c5a79 153# define SSL_TXT_AES_CCM "AESCCM"
3d3701ea 154# define SSL_TXT_AES_CCM_8 "AESCCM8"
0f113f3e
MC
155# define SSL_TXT_CAMELLIA128 "CAMELLIA128"
156# define SSL_TXT_CAMELLIA256 "CAMELLIA256"
157# define SSL_TXT_CAMELLIA "CAMELLIA"
a76ba82c 158# define SSL_TXT_CHACHA20 "CHACHA20"
e44380a9 159# define SSL_TXT_GOST "GOST89"
0f113f3e
MC
160
161# define SSL_TXT_MD5 "MD5"
162# define SSL_TXT_SHA1 "SHA1"
163# define SSL_TXT_SHA "SHA"/* same as "SHA1" */
164# define SSL_TXT_GOST94 "GOST94"
e44380a9
DB
165# define SSL_TXT_GOST89MAC "GOST89MAC"
166# define SSL_TXT_GOST12 "GOST12"
167# define SSL_TXT_GOST89MAC12 "GOST89MAC12"
0f113f3e
MC
168# define SSL_TXT_SHA256 "SHA256"
169# define SSL_TXT_SHA384 "SHA384"
170
171# define SSL_TXT_SSLV3 "SSLv3"
172# define SSL_TXT_TLSV1 "TLSv1"
173# define SSL_TXT_TLSV1_1 "TLSv1.1"
174# define SSL_TXT_TLSV1_2 "TLSv1.2"
175
0f113f3e 176# define SSL_TXT_ALL "ALL"
d02b48c6 177
1d97c843 178/*-
c6ccf055
LJ
179 * COMPLEMENTOF* definitions. These identifiers are used to (de-select)
180 * ciphers normally not being used.
181 * Example: "RC4" will activate all ciphers using RC4 including ciphers
182 * without authentication, which would normally disabled by DEFAULT (due
183 * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT"
184 * will make sure that it is also disabled in the specific selection.
185 * COMPLEMENTOF* identifiers are portable between version, as adjustments
186 * to the default cipher setup will also be included here.
187 *
188 * COMPLEMENTOFDEFAULT does not experience the same special treatment that
189 * DEFAULT gets, as only selection is being done and no sorting as needed
190 * for DEFAULT.
191 */
0f113f3e
MC
192# define SSL_TXT_CMPALL "COMPLEMENTOFALL"
193# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT"
194
195/*
196 * The following cipher list is used by default. It also is substituted when
197 * an application-defined cipher list string starts with 'DEFAULT'.
198 */
c84f7f4a 199# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL"
0f113f3e
MC
200/*
201 * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always
0a05123a 202 * starts with a reasonable order, and all we have to do for DEFAULT is
0f113f3e
MC
203 * throwing out anonymous and unencrypted ciphersuites! (The latter are not
204 * actually enabled by ALL, but "ALL:RSA" would enable some of them.)
0a05123a 205 */
d02b48c6 206
58964a49 207/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
0f113f3e
MC
208# define SSL_SENT_SHUTDOWN 1
209# define SSL_RECEIVED_SHUTDOWN 2
d02b48c6 210
82271cee
RL
211#ifdef __cplusplus
212}
213#endif
214
82271cee
RL
215#ifdef __cplusplus
216extern "C" {
217#endif
218
0f113f3e
MC
219# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1
220# define SSL_FILETYPE_PEM X509_FILETYPE_PEM
d02b48c6 221
0f113f3e
MC
222/*
223 * This is needed to stop compilers complaining about the 'struct ssl_st *'
224 * function parameters used to prototype callbacks in SSL_CTX.
225 */
d02b48c6 226typedef struct ssl_st *ssl_crock_st;
12bf56c0 227typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT;
08557cf2
DSH
228typedef struct ssl_method_st SSL_METHOD;
229typedef struct ssl_cipher_st SSL_CIPHER;
230typedef struct ssl_session_st SSL_SESSION;
e7f8ff43 231typedef struct tls_sigalgs_st TLS_SIGALGS;
3db935a9 232typedef struct ssl_conf_ctx_st SSL_CONF_CTX;
4b1fa408 233typedef struct ssl_comp_st SSL_COMP;
08557cf2 234
b32166b4
MC
235STACK_OF(SSL_CIPHER);
236STACK_OF(SSL_COMP);
08557cf2 237
333f926d 238/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/
0f113f3e
MC
239typedef struct srtp_protection_profile_st {
240 const char *name;
241 unsigned long id;
242} SRTP_PROTECTION_PROFILE;
333f926d 243
85885715 244DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE)
333f926d 245
0f113f3e
MC
246typedef int (*tls_session_ticket_ext_cb_fn) (SSL *s,
247 const unsigned char *data,
248 int len, void *arg);
249typedef int (*tls_session_secret_cb_fn) (SSL *s, void *secret,
250 int *secret_len,
251 STACK_OF(SSL_CIPHER) *peer_ciphers,
4a640fb6 252 const SSL_CIPHER **cipher, void *arg);
08557cf2 253
fe874d27
MC
254/* Extension context codes */
255/* This extension is only allowed in TLS */
256#define SSL_EXT_TLS_ONLY 0x0001
257/* This extension is only allowed in DTLS */
258#define SSL_EXT_DTLS_ONLY 0x0002
259/* Some extensions may be allowed in DTLS but we don't implement them for it */
260#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004
261/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */
262#define SSL_EXT_SSL3_ALLOWED 0x0008
43ae5eed 263/* Extension is only defined for TLS1.2 and below */
fe874d27
MC
264#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010
265/* Extension is only defined for TLS1.3 and above */
266#define SSL_EXT_TLS1_3_ONLY 0x0020
43ae5eed
MC
267/* Ignore this extension during parsing if we are resuming */
268#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040
269#define SSL_EXT_CLIENT_HELLO 0x0080
fe874d27 270/* Really means TLS1.2 or below */
43ae5eed
MC
271#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100
272#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200
273#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400
274#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800
275#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000
276#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000
277#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000
fe874d27 278
33f653ad 279/* Typedefs for handling custom extensions */
ecf4d660 280
0f113f3e
MC
281typedef int (*custom_ext_add_cb) (SSL *s, unsigned int ext_type,
282 const unsigned char **out,
283 size_t *outlen, int *al, void *add_arg);
33f653ad 284
0f113f3e
MC
285typedef void (*custom_ext_free_cb) (SSL *s, unsigned int ext_type,
286 const unsigned char *out, void *add_arg);
ecf4d660 287
0f113f3e
MC
288typedef int (*custom_ext_parse_cb) (SSL *s, unsigned int ext_type,
289 const unsigned char *in,
290 size_t inlen, int *al, void *parse_arg);
33f653ad 291
43ae5eed 292
cd17bb19
MC
293typedef int (*SSL_custom_ext_add_cb_ex) (SSL *s, unsigned int ext_type,
294 unsigned int context,
295 const unsigned char **out,
296 size_t *outlen, X509 *x,
297 size_t chainidx,
298 int *al, void *add_arg);
299
300typedef void (*SSL_custom_ext_free_cb_ex) (SSL *s, unsigned int ext_type,
301 unsigned int context,
302 const unsigned char *out,
303 void *add_arg);
304
305typedef int (*SSL_custom_ext_parse_cb_ex) (SSL *s, unsigned int ext_type,
306 unsigned int context,
307 const unsigned char *in,
308 size_t inlen, X509 *x,
309 size_t chainidx,
310 int *al, void *parse_arg);
43ae5eed 311
121677b4 312/* Typedef for verification callback */
3adc41dd 313typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx);
121677b4 314
ef51b4b9 315/* Allow initial connection to servers that don't support RI */
36e79832 316# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U
36e79832 317# define SSL_OP_TLSEXT_PADDING 0x00000010U
36e79832 318# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U
0f113f3e
MC
319
320/*
321 * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in
322 * OpenSSL 0.9.6d. Usually (depending on the application protocol) the
323 * workaround is not needed. Unfortunately some broken SSL/TLS
324 * implementations cannot handle it at all, which is why we include it in
80a2fc41 325 * SSL_OP_ALL. Added in 0.9.6e
0f113f3e 326 */
36e79832 327# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U
c21506ba 328
36d16f8e 329/* DTLS options */
80a2fc41 330# define SSL_OP_NO_QUERY_MTU 0x00001000U
36d16f8e 331/* Turn on Cookie Exchange (on relevant for servers) */
80a2fc41 332# define SSL_OP_COOKIE_EXCHANGE 0x00002000U
6434abbf 333/* Don't use RFC4507 ticket extension */
80a2fc41 334# define SSL_OP_NO_TICKET 0x00004000U
032924c4
DW
335# ifndef OPENSSL_NO_DTLS1_METHOD
336/* Use Cisco's "speshul" version of DTLS_BAD_VER
337 * (only with deprecated DTLSv1_client_method()) */
80a2fc41 338# define SSL_OP_CISCO_ANYCONNECT 0x00008000U
032924c4 339# endif
36d16f8e 340
c21506ba 341/* As server, disallow session resumption on renegotiation */
36e79832 342# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U
566dda07 343/* Don't use compression even if supported */
36e79832 344# define SSL_OP_NO_COMPRESSION 0x00020000U
22c21555 345/* Permit unsafe legacy renegotiation */
36e79832 346# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U
cde6145b
DW
347/* Disable encrypt-then-mac */
348# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U
0f113f3e
MC
349/*
350 * Set on servers to choose the cipher according to the server's preferences
351 */
36e79832 352# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U
0f113f3e
MC
353/*
354 * If set, a server will allow a client to issue a SSLv3.0 version number as
355 * latest version supported in the premaster secret, even when TLSv1.0
06da6e49 356 * (version 3.1) was announced in the client hello. Normally this is
0f113f3e
MC
357 * forbidden to prevent version rollback attacks.
358 */
36e79832 359# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U
c21506ba 360
36e79832
DSH
361# define SSL_OP_NO_SSLv3 0x02000000U
362# define SSL_OP_NO_TLSv1 0x04000000U
363# define SSL_OP_NO_TLSv1_2 0x08000000U
364# define SSL_OP_NO_TLSv1_1 0x10000000U
582a17d6 365# define SSL_OP_NO_TLSv1_3 0x20000000U
d02b48c6 366
36e79832
DSH
367# define SSL_OP_NO_DTLSv1 0x04000000U
368# define SSL_OP_NO_DTLSv1_2 0x08000000U
c6913eeb 369
0f113f3e 370# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\
582a17d6 371 SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3)
7946ab33
KR
372# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2)
373
db0f35dd
TS
374/* Disallow all renegotiation */
375# define SSL_OP_NO_RENEGOTIATION 0x40000000U
376
0f113f3e
MC
377/*
378 * Make server add server-hello extension from early version of cryptopro
379 * draft, when GOST ciphersuite is negotiated. Required for interoperability
380 * with CryptoPro CSP 3.x
381 */
36e79832 382# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U
0f113f3e 383
80a2fc41
TS
384/*
385 * SSL_OP_ALL: various bug workarounds that should be rather harmless.
386 * This used to be 0x000FFFFFL before 0.9.7.
387 * This used to be 0x80000BFFU before 1.1.1.
388 */
389# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\
390 SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\
391 SSL_OP_LEGACY_SERVER_CONNECT|\
392 SSL_OP_TLSEXT_PADDING|\
393 SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
394
395/* OBSOLETE OPTIONS: retained for compatibility */
396
397/* Removed from OpenSSL 1.1.0. Was 0x00000001L */
398/* Related to removed SSLv2. */
399# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0
400/* Removed from OpenSSL 1.1.0. Was 0x00000002L */
401/* Related to removed SSLv2. */
402# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0
403/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */
404/* Dead forever, see CVE-2010-4180 */
405# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0
406/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */
407/* Refers to ancient SSLREF and SSLv2. */
408# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0
409/* Removed from OpenSSL 1.1.0. Was 0x00000020 */
410# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0
411/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */
412# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0
413/* Removed from OpenSSL 1.1.0. Was 0x00000080 */
414/* Ancient SSLeay version. */
415# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0
416/* Removed from OpenSSL 1.1.0. Was 0x00000100L */
417# define SSL_OP_TLS_D5_BUG 0x0
418/* Removed from OpenSSL 1.1.0. Was 0x00000200L */
419# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0
420/* Removed from OpenSSL 1.1.0. Was 0x00080000L */
421# define SSL_OP_SINGLE_ECDH_USE 0x0
422/* Removed from OpenSSL 1.1.0. Was 0x00100000L */
423# define SSL_OP_SINGLE_DH_USE 0x0
424/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */
425# define SSL_OP_EPHEMERAL_RSA 0x0
426/* Removed from OpenSSL 1.1.0. Was 0x01000000L */
427# define SSL_OP_NO_SSLv2 0x0
428/* Removed from OpenSSL 1.0.1. Was 0x08000000L */
429# define SSL_OP_PKCS1_CHECK_1 0x0
430/* Removed from OpenSSL 1.0.1. Was 0x10000000L */
431# define SSL_OP_PKCS1_CHECK_2 0x0
bd91e3c8 432/* Removed from OpenSSL 1.1.0. Was 0x20000000L */
80a2fc41
TS
433# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0
434/* Removed from OpenSSL 1.1.0. Was 0x40000000L */
435# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0
436
0f113f3e
MC
437/*
438 * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success
439 * when just a single record has been written):
0e1dba93 440 */
36e79832 441# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U
0f113f3e
MC
442/*
443 * Make it possible to retry SSL_write() with changed buffer location (buffer
444 * contents must stay the same!); this is not the default to avoid the
445 * misconception that non-blocking SSL_write() behaves like non-blocking
446 * write():
447 */
36e79832 448# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U
0f113f3e
MC
449/*
450 * Never bother the application with retries if the transport is blocking:
451 */
36e79832 452# define SSL_MODE_AUTO_RETRY 0x00000004U
cf56663f 453/* Don't attempt to automatically build certificate chain */
36e79832 454# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U
0f113f3e
MC
455/*
456 * Save RAM by releasing read and write buffers when they're empty. (SSL3 and
457 * TLS only.) "Released" buffers are put onto a free-list in the context or
458 * just freed (depending on the context's setting for freelist_max_len).
459 */
36e79832 460# define SSL_MODE_RELEASE_BUFFERS 0x00000010U
0f113f3e
MC
461/*
462 * Send the current time in the Random fields of the ClientHello and
2016265d
NM
463 * ServerHello records for compatibility with hypothetical implementations
464 * that require it.
465 */
36e79832
DSH
466# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U
467# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U
0f113f3e
MC
468/*
469 * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications
470 * that reconnect with a downgraded protocol version; see
471 * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your
472 * application attempts a normal handshake. Only use this in explicit
473 * fallback retries, following the guidance in
474 * draft-ietf-tls-downgrade-scsv-00.
98f1ac7d 475 */
36e79832 476# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U
07bbc92c
MC
477/*
478 * Support Asynchronous operation
479 */
480# define SSL_MODE_ASYNC 0x00000100U
c21506ba 481
d61ff83b 482/* Cert related flags */
0f113f3e
MC
483/*
484 * Many implementations ignore some aspects of the TLS standards such as
ceab33e2 485 * enforcing certificate chain algorithms. When this is set we enforce them.
d61ff83b 486 */
36e79832 487# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U
2ea80354
DSH
488
489/* Suite B modes, takes same values as certificate verify flags */
0f113f3e 490# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000
2ea80354 491/* Suite B 192 bit only mode */
0f113f3e 492# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000
2ea80354 493/* Suite B 128 bit mode allowing 192 bit algorithms */
0f113f3e 494# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000
2ea80354 495
ed83ba53 496/* Perform all sorts of protocol violations for testing purposes */
0f113f3e 497# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000
d61ff83b 498
74ecfab4
DSH
499/* Flags for building certificate chains */
500/* Treat any existing certificates as untrusted CAs */
0f113f3e 501# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1
024e6fed 502/* Don't include root CA in chain */
0f113f3e 503# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2
13dc3ce9 504/* Just check certificates already there */
0f113f3e 505# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4
13dc3ce9 506/* Ignore verification errors */
0f113f3e 507# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8
e970f63d 508/* Clear verification errors from queue */
0f113f3e 509# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10
74ecfab4 510
6dbb6219
DSH
511/* Flags returned by SSL_check_chain */
512/* Certificate can be used with this session */
0f113f3e 513# define CERT_PKEY_VALID 0x1
6dbb6219 514/* Certificate can also be used for signing */
0f113f3e 515# define CERT_PKEY_SIGN 0x2
6dbb6219 516/* EE certificate signing algorithm OK */
0f113f3e 517# define CERT_PKEY_EE_SIGNATURE 0x10
6dbb6219 518/* CA signature algorithms OK */
0f113f3e 519# define CERT_PKEY_CA_SIGNATURE 0x20
6dbb6219 520/* EE certificate parameters OK */
0f113f3e 521# define CERT_PKEY_EE_PARAM 0x40
6dbb6219 522/* CA certificate parameters OK */
0f113f3e 523# define CERT_PKEY_CA_PARAM 0x80
6dbb6219 524/* Signing explicitly allowed as opposed to SHA1 fallback */
0f113f3e 525# define CERT_PKEY_EXPLICIT_SIGN 0x100
6dbb6219 526/* Client CA issuer names match (always set for server cert) */
0f113f3e 527# define CERT_PKEY_ISSUER_NAME 0x200
6dbb6219 528/* Cert type matches client types (always set for server cert) */
0f113f3e 529# define CERT_PKEY_CERT_TYPE 0x400
2ea80354 530/* Cert chain suitable to Suite B */
0f113f3e
MC
531# define CERT_PKEY_SUITEB 0x800
532
533# define SSL_CONF_FLAG_CMDLINE 0x1
534# define SSL_CONF_FLAG_FILE 0x2
535# define SSL_CONF_FLAG_CLIENT 0x4
536# define SSL_CONF_FLAG_SERVER 0x8
537# define SSL_CONF_FLAG_SHOW_ERRORS 0x10
538# define SSL_CONF_FLAG_CERTIFICATE 0x20
2011b169 539# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40
ec2f7e56 540/* Configuration value types */
0f113f3e
MC
541# define SSL_CONF_TYPE_UNKNOWN 0x0
542# define SSL_CONF_TYPE_STRING 0x1
543# define SSL_CONF_TYPE_FILE 0x2
544# define SSL_CONF_TYPE_DIR 0x3
656b2605 545# define SSL_CONF_TYPE_NONE 0x4
0f113f3e
MC
546
547/*
548 * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they
549 * cannot be used to clear bits.
550 */
551
8106cb8b
VD
552unsigned long SSL_CTX_get_options(const SSL_CTX *ctx);
553unsigned long SSL_get_options(const SSL* s);
554unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op);
555unsigned long SSL_clear_options(SSL *s, unsigned long op);
556unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op);
557unsigned long SSL_set_options(SSL *s, unsigned long op);
58964a49 558
0f113f3e
MC
559# define SSL_CTX_set_mode(ctx,op) \
560 SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
561# define SSL_CTX_clear_mode(ctx,op) \
562 SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL)
563# define SSL_CTX_get_mode(ctx) \
564 SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)
565# define SSL_clear_mode(ssl,op) \
566 SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL)
567# define SSL_set_mode(ssl,op) \
568 SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)
569# define SSL_get_mode(ssl) \
a661b653 570 SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)
0f113f3e 571# define SSL_set_mtu(ssl, mtu) \
36d16f8e 572 SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)
0f113f3e 573# define DTLS_set_link_mtu(ssl, mtu) \
59669b6a 574 SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL)
0f113f3e 575# define DTLS_get_link_min_mtu(ssl) \
59669b6a 576 SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL)
a661b653 577
0f113f3e
MC
578# define SSL_get_secure_renegotiation_support(ssl) \
579 SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL)
a661b653 580
b612799a
RL
581# ifndef OPENSSL_NO_HEARTBEATS
582# define SSL_heartbeat(ssl) \
583 SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL)
584# endif
585
0f113f3e
MC
586# define SSL_CTX_set_cert_flags(ctx,op) \
587 SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL)
588# define SSL_set_cert_flags(s,op) \
589 SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL)
590# define SSL_CTX_clear_cert_flags(ctx,op) \
591 SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
592# define SSL_clear_cert_flags(s,op) \
593 SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
594
595void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
596 void (*cb) (int write_p, int version,
597 int content_type, const void *buf,
598 size_t len, SSL *ssl, void *arg));
599void SSL_set_msg_callback(SSL *ssl,
600 void (*cb) (int write_p, int version,
601 int content_type, const void *buf,
602 size_t len, SSL *ssl, void *arg));
603# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
604# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
605
c5364614
DSH
606# define SSL_get_extms_support(s) \
607 SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL)
608
0f113f3e
MC
609# ifndef OPENSSL_NO_SRP
610
edc032b5 611/* see tls_srp.c */
4bcdb4a6
MC
612__owur int SSL_SRP_CTX_init(SSL *s);
613__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx);
edc032b5
BL
614int SSL_SRP_CTX_free(SSL *ctx);
615int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx);
4bcdb4a6 616__owur int SSL_srp_server_param_with_username(SSL *s, int *ad);
4bcdb4a6 617__owur int SRP_Calc_A_param(SSL *s);
edc032b5 618
0f113f3e 619# endif
d02b48c6 620
a7e7bad1
DSH
621/* 100k max cert list */
622# define SSL_MAX_CERT_LIST_DEFAULT 1024*100
c0f5dd07 623
0f113f3e
MC
624# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20)
625
626/*
627 * This callback type is used inside SSL_CTX, SSL, and in the functions that
628 * set them. It is used to override the generation of SSL/TLS session IDs in
629 * a server. Return value should be zero on an error, non-zero to proceed.
630 * Also, callbacks should themselves check if the id they generate is unique
631 * otherwise the SSL handshake will fail with an error - callbacks can do
632 * this using the 'ssl' value they're passed by;
633 * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in
634 * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32
635 * bytes. The callback can alter this length to be less if desired. It is
636 * also an error for the callback to set the size to zero.
637 */
638typedef int (*GEN_SESSION_CB) (const SSL *ssl, unsigned char *id,
639 unsigned int *id_len);
dc644fe2 640
0f113f3e
MC
641# define SSL_SESS_CACHE_OFF 0x0000
642# define SSL_SESS_CACHE_CLIENT 0x0001
643# define SSL_SESS_CACHE_SERVER 0x0002
644# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)
645# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080
e0db2eed 646/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */
0f113f3e
MC
647# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100
648# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200
649# define SSL_SESS_CACHE_NO_INTERNAL \
650 (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)
d02b48c6 651
3c1d6bbc 652LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx);
0f113f3e
MC
653# define SSL_CTX_sess_number(ctx) \
654 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)
655# define SSL_CTX_sess_connect(ctx) \
656 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)
657# define SSL_CTX_sess_connect_good(ctx) \
658 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)
659# define SSL_CTX_sess_connect_renegotiate(ctx) \
660 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)
661# define SSL_CTX_sess_accept(ctx) \
662 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)
663# define SSL_CTX_sess_accept_renegotiate(ctx) \
664 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)
665# define SSL_CTX_sess_accept_good(ctx) \
666 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)
667# define SSL_CTX_sess_hits(ctx) \
668 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)
669# define SSL_CTX_sess_cb_hits(ctx) \
670 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)
671# define SSL_CTX_sess_misses(ctx) \
672 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)
673# define SSL_CTX_sess_timeouts(ctx) \
674 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)
675# define SSL_CTX_sess_cache_full(ctx) \
676 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)
677
678void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,
679 int (*new_session_cb) (struct ssl_st *ssl,
680 SSL_SESSION *sess));
681int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,
682 SSL_SESSION *sess);
683void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
684 void (*remove_session_cb) (struct ssl_ctx_st
685 *ctx,
686 SSL_SESSION
687 *sess));
688void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx,
689 SSL_SESSION *sess);
690void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
691 SSL_SESSION *(*get_session_cb) (struct ssl_st
692 *ssl,
b6981744 693 const unsigned char
0f113f3e
MC
694 *data, int len,
695 int *copy));
696SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,
b6981744 697 const unsigned char *data,
0f113f3e
MC
698 int len, int *copy);
699void SSL_CTX_set_info_callback(SSL_CTX *ctx,
700 void (*cb) (const SSL *ssl, int type,
701 int val));
702void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type,
703 int val);
704void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,
705 int (*client_cert_cb) (SSL *ssl, X509 **x509,
706 EVP_PKEY **pkey));
707int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509,
708 EVP_PKEY **pkey);
709# ifndef OPENSSL_NO_ENGINE
4bcdb4a6 710__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e);
0f113f3e
MC
711# endif
712void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,
713 int (*app_gen_cookie_cb) (SSL *ssl,
714 unsigned char
715 *cookie,
716 unsigned int
717 *cookie_len));
718void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,
719 int (*app_verify_cookie_cb) (SSL *ssl,
31011544 720 const unsigned char
0f113f3e
MC
721 *cookie,
722 unsigned int
723 cookie_len));
724# ifndef OPENSSL_NO_NEXTPROTONEG
8cbfcc70
RS
725
726typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl,
727 const unsigned char **out,
728 unsigned int *outlen,
729 void *arg);
ee2ffc27 730void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s,
8cbfcc70
RS
731 SSL_CTX_npn_advertised_cb_func cb,
732 void *arg);
733# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb
734
735typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s,
736 unsigned char **out,
737 unsigned char *outlen,
738 const unsigned char *in,
739 unsigned int inlen,
740 void *arg);
ee2ffc27 741void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s,
8cbfcc70 742 SSL_CTX_npn_select_cb_func cb,
aff8c126 743 void *arg);
8cbfcc70
RS
744# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb
745
2911575c 746void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
0f113f3e 747 unsigned *len);
8cbfcc70 748# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated
0f113f3e 749# endif
ee2ffc27 750
4bcdb4a6 751__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
0f113f3e
MC
752 const unsigned char *in, unsigned int inlen,
753 const unsigned char *client,
754 unsigned int client_len);
ee2ffc27 755
0f113f3e
MC
756# define OPENSSL_NPN_UNSUPPORTED 0
757# define OPENSSL_NPN_NEGOTIATED 1
758# define OPENSSL_NPN_NO_OVERLAP 2
759
4bcdb4a6 760__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
817cd0d5 761 unsigned int protos_len);
4bcdb4a6 762__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
817cd0d5 763 unsigned int protos_len);
8cbfcc70 764typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl,
0f113f3e
MC
765 const unsigned char **out,
766 unsigned char *outlen,
767 const unsigned char *in,
768 unsigned int inlen,
8cbfcc70
RS
769 void *arg);
770void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
771 SSL_CTX_alpn_select_cb_func cb,
772 void *arg);
6f017a8f 773void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
817cd0d5 774 unsigned int *len);
0f113f3e
MC
775
776# ifndef OPENSSL_NO_PSK
777/*
778 * the maximum length of the buffer given to callbacks containing the
779 * resulting identity/psk
780 */
781# define PSK_MAX_IDENTITY_LEN 128
782# define PSK_MAX_PSK_LEN 256
8cbfcc70
RS
783typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl,
784 const char *hint,
785 char *identity,
786 unsigned int max_identity_len,
787 unsigned char *psk,
788 unsigned int max_psk_len);
789void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb);
790void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb);
791
792typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl,
793 const char *identity,
794 unsigned char *psk,
795 unsigned int max_psk_len);
796void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb);
797void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb);
798
4bcdb4a6
MC
799__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint);
800__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint);
ddac1974
NL
801const char *SSL_get_psk_identity_hint(const SSL *s);
802const char *SSL_get_psk_identity(const SSL *s);
0f113f3e 803# endif
ddac1974 804
33f653ad
DSH
805/* Register callbacks to handle custom TLS Extensions for client or server. */
806
ed29e82a
RP
807__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx,
808 unsigned int ext_type);
809
4bcdb4a6 810__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
0f113f3e
MC
811 custom_ext_add_cb add_cb,
812 custom_ext_free_cb free_cb,
813 void *add_arg,
814 custom_ext_parse_cb parse_cb,
815 void *parse_arg);
a398f821 816
4bcdb4a6 817__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
0f113f3e
MC
818 custom_ext_add_cb add_cb,
819 custom_ext_free_cb free_cb,
820 void *add_arg,
821 custom_ext_parse_cb parse_cb,
822 void *parse_arg);
c846a5f5 823
43ae5eed
MC
824__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
825 unsigned int context,
cd17bb19
MC
826 SSL_custom_ext_add_cb_ex add_cb,
827 SSL_custom_ext_free_cb_ex free_cb,
43ae5eed 828 void *add_arg,
cd17bb19 829 SSL_custom_ext_parse_cb_ex parse_cb,
43ae5eed
MC
830 void *parse_arg);
831
4bcdb4a6 832__owur int SSL_extension_supported(unsigned int ext_type);
c846a5f5 833
07bbc92c
MC
834# define SSL_NOTHING 1
835# define SSL_WRITING 2
836# define SSL_READING 3
837# define SSL_X509_LOOKUP 4
838# define SSL_ASYNC_PAUSED 5
fc7f190c 839# define SSL_ASYNC_NO_JOBS 6
6b1bb98f 840# define SSL_EARLY_WORK 7
d02b48c6
RE
841
842/* These will only be used when doing non-blocking IO */
0f113f3e
MC
843# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING)
844# define SSL_want_read(s) (SSL_want(s) == SSL_READING)
845# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING)
846# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP)
07bbc92c 847# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED)
fc7f190c 848# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS)
6b1bb98f 849# define SSL_want_early(s) (SSL_want(s) == SSL_EARLY_WORK)
d02b48c6 850
0f113f3e
MC
851# define SSL_MAC_FLAG_READ_MAC_STREAM 1
852# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2
08557cf2 853
2faa1b48
CB
854/*
855 * A callback for logging out TLS key material. This callback should log out
856 * |line| followed by a newline.
857 */
858typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line);
859
860/*
861 * SSL_CTX_set_keylog_callback configures a callback to log key material. This
862 * is intended for debugging use with tools like Wireshark. The cb function
863 * should log line followed by a newline.
864 */
865void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb);
866
867/*
868 * SSL_CTX_get_keylog_callback returns the callback configured by
869 * SSL_CTX_set_keylog_callback.
870 */
871SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx);
872
3fc8d856 873int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data);
46dcb945 874uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx);
3fc8d856 875int SSL_set_max_early_data(SSL *s, uint32_t max_early_data);
a8e75d56 876uint32_t SSL_get_max_early_data(const SSL *s);
3fc8d856 877
82271cee
RL
878#ifdef __cplusplus
879}
880#endif
881
0f113f3e
MC
882# include <openssl/ssl2.h>
883# include <openssl/ssl3.h>
884# include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */
885# include <openssl/dtls1.h> /* Datagram TLS */
0f113f3e 886# include <openssl/srtp.h> /* Support for the use_srtp extension */
d02b48c6 887
82271cee
RL
888#ifdef __cplusplus
889extern "C" {
890#endif
891
b32166b4
MC
892/*
893 * These need to be after the above set of includes due to a compiler bug
894 * in VisualStudio 2015
895 */
896DEFINE_STACK_OF_CONST(SSL_CIPHER)
897DEFINE_STACK_OF(SSL_COMP)
898
657e60fa 899/* compatibility */
37659ea4 900# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg)))
0f113f3e 901# define SSL_get_app_data(s) (SSL_get_ex_data(s,0))
37659ea4
BE
902# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \
903 (char *)(a)))
0f113f3e
MC
904# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0))
905# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0))
37659ea4
BE
906# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \
907 (char *)(arg)))
47153c72 908DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug))
0f113f3e 909
44c04a2e 910/* TLSv1.3 KeyUpdate message types */
4fbfe86a
MC
911/* -1 used so that this is an invalid value for the on-the-wire protocol */
912#define SSL_KEY_UPDATE_NONE -1
913/* Values as defined for the on-the-wire protocol */
914#define SSL_KEY_UPDATE_NOT_REQUESTED 0
915#define SSL_KEY_UPDATE_REQUESTED 1
49ae7423
MC
916
917/*
918 * The valid handshake states (one for each type message sent and one for each
919 * type of message received). There are also two "special" states:
920 * TLS = TLS or DTLS state
921 * DTLS = DTLS specific state
922 * CR/SR = Client Read/Server Read
923 * CW/SW = Client Write/Server Write
924 *
925 * The "special" states are:
926 * TLS_ST_BEFORE = No handshake has been initiated yet
927 * TLS_ST_OK = A handshake has been successfully completed
928 */
35bf6e05 929typedef enum {
49ae7423
MC
930 TLS_ST_BEFORE,
931 TLS_ST_OK,
932 DTLS_ST_CR_HELLO_VERIFY_REQUEST,
933 TLS_ST_CR_SRVR_HELLO,
934 TLS_ST_CR_CERT,
935 TLS_ST_CR_CERT_STATUS,
936 TLS_ST_CR_KEY_EXCH,
937 TLS_ST_CR_CERT_REQ,
938 TLS_ST_CR_SRVR_DONE,
939 TLS_ST_CR_SESSION_TICKET,
940 TLS_ST_CR_CHANGE,
941 TLS_ST_CR_FINISHED,
942 TLS_ST_CW_CLNT_HELLO,
943 TLS_ST_CW_CERT,
944 TLS_ST_CW_KEY_EXCH,
945 TLS_ST_CW_CERT_VRFY,
946 TLS_ST_CW_CHANGE,
947 TLS_ST_CW_NEXT_PROTO,
948 TLS_ST_CW_FINISHED,
949 TLS_ST_SW_HELLO_REQ,
950 TLS_ST_SR_CLNT_HELLO,
951 DTLS_ST_SW_HELLO_VERIFY_REQUEST,
952 TLS_ST_SW_SRVR_HELLO,
953 TLS_ST_SW_CERT,
954 TLS_ST_SW_KEY_EXCH,
955 TLS_ST_SW_CERT_REQ,
956 TLS_ST_SW_SRVR_DONE,
957 TLS_ST_SR_CERT,
958 TLS_ST_SR_KEY_EXCH,
959 TLS_ST_SR_CERT_VRFY,
960 TLS_ST_SR_NEXT_PROTO,
961 TLS_ST_SR_CHANGE,
962 TLS_ST_SR_FINISHED,
963 TLS_ST_SW_SESSION_TICKET,
964 TLS_ST_SW_CERT_STATUS,
965 TLS_ST_SW_CHANGE,
e46f2334
MC
966 TLS_ST_SW_FINISHED,
967 TLS_ST_SW_ENCRYPTED_EXTENSIONS,
2c5dfdc3
MC
968 TLS_ST_CR_ENCRYPTED_EXTENSIONS,
969 TLS_ST_CR_CERT_VRFY,
c7f47786 970 TLS_ST_SW_CERT_VRFY,
7d061fce 971 TLS_ST_CR_HELLO_REQ,
3847d426 972 TLS_ST_SW_HELLO_RETRY_REQUEST,
44c04a2e
MC
973 TLS_ST_CR_HELLO_RETRY_REQUEST,
974 TLS_ST_SW_KEY_UPDATE,
e1c3de44
MC
975 TLS_ST_CW_KEY_UPDATE,
976 TLS_ST_SR_KEY_UPDATE,
4004ce5f 977 TLS_ST_CR_KEY_UPDATE,
d7f8783f 978 TLS_ST_EARLY_DATA,
ef6c191b
MC
979 TLS_ST_PENDING_EARLY_DATA_END,
980 TLS_ST_CW_END_OF_EARLY_DATA,
981 TLS_ST_SR_END_OF_EARLY_DATA
35bf6e05 982} OSSL_HANDSHAKE_STATE;
49ae7423 983
0f113f3e 984/*
c64359db
MC
985 * Most of the following state values are no longer used and are defined to be
986 * the closest equivalent value in the current state machine code. Not all
987 * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT
988 * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP,
989 * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT.
0f113f3e
MC
990 */
991
992# define SSL_ST_CONNECT 0x1000
993# define SSL_ST_ACCEPT 0x2000
c64359db 994
0f113f3e 995# define SSL_ST_MASK 0x0FFF
0f113f3e
MC
996
997# define SSL_CB_LOOP 0x01
998# define SSL_CB_EXIT 0x02
999# define SSL_CB_READ 0x04
1000# define SSL_CB_WRITE 0x08
1001# define SSL_CB_ALERT 0x4000/* used in callback */
1002# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ)
1003# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE)
1004# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP)
1005# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT)
1006# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP)
1007# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT)
1008# define SSL_CB_HANDSHAKE_START 0x10
1009# define SSL_CB_HANDSHAKE_DONE 0x20
d02b48c6
RE
1010
1011/* Is the SSL_connection established? */
7c8b5357
MC
1012# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a))
1013# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a))
49ae7423
MC
1014int SSL_in_init(SSL *s);
1015int SSL_in_before(SSL *s);
1016int SSL_is_init_finished(SSL *s);
0f113f3e
MC
1017
1018/*
295c3f41
MC
1019 * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you
1020 * should not need these
0f113f3e
MC
1021 */
1022# define SSL_ST_READ_HEADER 0xF0
1023# define SSL_ST_READ_BODY 0xF1
1024# define SSL_ST_READ_DONE 0xF2
d02b48c6 1025
c80fd6b2
MC
1026/*-
1027 * Obtain latest Finished message
ca03109c
BM
1028 * -- that we sent (SSL_get_finished)
1029 * -- that we expected from peer (SSL_get_peer_finished).
c80fd6b2
MC
1030 * Returns length (0 == no Finished so far), copies up to 'count' bytes.
1031 */
0821bcd4
BL
1032size_t SSL_get_finished(const SSL *s, void *buf, size_t count);
1033size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);
ca03109c 1034
0f113f3e
MC
1035/*
1036 * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are
1037 * 'ored' with SSL_VERIFY_PEER if they are desired
1038 */
1039# define SSL_VERIFY_NONE 0x00
1040# define SSL_VERIFY_PEER 0x01
1041# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02
1042# define SSL_VERIFY_CLIENT_ONCE 0x04
d02b48c6 1043
0f113f3e 1044# define OpenSSL_add_ssl_algorithms() SSL_library_init()
92862382
VD
1045# if OPENSSL_API_COMPAT < 0x10100000L
1046# define SSLeay_add_ssl_algorithms() SSL_library_init()
1047# endif
413c4f45 1048
657e60fa 1049/* More backward compatibility */
0f113f3e
MC
1050# define SSL_get_cipher(s) \
1051 SSL_CIPHER_get_name(SSL_get_current_cipher(s))
1052# define SSL_get_cipher_bits(s,np) \
1053 SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
1054# define SSL_get_cipher_version(s) \
1055 SSL_CIPHER_get_version(SSL_get_current_cipher(s))
1056# define SSL_get_cipher_name(s) \
1057 SSL_CIPHER_get_name(SSL_get_current_cipher(s))
1058# define SSL_get_time(a) SSL_SESSION_get_time(a)
1059# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b))
1060# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a)
1061# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b))
1062
1063# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
1064# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)
3c07d3a3
DSH
1065
1066DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
0f113f3e
MC
1067# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value
1068 * from SSL_AD_... */
58964a49 1069/* These alert types are for SSLv3 and TLSv1 */
0f113f3e 1070# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY
68d39f3c 1071/* fatal */
0f113f3e 1072# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE
68d39f3c 1073/* fatal */
0f113f3e
MC
1074# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC
1075# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED
1076# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW
68d39f3c 1077/* fatal */
0f113f3e 1078# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE
68d39f3c 1079/* fatal */
0f113f3e 1080# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE
68d39f3c 1081/* Not for TLS */
0f113f3e
MC
1082# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE
1083# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE
1084# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE
1085# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED
1086# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED
1087# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN
68d39f3c 1088/* fatal */
0f113f3e 1089# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER
68d39f3c 1090/* fatal */
0f113f3e 1091# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA
68d39f3c 1092/* fatal */
0f113f3e 1093# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED
68d39f3c 1094/* fatal */
0f113f3e
MC
1095# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR
1096# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR
68d39f3c 1097/* fatal */
0f113f3e 1098# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION
68d39f3c 1099/* fatal */
0f113f3e 1100# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION
68d39f3c 1101/* fatal */
0f113f3e 1102# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY
68d39f3c 1103/* fatal */
0f113f3e
MC
1104# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR
1105# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED
1106# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION
04904312 1107# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION
42c28b63 1108# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED
0f113f3e
MC
1109# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION
1110# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE
1111# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME
1112# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE
1113# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE
68d39f3c 1114/* fatal */
0f113f3e 1115# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY
68d39f3c 1116/* fatal */
0f113f3e 1117# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK
06217867 1118# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL
0f113f3e
MC
1119# define SSL_ERROR_NONE 0
1120# define SSL_ERROR_SSL 1
1121# define SSL_ERROR_WANT_READ 2
1122# define SSL_ERROR_WANT_WRITE 3
1123# define SSL_ERROR_WANT_X509_LOOKUP 4
1124# define SSL_ERROR_SYSCALL 5/* look at error stack/return
1125 * value/errno */
1126# define SSL_ERROR_ZERO_RETURN 6
1127# define SSL_ERROR_WANT_CONNECT 7
1128# define SSL_ERROR_WANT_ACCEPT 8
07bbc92c 1129# define SSL_ERROR_WANT_ASYNC 9
fc7f190c 1130# define SSL_ERROR_WANT_ASYNC_JOB 10
6b1bb98f 1131# define SSL_ERROR_WANT_EARLY 11
0f113f3e
MC
1132# define SSL_CTRL_SET_TMP_DH 3
1133# define SSL_CTRL_SET_TMP_ECDH 4
0f113f3e 1134# define SSL_CTRL_SET_TMP_DH_CB 6
0f113f3e
MC
1135# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9
1136# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10
1137# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11
1138# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12
1139# define SSL_CTRL_GET_FLAGS 13
1140# define SSL_CTRL_EXTRA_CHAIN_CERT 14
1141# define SSL_CTRL_SET_MSG_CALLBACK 15
1142# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16
36d16f8e 1143/* only applies to datagram connections */
0f113f3e 1144# define SSL_CTRL_SET_MTU 17
413c4f45 1145/* Stats */
0f113f3e
MC
1146# define SSL_CTRL_SESS_NUMBER 20
1147# define SSL_CTRL_SESS_CONNECT 21
1148# define SSL_CTRL_SESS_CONNECT_GOOD 22
1149# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23
1150# define SSL_CTRL_SESS_ACCEPT 24
1151# define SSL_CTRL_SESS_ACCEPT_GOOD 25
1152# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26
1153# define SSL_CTRL_SESS_HIT 27
1154# define SSL_CTRL_SESS_CB_HIT 28
1155# define SSL_CTRL_SESS_MISSES 29
1156# define SSL_CTRL_SESS_TIMEOUTS 30
1157# define SSL_CTRL_SESS_CACHE_FULL 31
0f113f3e
MC
1158# define SSL_CTRL_MODE 33
1159# define SSL_CTRL_GET_READ_AHEAD 40
1160# define SSL_CTRL_SET_READ_AHEAD 41
1161# define SSL_CTRL_SET_SESS_CACHE_SIZE 42
1162# define SSL_CTRL_GET_SESS_CACHE_SIZE 43
1163# define SSL_CTRL_SET_SESS_CACHE_MODE 44
1164# define SSL_CTRL_GET_SESS_CACHE_MODE 45
1165# define SSL_CTRL_GET_MAX_CERT_LIST 50
1166# define SSL_CTRL_SET_MAX_CERT_LIST 51
1167# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52
a13c20f6 1168/* see tls1.h for macros based on these */
e481f9b9
MC
1169# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53
1170# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54
1171# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55
1172# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56
1173# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57
1174# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58
1175# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59
1176/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */
1177/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */
1178/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */
1179# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63
1180# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64
1181# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65
1182# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66
1183# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67
1184# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68
1185# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69
1186# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70
1187# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71
1188# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72
1189# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75
1190# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76
1191# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77
1192# define SSL_CTRL_SET_SRP_ARG 78
1193# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79
1194# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80
1195# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81
b612799a
RL
1196# ifndef OPENSSL_NO_HEARTBEATS
1197# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85
1198# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86
1199# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87
1200# endif
0f113f3e
MC
1201# define DTLS_CTRL_GET_TIMEOUT 73
1202# define DTLS_CTRL_HANDLE_TIMEOUT 74
0f113f3e 1203# define SSL_CTRL_GET_RI_SUPPORT 76
0f113f3e
MC
1204# define SSL_CTRL_CLEAR_MODE 78
1205# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79
1206# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82
1207# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83
1208# define SSL_CTRL_CHAIN 88
1209# define SSL_CTRL_CHAIN_CERT 89
de4d764e
MC
1210# define SSL_CTRL_GET_GROUPS 90
1211# define SSL_CTRL_SET_GROUPS 91
1212# define SSL_CTRL_SET_GROUPS_LIST 92
1213# define SSL_CTRL_GET_SHARED_GROUP 93
0f113f3e
MC
1214# define SSL_CTRL_SET_SIGALGS 97
1215# define SSL_CTRL_SET_SIGALGS_LIST 98
1216# define SSL_CTRL_CERT_FLAGS 99
1217# define SSL_CTRL_CLEAR_CERT_FLAGS 100
1218# define SSL_CTRL_SET_CLIENT_SIGALGS 101
1219# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102
1220# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103
1221# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104
1222# define SSL_CTRL_BUILD_CERT_CHAIN 105
1223# define SSL_CTRL_SET_VERIFY_CERT_STORE 106
1224# define SSL_CTRL_SET_CHAIN_CERT_STORE 107
1225# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108
1226# define SSL_CTRL_GET_SERVER_TMP_KEY 109
1227# define SSL_CTRL_GET_RAW_CIPHERLIST 110
1228# define SSL_CTRL_GET_EC_POINT_FORMATS 111
1229# define SSL_CTRL_GET_CHAIN_CERTS 115
1230# define SSL_CTRL_SELECT_CURRENT_CERT 116
1231# define SSL_CTRL_SET_CURRENT_CERT 117
1232# define SSL_CTRL_SET_DH_AUTO 118
0f113f3e
MC
1233# define DTLS_CTRL_SET_LINK_MTU 120
1234# define DTLS_CTRL_GET_LINK_MIN_MTU 121
c5364614 1235# define SSL_CTRL_GET_EXTMS_SUPPORT 122
7946ab33
KR
1236# define SSL_CTRL_SET_MIN_PROTO_VERSION 123
1237# define SSL_CTRL_SET_MAX_PROTO_VERSION 124
d102d9df
MC
1238# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125
1239# define SSL_CTRL_SET_MAX_PIPELINES 126
4300aaf3 1240# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127
fddfc0af
RG
1241# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128
1242# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129
0f113f3e
MC
1243# define SSL_CERT_SET_FIRST 1
1244# define SSL_CERT_SET_NEXT 2
1245# define SSL_CERT_SET_SERVER 3
1246# define DTLSv1_get_timeout(ssl, arg) \
37659ea4 1247 SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg))
0f113f3e
MC
1248# define DTLSv1_handle_timeout(ssl) \
1249 SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL)
0f113f3e
MC
1250# define SSL_num_renegotiations(ssl) \
1251 SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)
1252# define SSL_clear_num_renegotiations(ssl) \
1253 SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)
1254# define SSL_total_renegotiations(ssl) \
1255 SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)
0f113f3e 1256# define SSL_CTX_set_tmp_dh(ctx,dh) \
37659ea4 1257 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh))
0f113f3e 1258# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
37659ea4 1259 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh))
0f113f3e
MC
1260# define SSL_CTX_set_dh_auto(ctx, onoff) \
1261 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL)
1262# define SSL_set_dh_auto(s, onoff) \
1263 SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL)
0f113f3e 1264# define SSL_set_tmp_dh(ssl,dh) \
37659ea4 1265 SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh))
0f113f3e 1266# define SSL_set_tmp_ecdh(ssl,ecdh) \
37659ea4 1267 SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh))
0f113f3e 1268# define SSL_CTX_add_extra_chain_cert(ctx,x509) \
37659ea4 1269 SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509))
0f113f3e
MC
1270# define SSL_CTX_get_extra_chain_certs(ctx,px509) \
1271 SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509)
1272# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \
1273 SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509)
1274# define SSL_CTX_clear_extra_chain_certs(ctx) \
1275 SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL)
1276# define SSL_CTX_set0_chain(ctx,sk) \
37659ea4 1277 SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk))
0f113f3e 1278# define SSL_CTX_set1_chain(ctx,sk) \
37659ea4 1279 SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk))
0f113f3e 1280# define SSL_CTX_add0_chain_cert(ctx,x509) \
37659ea4 1281 SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509))
0f113f3e 1282# define SSL_CTX_add1_chain_cert(ctx,x509) \
37659ea4 1283 SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509))
0f113f3e
MC
1284# define SSL_CTX_get0_chain_certs(ctx,px509) \
1285 SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
1286# define SSL_CTX_clear_chain_certs(ctx) \
1287 SSL_CTX_set0_chain(ctx,NULL)
1288# define SSL_CTX_build_cert_chain(ctx, flags) \
1289 SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
1290# define SSL_CTX_select_current_cert(ctx,x509) \
37659ea4 1291 SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509))
0f113f3e
MC
1292# define SSL_CTX_set_current_cert(ctx, op) \
1293 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
1294# define SSL_CTX_set0_verify_cert_store(ctx,st) \
37659ea4 1295 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st))
0f113f3e 1296# define SSL_CTX_set1_verify_cert_store(ctx,st) \
37659ea4 1297 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st))
0f113f3e 1298# define SSL_CTX_set0_chain_cert_store(ctx,st) \
37659ea4 1299 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st))
0f113f3e 1300# define SSL_CTX_set1_chain_cert_store(ctx,st) \
37659ea4 1301 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st))
0f113f3e 1302# define SSL_set0_chain(ctx,sk) \
37659ea4 1303 SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk))
0f113f3e 1304# define SSL_set1_chain(ctx,sk) \
37659ea4 1305 SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk))
0f113f3e 1306# define SSL_add0_chain_cert(ctx,x509) \
37659ea4 1307 SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509))
0f113f3e 1308# define SSL_add1_chain_cert(ctx,x509) \
37659ea4 1309 SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509))
0f113f3e
MC
1310# define SSL_get0_chain_certs(ctx,px509) \
1311 SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
1312# define SSL_clear_chain_certs(ctx) \
1313 SSL_set0_chain(ctx,NULL)
1314# define SSL_build_cert_chain(s, flags) \
1315 SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
1316# define SSL_select_current_cert(ctx,x509) \
37659ea4 1317 SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509))
0f113f3e
MC
1318# define SSL_set_current_cert(ctx,op) \
1319 SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
1320# define SSL_set0_verify_cert_store(s,st) \
37659ea4 1321 SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st))
0f113f3e 1322# define SSL_set1_verify_cert_store(s,st) \
37659ea4 1323 SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st))
0f113f3e 1324# define SSL_set0_chain_cert_store(s,st) \
37659ea4 1325 SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st))
0f113f3e 1326# define SSL_set1_chain_cert_store(s,st) \
37659ea4 1327 SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st))
de4d764e 1328# define SSL_get1_groups(ctx, s) \
37659ea4 1329 SSL_ctrl(ctx,SSL_CTRL_GET_GROUPS,0,(char *)(s))
0f113f3e 1330# define SSL_get1_curves(ctx, s) \
de4d764e
MC
1331 SSL_get1_groups((ctx), (s))
1332# define SSL_CTX_set1_groups(ctx, glist, glistlen) \
37659ea4 1333 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist))
de4d764e 1334# define SSL_CTX_set1_groups_list(ctx, s) \
37659ea4 1335 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s))
0f113f3e 1336# define SSL_CTX_set1_curves(ctx, clist, clistlen) \
de4d764e 1337 SSL_CTX_set1_groups((ctx), (clist), (clistlen))
0f113f3e 1338# define SSL_CTX_set1_curves_list(ctx, s) \
de4d764e
MC
1339 SSL_CTX_set1_groups_list((ctx), (s))
1340# define SSL_set1_groups(ctx, glist, glistlen) \
37659ea4 1341 SSL_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist))
de4d764e 1342# define SSL_set1_groups_list(ctx, s) \
37659ea4 1343 SSL_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s))
0f113f3e 1344# define SSL_set1_curves(ctx, clist, clistlen) \
de4d764e 1345 SSL_set1_groups((ctx), (clist), (clistlen))
0f113f3e 1346# define SSL_set1_curves_list(ctx, s) \
de4d764e
MC
1347 SSL_set1_groups_list((ctx), (s))
1348# define SSL_get_shared_group(s, n) \
1349 SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL)
0f113f3e 1350# define SSL_get_shared_curve(s, n) \
de4d764e 1351 SSL_get_shared_group((s), (n))
0f113f3e 1352# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \
37659ea4 1353 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist))
0f113f3e 1354# define SSL_CTX_set1_sigalgs_list(ctx, s) \
37659ea4 1355 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s))
0f113f3e 1356# define SSL_set1_sigalgs(ctx, slist, slistlen) \
37659ea4 1357 SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist))
0f113f3e 1358# define SSL_set1_sigalgs_list(ctx, s) \
37659ea4 1359 SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s))
0f113f3e 1360# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \
37659ea4 1361 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist))
0f113f3e 1362# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \
37659ea4 1363 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s))
0f113f3e 1364# define SSL_set1_client_sigalgs(ctx, slist, slistlen) \
37659ea4 1365 SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)(slist))
0f113f3e 1366# define SSL_set1_client_sigalgs_list(ctx, s) \
37659ea4 1367 SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s))
0f113f3e 1368# define SSL_get0_certificate_types(s, clist) \
37659ea4 1369 SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist))
0f113f3e 1370# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \
37659ea4
BE
1371 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \
1372 (char *)(clist))
0f113f3e 1373# define SSL_set1_client_certificate_types(s, clist, clistlen) \
37659ea4 1374 SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist))
0f113f3e
MC
1375# define SSL_get_peer_signature_nid(s, pn) \
1376 SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn)
1377# define SSL_get_server_tmp_key(s, pk) \
1378 SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk)
1379# define SSL_get0_raw_cipherlist(s, plst) \
1380 SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst)
1381# define SSL_get0_ec_point_formats(s, plst) \
1382 SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst)
7946ab33
KR
1383#define SSL_CTX_set_min_proto_version(ctx, version) \
1384 SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL)
1385#define SSL_CTX_set_max_proto_version(ctx, version) \
1386 SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL)
1387#define SSL_set_min_proto_version(s, version) \
1388 SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL)
1389#define SSL_set_max_proto_version(s, version) \
1390 SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL)
1391
fb5b14b4
MC
1392#if OPENSSL_API_COMPAT < 0x10100000L
1393/* Provide some compatibility macros for removed functionality. */
1394# define SSL_CTX_need_tmp_RSA(ctx) 0
1395# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1
1396# define SSL_need_tmp_RSA(ssl) 0
1397# define SSL_set_tmp_rsa(ssl,rsa) 1
2ecb9f2d
MC
1398# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0)
1399# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0)
fb5b14b4 1400/*
533bf1df 1401 * We "pretend" to call the callback to avoid warnings about unused static
fb5b14b4
MC
1402 * functions.
1403 */
1404# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0)
1405# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0)
1406#endif
a00ae6c4 1407
04f6b0fd 1408__owur const BIO_METHOD *BIO_f_ssl(void);
4bcdb4a6
MC
1409__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client);
1410__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
1411__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
1412__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from);
d02b48c6
RE
1413void BIO_ssl_shutdown(BIO *ssl_bio);
1414
4bcdb4a6
MC
1415__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str);
1416__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
c5ebfcab 1417int SSL_CTX_up_ref(SSL_CTX *ctx);
0f113f3e 1418void SSL_CTX_free(SSL_CTX *);
4bcdb4a6
MC
1419__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t);
1420__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx);
1421__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *);
0f113f3e 1422void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *);
b50052db 1423void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *);
4bcdb4a6
MC
1424__owur int SSL_want(const SSL *s);
1425__owur int SSL_clear(SSL *s);
413c4f45 1426
0f113f3e 1427void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm);
d02b48c6 1428
4bcdb4a6 1429__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s);
1c86d8fd 1430__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits);
b11836a6 1431__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c);
4bcdb4a6 1432__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c);
90d9e49a 1433__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c);
3ec13237
TS
1434__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c);
1435__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c);
1436__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c);
4bcdb4a6
MC
1437
1438__owur int SSL_get_fd(const SSL *s);
1439__owur int SSL_get_rfd(const SSL *s);
1440__owur int SSL_get_wfd(const SSL *s);
1441__owur const char *SSL_get_cipher_list(const SSL *s, int n);
1442__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len);
1443__owur int SSL_get_read_ahead(const SSL *s);
1444__owur int SSL_pending(const SSL *s);
49580f25 1445__owur int SSL_has_pending(const SSL *s);
0f113f3e 1446# ifndef OPENSSL_NO_SOCK
4bcdb4a6
MC
1447__owur int SSL_set_fd(SSL *s, int fd);
1448__owur int SSL_set_rfd(SSL *s, int fd);
1449__owur int SSL_set_wfd(SSL *s, int fd);
0f113f3e 1450# endif
65e2d672
MC
1451void SSL_set0_rbio(SSL *s, BIO *rbio);
1452void SSL_set0_wbio(SSL *s, BIO *wbio);
0f113f3e 1453void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio);
4bcdb4a6
MC
1454__owur BIO *SSL_get_rbio(const SSL *s);
1455__owur BIO *SSL_get_wbio(const SSL *s);
1456__owur int SSL_set_cipher_list(SSL *s, const char *str);
0f113f3e 1457void SSL_set_read_ahead(SSL *s, int yes);
4bcdb4a6
MC
1458__owur int SSL_get_verify_mode(const SSL *s);
1459__owur int SSL_get_verify_depth(const SSL *s);
3adc41dd
RS
1460__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s);
1461void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback);
0f113f3e
MC
1462void SSL_set_verify_depth(SSL *s, int depth);
1463void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg);
1464# ifndef OPENSSL_NO_RSA
4bcdb4a6 1465__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
4bcdb4a6 1466__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, long len);
c3be59a4 1467# endif
4bcdb4a6
MC
1468__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
1469__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d,
0f113f3e 1470 long len);
4bcdb4a6
MC
1471__owur int SSL_use_certificate(SSL *ssl, X509 *x);
1472__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);
0f113f3e 1473
84c34ba8
MC
1474
1475/* serverinfo file format versions */
2698bbfe
MC
1476# define SSL_SERVERINFOV1 1
1477# define SSL_SERVERINFOV2 2
84c34ba8 1478
a398f821 1479/* Set serverinfo data for the current active cert. */
4bcdb4a6 1480__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,
0f113f3e 1481 size_t serverinfo_length);
84c34ba8
MC
1482__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version,
1483 const unsigned char *serverinfo,
1484 size_t serverinfo_length);
4bcdb4a6 1485__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);
a9e1c50b 1486
c3be59a4 1487#ifndef OPENSSL_NO_RSA
4bcdb4a6 1488__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
c3be59a4
DSH
1489#endif
1490
4bcdb4a6
MC
1491__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
1492__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type);
c3be59a4
DSH
1493
1494#ifndef OPENSSL_NO_RSA
4bcdb4a6 1495__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);
c3be59a4 1496#endif
4bcdb4a6
MC
1497__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
1498__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
68d39f3c 1499/* PEM type */
4bcdb4a6 1500__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file);
fae4772c 1501__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file);
4bcdb4a6
MC
1502__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);
1503__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
0f113f3e 1504 const char *file);
0f113f3e
MC
1505int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
1506 const char *dir);
58964a49 1507
f672aee4
RS
1508#if OPENSSL_API_COMPAT < 0x10100000L
1509# define SSL_load_error_strings() \
1510 OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \
1511 | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
1512#endif
7fa792d1 1513
4bcdb4a6
MC
1514__owur const char *SSL_state_string(const SSL *s);
1515__owur const char *SSL_rstate_string(const SSL *s);
1516__owur const char *SSL_state_string_long(const SSL *s);
1517__owur const char *SSL_rstate_string_long(const SSL *s);
1518__owur long SSL_SESSION_get_time(const SSL_SESSION *s);
1519__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t);
1520__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s);
1521__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
bd01f649 1522__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s);
4b6b8487 1523__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s);
e9281323 1524__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s);
4bcdb4a6
MC
1525__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s);
1526__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s);
48593cb1 1527void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick,
b7c9187b 1528 size_t *len);
fcc47578 1529__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s);
17dd65e6 1530__owur int SSL_copy_session_id(SSL *to, const SSL *from);
4bcdb4a6
MC
1531__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s);
1532__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx,
0f113f3e 1533 unsigned int sid_ctx_len);
fddfc0af
RG
1534__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid,
1535 unsigned int sid_len);
e586eac8 1536__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s);
d02b48c6 1537
4bcdb4a6 1538__owur SSL_SESSION *SSL_SESSION_new(void);
3c1d6bbc 1539const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s,
0f113f3e 1540 unsigned int *len);
fddfc0af
RG
1541const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s,
1542 unsigned int *len);
4bcdb4a6 1543__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s);
0f113f3e
MC
1544# ifndef OPENSSL_NO_STDIO
1545int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses);
1546# endif
0f113f3e
MC
1547int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses);
1548int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x);
16203f7b 1549int SSL_SESSION_up_ref(SSL_SESSION *ses);
0f113f3e 1550void SSL_SESSION_free(SSL_SESSION *ses);
4bcdb4a6
MC
1551__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp);
1552__owur int SSL_set_session(SSL *to, SSL_SESSION *session);
1553__owur int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);
0f113f3e 1554int SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c);
4bcdb4a6
MC
1555__owur int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB);
1556__owur int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB);
1557__owur int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
0f113f3e
MC
1558 unsigned int id_len);
1559SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp,
1560 long length);
1561
1562# ifdef HEADER_X509_H
4bcdb4a6 1563__owur X509 *SSL_get_peer_certificate(const SSL *s);
0f113f3e 1564# endif
d02b48c6 1565
4bcdb4a6 1566__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s);
d02b48c6 1567
4bcdb4a6
MC
1568__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx);
1569__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx);
3adc41dd
RS
1570__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx);
1571void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback);
0f113f3e
MC
1572void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth);
1573void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
1574 int (*cb) (X509_STORE_CTX *, void *),
1575 void *arg);
1576void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg),
1577 void *arg);
1578# ifndef OPENSSL_NO_RSA
4bcdb4a6 1579__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
4bcdb4a6 1580__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d,
0f113f3e 1581 long len);
c3be59a4 1582# endif
4bcdb4a6
MC
1583__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
1584__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx,
0f113f3e 1585 const unsigned char *d, long len);
4bcdb4a6
MC
1586__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
1587__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len,
0f113f3e 1588 const unsigned char *d);
d02b48c6 1589
74678cc2
BM
1590void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);
1591void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);
0c452abc
CH
1592pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx);
1593void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx);
a974e64a
MC
1594void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb);
1595void SSL_set_default_passwd_cb_userdata(SSL *s, void *u);
0c452abc
CH
1596pem_password_cb *SSL_get_default_passwd_cb(SSL *s);
1597void *SSL_get_default_passwd_cb_userdata(SSL *s);
d02b48c6 1598
4bcdb4a6
MC
1599__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx);
1600__owur int SSL_check_private_key(const SSL *ctx);
d02b48c6 1601
4bcdb4a6 1602__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
0f113f3e 1603 unsigned int sid_ctx_len);
4eb77b26 1604
0f113f3e 1605SSL *SSL_new(SSL_CTX *ctx);
c5ebfcab 1606int SSL_up_ref(SSL *s);
e417070c 1607int SSL_is_dtls(const SSL *s);
4bcdb4a6 1608__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
0f113f3e 1609 unsigned int sid_ctx_len);
bb7cd4e3 1610
4bcdb4a6
MC
1611__owur int SSL_CTX_set_purpose(SSL_CTX *s, int purpose);
1612__owur int SSL_set_purpose(SSL *s, int purpose);
1613__owur int SSL_CTX_set_trust(SSL_CTX *s, int trust);
1614__owur int SSL_set_trust(SSL *s, int trust);
bb7cd4e3 1615
919ba009
VD
1616__owur int SSL_set1_host(SSL *s, const char *hostname);
1617__owur int SSL_add1_host(SSL *s, const char *hostname);
4588cb44 1618__owur const char *SSL_get0_peername(SSL *s);
919ba009
VD
1619void SSL_set_hostflags(SSL *s, unsigned int flags);
1620
1621__owur int SSL_CTX_dane_enable(SSL_CTX *ctx);
1622__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md,
1623 uint8_t mtype, uint8_t ord);
1624__owur int SSL_dane_enable(SSL *s, const char *basedomain);
1625__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
1626 uint8_t mtype, unsigned char *data, size_t dlen);
1627__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki);
1628__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
1629 uint8_t *mtype, unsigned const char **data,
1630 size_t *dlen);
1631/*
1632 * Bridge opacity barrier between libcrypt and libssl, also needed to support
1633 * offline testing in test/danetest.c
1634 */
b9aec69a 1635SSL_DANE *SSL_get0_dane(SSL *ssl);
5ae4ceb9
VD
1636/*
1637 * DANE flags
1638 */
1639unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags);
1640unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags);
1641unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags);
1642unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags);
919ba009 1643
4bcdb4a6
MC
1644__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm);
1645__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm);
ccf11751 1646
4bcdb4a6
MC
1647__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx);
1648__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl);
7af31968 1649
0f113f3e
MC
1650# ifndef OPENSSL_NO_SRP
1651int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name);
1652int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password);
edc032b5
BL
1653int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength);
1654int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx,
0f113f3e 1655 char *(*cb) (SSL *, void *));
edc032b5 1656int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx,
0f113f3e 1657 int (*cb) (SSL *, void *));
edc032b5 1658int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx,
0f113f3e 1659 int (*cb) (SSL *, int *, void *));
edc032b5
BL
1660int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg);
1661
1662int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g,
0f113f3e 1663 BIGNUM *sa, BIGNUM *v, char *info);
edc032b5 1664int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass,
0f113f3e 1665 const char *grp);
edc032b5 1666
4bcdb4a6
MC
1667__owur BIGNUM *SSL_get_srp_g(SSL *s);
1668__owur BIGNUM *SSL_get_srp_N(SSL *s);
edc032b5 1669
4bcdb4a6
MC
1670__owur char *SSL_get_srp_username(SSL *s);
1671__owur char *SSL_get_srp_userinfo(SSL *s);
0f113f3e 1672# endif
edc032b5 1673
6b1bb98f
BK
1674/*
1675 * Early callback and helpers.
1676 */
1677typedef int (*SSL_early_cb_fn) (SSL *s, int *al, void *arg);
1678void SSL_CTX_set_early_cb(SSL_CTX *c, SSL_early_cb_fn cb, void *arg);
1679int SSL_early_isv2(SSL *s);
1680unsigned int SSL_early_get0_legacy_version(SSL *s);
1681size_t SSL_early_get0_random(SSL *s, const unsigned char **out);
1682size_t SSL_early_get0_session_id(SSL *s, const unsigned char **out);
1683size_t SSL_early_get0_ciphers(SSL *s, const unsigned char **out);
1684size_t SSL_early_get0_compression_methods(SSL *s, const unsigned char **out);
1685int SSL_early_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
1686 size_t *outlen);
1687
0f113f3e
MC
1688void SSL_certs_clear(SSL *s);
1689void SSL_free(SSL *ssl);
f1f5ee17
AP
1690# ifdef OSSL_ASYNC_FD
1691/*
ceab33e2 1692 * Windows application developer has to include windows.h to use these.
f1f5ee17 1693 */
07bbc92c 1694__owur int SSL_waiting_for_async(SSL *s);
ff75a257
MC
1695__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds);
1696__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd,
1697 size_t *numaddfds, OSSL_ASYNC_FD *delfd,
1698 size_t *numdelfds);
f1f5ee17 1699# endif
4bcdb4a6
MC
1700__owur int SSL_accept(SSL *ssl);
1701__owur int SSL_connect(SSL *ssl);
1702__owur int SSL_read(SSL *ssl, void *buf, int num);
beacb0f0 1703__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
d781d247 1704
f533fbd4
MC
1705# define SSL_READ_EARLY_DATA_ERROR 0
1706# define SSL_READ_EARLY_DATA_SUCCESS 1
1707# define SSL_READ_EARLY_DATA_FINISH 2
d781d247 1708
f533fbd4
MC
1709__owur int SSL_read_early_data(SSL *s, void *buf, size_t num,
1710 size_t *readbytes);
4bcdb4a6 1711__owur int SSL_peek(SSL *ssl, void *buf, int num);
beacb0f0 1712__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
4bcdb4a6 1713__owur int SSL_write(SSL *ssl, const void *buf, int num);
7ee8627f 1714__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written);
0665b4ed
MC
1715__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num,
1716 size_t *written);
0f113f3e
MC
1717long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg);
1718long SSL_callback_ctrl(SSL *, int, void (*)(void));
1719long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg);
1720long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));
1721
1ea4d09a
MC
1722# define SSL_EARLY_DATA_NOT_SENT 0
1723# define SSL_EARLY_DATA_REJECTED 1
1724# define SSL_EARLY_DATA_ACCEPTED 2
1725
f5b519c4 1726__owur int SSL_get_early_data_status(const SSL *s);
1ea4d09a 1727
4bcdb4a6
MC
1728__owur int SSL_get_error(const SSL *s, int ret_code);
1729__owur const char *SSL_get_version(const SSL *s);
d02b48c6
RE
1730
1731/* This sets the 'default' SSL version that SSL_new() will create */
4bcdb4a6 1732__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);
d02b48c6 1733
0f113f3e 1734# ifndef OPENSSL_NO_SSL3_METHOD
2b8fa1d5
KR
1735DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */
1736DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) /* SSLv3 */
1737DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) /* SSLv3 */
0f113f3e 1738# endif
58964a49 1739
32ec4153
MC
1740#define SSLv23_method TLS_method
1741#define SSLv23_server_method TLS_server_method
13c9bb3e 1742#define SSLv23_client_method TLS_client_method
d02b48c6 1743
32ec4153
MC
1744/* Negotiate highest available SSL/TLS version */
1745__owur const SSL_METHOD *TLS_method(void);
1746__owur const SSL_METHOD *TLS_server_method(void);
13c9bb3e 1747__owur const SSL_METHOD *TLS_client_method(void);
32ec4153 1748
1fc7d666 1749# ifndef OPENSSL_NO_TLS1_METHOD
2b8fa1d5
KR
1750DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */
1751DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) /* TLSv1.0 */
1752DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) /* TLSv1.0 */
1fc7d666 1753# endif
637f374a 1754
1fc7d666 1755# ifndef OPENSSL_NO_TLS1_1_METHOD
2b8fa1d5
KR
1756DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */
1757DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) /* TLSv1.1 */
1758DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) /* TLSv1.1 */
1fc7d666 1759# endif
7409d7ad 1760
1fc7d666 1761# ifndef OPENSSL_NO_TLS1_2_METHOD
2b8fa1d5
KR
1762DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */
1763DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) /* TLSv1.2 */
1764DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) /* TLSv1.2 */
1fc7d666 1765# endif
7409d7ad 1766
1fc7d666 1767# ifndef OPENSSL_NO_DTLS1_METHOD
2b8fa1d5
KR
1768DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */
1769DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) /* DTLSv1.0 */
1770DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) /* DTLSv1.0 */
1fc7d666 1771# endif
36d16f8e 1772
1fc7d666 1773# ifndef OPENSSL_NO_DTLS1_2_METHOD
2b8fa1d5
KR
1774DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) /* DTLSv1.2 */
1775DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) /* DTLSv1.2 */
1776DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) /* DTLSv1.2 */
1fc7d666 1777#endif
c3b344e3 1778
4bcdb4a6
MC
1779__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */
1780__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */
1781__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */
c6913eeb 1782
045bd047
DW
1783__owur size_t DTLS_get_data_mtu(const SSL *s);
1784
4bcdb4a6 1785__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);
9d5ac953 1786__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx);
831eef2c 1787__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s);
4bcdb4a6 1788__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s);
d02b48c6 1789
4bcdb4a6 1790__owur int SSL_do_handshake(SSL *s);
4fbfe86a
MC
1791int SSL_key_update(SSL *s, int updatetype);
1792int SSL_get_key_update_type(SSL *s);
d02b48c6 1793int SSL_renegotiate(SSL *s);
c7f47786 1794int SSL_renegotiate_abbreviated(SSL *s);
4bcdb4a6 1795__owur int SSL_renegotiate_pending(SSL *s);
d02b48c6
RE
1796int SSL_shutdown(SSL *s);
1797
4bcdb4a6
MC
1798__owur const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx);
1799__owur const SSL_METHOD *SSL_get_ssl_method(SSL *s);
1800__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method);
1801__owur const char *SSL_alert_type_string_long(int value);
1802__owur const char *SSL_alert_type_string(int value);
1803__owur const char *SSL_alert_desc_string_long(int value);
1804__owur const char *SSL_alert_desc_string(int value);
d02b48c6 1805
fa7c2637
DSH
1806void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
1807void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
1808__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s);
1809__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx);
1810__owur int SSL_add1_CA_list(SSL *ssl, const X509 *x);
1811__owur int SSL_CTX_add1_CA_list(SSL_CTX *ctx, const X509 *x);
1812__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s);
1813
3822740c
RL
1814void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
1815void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
4bcdb4a6
MC
1816__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);
1817__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s);
1818__owur int SSL_add_client_CA(SSL *ssl, X509 *x);
1819__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x);
d02b48c6
RE
1820
1821void SSL_set_connect_state(SSL *s);
1822void SSL_set_accept_state(SSL *s);
1823
4bcdb4a6 1824__owur long SSL_get_default_timeout(const SSL *s);
d02b48c6 1825
f672aee4
RS
1826#if OPENSSL_API_COMPAT < 0x10100000L
1827# define SSL_library_init() OPENSSL_init_ssl(0, NULL)
1828#endif
d02b48c6 1829
4bcdb4a6 1830__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size);
86135bed 1831__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk);
d02b48c6 1832
4bcdb4a6 1833__owur SSL *SSL_dup(SSL *ssl);
d02b48c6 1834
4bcdb4a6 1835__owur X509 *SSL_get_certificate(const SSL *ssl);
0f113f3e
MC
1836/*
1837 * EVP_PKEY
1838 */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl);
a25f9adc 1839
4bcdb4a6
MC
1840__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);
1841__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);
d02b48c6 1842
0f113f3e 1843void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
4bcdb4a6 1844__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
0f113f3e 1845void SSL_set_quiet_shutdown(SSL *ssl, int mode);
4bcdb4a6 1846__owur int SSL_get_quiet_shutdown(const SSL *ssl);
0f113f3e 1847void SSL_set_shutdown(SSL *ssl, int mode);
4bcdb4a6
MC
1848__owur int SSL_get_shutdown(const SSL *ssl);
1849__owur int SSL_version(const SSL *ssl);
6546e9b2 1850__owur int SSL_client_version(const SSL *s);
4bcdb4a6 1851__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
d84a7b20
MC
1852__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx);
1853__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx);
4bcdb4a6 1854__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
0f113f3e
MC
1855 const char *CApath);
1856# define SSL_get0_session SSL_get_session/* just peek at pointer */
4bcdb4a6
MC
1857__owur SSL_SESSION *SSL_get_session(const SSL *ssl);
1858__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */
1859__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
0f113f3e 1860SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx);
45d87a1f 1861void SSL_set_info_callback(SSL *ssl,
0f113f3e
MC
1862 void (*cb) (const SSL *ssl, int type, int val));
1863void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type,
1864 int val);
5998e290 1865__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl);
58964a49 1866
0f113f3e 1867void SSL_set_verify_result(SSL *ssl, long v);
4bcdb4a6 1868__owur long SSL_get_verify_result(const SSL *ssl);
696178ed 1869__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s);
58964a49 1870
d9f1c639
MC
1871__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out,
1872 size_t outlen);
1873__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out,
1874 size_t outlen);
1875__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *ssl,
1876 unsigned char *out, size_t outlen);
858618e7 1877
e6390aca 1878#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \
b6ca88ab 1879 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef)
4bcdb4a6 1880__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data);
0f113f3e 1881void *SSL_get_ex_data(const SSL *ssl, int idx);
e6390aca 1882#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \
b6ca88ab 1883 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef)
4bcdb4a6 1884__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data);
0f113f3e 1885void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx);
e6390aca 1886#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \
b6ca88ab 1887 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef)
4bcdb4a6 1888__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data);
0f113f3e 1889void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx);
0f113f3e 1890
4bcdb4a6 1891__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void);
0f113f3e
MC
1892
1893# define SSL_CTX_sess_set_cache_size(ctx,t) \
1894 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL)
1895# define SSL_CTX_sess_get_cache_size(ctx) \
1896 SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL)
1897# define SSL_CTX_set_session_cache_mode(ctx,m) \
1898 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)
1899# define SSL_CTX_get_session_cache_mode(ctx) \
1900 SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL)
1901
1902# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx)
1903# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m)
1904# define SSL_CTX_get_read_ahead(ctx) \
1905 SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)
1906# define SSL_CTX_set_read_ahead(ctx,m) \
1907 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)
1908# define SSL_CTX_get_max_cert_list(ctx) \
1909 SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
1910# define SSL_CTX_set_max_cert_list(ctx,m) \
1911 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
1912# define SSL_get_max_cert_list(ssl) \
1913 SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
1914# define SSL_set_max_cert_list(ssl,m) \
1915 SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
1916
1917# define SSL_CTX_set_max_send_fragment(ctx,m) \
1918 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)
1919# define SSL_set_max_send_fragment(ssl,m) \
1920 SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)
d102d9df
MC
1921# define SSL_CTX_set_split_send_fragment(ctx,m) \
1922 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL)
1923# define SSL_set_split_send_fragment(ssl,m) \
1924 SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL)
1925# define SSL_CTX_set_max_pipelines(ctx,m) \
1926 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL)
1927# define SSL_set_max_pipelines(ssl,m) \
1928 SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL)
566dda07 1929
dad78fb1
MC
1930void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len);
1931void SSL_set_default_read_buffer_len(SSL *s, size_t len);
1932
0f113f3e 1933# ifndef OPENSSL_NO_DH
ceab33e2 1934/* NB: the |keylength| is only applicable when is_export is true */
79df9d62 1935void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
0f113f3e
MC
1936 DH *(*dh) (SSL *ssl, int is_export,
1937 int keylength));
15d21c2d 1938void SSL_set_tmp_dh_callback(SSL *ssl,
0f113f3e
MC
1939 DH *(*dh) (SSL *ssl, int is_export,
1940 int keylength));
1941# endif
15d21c2d 1942
4bcdb4a6
MC
1943__owur const COMP_METHOD *SSL_get_current_compression(SSL *s);
1944__owur const COMP_METHOD *SSL_get_current_expansion(SSL *s);
1945__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp);
e304d3e2
MC
1946__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp);
1947__owur int SSL_COMP_get_id(const SSL_COMP *comp);
69f68237 1948STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
4bcdb4a6 1949__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP)
0f113f3e 1950 *meths);
03b0e735 1951#if OPENSSL_API_COMPAT < 0x10100000L
6457615a 1952# define SSL_COMP_free_compression_methods() while(0) continue
03b0e735 1953#endif
4bcdb4a6 1954__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
413c4f45 1955
94a209d8 1956const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
98c9ce2f
DSH
1957int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c);
1958int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c);
90134d98
BK
1959int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
1960 int isv2format, STACK_OF(SSL_CIPHER) **sk,
1961 STACK_OF(SSL_CIPHER) **scsvs);
94a209d8 1962
12bf56c0 1963/* TLS extensions functions */
4bcdb4a6 1964__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len);
12bf56c0 1965
4bcdb4a6 1966__owur int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb,
0f113f3e 1967 void *arg);
12bf56c0
DSH
1968
1969/* Pre-shared secret session resumption functions */
4bcdb4a6 1970__owur int SSL_set_session_secret_cb(SSL *s,
0f113f3e
MC
1971 tls_session_secret_cb_fn tls_session_secret_cb,
1972 void *arg);
12bf56c0 1973
7c2d4fee 1974void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
0f113f3e
MC
1975 int (*cb) (SSL *ssl,
1976 int
1977 is_forward_secure));
7c2d4fee
BM
1978
1979void SSL_set_not_resumable_session_callback(SSL *ssl,
0f113f3e
MC
1980 int (*cb) (SSL *ssl,
1981 int
1982 is_forward_secure));
c649d10d
TS
1983
1984void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
1985 size_t (*cb) (SSL *ssl, int type,
1986 size_t len, void *arg));
1987void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg);
1988void *SSL_CTX_get_record_padding_callback_arg(SSL_CTX *ctx);
1989int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size);
1990
1991void SSL_set_record_padding_callback(SSL *ssl,
1992 size_t (*cb) (SSL *ssl, int type,
1993 size_t len, void *arg));
1994void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg);
1995void *SSL_get_record_padding_callback_arg(SSL *ssl);
1996int SSL_set_block_padding(SSL *ssl, size_t block_size);
1997
b577fd0b
DSH
1998# if OPENSSL_API_COMPAT < 0x10100000L
1999# define SSL_cache_hit(s) SSL_session_reused(s)
2000# endif
7c2d4fee 2001
b577fd0b 2002__owur int SSL_session_reused(SSL *s);
69443116 2003__owur int SSL_is_server(const SSL *s);
5421196e 2004
4bcdb4a6 2005__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void);
ec2f7e56 2006int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx);
3db935a9
DSH
2007void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
2008unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
4bcdb4a6
MC
2009__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags);
2010__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre);
3db935a9
DSH
2011
2012void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
2013void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);
2014
4bcdb4a6
MC
2015__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
2016__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
2017__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
3db935a9 2018
59b1696c
DSH
2019void SSL_add_ssl_module(void);
2020int SSL_config(SSL *s, const char *name);
2021int SSL_CTX_config(SSL_CTX *ctx, const char *name);
2022
0f113f3e 2023# ifndef OPENSSL_NO_SSL_TRACE
93ab9e42 2024void SSL_trace(int write_p, int version, int content_type,
0f113f3e 2025 const void *buf, size_t len, SSL *ssl, void *arg);
4bcdb4a6 2026__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c);
0f113f3e 2027# endif
93ab9e42 2028
f9e55034 2029# ifndef OPENSSL_NO_SOCK
3edeb622 2030int DTLSv1_listen(SSL *s, BIO_ADDR *client);
f9e55034 2031# endif
3edeb622 2032
ed29e82a
RP
2033# ifndef OPENSSL_NO_CT
2034
43341433
VD
2035/*
2036 * A callback for verifying that the received SCTs are sufficient.
2037 * Expected to return 1 if they are sufficient, otherwise 0.
2038 * May return a negative integer if an error occurs.
2039 * A connection should be aborted if the SCTs are deemed insufficient.
2040 */
2041typedef int(*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx,
2042 const STACK_OF(SCT) *scts, void *arg);
2043
ed29e82a
RP
2044/*
2045 * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate
2046 * the received SCTs.
2047 * If the callback returns a non-positive result, the connection is terminated.
2048 * Call this function before beginning a handshake.
2049 * If a NULL |callback| is provided, SCT validation is disabled.
2050 * |arg| is arbitrary userdata that will be passed to the callback whenever it
2051 * is invoked. Ownership of |arg| remains with the caller.
2052 *
2053 * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response
2054 * will be requested.
2055 */
43341433
VD
2056int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
2057 void *arg);
2058int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
2059 ssl_ct_validation_cb callback,
2060 void *arg);
2061#define SSL_disable_ct(s) \
2062 ((void) SSL_set_validation_callback((s), NULL, NULL))
2063#define SSL_CTX_disable_ct(ctx) \
2064 ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL))
2065
2066/*
2067 * The validation type enumerates the available behaviours of the built-in SSL
2068 * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct().
2069 * The underlying callback is a static function in libssl.
2070 */
2071enum {
2072 SSL_CT_VALIDATION_PERMISSIVE = 0,
2073 SSL_CT_VALIDATION_STRICT
2074};
2075
2076/*
2077 * Enable CT by setting up a callback that implements one of the built-in
2078 * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always
2079 * continues the handshake, the application can make appropriate decisions at
2080 * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at
2081 * least one valid SCT, or else handshake termination will be requested. The
2082 * handshake may continue anyway if SSL_VERIFY_NONE is in effect.
2083 */
2084int SSL_enable_ct(SSL *s, int validation_mode);
2085int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode);
2086
ed29e82a 2087/*
43341433 2088 * Report whether a non-NULL callback is enabled.
ed29e82a 2089 */
43341433
VD
2090int SSL_ct_is_enabled(const SSL *s);
2091int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx);
ed29e82a
RP
2092
2093/* Gets the SCTs received from a connection */
2094const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s);
2095
8359b57f
RP
2096/*
2097 * Loads the CT log list from the default location.
2098 * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store,
2099 * the log information loaded from this file will be appended to the
2100 * CTLOG_STORE.
2101 * Returns 1 on success, 0 otherwise.
2102 */
ed29e82a 2103int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx);
8359b57f
RP
2104
2105/*
2106 * Loads the CT log list from the specified file path.
2107 * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store,
2108 * the log information loaded from this file will be appended to the
2109 * CTLOG_STORE.
2110 * Returns 1 on success, 0 otherwise.
2111 */
ed29e82a
RP
2112int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path);
2113
8359b57f
RP
2114/*
2115 * Sets the CT log list used by all SSL connections created from this SSL_CTX.
2116 * Ownership of the CTLOG_STORE is transferred to the SSL_CTX.
2117 */
2118void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs);
2119
2120/*
2121 * Gets the CT log list used by all SSL connections created from this SSL_CTX.
2122 * This will be NULL unless one of the following functions has been called:
2123 * - SSL_CTX_set_default_ctlog_list_file
2124 * - SSL_CTX_set_ctlog_list_file
2125 * - SSL_CTX_set_ctlog_store
2126 */
2127const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx);
2128
ed29e82a
RP
2129# endif /* OPENSSL_NO_CT */
2130
b362ccab
DSH
2131/* What the "other" parameter contains in security callback */
2132/* Mask for type */
0f113f3e
MC
2133# define SSL_SECOP_OTHER_TYPE 0xffff0000
2134# define SSL_SECOP_OTHER_NONE 0
2135# define SSL_SECOP_OTHER_CIPHER (1 << 16)
2136# define SSL_SECOP_OTHER_CURVE (2 << 16)
2137# define SSL_SECOP_OTHER_DH (3 << 16)
2138# define SSL_SECOP_OTHER_PKEY (4 << 16)
2139# define SSL_SECOP_OTHER_SIGALG (5 << 16)
2140# define SSL_SECOP_OTHER_CERT (6 << 16)
b362ccab
DSH
2141
2142/* Indicated operation refers to peer key or certificate */
0f113f3e 2143# define SSL_SECOP_PEER 0x1000
b362ccab
DSH
2144
2145/* Values for "op" parameter in security callback */
2146
2147/* Called to filter ciphers */
2148/* Ciphers client supports */
0f113f3e 2149# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER)
b362ccab 2150/* Cipher shared by client/server */
0f113f3e 2151# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER)
b362ccab 2152/* Sanity check of cipher server selects */
0f113f3e 2153# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER)
b362ccab 2154/* Curves supported by client */
0f113f3e 2155# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE)
b362ccab 2156/* Curves shared by client/server */
0f113f3e 2157# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE)
b362ccab 2158/* Sanity check of curve server selects */
0f113f3e 2159# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE)
b362ccab 2160/* Temporary DH key */
e2b420fd 2161# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY)
b362ccab 2162/* SSL/TLS version */
0f113f3e 2163# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE)
b362ccab 2164/* Session tickets */
0f113f3e 2165# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE)
b362ccab 2166/* Supported signature algorithms sent to peer */
0f113f3e 2167# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG)
b362ccab 2168/* Shared signature algorithm */
0f113f3e 2169# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG)
b362ccab 2170/* Sanity check signature algorithm allowed */
0f113f3e 2171# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG)
b362ccab 2172/* Used to get mask of supported public key signature algorithms */
0f113f3e 2173# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG)
b362ccab 2174/* Use to see if compression is allowed */
0f113f3e 2175# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE)
b362ccab 2176/* EE key in certificate */
0f113f3e 2177# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT)
b362ccab 2178/* CA key in certificate */
0f113f3e 2179# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT)
b362ccab 2180/* CA digest algorithm in certificate */
0f113f3e 2181# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT)
b362ccab 2182/* Peer EE key in certificate */
0f113f3e 2183# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER)
b362ccab 2184/* Peer CA key in certificate */
0f113f3e 2185# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER)
b362ccab 2186/* Peer CA digest algorithm in certificate */
0f113f3e 2187# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER)
b362ccab
DSH
2188
2189void SSL_set_security_level(SSL *s, int level);
4bcdb4a6 2190__owur int SSL_get_security_level(const SSL *s);
0f113f3e 2191void SSL_set_security_callback(SSL *s,
e4646a89 2192 int (*cb) (const SSL *s, const SSL_CTX *ctx, int op,
0f113f3e
MC
2193 int bits, int nid, void *other,
2194 void *ex));
e4646a89 2195int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, const SSL_CTX *ctx, int op,
0f113f3e
MC
2196 int bits, int nid,
2197 void *other, void *ex);
b362ccab 2198void SSL_set0_security_ex_data(SSL *s, void *ex);
4bcdb4a6 2199__owur void *SSL_get0_security_ex_data(const SSL *s);
b362ccab
DSH
2200
2201void SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
4bcdb4a6 2202__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx);
0f113f3e 2203void SSL_CTX_set_security_callback(SSL_CTX *ctx,
e4646a89 2204 int (*cb) (const SSL *s, const SSL_CTX *ctx, int op,
0f113f3e
MC
2205 int bits, int nid, void *other,
2206 void *ex));
e4646a89
KR
2207int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
2208 const SSL_CTX *ctx,
0f113f3e
MC
2209 int op, int bits,
2210 int nid,
2211 void *other,
2212 void *ex);
b362ccab 2213void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex);
4bcdb4a6 2214__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx);
b362ccab 2215
2c90015c
RL
2216/* OPENSSL_INIT flag 0x010000 reserved for internal use */
2217#define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L
2218#define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L
b184e3ef
MC
2219
2220#define OPENSSL_INIT_SSL_DEFAULT \
2221 (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS)
2222
0fc32b07 2223int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
b184e3ef 2224
0f113f3e 2225# ifndef OPENSSL_NO_UNIT_TEST
4bcdb4a6 2226__owur const struct openssl_ssl_test_functions *SSL_test_functions(void);
0f113f3e 2227# endif
e0fc7961 2228
df2ee0e2
BL
2229extern const char SSL_version_str[];
2230
69588edb 2231int ERR_load_SSL_strings(void);
6d311938 2232
0cd0a820 2233# ifdef __cplusplus
d02b48c6 2234}
0cd0a820 2235# endif
d02b48c6 2236#endif