codekingpro/portable-devtools
116k
1/*
2 * WARNING: do not edit!
3 * Generated by makefile from include\openssl\ssl.h.in
4 *
5 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
6 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
7 * Copyright 2005 Nokia. All rights reserved.
8 *
9 * Licensed under the Apache License 2.0 (the "License"). You may not use
10 * this file except in compliance with the License. You can obtain a copy
11 * in the file LICENSE in the source distribution or at
12 * https://www.openssl.org/source/license.html
13 */
14
15
16
17#ifndef OPENSSL_SSL_H
18# define OPENSSL_SSL_H
19# pragma once
20
21# include <openssl/macros.h>
22# ifndef OPENSSL_NO_DEPRECATED_3_0
23# define HEADER_SSL_H
24# endif
25
26# include <openssl/e_os2.h>
27# include <openssl/opensslconf.h>
28# include <openssl/comp.h>
29# include <openssl/bio.h>
30# ifndef OPENSSL_NO_DEPRECATED_1_1_0
31# include <openssl/x509.h>
32# include <openssl/crypto.h>
33# include <openssl/buffer.h>
34# endif
35# include <openssl/lhash.h>
36# include <openssl/pem.h>
37# include <openssl/hmac.h>
38# include <openssl/async.h>
39
40# include <openssl/safestack.h>
41# include <openssl/symhacks.h>
42# include <openssl/ct.h>
43# include <openssl/sslerr.h>
44# include <openssl/prov_ssl.h>
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
50/* OpenSSL version number for ASN.1 encoding of the session information */
51/*-
52 * Version 0 - initial version
53 * Version 1 - added the optional peer certificate
54 */
55# define SSL_SESSION_ASN1_VERSION 0x0001
56
57# define SSL_MAX_SSL_SESSION_ID_LENGTH 32
58# define SSL_MAX_SID_CTX_LENGTH 32
59
60# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8)
61# define SSL_MAX_KEY_ARG_LENGTH 8
62/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */
63
64/* The maximum number of encrypt/decrypt pipelines we can support */
65# define SSL_MAX_PIPELINES 32
66
67/* text strings for the ciphers */
68
69/* These are used to specify which ciphers to use and not to use */
70
71# define SSL_TXT_LOW "LOW"
72# define SSL_TXT_MEDIUM "MEDIUM"
73# define SSL_TXT_HIGH "HIGH"
74# define SSL_TXT_FIPS "FIPS"
75
76# define SSL_TXT_aNULL "aNULL"
77# define SSL_TXT_eNULL "eNULL"
78# define SSL_TXT_NULL "NULL"
79
80# define SSL_TXT_kRSA "kRSA"
81# define SSL_TXT_kDHr "kDHr"/* this cipher class has been removed */
82# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */
83# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */
84# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */
85# define SSL_TXT_kDHE "kDHE"
86# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */
87# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */
88# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */
89# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */
90# define SSL_TXT_kECDHE "kECDHE"
91# define SSL_TXT_kPSK "kPSK"
92# define SSL_TXT_kRSAPSK "kRSAPSK"
93# define SSL_TXT_kECDHEPSK "kECDHEPSK"
94# define SSL_TXT_kDHEPSK "kDHEPSK"
95# define SSL_TXT_kGOST "kGOST"
96# define SSL_TXT_kGOST18 "kGOST18"
97# define SSL_TXT_kSRP "kSRP"
98
99# define SSL_TXT_aRSA "aRSA"
100# define SSL_TXT_aDSS "aDSS"
101# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */
102# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */
103# define SSL_TXT_aECDSA "aECDSA"
104# define SSL_TXT_aPSK "aPSK"
105# define SSL_TXT_aGOST94 "aGOST94"
106# define SSL_TXT_aGOST01 "aGOST01"
107# define SSL_TXT_aGOST12 "aGOST12"
108# define SSL_TXT_aGOST "aGOST"
109# define SSL_TXT_aSRP "aSRP"
110
111# define SSL_TXT_DSS "DSS"
112# define SSL_TXT_DH "DH"
113# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */
114# define SSL_TXT_EDH "EDH"/* alias for DHE */
115# define SSL_TXT_ADH "ADH"
116# define SSL_TXT_RSA "RSA"
117# define SSL_TXT_ECDH "ECDH"
118# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */
119# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */
120# define SSL_TXT_AECDH "AECDH"
121# define SSL_TXT_ECDSA "ECDSA"
122# define SSL_TXT_PSK "PSK"
123# define SSL_TXT_SRP "SRP"
124
125# define SSL_TXT_DES "DES"
126# define SSL_TXT_3DES "3DES"
127# define SSL_TXT_RC4 "RC4"
128# define SSL_TXT_RC2 "RC2"
129# define SSL_TXT_IDEA "IDEA"
130# define SSL_TXT_SEED "SEED"
131# define SSL_TXT_AES128 "AES128"
132# define SSL_TXT_AES256 "AES256"
133# define SSL_TXT_AES "AES"
134# define SSL_TXT_AES_GCM "AESGCM"
135# define SSL_TXT_AES_CCM "AESCCM"
136# define SSL_TXT_AES_CCM_8 "AESCCM8"
137# define SSL_TXT_CAMELLIA128 "CAMELLIA128"
138# define SSL_TXT_CAMELLIA256 "CAMELLIA256"
139# define SSL_TXT_CAMELLIA "CAMELLIA"
140# define SSL_TXT_CHACHA20 "CHACHA20"
141# define SSL_TXT_GOST "GOST89"
142# define SSL_TXT_ARIA "ARIA"
143# define SSL_TXT_ARIA_GCM "ARIAGCM"
144# define SSL_TXT_ARIA128 "ARIA128"
145# define SSL_TXT_ARIA256 "ARIA256"
146# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912"
147# define SSL_TXT_CBC "CBC"
148
149# define SSL_TXT_MD5 "MD5"
150# define SSL_TXT_SHA1 "SHA1"
151# define SSL_TXT_SHA "SHA"/* same as "SHA1" */
152# define SSL_TXT_GOST94 "GOST94"
153# define SSL_TXT_GOST89MAC "GOST89MAC"
154# define SSL_TXT_GOST12 "GOST12"
155# define SSL_TXT_GOST89MAC12 "GOST89MAC12"
156# define SSL_TXT_SHA256 "SHA256"
157# define SSL_TXT_SHA384 "SHA384"
158
159# define SSL_TXT_SSLV3 "SSLv3"
160# define SSL_TXT_TLSV1 "TLSv1"
161# define SSL_TXT_TLSV1_1 "TLSv1.1"
162# define SSL_TXT_TLSV1_2 "TLSv1.2"
163
164# define SSL_TXT_ALL "ALL"
165
166/*-
167 * COMPLEMENTOF* definitions. These identifiers are used to (de-select)
168 * ciphers normally not being used.
169 * Example: "RC4" will activate all ciphers using RC4 including ciphers
170 * without authentication, which would normally disabled by DEFAULT (due
171 * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT"
172 * will make sure that it is also disabled in the specific selection.
173 * COMPLEMENTOF* identifiers are portable between version, as adjustments
174 * to the default cipher setup will also be included here.
175 *
176 * COMPLEMENTOFDEFAULT does not experience the same special treatment that
177 * DEFAULT gets, as only selection is being done and no sorting as needed
178 * for DEFAULT.
179 */
180# define SSL_TXT_CMPALL "COMPLEMENTOFALL"
181# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT"
182
183/*
184 * The following cipher list is used by default. It also is substituted when
185 * an application-defined cipher list string starts with 'DEFAULT'.
186 * This applies to ciphersuites for TLSv1.2 and below.
187 * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list()
188 * Update both macro and function simultaneously
189 */
190# ifndef OPENSSL_NO_DEPRECATED_3_0
191# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL"
192/*
193 * This is the default set of TLSv1.3 ciphersuites
194 * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites()
195 * Update both macro and function simultaneously
196 */
197# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \
198 "TLS_CHACHA20_POLY1305_SHA256:" \
199 "TLS_AES_128_GCM_SHA256"
200# endif
201/*
202 * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always
203 * starts with a reasonable order, and all we have to do for DEFAULT is
204 * throwing out anonymous and unencrypted ciphersuites! (The latter are not
205 * actually enabled by ALL, but "ALL:RSA" would enable some of them.)
206 */
207
208/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
209# define SSL_SENT_SHUTDOWN 1
210# define SSL_RECEIVED_SHUTDOWN 2
211
212#ifdef __cplusplus
213}
214#endif
215
216#ifdef __cplusplus
217extern "C" {
218#endif
219
220# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1
221# define SSL_FILETYPE_PEM X509_FILETYPE_PEM
222
223/*
224 * This is needed to stop compilers complaining about the 'struct ssl_st *'
225 * function parameters used to prototype callbacks in SSL_CTX.
226 */
227typedef struct ssl_st *ssl_crock_st;
228typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT;
229typedef struct ssl_method_st SSL_METHOD;
230typedef struct ssl_cipher_st SSL_CIPHER;
231typedef struct ssl_session_st SSL_SESSION;
232typedef struct tls_sigalgs_st TLS_SIGALGS;
233typedef struct ssl_conf_ctx_st SSL_CONF_CTX;
234typedef struct ssl_comp_st SSL_COMP;
235
236STACK_OF(SSL_CIPHER);
237STACK_OF(SSL_COMP);
238
239/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/
240typedef struct srtp_protection_profile_st {
241 const char *name;
242 unsigned long id;
243} SRTP_PROTECTION_PROFILE;
244SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE)
245#define sk_SRTP_PROTECTION_PROFILE_num(sk) OPENSSL_sk_num(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))
246#define sk_SRTP_PROTECTION_PROFILE_value(sk, idx) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_value(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx)))
247#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp)))
248#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_null())
249#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n)))
250#define sk_SRTP_PROTECTION_PROFILE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (n))
251#define sk_SRTP_PROTECTION_PROFILE_free(sk) OPENSSL_sk_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))
252#define sk_SRTP_PROTECTION_PROFILE_zero(sk) OPENSSL_sk_zero(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))
253#define sk_SRTP_PROTECTION_PROFILE_delete(sk, i) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (i)))
254#define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete_ptr(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)))
255#define sk_SRTP_PROTECTION_PROFILE_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))
256#define sk_SRTP_PROTECTION_PROFILE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))
257#define sk_SRTP_PROTECTION_PROFILE_pop(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_pop(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)))
258#define sk_SRTP_PROTECTION_PROFILE_shift(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_shift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)))
259#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk),ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc))
260#define sk_SRTP_PROTECTION_PROFILE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), (idx))
261#define sk_SRTP_PROTECTION_PROFILE_set(sk, idx, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_set(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)))
262#define sk_SRTP_PROTECTION_PROFILE_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))
263#define sk_SRTP_PROTECTION_PROFILE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))
264#define sk_SRTP_PROTECTION_PROFILE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), pnum)
265#define sk_SRTP_PROTECTION_PROFILE_sort(sk) OPENSSL_sk_sort(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))
266#define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))
267#define sk_SRTP_PROTECTION_PROFILE_dup(sk) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_dup(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)))
268#define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_deep_copy(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_copyfunc_type(copyfunc), ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)))
269#define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, cmp) ((sk_SRTP_PROTECTION_PROFILE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp)))
270
271
272
273typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data,
274 int len, void *arg);
275typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len,
276 STACK_OF(SSL_CIPHER) *peer_ciphers,
277 const SSL_CIPHER **cipher, void *arg);
278
279/* Extension context codes */
280/* This extension is only allowed in TLS */
281#define SSL_EXT_TLS_ONLY 0x0001
282/* This extension is only allowed in DTLS */
283#define SSL_EXT_DTLS_ONLY 0x0002
284/* Some extensions may be allowed in DTLS but we don't implement them for it */
285#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004
286/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */
287#define SSL_EXT_SSL3_ALLOWED 0x0008
288/* Extension is only defined for TLS1.2 and below */
289#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010
290/* Extension is only defined for TLS1.3 and above */
291#define SSL_EXT_TLS1_3_ONLY 0x0020
292/* Ignore this extension during parsing if we are resuming */
293#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040
294#define SSL_EXT_CLIENT_HELLO 0x0080
295/* Really means TLS1.2 or below */
296#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100
297#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200
298#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400
299#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800
300#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000
301#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000
302#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000
303
304/* Typedefs for handling custom extensions */
305
306typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type,
307 const unsigned char **out, size_t *outlen,
308 int *al, void *add_arg);
309
310typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type,
311 const unsigned char *out, void *add_arg);
312
313typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type,
314 const unsigned char *in, size_t inlen,
315 int *al, void *parse_arg);
316
317
318typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type,
319 unsigned int context,
320 const unsigned char **out,
321 size_t *outlen, X509 *x,
322 size_t chainidx,
323 int *al, void *add_arg);
324
325typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type,
326 unsigned int context,
327 const unsigned char *out,
328 void *add_arg);
329
330typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type,
331 unsigned int context,
332 const unsigned char *in,
333 size_t inlen, X509 *x,
334 size_t chainidx,
335 int *al, void *parse_arg);
336
337/* Typedef for verification callback */
338typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx);
339
340/* Typedef for SSL async callback */
341typedef int (*SSL_async_callback_fn)(SSL *s, void *arg);
342
343#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n)
344
345/*
346 * SSL/TLS connection options.
347 */
348 /* Disable Extended master secret */
349# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0)
350 /* Cleanse plaintext copies of data delivered to the application */
351# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1)
352 /* Allow initial connection to servers that don't support RI */
353# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2)
354 /* Enable support for Kernel TLS */
355# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3)
356# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4)
357# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6)
358# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7)
359# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8)
360# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9)
361 /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */
362# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10)
363 /*
364 * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added
365 * in OpenSSL 0.9.6d. Usually (depending on the application protocol)
366 * the workaround is not needed. Unfortunately some broken SSL/TLS
367 * implementations cannot handle it at all, which is why we include it
368 * in SSL_OP_ALL. Added in 0.9.6e
369 */
370# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11)
371 /* DTLS options */
372# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12)
373 /* Turn on Cookie Exchange (on relevant for servers) */
374# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13)
375 /* Don't use RFC4507 ticket extension */
376# define SSL_OP_NO_TICKET SSL_OP_BIT(14)
377# ifndef OPENSSL_NO_DTLS1_METHOD
378 /*
379 * Use Cisco's version identifier of DTLS_BAD_VER
380 * (only with deprecated DTLSv1_client_method())
381 */
382# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15)
383# endif
384 /* As server, disallow session resumption on renegotiation */
385# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16)
386 /* Don't use compression even if supported */
387# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17)
388 /* Permit unsafe legacy renegotiation */
389# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18)
390 /* Disable encrypt-then-mac */
391# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19)
392 /*
393 * Enable TLSv1.3 Compatibility mode. This is on by default. A future
394 * version of OpenSSL may have this disabled by default.
395 */
396# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20)
397 /*
398 * Prioritize Chacha20Poly1305 when client does.
399 * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE
400 */
401# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21)
402 /*
403 * Set on servers to choose the cipher according to server's preferences.
404 */
405# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22)
406 /*
407 * If set, a server will allow a client to issue a SSLv3.0 version
408 * number as latest version supported in the premaster secret, even when
409 * TLSv1.0 (version 3.1) was announced in the client hello. Normally
410 * this is forbidden to prevent version rollback attacks.
411 */
412# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23)
413 /*
414 * Switches off automatic TLSv1.3 anti-replay protection for early data.
415 * This is a server-side option only (no effect on the client).
416 */
417# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24)
418# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25)
419# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26)
420# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27)
421# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28)
422# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29)
423# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26)
424# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27)
425 /* Disallow all renegotiation */
426# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30)
427 /*
428 * Make server add server-hello extension from early version of
429 * cryptopro draft, when GOST ciphersuite is negotiated. Required for
430 * interoperability with CryptoPro CSP 3.x
431 */
432# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31)
433
434/*
435 * Option "collections."
436 */
437# define SSL_OP_NO_SSL_MASK \
438 ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \
439 | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 )
440# define SSL_OP_NO_DTLS_MASK \
441 ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 )
442
443/* Various bug workarounds that should be rather harmless. */
444# define SSL_OP_ALL \
445 ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \
446 | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG )
447
448/*
449 * OBSOLETE OPTIONS retained for compatibility
450 */
451
452# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0
453# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0
454# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0
455# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0
456# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0
457# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0
458# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0
459# define SSL_OP_TLS_D5_BUG 0x0
460# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0
461# define SSL_OP_SINGLE_ECDH_USE 0x0
462# define SSL_OP_SINGLE_DH_USE 0x0
463# define SSL_OP_EPHEMERAL_RSA 0x0
464# define SSL_OP_NO_SSLv2 0x0
465# define SSL_OP_PKCS1_CHECK_1 0x0
466# define SSL_OP_PKCS1_CHECK_2 0x0
467# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0
468# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0
469
470/*
471 * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success
472 * when just a single record has been written):
473 */
474# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U
475/*
476 * Make it possible to retry SSL_write() with changed buffer location (buffer
477 * contents must stay the same!); this is not the default to avoid the
478 * misconception that non-blocking SSL_write() behaves like non-blocking
479 * write():
480 */
481# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U
482/*
483 * Never bother the application with retries if the transport is blocking:
484 */
485# define SSL_MODE_AUTO_RETRY 0x00000004U
486/* Don't attempt to automatically build certificate chain */
487# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U
488/*
489 * Save RAM by releasing read and write buffers when they're empty. (SSL3 and
490 * TLS only.) Released buffers are freed.
491 */
492# define SSL_MODE_RELEASE_BUFFERS 0x00000010U
493/*
494 * Send the current time in the Random fields of the ClientHello and
495 * ServerHello records for compatibility with hypothetical implementations
496 * that require it.
497 */
498# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U
499# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U
500/*
501 * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications
502 * that reconnect with a downgraded protocol version; see
503 * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your
504 * application attempts a normal handshake. Only use this in explicit
505 * fallback retries, following the guidance in
506 * draft-ietf-tls-downgrade-scsv-00.
507 */
508# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U
509/*
510 * Support Asynchronous operation
511 */
512# define SSL_MODE_ASYNC 0x00000100U
513
514/*
515 * When using DTLS/SCTP, include the terminating zero in the label
516 * used for computing the endpoint-pair shared secret. Required for
517 * interoperability with implementations having this bug like these
518 * older version of OpenSSL:
519 * - OpenSSL 1.0.0 series
520 * - OpenSSL 1.0.1 series
521 * - OpenSSL 1.0.2 series
522 * - OpenSSL 1.1.0 series
523 * - OpenSSL 1.1.1 and 1.1.1a
524 */
525# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U
526
527/* Cert related flags */
528/*
529 * Many implementations ignore some aspects of the TLS standards such as
530 * enforcing certificate chain algorithms. When this is set we enforce them.
531 */
532# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U
533
534/* Suite B modes, takes same values as certificate verify flags */
535# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000
536/* Suite B 192 bit only mode */
537# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000
538/* Suite B 128 bit mode allowing 192 bit algorithms */
539# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000
540
541/* Perform all sorts of protocol violations for testing purposes */
542# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000
543
544/* Flags for building certificate chains */
545/* Treat any existing certificates as untrusted CAs */
546# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1
547/* Don't include root CA in chain */
548# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2
549/* Just check certificates already there */
550# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4
551/* Ignore verification errors */
552# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8
553/* Clear verification errors from queue */
554# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10
555
556/* Flags returned by SSL_check_chain */
557/* Certificate can be used with this session */
558# define CERT_PKEY_VALID 0x1
559/* Certificate can also be used for signing */
560# define CERT_PKEY_SIGN 0x2
561/* EE certificate signing algorithm OK */
562# define CERT_PKEY_EE_SIGNATURE 0x10
563/* CA signature algorithms OK */
564# define CERT_PKEY_CA_SIGNATURE 0x20
565/* EE certificate parameters OK */
566# define CERT_PKEY_EE_PARAM 0x40
567/* CA certificate parameters OK */
568# define CERT_PKEY_CA_PARAM 0x80
569/* Signing explicitly allowed as opposed to SHA1 fallback */
570# define CERT_PKEY_EXPLICIT_SIGN 0x100
571/* Client CA issuer names match (always set for server cert) */
572# define CERT_PKEY_ISSUER_NAME 0x200
573/* Cert type matches client types (always set for server cert) */
574# define CERT_PKEY_CERT_TYPE 0x400
575/* Cert chain suitable to Suite B */
576# define CERT_PKEY_SUITEB 0x800
577
578# define SSL_CONF_FLAG_CMDLINE 0x1
579# define SSL_CONF_FLAG_FILE 0x2
580# define SSL_CONF_FLAG_CLIENT 0x4
581# define SSL_CONF_FLAG_SERVER 0x8
582# define SSL_CONF_FLAG_SHOW_ERRORS 0x10
583# define SSL_CONF_FLAG_CERTIFICATE 0x20
584# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40
585/* Configuration value types */
586# define SSL_CONF_TYPE_UNKNOWN 0x0
587# define SSL_CONF_TYPE_STRING 0x1
588# define SSL_CONF_TYPE_FILE 0x2
589# define SSL_CONF_TYPE_DIR 0x3
590# define SSL_CONF_TYPE_NONE 0x4
591# define SSL_CONF_TYPE_STORE 0x5
592
593/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */
594# define SSL_COOKIE_LENGTH 4096
595
596/*
597 * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they
598 * cannot be used to clear bits.
599 */
600
601uint64_t SSL_CTX_get_options(const SSL_CTX *ctx);
602uint64_t SSL_get_options(const SSL *s);
603uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op);
604uint64_t SSL_clear_options(SSL *s, uint64_t op);
605uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op);
606uint64_t SSL_set_options(SSL *s, uint64_t op);
607
608# define SSL_CTX_set_mode(ctx,op) \
609 SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
610# define SSL_CTX_clear_mode(ctx,op) \
611 SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL)
612# define SSL_CTX_get_mode(ctx) \
613 SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)
614# define SSL_clear_mode(ssl,op) \
615 SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL)
616# define SSL_set_mode(ssl,op) \
617 SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)
618# define SSL_get_mode(ssl) \
619 SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)
620# define SSL_set_mtu(ssl, mtu) \
621 SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)
622# define DTLS_set_link_mtu(ssl, mtu) \
623 SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL)
624# define DTLS_get_link_min_mtu(ssl) \
625 SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL)
626
627# define SSL_get_secure_renegotiation_support(ssl) \
628 SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL)
629
630# define SSL_CTX_set_cert_flags(ctx,op) \
631 SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL)
632# define SSL_set_cert_flags(s,op) \
633 SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL)
634# define SSL_CTX_clear_cert_flags(ctx,op) \
635 SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
636# define SSL_clear_cert_flags(s,op) \
637 SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
638
639void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
640 void (*cb) (int write_p, int version,
641 int content_type, const void *buf,
642 size_t len, SSL *ssl, void *arg));
643void SSL_set_msg_callback(SSL *ssl,
644 void (*cb) (int write_p, int version,
645 int content_type, const void *buf,
646 size_t len, SSL *ssl, void *arg));
647# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
648# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
649
650# define SSL_get_extms_support(s) \
651 SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL)
652
653# ifndef OPENSSL_NO_SRP
654/* see tls_srp.c */
655# ifndef OPENSSL_NO_DEPRECATED_3_0
656OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s);
657OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx);
658OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx);
659OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx);
660OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s,
661 int *ad);
662OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s);
663# endif
664# endif
665
666/* 100k max cert list */
667# define SSL_MAX_CERT_LIST_DEFAULT (1024*100)
668
669# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20)
670
671/*
672 * This callback type is used inside SSL_CTX, SSL, and in the functions that
673 * set them. It is used to override the generation of SSL/TLS session IDs in
674 * a server. Return value should be zero on an error, non-zero to proceed.
675 * Also, callbacks should themselves check if the id they generate is unique
676 * otherwise the SSL handshake will fail with an error - callbacks can do
677 * this using the 'ssl' value they're passed by;
678 * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in
679 * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32
680 * bytes. The callback can alter this length to be less if desired. It is
681 * also an error for the callback to set the size to zero.
682 */
683typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id,
684 unsigned int *id_len);
685
686# define SSL_SESS_CACHE_OFF 0x0000
687# define SSL_SESS_CACHE_CLIENT 0x0001
688# define SSL_SESS_CACHE_SERVER 0x0002
689# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)
690# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080
691/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */
692# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100
693# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200
694# define SSL_SESS_CACHE_NO_INTERNAL \
695 (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)
696# define SSL_SESS_CACHE_UPDATE_TIME 0x0400
697
698LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx);
699# define SSL_CTX_sess_number(ctx) \
700 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)
701# define SSL_CTX_sess_connect(ctx) \
702 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)
703# define SSL_CTX_sess_connect_good(ctx) \
704 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)
705# define SSL_CTX_sess_connect_renegotiate(ctx) \
706 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)
707# define SSL_CTX_sess_accept(ctx) \
708 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)
709# define SSL_CTX_sess_accept_renegotiate(ctx) \
710 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)
711# define SSL_CTX_sess_accept_good(ctx) \
712 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)
713# define SSL_CTX_sess_hits(ctx) \
714 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)
715# define SSL_CTX_sess_cb_hits(ctx) \
716 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)
717# define SSL_CTX_sess_misses(ctx) \
718 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)
719# define SSL_CTX_sess_timeouts(ctx) \
720 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)
721# define SSL_CTX_sess_cache_full(ctx) \
722 SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)
723
724void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,
725 int (*new_session_cb) (struct ssl_st *ssl,
726 SSL_SESSION *sess));
727int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,
728 SSL_SESSION *sess);
729void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
730 void (*remove_session_cb) (struct ssl_ctx_st
731 *ctx,
732 SSL_SESSION *sess));
733void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx,
734 SSL_SESSION *sess);
735void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
736 SSL_SESSION *(*get_session_cb) (struct ssl_st
737 *ssl,
738 const unsigned char
739 *data, int len,
740 int *copy));
741SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,
742 const unsigned char *data,
743 int len, int *copy);
744void SSL_CTX_set_info_callback(SSL_CTX *ctx,
745 void (*cb) (const SSL *ssl, int type, int val));
746void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type,
747 int val);
748void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,
749 int (*client_cert_cb) (SSL *ssl, X509 **x509,
750 EVP_PKEY **pkey));
751int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509,
752 EVP_PKEY **pkey);
753# ifndef OPENSSL_NO_ENGINE
754__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e);
755# endif
756void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,
757 int (*app_gen_cookie_cb) (SSL *ssl,
758 unsigned char
759 *cookie,
760 unsigned int
761 *cookie_len));
762void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,
763 int (*app_verify_cookie_cb) (SSL *ssl,
764 const unsigned
765 char *cookie,
766 unsigned int
767 cookie_len));
768
769void SSL_CTX_set_stateless_cookie_generate_cb(
770 SSL_CTX *ctx,
771 int (*gen_stateless_cookie_cb) (SSL *ssl,
772 unsigned char *cookie,
773 size_t *cookie_len));
774void SSL_CTX_set_stateless_cookie_verify_cb(
775 SSL_CTX *ctx,
776 int (*verify_stateless_cookie_cb) (SSL *ssl,
777 const unsigned char *cookie,
778 size_t cookie_len));
779# ifndef OPENSSL_NO_NEXTPROTONEG
780
781typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl,
782 const unsigned char **out,
783 unsigned int *outlen,
784 void *arg);
785void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s,
786 SSL_CTX_npn_advertised_cb_func cb,
787 void *arg);
788# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb
789
790typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s,
791 unsigned char **out,
792 unsigned char *outlen,
793 const unsigned char *in,
794 unsigned int inlen,
795 void *arg);
796void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s,
797 SSL_CTX_npn_select_cb_func cb,
798 void *arg);
799# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb
800
801void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
802 unsigned *len);
803# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated
804# endif
805
806__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
807 const unsigned char *in, unsigned int inlen,
808 const unsigned char *client,
809 unsigned int client_len);
810
811# define OPENSSL_NPN_UNSUPPORTED 0
812# define OPENSSL_NPN_NEGOTIATED 1
813# define OPENSSL_NPN_NO_OVERLAP 2
814
815__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
816 unsigned int protos_len);
817__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
818 unsigned int protos_len);
819typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl,
820 const unsigned char **out,
821 unsigned char *outlen,
822 const unsigned char *in,
823 unsigned int inlen,
824 void *arg);
825void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
826 SSL_CTX_alpn_select_cb_func cb,
827 void *arg);
828void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
829 unsigned int *len);
830
831# ifndef OPENSSL_NO_PSK
832/*
833 * the maximum length of the buffer given to callbacks containing the
834 * resulting identity/psk
835 */
836# define PSK_MAX_IDENTITY_LEN 256
837# define PSK_MAX_PSK_LEN 512
838typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl,
839 const char *hint,
840 char *identity,
841 unsigned int max_identity_len,
842 unsigned char *psk,
843 unsigned int max_psk_len);
844void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb);
845void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb);
846
847typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl,
848 const char *identity,
849 unsigned char *psk,
850 unsigned int max_psk_len);
851void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb);
852void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb);
853
854__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint);
855__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint);
856const char *SSL_get_psk_identity_hint(const SSL *s);
857const char *SSL_get_psk_identity(const SSL *s);
858# endif
859
860typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl,
861 const unsigned char *identity,
862 size_t identity_len,
863 SSL_SESSION **sess);
864typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md,
865 const unsigned char **id,
866 size_t *idlen,
867 SSL_SESSION **sess);
868
869void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb);
870void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
871 SSL_psk_find_session_cb_func cb);
872void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb);
873void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
874 SSL_psk_use_session_cb_func cb);
875
876/* Register callbacks to handle custom TLS Extensions for client or server. */
877
878__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx,
879 unsigned int ext_type);
880
881__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx,
882 unsigned int ext_type,
883 custom_ext_add_cb add_cb,
884 custom_ext_free_cb free_cb,
885 void *add_arg,
886 custom_ext_parse_cb parse_cb,
887 void *parse_arg);
888
889__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx,
890 unsigned int ext_type,
891 custom_ext_add_cb add_cb,
892 custom_ext_free_cb free_cb,
893 void *add_arg,
894 custom_ext_parse_cb parse_cb,
895 void *parse_arg);
896
897__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
898 unsigned int context,
899 SSL_custom_ext_add_cb_ex add_cb,
900 SSL_custom_ext_free_cb_ex free_cb,
901 void *add_arg,
902 SSL_custom_ext_parse_cb_ex parse_cb,
903 void *parse_arg);
904
905__owur int SSL_extension_supported(unsigned int ext_type);
906
907# define SSL_NOTHING 1
908# define SSL_WRITING 2
909# define SSL_READING 3
910# define SSL_X509_LOOKUP 4
911# define SSL_ASYNC_PAUSED 5
912# define SSL_ASYNC_NO_JOBS 6
913# define SSL_CLIENT_HELLO_CB 7
914# define SSL_RETRY_VERIFY 8
915
916/* These will only be used when doing non-blocking IO */
917# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING)
918# define SSL_want_read(s) (SSL_want(s) == SSL_READING)
919# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING)
920# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP)
921# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY)
922# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED)
923# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS)
924# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB)
925
926# define SSL_MAC_FLAG_READ_MAC_STREAM 1
927# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2
928# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4
929# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8
930
931/*
932 * A callback for logging out TLS key material. This callback should log out
933 * |line| followed by a newline.
934 */
935typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line);
936
937/*
938 * SSL_CTX_set_keylog_callback configures a callback to log key material. This
939 * is intended for debugging use with tools like Wireshark. The cb function
940 * should log line followed by a newline.
941 */
942void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb);
943
944/*
945 * SSL_CTX_get_keylog_callback returns the callback configured by
946 * SSL_CTX_set_keylog_callback.
947 */
948SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx);
949
950int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data);
951uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx);
952int SSL_set_max_early_data(SSL *s, uint32_t max_early_data);
953uint32_t SSL_get_max_early_data(const SSL *s);
954int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data);
955uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx);
956int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data);
957uint32_t SSL_get_recv_max_early_data(const SSL *s);
958
959#ifdef __cplusplus
960}
961#endif
962
963# include <openssl/ssl2.h>
964# include <openssl/ssl3.h>
965# include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */
966# include <openssl/dtls1.h> /* Datagram TLS */
967# include <openssl/srtp.h> /* Support for the use_srtp extension */
968
969#ifdef __cplusplus
970extern "C" {
971#endif
972
973/*
974 * These need to be after the above set of includes due to a compiler bug
975 * in VisualStudio 2015
976 */
977SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER)
978#define sk_SSL_CIPHER_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_CIPHER_sk_type(sk))
979#define sk_SSL_CIPHER_value(sk, idx) ((const SSL_CIPHER *)OPENSSL_sk_value(ossl_check_const_SSL_CIPHER_sk_type(sk), (idx)))
980#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp)))
981#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_null())
982#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n)))
983#define sk_SSL_CIPHER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_CIPHER_sk_type(sk), (n))
984#define sk_SSL_CIPHER_free(sk) OPENSSL_sk_free(ossl_check_SSL_CIPHER_sk_type(sk))
985#define sk_SSL_CIPHER_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_CIPHER_sk_type(sk))
986#define sk_SSL_CIPHER_delete(sk, i) ((const SSL_CIPHER *)OPENSSL_sk_delete(ossl_check_SSL_CIPHER_sk_type(sk), (i)))
987#define sk_SSL_CIPHER_delete_ptr(sk, ptr) ((const SSL_CIPHER *)OPENSSL_sk_delete_ptr(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)))
988#define sk_SSL_CIPHER_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))
989#define sk_SSL_CIPHER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))
990#define sk_SSL_CIPHER_pop(sk) ((const SSL_CIPHER *)OPENSSL_sk_pop(ossl_check_SSL_CIPHER_sk_type(sk)))
991#define sk_SSL_CIPHER_shift(sk) ((const SSL_CIPHER *)OPENSSL_sk_shift(ossl_check_SSL_CIPHER_sk_type(sk)))
992#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk),ossl_check_SSL_CIPHER_freefunc_type(freefunc))
993#define sk_SSL_CIPHER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), (idx))
994#define sk_SSL_CIPHER_set(sk, idx, ptr) ((const SSL_CIPHER *)OPENSSL_sk_set(ossl_check_SSL_CIPHER_sk_type(sk), (idx), ossl_check_SSL_CIPHER_type(ptr)))
995#define sk_SSL_CIPHER_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))
996#define sk_SSL_CIPHER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))
997#define sk_SSL_CIPHER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), pnum)
998#define sk_SSL_CIPHER_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_CIPHER_sk_type(sk))
999#define sk_SSL_CIPHER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_CIPHER_sk_type(sk))
1000#define sk_SSL_CIPHER_dup(sk) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_dup(ossl_check_const_SSL_CIPHER_sk_type(sk)))
1001#define sk_SSL_CIPHER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_copyfunc_type(copyfunc), ossl_check_SSL_CIPHER_freefunc_type(freefunc)))
1002#define sk_SSL_CIPHER_set_cmp_func(sk, cmp) ((sk_SSL_CIPHER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_compfunc_type(cmp)))
1003SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP)
1004#define sk_SSL_COMP_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_COMP_sk_type(sk))
1005#define sk_SSL_COMP_value(sk, idx) ((SSL_COMP *)OPENSSL_sk_value(ossl_check_const_SSL_COMP_sk_type(sk), (idx)))
1006#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp)))
1007#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_null())
1008#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n)))
1009#define sk_SSL_COMP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_COMP_sk_type(sk), (n))
1010#define sk_SSL_COMP_free(sk) OPENSSL_sk_free(ossl_check_SSL_COMP_sk_type(sk))
1011#define sk_SSL_COMP_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_COMP_sk_type(sk))
1012#define sk_SSL_COMP_delete(sk, i) ((SSL_COMP *)OPENSSL_sk_delete(ossl_check_SSL_COMP_sk_type(sk), (i)))
1013#define sk_SSL_COMP_delete_ptr(sk, ptr) ((SSL_COMP *)OPENSSL_sk_delete_ptr(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)))
1014#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
1015#define sk_SSL_COMP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
1016#define sk_SSL_COMP_pop(sk) ((SSL_COMP *)OPENSSL_sk_pop(ossl_check_SSL_COMP_sk_type(sk)))
1017#define sk_SSL_COMP_shift(sk) ((SSL_COMP *)OPENSSL_sk_shift(ossl_check_SSL_COMP_sk_type(sk)))
1018#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk),ossl_check_SSL_COMP_freefunc_type(freefunc))
1019#define sk_SSL_COMP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), (idx))
1020#define sk_SSL_COMP_set(sk, idx, ptr) ((SSL_COMP *)OPENSSL_sk_set(ossl_check_SSL_COMP_sk_type(sk), (idx), ossl_check_SSL_COMP_type(ptr)))
1021#define sk_SSL_COMP_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
1022#define sk_SSL_COMP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
1023#define sk_SSL_COMP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), pnum)
1024#define sk_SSL_COMP_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_COMP_sk_type(sk))
1025#define sk_SSL_COMP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_COMP_sk_type(sk))
1026#define sk_SSL_COMP_dup(sk) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_dup(ossl_check_const_SSL_COMP_sk_type(sk)))
1027#define sk_SSL_COMP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_copyfunc_type(copyfunc), ossl_check_SSL_COMP_freefunc_type(freefunc)))
1028#define sk_SSL_COMP_set_cmp_func(sk, cmp) ((sk_SSL_COMP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_compfunc_type(cmp)))
1029
1030
1031/* compatibility */
1032# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg)))
1033# define SSL_get_app_data(s) (SSL_get_ex_data(s,0))
1034# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \
1035 (char *)(a)))
1036# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0))
1037# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0))
1038# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \
1039 (char *)(arg)))
1040# ifndef OPENSSL_NO_DEPRECATED_1_1_0
1041OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug);
1042# endif
1043
1044/* TLSv1.3 KeyUpdate message types */
1045/* -1 used so that this is an invalid value for the on-the-wire protocol */
1046#define SSL_KEY_UPDATE_NONE -1
1047/* Values as defined for the on-the-wire protocol */
1048#define SSL_KEY_UPDATE_NOT_REQUESTED 0
1049#define SSL_KEY_UPDATE_REQUESTED 1
1050
1051/*
1052 * The valid handshake states (one for each type message sent and one for each
1053 * type of message received). There are also two "special" states:
1054 * TLS = TLS or DTLS state
1055 * DTLS = DTLS specific state
1056 * CR/SR = Client Read/Server Read
1057 * CW/SW = Client Write/Server Write
1058 *
1059 * The "special" states are:
1060 * TLS_ST_BEFORE = No handshake has been initiated yet
1061 * TLS_ST_OK = A handshake has been successfully completed
1062 */
1063typedef enum {
1064 TLS_ST_BEFORE,
1065 TLS_ST_OK,
1066 DTLS_ST_CR_HELLO_VERIFY_REQUEST,
1067 TLS_ST_CR_SRVR_HELLO,
1068 TLS_ST_CR_CERT,
1069 TLS_ST_CR_CERT_STATUS,
1070 TLS_ST_CR_KEY_EXCH,
1071 TLS_ST_CR_CERT_REQ,
1072 TLS_ST_CR_SRVR_DONE,
1073 TLS_ST_CR_SESSION_TICKET,
1074 TLS_ST_CR_CHANGE,
1075 TLS_ST_CR_FINISHED,
1076 TLS_ST_CW_CLNT_HELLO,
1077 TLS_ST_CW_CERT,
1078 TLS_ST_CW_KEY_EXCH,
1079 TLS_ST_CW_CERT_VRFY,
1080 TLS_ST_CW_CHANGE,
1081 TLS_ST_CW_NEXT_PROTO,
1082 TLS_ST_CW_FINISHED,
1083 TLS_ST_SW_HELLO_REQ,
1084 TLS_ST_SR_CLNT_HELLO,
1085 DTLS_ST_SW_HELLO_VERIFY_REQUEST,
1086 TLS_ST_SW_SRVR_HELLO,
1087 TLS_ST_SW_CERT,
1088 TLS_ST_SW_KEY_EXCH,
1089 TLS_ST_SW_CERT_REQ,
1090 TLS_ST_SW_SRVR_DONE,
1091 TLS_ST_SR_CERT,
1092 TLS_ST_SR_KEY_EXCH,
1093 TLS_ST_SR_CERT_VRFY,
1094 TLS_ST_SR_NEXT_PROTO,
1095 TLS_ST_SR_CHANGE,
1096 TLS_ST_SR_FINISHED,
1097 TLS_ST_SW_SESSION_TICKET,
1098 TLS_ST_SW_CERT_STATUS,
1099 TLS_ST_SW_CHANGE,
1100 TLS_ST_SW_FINISHED,
1101 TLS_ST_SW_ENCRYPTED_EXTENSIONS,
1102 TLS_ST_CR_ENCRYPTED_EXTENSIONS,
1103 TLS_ST_CR_CERT_VRFY,
1104 TLS_ST_SW_CERT_VRFY,
1105 TLS_ST_CR_HELLO_REQ,
1106 TLS_ST_SW_KEY_UPDATE,
1107 TLS_ST_CW_KEY_UPDATE,
1108 TLS_ST_SR_KEY_UPDATE,
1109 TLS_ST_CR_KEY_UPDATE,
1110 TLS_ST_EARLY_DATA,
1111 TLS_ST_PENDING_EARLY_DATA_END,
1112 TLS_ST_CW_END_OF_EARLY_DATA,
1113 TLS_ST_SR_END_OF_EARLY_DATA
1114} OSSL_HANDSHAKE_STATE;
1115
1116/*
1117 * Most of the following state values are no longer used and are defined to be
1118 * the closest equivalent value in the current state machine code. Not all
1119 * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT
1120 * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP,
1121 * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT.
1122 */
1123
1124# define SSL_ST_CONNECT 0x1000
1125# define SSL_ST_ACCEPT 0x2000
1126
1127# define SSL_ST_MASK 0x0FFF
1128
1129# define SSL_CB_LOOP 0x01
1130# define SSL_CB_EXIT 0x02
1131# define SSL_CB_READ 0x04
1132# define SSL_CB_WRITE 0x08
1133# define SSL_CB_ALERT 0x4000/* used in callback */
1134# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ)
1135# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE)
1136# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP)
1137# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT)
1138# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP)
1139# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT)
1140# define SSL_CB_HANDSHAKE_START 0x10
1141# define SSL_CB_HANDSHAKE_DONE 0x20
1142
1143/* Is the SSL_connection established? */
1144# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a))
1145# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a))
1146int SSL_in_init(const SSL *s);
1147int SSL_in_before(const SSL *s);
1148int SSL_is_init_finished(const SSL *s);
1149
1150/*
1151 * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you
1152 * should not need these
1153 */
1154# define SSL_ST_READ_HEADER 0xF0
1155# define SSL_ST_READ_BODY 0xF1
1156# define SSL_ST_READ_DONE 0xF2
1157
1158/*-
1159 * Obtain latest Finished message
1160 * -- that we sent (SSL_get_finished)
1161 * -- that we expected from peer (SSL_get_peer_finished).
1162 * Returns length (0 == no Finished so far), copies up to 'count' bytes.
1163 */
1164size_t SSL_get_finished(const SSL *s, void *buf, size_t count);
1165size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);
1166
1167/*
1168 * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are
1169 * 'ored' with SSL_VERIFY_PEER if they are desired
1170 */
1171# define SSL_VERIFY_NONE 0x00
1172# define SSL_VERIFY_PEER 0x01
1173# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02
1174# define SSL_VERIFY_CLIENT_ONCE 0x04
1175# define SSL_VERIFY_POST_HANDSHAKE 0x08
1176
1177# ifndef OPENSSL_NO_DEPRECATED_1_1_0
1178# define OpenSSL_add_ssl_algorithms() SSL_library_init()
1179# define SSLeay_add_ssl_algorithms() SSL_library_init()
1180# endif
1181
1182/* More backward compatibility */
1183# define SSL_get_cipher(s) \
1184 SSL_CIPHER_get_name(SSL_get_current_cipher(s))
1185# define SSL_get_cipher_bits(s,np) \
1186 SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
1187# define SSL_get_cipher_version(s) \
1188 SSL_CIPHER_get_version(SSL_get_current_cipher(s))
1189# define SSL_get_cipher_name(s) \
1190 SSL_CIPHER_get_name(SSL_get_current_cipher(s))
1191# define SSL_get_time(a) SSL_SESSION_get_time(a)
1192# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b))
1193# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a)
1194# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b))
1195
1196# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
1197# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)
1198
1199DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
1200# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value
