Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes16kdownloads
ssl.h2600 linesDownload Raw Back to openssl
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

Showing the first 1,200 of 2600 lines. Download the file for the rest.

codekingpro/portable-devtools · Team Ai