/src/openssl/ssl/ssl_local.h
Line  | Count  | Source  | 
1  |  | /*  | 
2  |  |  * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved.  | 
3  |  |  * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved  | 
4  |  |  * Copyright 2005 Nokia. All rights reserved.  | 
5  |  |  *  | 
6  |  |  * Licensed under the Apache License 2.0 (the "License").  You may not use  | 
7  |  |  * this file except in compliance with the License.  You can obtain a copy  | 
8  |  |  * in the file LICENSE in the source distribution or at  | 
9  |  |  * https://www.openssl.org/source/license.html  | 
10  |  |  */  | 
11  |  |  | 
12  |  | #ifndef OSSL_SSL_LOCAL_H  | 
13  |  | # define OSSL_SSL_LOCAL_H  | 
14  |  |  | 
15  |  | # include <stdlib.h>  | 
16  |  | # include <time.h>  | 
17  |  | # include <errno.h>  | 
18  |  | # include "internal/common.h" /* for HAS_PREFIX */  | 
19  |  |  | 
20  |  | # include <openssl/buffer.h>  | 
21  |  | # include <openssl/bio.h>  | 
22  |  | # include <openssl/comp.h>  | 
23  |  | # include <openssl/dsa.h>  | 
24  |  | # include <openssl/err.h>  | 
25  |  | # include <openssl/ssl.h>  | 
26  |  | # include <openssl/async.h>  | 
27  |  | # include <openssl/symhacks.h>  | 
28  |  | # include <openssl/ct.h>  | 
29  |  | # include "internal/recordmethod.h"  | 
30  |  | # include "internal/statem.h"  | 
31  |  | # include "internal/packet.h"  | 
32  |  | # include "internal/dane.h"  | 
33  |  | # include "internal/refcount.h"  | 
34  |  | # include "internal/tsan_assist.h"  | 
35  |  | # include "internal/bio.h"  | 
36  |  | # include "internal/ktls.h"  | 
37  |  | # include "internal/time.h"  | 
38  |  | # include "internal/ssl.h"  | 
39  |  | # include "internal/cryptlib.h"  | 
40  |  | # include "internal/quic_predef.h"  | 
41  |  | # include "record/record.h"  | 
42  |  | # include "internal/quic_predef.h"  | 
43  |  | # include "internal/quic_tls.h"  | 
44  |  |  | 
45  |  | # ifdef OPENSSL_BUILD_SHLIBSSL  | 
46  |  | #  undef OPENSSL_EXTERN  | 
47  |  | #  define OPENSSL_EXTERN OPENSSL_EXPORT  | 
48  |  | # endif  | 
49  |  |  | 
50  | 0  | # define TLS_MAX_VERSION_INTERNAL TLS1_3_VERSION  | 
51  | 0  | # define DTLS_MAX_VERSION_INTERNAL DTLS1_2_VERSION  | 
52  |  |  | 
53  |  | /*  | 
54  |  |  * DTLS version numbers are strange because they're inverted. Except for  | 
55  |  |  * DTLS1_BAD_VER, which should be considered "lower" than the rest.  | 
56  |  |  */  | 
57  | 0  | # define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))  | 
58  |  | # define DTLS_VERSION_GT(v1, v2) (dtls_ver_ordinal(v1) < dtls_ver_ordinal(v2))  | 
59  | 0  | # define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))  | 
60  | 0  | # define DTLS_VERSION_LT(v1, v2) (dtls_ver_ordinal(v1) > dtls_ver_ordinal(v2))  | 
61  | 0  | # define DTLS_VERSION_LE(v1, v2) (dtls_ver_ordinal(v1) >= dtls_ver_ordinal(v2))  | 
62  |  |  | 
63  | 0  | # define SSL_AD_NO_ALERT    -1  | 
64  |  |  | 
65  |  | /*  | 
66  |  |  * Define the Bitmasks for SSL_CIPHER.algorithms.  | 
67  |  |  * This bits are used packed as dense as possible. If new methods/ciphers  | 
68  |  |  * etc will be added, the bits a likely to change, so this information  | 
69  |  |  * is for internal library use only, even though SSL_CIPHER.algorithms  | 
70  |  |  * can be publicly accessed.  | 
71  |  |  * Use the according functions for cipher management instead.  | 
72  |  |  *  | 
73  |  |  * The bit mask handling in the selection and sorting scheme in  | 
74  |  |  * ssl_create_cipher_list() has only limited capabilities, reflecting  | 
75  |  |  * that the different entities within are mutually exclusive:  | 
76  |  |  * ONLY ONE BIT PER MASK CAN BE SET AT A TIME.  | 
77  |  |  */  | 
78  |  |  | 
79  |  | /* Bits for algorithm_mkey (key exchange algorithm) */  | 
80  |  | /* RSA key exchange */  | 
81  | 0  | # define SSL_kRSA                0x00000001U  | 
82  |  | /* tmp DH key no DH cert */  | 
83  | 0  | # define SSL_kDHE                0x00000002U  | 
84  |  | /* ephemeral ECDH */  | 
85  | 0  | # define SSL_kECDHE              0x00000004U  | 
86  |  | /* PSK */  | 
87  | 0  | # define SSL_kPSK                0x00000008U  | 
88  |  | /* GOST key exchange */  | 
89  | 0  | # define SSL_kGOST               0x00000010U  | 
90  |  | /* SRP */  | 
91  | 0  | # define SSL_kSRP                0x00000020U  | 
92  |  |  | 
93  | 0  | # define SSL_kRSAPSK             0x00000040U  | 
94  | 0  | # define SSL_kECDHEPSK           0x00000080U  | 
95  | 0  | # define SSL_kDHEPSK             0x00000100U  | 
96  |  | /* GOST KDF key exchange, draft-smyshlyaev-tls12-gost-suites */  | 
97  | 0  | # define SSL_kGOST18             0x00000200U  | 
98  |  |  | 
99  |  | /* all PSK */  | 
100  |  |  | 
101  | 0  | # define SSL_PSK     (SSL_kPSK | SSL_kRSAPSK | SSL_kECDHEPSK | SSL_kDHEPSK)  | 
102  |  |  | 
103  |  | /* Any appropriate key exchange algorithm (for TLS 1.3 ciphersuites) */  | 
104  | 0  | # define SSL_kANY                0x00000000U  | 
105  |  |  | 
106  |  | /* Bits for algorithm_auth (server authentication) */  | 
107  |  | /* RSA auth */  | 
108  | 0  | # define SSL_aRSA                0x00000001U  | 
109  |  | /* DSS auth */  | 
110  | 0  | # define SSL_aDSS                0x00000002U  | 
111  |  | /* no auth (i.e. use ADH or AECDH) */  | 
112  | 0  | # define SSL_aNULL               0x00000004U  | 
113  |  | /* ECDSA auth*/  | 
114  | 0  | # define SSL_aECDSA              0x00000008U  | 
115  |  | /* PSK auth */  | 
116  | 0  | # define SSL_aPSK                0x00000010U  | 
117  |  | /* GOST R 34.10-2001 signature auth */  | 
118  | 0  | # define SSL_aGOST01             0x00000020U  | 
119  |  | /* SRP auth */  | 
120  | 0  | # define SSL_aSRP                0x00000040U  | 
121  |  | /* GOST R 34.10-2012 signature auth */  | 
122  | 0  | # define SSL_aGOST12             0x00000080U  | 
123  |  | /* Any appropriate signature auth (for TLS 1.3 ciphersuites) */  | 
124  | 0  | # define SSL_aANY                0x00000000U  | 
125  |  | /* All bits requiring a certificate */  | 
126  |  | #define SSL_aCERT \  | 
127  | 0  |     (SSL_aRSA | SSL_aDSS | SSL_aECDSA | SSL_aGOST01 | SSL_aGOST12)  | 
128  |  |  | 
129  |  | /* Bits for algorithm_enc (symmetric encryption) */  | 
130  | 0  | # define SSL_DES                 0x00000001U  | 
131  | 0  | # define SSL_3DES                0x00000002U  | 
132  | 0  | # define SSL_RC4                 0x00000004U  | 
133  | 0  | # define SSL_RC2                 0x00000008U  | 
134  | 0  | # define SSL_IDEA                0x00000010U  | 
135  | 0  | # define SSL_eNULL               0x00000020U  | 
136  | 0  | # define SSL_AES128              0x00000040U  | 
137  | 0  | # define SSL_AES256              0x00000080U  | 
138  | 0  | # define SSL_CAMELLIA128         0x00000100U  | 
139  | 0  | # define SSL_CAMELLIA256         0x00000200U  | 
140  | 0  | # define SSL_eGOST2814789CNT     0x00000400U  | 
141  | 0  | # define SSL_SEED                0x00000800U  | 
142  | 0  | # define SSL_AES128GCM           0x00001000U  | 
143  | 0  | # define SSL_AES256GCM           0x00002000U  | 
144  | 0  | # define SSL_AES128CCM           0x00004000U  | 
145  | 0  | # define SSL_AES256CCM           0x00008000U  | 
146  | 0  | # define SSL_AES128CCM8          0x00010000U  | 
147  | 0  | # define SSL_AES256CCM8          0x00020000U  | 
148  | 0  | # define SSL_eGOST2814789CNT12   0x00040000U  | 
149  | 0  | # define SSL_CHACHA20POLY1305    0x00080000U  | 
150  | 0  | # define SSL_ARIA128GCM          0x00100000U  | 
151  | 0  | # define SSL_ARIA256GCM          0x00200000U  | 
152  | 0  | # define SSL_MAGMA               0x00400000U  | 
153  | 0  | # define SSL_KUZNYECHIK          0x00800000U  | 
154  |  |  | 
155  | 0  | # define SSL_AESGCM              (SSL_AES128GCM | SSL_AES256GCM)  | 
156  | 0  | # define SSL_AESCCM              (SSL_AES128CCM | SSL_AES256CCM | SSL_AES128CCM8 | SSL_AES256CCM8)  | 
157  | 0  | # define SSL_AES                 (SSL_AES128|SSL_AES256|SSL_AESGCM|SSL_AESCCM)  | 
158  |  | # define SSL_CAMELLIA            (SSL_CAMELLIA128|SSL_CAMELLIA256)  | 
159  | 0  | # define SSL_CHACHA20            (SSL_CHACHA20POLY1305)  | 
160  | 0  | # define SSL_ARIAGCM             (SSL_ARIA128GCM | SSL_ARIA256GCM)  | 
161  |  | # define SSL_ARIA                (SSL_ARIAGCM)  | 
162  |  | # define SSL_CBC                 (SSL_DES | SSL_3DES | SSL_RC2 | SSL_IDEA \  | 
163  |  |                                   | SSL_AES128 | SSL_AES256 | SSL_CAMELLIA128 \  | 
164  |  |                                   | SSL_CAMELLIA256 | SSL_SEED)  | 
165  |  |  | 
166  |  | /* Bits for algorithm_mac (symmetric authentication) */  | 
167  |  |  | 
168  | 0  | # define SSL_MD5                 0x00000001U  | 
169  | 0  | # define SSL_SHA1                0x00000002U  | 
170  | 0  | # define SSL_GOST94      0x00000004U  | 
171  | 0  | # define SSL_GOST89MAC   0x00000008U  | 
172  | 0  | # define SSL_SHA256              0x00000010U  | 
173  | 0  | # define SSL_SHA384              0x00000020U  | 
174  |  | /* Not a real MAC, just an indication it is part of cipher */  | 
175  | 0  | # define SSL_AEAD                0x00000040U  | 
176  | 0  | # define SSL_GOST12_256          0x00000080U  | 
177  | 0  | # define SSL_GOST89MAC12         0x00000100U  | 
178  | 0  | # define SSL_GOST12_512          0x00000200U  | 
179  | 0  | # define SSL_MAGMAOMAC           0x00000400U  | 
180  | 0  | # define SSL_KUZNYECHIKOMAC      0x00000800U  | 
181  |  |  | 
182  |  | /*  | 
183  |  |  * When adding new digest in the ssl_ciph.c and increment SSL_MD_NUM_IDX make  | 
184  |  |  * sure to update this constant too  | 
185  |  |  */  | 
186  |  |  | 
187  | 0  | # define SSL_MD_MD5_IDX  0  | 
188  | 0  | # define SSL_MD_SHA1_IDX 1  | 
189  |  | # define SSL_MD_GOST94_IDX 2  | 
190  | 0  | # define SSL_MD_GOST89MAC_IDX 3  | 
191  | 0  | # define SSL_MD_SHA256_IDX 4  | 
192  | 0  | # define SSL_MD_SHA384_IDX 5  | 
193  |  | # define SSL_MD_GOST12_256_IDX  6  | 
194  | 0  | # define SSL_MD_GOST89MAC12_IDX 7  | 
195  |  | # define SSL_MD_GOST12_512_IDX  8  | 
196  | 0  | # define SSL_MD_MD5_SHA1_IDX 9  | 
197  | 0  | # define SSL_MD_SHA224_IDX 10  | 
198  |  | # define SSL_MD_SHA512_IDX 11  | 
199  | 0  | # define SSL_MD_MAGMAOMAC_IDX 12  | 
200  | 0  | # define SSL_MD_KUZNYECHIKOMAC_IDX 13  | 
201  | 0  | # define SSL_MAX_DIGEST 14  | 
202  |  |  | 
203  | 0  | #define SSL_MD_NUM_IDX  SSL_MAX_DIGEST  | 
204  |  |  | 
205  |  | /* Bits for algorithm2 (handshake digests and other extra flags) */  | 
206  |  |  | 
207  |  | /* Bits 0-7 are handshake MAC */  | 
208  | 0  | # define SSL_HANDSHAKE_MAC_MASK  0xFF  | 
209  | 0  | # define SSL_HANDSHAKE_MAC_MD5_SHA1 SSL_MD_MD5_SHA1_IDX  | 
210  | 0  | # define SSL_HANDSHAKE_MAC_SHA256   SSL_MD_SHA256_IDX  | 
211  | 0  | # define SSL_HANDSHAKE_MAC_SHA384   SSL_MD_SHA384_IDX  | 
212  |  | # define SSL_HANDSHAKE_MAC_GOST94 SSL_MD_GOST94_IDX  | 
213  |  | # define SSL_HANDSHAKE_MAC_GOST12_256 SSL_MD_GOST12_256_IDX  | 
214  |  | # define SSL_HANDSHAKE_MAC_GOST12_512 SSL_MD_GOST12_512_IDX  | 
215  | 0  | # define SSL_HANDSHAKE_MAC_DEFAULT  SSL_HANDSHAKE_MAC_MD5_SHA1  | 
216  |  |  | 
217  |  | /* Bits 8-15 bits are PRF */  | 
218  | 0  | # define TLS1_PRF_DGST_SHIFT 8  | 
219  |  | # define TLS1_PRF_SHA1_MD5 (SSL_MD_MD5_SHA1_IDX << TLS1_PRF_DGST_SHIFT)  | 
220  | 0  | # define TLS1_PRF_SHA256 (SSL_MD_SHA256_IDX << TLS1_PRF_DGST_SHIFT)  | 
221  | 0  | # define TLS1_PRF_SHA384 (SSL_MD_SHA384_IDX << TLS1_PRF_DGST_SHIFT)  | 
222  |  | # define TLS1_PRF_GOST94 (SSL_MD_GOST94_IDX << TLS1_PRF_DGST_SHIFT)  | 
223  |  | # define TLS1_PRF_GOST12_256 (SSL_MD_GOST12_256_IDX << TLS1_PRF_DGST_SHIFT)  | 
224  |  | # define TLS1_PRF_GOST12_512 (SSL_MD_GOST12_512_IDX << TLS1_PRF_DGST_SHIFT)  | 
225  | 0  | # define TLS1_PRF            (SSL_MD_MD5_SHA1_IDX << TLS1_PRF_DGST_SHIFT)  | 
226  |  |  | 
227  |  | /*  | 
228  |  |  * Stream MAC for GOST ciphersuites from cryptopro draft (currently this also  | 
229  |  |  * goes into algorithm2)  | 
230  |  |  */  | 
231  | 0  | # define TLS1_STREAM_MAC 0x10000  | 
232  |  | /*  | 
233  |  |  * TLSTREE cipher/mac key derivation from draft-smyshlyaev-tls12-gost-suites  | 
234  |  |  * (currently this also  goes into algorithm2)  | 
235  |  |  */  | 
236  | 0  | # define TLS1_TLSTREE 0x20000  | 
237  |  |  | 
238  |  | /* Ciphersuite supported in QUIC */  | 
239  | 0  | # define SSL_QUIC                0x00040000U  | 
240  |  |  | 
241  | 0  | # define SSL_STRONG_MASK         0x0000001FU  | 
242  | 0  | # define SSL_DEFAULT_MASK        0X00000020U  | 
243  |  |  | 
244  |  | # define SSL_STRONG_NONE         0x00000001U  | 
245  |  | # define SSL_LOW                 0x00000002U  | 
246  |  | # define SSL_MEDIUM              0x00000004U  | 
247  |  | # define SSL_HIGH                0x00000008U  | 
248  |  | # define SSL_FIPS                0x00000010U  | 
249  |  | # define SSL_NOT_DEFAULT         0x00000020U  | 
250  |  |  | 
251  |  | /* we have used 0000003f - 26 bits left to go */  | 
252  |  |  | 
253  |  | /* Flag used on OpenSSL ciphersuite ids to indicate they are for SSLv3+ */  | 
254  | 0  | # define SSL3_CK_CIPHERSUITE_FLAG                0x03000000  | 
255  |  |  | 
256  |  | /* Check if an SSL structure is using DTLS */  | 
257  |  | # define SSL_CONNECTION_IS_DTLS(s) \  | 
258  | 0  |     (SSL_CONNECTION_GET_SSL(s)->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)  | 
259  |  |  | 
260  |  | /* Check if an SSL_CTX structure is using DTLS */  | 
261  |  | # define SSL_CTX_IS_DTLS(ctx) \  | 
262  | 0  |     (ctx->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)  | 
263  |  |  | 
264  |  | /* Check if we are using TLSv1.3 */  | 
265  | 0  | # define SSL_CONNECTION_IS_TLS13(s) (!SSL_CONNECTION_IS_DTLS(s) \  | 
266  | 0  |     && SSL_CONNECTION_GET_SSL(s)->method->version >= TLS1_3_VERSION \  | 
267  | 0  |     && SSL_CONNECTION_GET_SSL(s)->method->version != TLS_ANY_VERSION)  | 
268  |  |  | 
269  |  | # define SSL_CONNECTION_TREAT_AS_TLS13(s) \  | 
270  | 0  |     (SSL_CONNECTION_IS_TLS13(s) \  | 
271  | 0  |      || (s)->early_data_state == SSL_EARLY_DATA_CONNECTING \  | 
272  | 0  |      || (s)->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY \  | 
273  | 0  |      || (s)->early_data_state == SSL_EARLY_DATA_WRITING \  | 
274  | 0  |      || (s)->early_data_state == SSL_EARLY_DATA_WRITE_RETRY \  | 
275  | 0  |      || (s)->hello_retry_request == SSL_HRR_PENDING)  | 
276  |  |  | 
277  | 0  | # define SSL_IS_FIRST_HANDSHAKE(s) ((s)->s3.tmp.finish_md_len == 0 \  | 
278  | 0  |                                     || (s)->s3.tmp.peer_finish_md_len == 0)  | 
279  |  |  | 
280  |  | /*  | 
281  |  |  * See if we use signature algorithms extension and signature algorithm  | 
282  |  |  * before signatures.  | 
283  |  |  */  | 
284  |  | # define SSL_USE_SIGALGS(s)      \  | 
285  | 0  |     (SSL_CONNECTION_GET_SSL(s)->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SIGALGS)  | 
286  |  | /*  | 
287  |  |  * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may  | 
288  |  |  * apply to others in future.  | 
289  |  |  */  | 
290  |  | # define SSL_USE_TLS1_2_CIPHERS(s)       \  | 
291  |  |     (SSL_CONNECTION_GET_SSL(s)->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS)  | 
292  |  |  | 
293  |  | # define IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value) \  | 
294  | 0  |     (((value) >= TLSEXT_max_fragment_length_512) && \  | 
295  | 0  |      ((value) <= TLSEXT_max_fragment_length_4096))  | 
296  |  | # define USE_MAX_FRAGMENT_LENGTH_EXT(session) \  | 
297  | 0  |     IS_MAX_FRAGMENT_LENGTH_EXT_VALID(session->ext.max_fragment_len_mode)  | 
298  |  | # define GET_MAX_FRAGMENT_LENGTH(session) \  | 
299  | 0  |     (512U << (session->ext.max_fragment_len_mode - 1))  | 
300  |  |  | 
301  | 0  | # define SSL_READ_ETM(s) (s->s3.flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_READ)  | 
302  | 0  | # define SSL_WRITE_ETM(s) (s->s3.flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE)  | 
303  |  |  | 
304  | 0  | # define SSL_IS_QUIC_HANDSHAKE(s) (((s)->s3.flags & TLS1_FLAGS_QUIC) != 0)  | 
305  | 0  | # define SSL_IS_QUIC_INT_HANDSHAKE(s) (((s)->s3.flags & TLS1_FLAGS_QUIC_INTERNAL) != 0)  | 
306  |  |  | 
307  |  | /* no end of early data */  | 
308  | 0  | # define SSL_NO_EOED(s) SSL_IS_QUIC_HANDSHAKE(s)  | 
309  |  |  | 
310  |  | /* alert_dispatch values */  | 
311  |  |  | 
312  |  | /* No alert pending */  | 
313  | 0  | # define SSL_ALERT_DISPATCH_NONE    0  | 
314  |  | /* Alert pending */  | 
315  | 0  | # define SSL_ALERT_DISPATCH_PENDING 1  | 
316  |  | /* Pending alert write needs to be retried */  | 
317  | 0  | # define SSL_ALERT_DISPATCH_RETRY   2  | 
318  |  |  | 
319  |  | /* Mostly for SSLv3 */  | 
320  | 0  | # define SSL_PKEY_RSA            0  | 
321  | 0  | # define SSL_PKEY_RSA_PSS_SIGN   1  | 
322  | 0  | # define SSL_PKEY_DSA_SIGN       2  | 
323  | 0  | # define SSL_PKEY_ECC            3  | 
324  | 0  | # define SSL_PKEY_GOST01         4  | 
325  | 0  | # define SSL_PKEY_GOST12_256     5  | 
326  | 0  | # define SSL_PKEY_GOST12_512     6  | 
327  | 0  | # define SSL_PKEY_ED25519        7  | 
328  | 0  | # define SSL_PKEY_ED448          8  | 
329  | 0  | # define SSL_PKEY_NUM            9  | 
330  |  |  | 
331  |  | # define SSL_ENC_DES_IDX         0  | 
332  |  | # define SSL_ENC_3DES_IDX        1  | 
333  |  | # define SSL_ENC_RC4_IDX         2  | 
334  |  | # define SSL_ENC_RC2_IDX         3  | 
335  |  | # define SSL_ENC_IDEA_IDX        4  | 
336  | 0  | # define SSL_ENC_NULL_IDX        5  | 
337  |  | # define SSL_ENC_AES128_IDX      6  | 
338  |  | # define SSL_ENC_AES256_IDX      7  | 
339  |  | # define SSL_ENC_CAMELLIA128_IDX 8  | 
340  |  | # define SSL_ENC_CAMELLIA256_IDX 9  | 
341  |  | # define SSL_ENC_GOST89_IDX      10  | 
342  |  | # define SSL_ENC_SEED_IDX        11  | 
343  |  | # define SSL_ENC_AES128GCM_IDX   12  | 
344  |  | # define SSL_ENC_AES256GCM_IDX   13  | 
345  |  | # define SSL_ENC_AES128CCM_IDX   14  | 
346  |  | # define SSL_ENC_AES256CCM_IDX   15  | 
347  |  | # define SSL_ENC_AES128CCM8_IDX  16  | 
348  |  | # define SSL_ENC_AES256CCM8_IDX  17  | 
349  |  | # define SSL_ENC_GOST8912_IDX    18  | 
350  |  | # define SSL_ENC_CHACHA_IDX      19  | 
351  |  | # define SSL_ENC_ARIA128GCM_IDX  20  | 
352  |  | # define SSL_ENC_ARIA256GCM_IDX  21  | 
353  |  | # define SSL_ENC_MAGMA_IDX       22  | 
354  |  | # define SSL_ENC_KUZNYECHIK_IDX  23  | 
355  | 0  | # define SSL_ENC_NUM_IDX         24  | 
356  |  |  | 
357  |  | /*-  | 
358  |  |  * SSL_kRSA <- RSA_ENC  | 
359  |  |  * SSL_kDH  <- DH_ENC & (RSA_ENC | RSA_SIGN | DSA_SIGN)  | 
360  |  |  * SSL_kDHE <- RSA_ENC | RSA_SIGN | DSA_SIGN  | 
361  |  |  * SSL_aRSA <- RSA_ENC | RSA_SIGN  | 
362  |  |  * SSL_aDSS <- DSA_SIGN  | 
363  |  |  */  | 
364  |  |  | 
365  |  | /* Certificate Type State */  | 
366  | 0  | # define OSSL_CERT_TYPE_CTOS_NONE    0  | 
367  | 0  | # define OSSL_CERT_TYPE_CTOS_GOOD    1  | 
368  | 0  | # define OSSL_CERT_TYPE_CTOS_ERROR   2  | 
369  |  |  | 
370  |  | /* Post-Handshake Authentication state */  | 
371  |  | typedef enum { | 
372  |  |     SSL_PHA_NONE = 0,  | 
373  |  |     SSL_PHA_EXT_SENT,        /* client-side only: extension sent */  | 
374  |  |     SSL_PHA_EXT_RECEIVED,    /* server-side only: extension received */  | 
375  |  |     SSL_PHA_REQUEST_PENDING, /* server-side only: request pending */  | 
376  |  |     SSL_PHA_REQUESTED        /* request received by client, or sent by server */  | 
377  |  | } SSL_PHA_STATE;  | 
378  |  |  | 
379  |  | /* CipherSuite length. SSLv3 and all TLS versions. */  | 
380  | 0  | # define TLS_CIPHER_LEN 2  | 
381  |  | /* used to hold info on the particular ciphers used */  | 
382  |  | struct ssl_cipher_st { | 
383  |  |     uint32_t valid;  | 
384  |  |     const char *name;           /* text name */  | 
385  |  |     const char *stdname;        /* RFC name */  | 
386  |  |     uint32_t id;                /* id, 4 bytes, first is version */  | 
387  |  |     /*  | 
388  |  |      * changed in 1.0.0: these four used to be portions of a single value  | 
389  |  |      * 'algorithms'  | 
390  |  |      */  | 
391  |  |     uint32_t algorithm_mkey;    /* key exchange algorithm */  | 
392  |  |     uint32_t algorithm_auth;    /* server authentication */  | 
393  |  |     uint32_t algorithm_enc;     /* symmetric encryption */  | 
394  |  |     uint32_t algorithm_mac;     /* symmetric authentication */  | 
395  |  |     int min_tls;                /* minimum SSL/TLS protocol version */  | 
396  |  |     int max_tls;                /* maximum SSL/TLS protocol version */  | 
397  |  |     int min_dtls;               /* minimum DTLS protocol version */  | 
398  |  |     int max_dtls;               /* maximum DTLS protocol version */  | 
399  |  |     uint32_t algo_strength;     /* strength and export flags */  | 
400  |  |     uint32_t algorithm2;        /* Extra flags */  | 
401  |  |     int32_t strength_bits;      /* Number of bits really used */  | 
402  |  |     uint32_t alg_bits;          /* Number of bits for algorithm */  | 
403  |  | };  | 
404  |  |  | 
405  |  | /* Used to hold SSL/TLS functions */  | 
406  |  | struct ssl_method_st { | 
407  |  |     int version;  | 
408  |  |     unsigned flags;  | 
409  |  |     uint64_t mask;  | 
410  |  |     SSL *(*ssl_new) (SSL_CTX *ctx);  | 
411  |  |     void (*ssl_free) (SSL *s);  | 
412  |  |     int (*ssl_reset) (SSL *s);  | 
413  |  |     int (*ssl_init) (SSL *s);  | 
414  |  |     int (*ssl_clear) (SSL *s);  | 
415  |  |     void (*ssl_deinit) (SSL *s);  | 
416  |  |     int (*ssl_accept) (SSL *s);  | 
417  |  |     int (*ssl_connect) (SSL *s);  | 
418  |  |     int (*ssl_read) (SSL *s, void *buf, size_t len, size_t *readbytes);  | 
419  |  |     int (*ssl_peek) (SSL *s, void *buf, size_t len, size_t *readbytes);  | 
420  |  |     int (*ssl_write) (SSL *s, const void *buf, size_t len, size_t *written);  | 
421  |  |     int (*ssl_shutdown) (SSL *s);  | 
422  |  |     int (*ssl_renegotiate) (SSL *s);  | 
423  |  |     int (*ssl_renegotiate_check) (SSL *s, int);  | 
424  |  |     int (*ssl_read_bytes) (SSL *s, uint8_t type, uint8_t *recvd_type,  | 
425  |  |                            unsigned char *buf, size_t len, int peek,  | 
426  |  |                            size_t *readbytes);  | 
427  |  |     int (*ssl_write_bytes) (SSL *s, uint8_t type, const void *buf_, size_t len,  | 
428  |  |                             size_t *written);  | 
429  |  |     int (*ssl_dispatch_alert) (SSL *s);  | 
430  |  |     long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg);  | 
431  |  |     long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg);  | 
432  |  |     const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr);  | 
433  |  |     int (*put_cipher_by_char) (const SSL_CIPHER *cipher, WPACKET *pkt,  | 
434  |  |                                size_t *len);  | 
435  |  |     size_t (*ssl_pending) (const SSL *s);  | 
436  |  |     int (*num_ciphers) (void);  | 
437  |  |     const SSL_CIPHER *(*get_cipher) (unsigned ncipher);  | 
438  |  |     OSSL_TIME (*get_timeout) (void);  | 
439  |  |     const struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */  | 
440  |  |     int (*ssl_version) (void);  | 
441  |  |     long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void));  | 
442  |  |     long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void));  | 
443  |  | };  | 
444  |  |  | 
445  |  | /*  | 
446  |  |  * Matches the length of PSK_MAX_PSK_LEN. We keep it the same value for  | 
447  |  |  * consistency, even in the event of OPENSSL_NO_PSK being defined.  | 
448  |  |  */  | 
449  | 0  | # define TLS13_MAX_RESUMPTION_PSK_LENGTH      512  | 
450  |  |  | 
451  |  | /*-  | 
452  |  |  * Lets make this into an ASN.1 type structure as follows  | 
453  |  |  * SSL_SESSION_ID ::= SEQUENCE { | 
454  |  |  *      version                 INTEGER,        -- structure version number  | 
455  |  |  *      SSLversion              INTEGER,        -- SSL version number  | 
456  |  |  *      Cipher                  OCTET STRING,   -- the 3 byte cipher ID  | 
457  |  |  *      Session_ID              OCTET STRING,   -- the Session ID  | 
458  |  |  *      Master_key              OCTET STRING,   -- the master key  | 
459  |  |  *      Key_Arg [ 0 ] IMPLICIT  OCTET STRING,   -- the optional Key argument  | 
460  |  |  *      Time [ 1 ] EXPLICIT     INTEGER,        -- optional Start Time  | 
461  |  |  *      Timeout [ 2 ] EXPLICIT  INTEGER,        -- optional Timeout ins seconds  | 
462  |  |  *      Peer [ 3 ] EXPLICIT     X509,           -- optional Peer Certificate  | 
463  |  |  *      Session_ID_context [ 4 ] EXPLICIT OCTET STRING,   -- the Session ID context  | 
464  |  |  *      Verify_result [ 5 ] EXPLICIT INTEGER,   -- X509_V_... code for `Peer'  | 
465  |  |  *      HostName [ 6 ] EXPLICIT OCTET STRING,   -- optional HostName from servername TLS extension  | 
466  |  |  *      PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint  | 
467  |  |  *      PSK_identity [ 8 ] EXPLICIT OCTET STRING,  -- optional PSK identity  | 
468  |  |  *      Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket  | 
469  |  |  *      Ticket [10]             EXPLICIT OCTET STRING, -- session ticket (clients only)  | 
470  |  |  *      Compression_meth [11]   EXPLICIT OCTET STRING, -- optional compression method  | 
471  |  |  *      SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username  | 
472  |  |  *      flags [ 13 ] EXPLICIT INTEGER -- optional flags  | 
473  |  |  *      }  | 
474  |  |  * Look in ssl/ssl_asn1.c for more details  | 
475  |  |  * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).  | 
476  |  |  */  | 
477  |  | struct ssl_session_st { | 
478  |  |     int ssl_version;            /* what ssl version session info is being kept  | 
479  |  |                                  * in here? */  | 
480  |  |     size_t master_key_length;  | 
481  |  |  | 
482  |  |     /* TLSv1.3 early_secret used for external PSKs */  | 
483  |  |     unsigned char early_secret[EVP_MAX_MD_SIZE];  | 
484  |  |     /*  | 
485  |  |      * For <=TLS1.2 this is the master_key. For TLS1.3 this is the resumption  | 
486  |  |      * PSK  | 
487  |  |      */  | 
488  |  |     unsigned char master_key[TLS13_MAX_RESUMPTION_PSK_LENGTH];  | 
489  |  |     /* session_id - valid? */  | 
490  |  |     size_t session_id_length;  | 
491  |  |     unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];  | 
492  |  |     /*  | 
493  |  |      * this is used to determine whether the session is being reused in the  | 
494  |  |      * appropriate context. It is up to the application to set this, via  | 
495  |  |      * SSL_new  | 
496  |  |      */  | 
497  |  |     size_t sid_ctx_length;  | 
498  |  |     unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];  | 
499  |  | # ifndef OPENSSL_NO_PSK  | 
500  |  |     char *psk_identity_hint;  | 
501  |  |     char *psk_identity;  | 
502  |  | # endif  | 
503  |  |     /*  | 
504  |  |      * Used to indicate that session resumption is not allowed. Applications  | 
505  |  |      * can also set this bit for a new session via not_resumable_session_cb  | 
506  |  |      * to disable session caching and tickets.  | 
507  |  |      */  | 
508  |  |     int not_resumable;  | 
509  |  |     /* Peer raw public key, if available */  | 
510  |  |     EVP_PKEY *peer_rpk;  | 
511  |  |     /* This is the cert and type for the other end. */  | 
512  |  |     X509 *peer;  | 
513  |  |     /* Certificate chain peer sent. */  | 
514  |  |     STACK_OF(X509) *peer_chain;  | 
515  |  |     /*  | 
516  |  |      * when app_verify_callback accepts a session where the peer's  | 
517  |  |      * certificate is not ok, we must remember the error for session reuse:  | 
518  |  |      */  | 
519  |  |     long verify_result;         /* only for servers */  | 
520  |  |     OSSL_TIME timeout;  | 
521  |  |     OSSL_TIME time;  | 
522  |  |     OSSL_TIME calc_timeout;  | 
523  |  |     unsigned int compress_meth; /* Need to lookup the method */  | 
524  |  |     const SSL_CIPHER *cipher;  | 
525  |  |     unsigned long cipher_id;    /* when ASN.1 loaded, this needs to be used to  | 
526  |  |                                  * load the 'cipher' structure */  | 
527  |  |     unsigned int kex_group;      /* TLS group from key exchange */  | 
528  |  |     CRYPTO_EX_DATA ex_data;     /* application specific data */  | 
529  |  |  | 
530  |  |     struct { | 
531  |  |         char *hostname;  | 
532  |  |         /* RFC4507 info */  | 
533  |  |         unsigned char *tick; /* Session ticket */  | 
534  |  |         size_t ticklen;      /* Session ticket length */  | 
535  |  |         /* Session lifetime hint in seconds */  | 
536  |  |         unsigned long tick_lifetime_hint;  | 
537  |  |         uint32_t tick_age_add;  | 
538  |  |         /* Max number of bytes that can be sent as early data */  | 
539  |  |         uint32_t max_early_data;  | 
540  |  |         /* The ALPN protocol selected for this session */  | 
541  |  |         unsigned char *alpn_selected;  | 
542  |  |         size_t alpn_selected_len;  | 
543  |  |         /*  | 
544  |  |          * Maximum Fragment Length as per RFC 4366.  | 
545  |  |          * If this value does not contain RFC 4366 allowed values (1-4) then  | 
546  |  |          * either the Maximum Fragment Length Negotiation failed or was not  | 
547  |  |          * performed at all.  | 
548  |  |          */  | 
549  |  |         uint8_t max_fragment_len_mode;  | 
550  |  |     } ext;  | 
551  |  | # ifndef OPENSSL_NO_SRP  | 
552  |  |     char *srp_username;  | 
553  |  | # endif  | 
554  |  |     unsigned char *ticket_appdata;  | 
555  |  |     size_t ticket_appdata_len;  | 
556  |  |     uint32_t flags;  | 
557  |  |     SSL_CTX *owner;  | 
558  |  |  | 
559  |  |     /*  | 
560  |  |      * These are used to make removal of session-ids more efficient and to  | 
561  |  |      * implement a maximum cache size. Access requires protection of ctx->lock.  | 
562  |  |      */  | 
563  |  |     struct ssl_session_st *prev, *next;  | 
564  |  |     CRYPTO_REF_COUNT references;  | 
565  |  | };  | 
566  |  |  | 
567  |  | /* Extended master secret support */  | 
568  | 0  | # define SSL_SESS_FLAG_EXTMS             0x1  | 
569  |  |  | 
570  |  | # ifndef OPENSSL_NO_SRP  | 
571  |  |  | 
572  |  | typedef struct srp_ctx_st { | 
573  |  |     /* param for all the callbacks */  | 
574  |  |     void *SRP_cb_arg;  | 
575  |  |     /* set client Hello login callback */  | 
576  |  |     int (*TLS_ext_srp_username_callback) (SSL *, int *, void *);  | 
577  |  |     /* set SRP N/g param callback for verification */  | 
578  |  |     int (*SRP_verify_param_callback) (SSL *, void *);  | 
579  |  |     /* set SRP client passwd callback */  | 
580  |  |     char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *);  | 
581  |  |     char *login;  | 
582  |  |     BIGNUM *N, *g, *s, *B, *A;  | 
583  |  |     BIGNUM *a, *b, *v;  | 
584  |  |     char *info;  | 
585  |  |     int strength;  | 
586  |  |     unsigned long srp_Mask;  | 
587  |  | } SRP_CTX;  | 
588  |  |  | 
589  |  | # endif  | 
590  |  |  | 
591  |  | typedef enum { | 
592  |  |     SSL_EARLY_DATA_NONE = 0,  | 
593  |  |     SSL_EARLY_DATA_CONNECT_RETRY,  | 
594  |  |     SSL_EARLY_DATA_CONNECTING,  | 
595  |  |     SSL_EARLY_DATA_WRITE_RETRY,  | 
596  |  |     SSL_EARLY_DATA_WRITING,  | 
597  |  |     SSL_EARLY_DATA_WRITE_FLUSH,  | 
598  |  |     SSL_EARLY_DATA_UNAUTH_WRITING,  | 
599  |  |     SSL_EARLY_DATA_FINISHED_WRITING,  | 
600  |  |     SSL_EARLY_DATA_ACCEPT_RETRY,  | 
601  |  |     SSL_EARLY_DATA_ACCEPTING,  | 
602  |  |     SSL_EARLY_DATA_READ_RETRY,  | 
603  |  |     SSL_EARLY_DATA_READING,  | 
604  |  |     SSL_EARLY_DATA_FINISHED_READING  | 
605  |  | } SSL_EARLY_DATA_STATE;  | 
606  |  |  | 
607  |  | /*  | 
608  |  |  * We check that the amount of unreadable early data doesn't exceed  | 
609  |  |  * max_early_data. max_early_data is given in plaintext bytes. However if it is  | 
610  |  |  * unreadable then we only know the number of ciphertext bytes. We also don't  | 
611  |  |  * know how much the overhead should be because it depends on the ciphersuite.  | 
612  |  |  * We make a small allowance. We assume 5 records of actual data plus the end  | 
613  |  |  * of early data alert record. Each record has a tag and a content type byte.  | 
614  |  |  * The longest tag length we know of is EVP_GCM_TLS_TAG_LEN. We don't count the  | 
615  |  |  * content of the alert record either which is 2 bytes.  | 
616  |  |  */  | 
617  | 0  | # define EARLY_DATA_CIPHERTEXT_OVERHEAD ((6 * (EVP_GCM_TLS_TAG_LEN + 1)) + 2)  | 
618  |  |  | 
619  |  | /*  | 
620  |  |  * The allowance we have between the client's calculated ticket age and our own.  | 
621  |  |  * We allow for 10 seconds. If a ticket is presented and the  | 
622  |  |  * client's age calculation is different by more than this than our own then we  | 
623  |  |  * do not allow that ticket for early_data.  | 
624  |  |  */  | 
625  | 0  | # define TICKET_AGE_ALLOWANCE   ossl_seconds2time(10)  | 
626  |  |  | 
627  | 0  | #define MAX_COMPRESSIONS_SIZE   255  | 
628  |  |  | 
629  |  |  | 
630  |  | typedef struct raw_extension_st { | 
631  |  |     /* Raw packet data for the extension */  | 
632  |  |     PACKET data;  | 
633  |  |     /* Set to 1 if the extension is present or 0 otherwise */  | 
634  |  |     int present;  | 
635  |  |     /* Set to 1 if we have already parsed the extension or 0 otherwise */  | 
636  |  |     int parsed;  | 
637  |  |     /* The type of this extension, i.e. a TLSEXT_TYPE_* value */  | 
638  |  |     unsigned int type;  | 
639  |  |     /* Track what order extensions are received in (0-based). */  | 
640  |  |     size_t received_order;  | 
641  |  | } RAW_EXTENSION;  | 
642  |  |  | 
643  |  | typedef struct { | 
644  |  |     unsigned int isv2;  | 
645  |  |     unsigned int legacy_version;  | 
646  |  |     unsigned char random[SSL3_RANDOM_SIZE];  | 
647  |  |     size_t session_id_len;  | 
648  |  |     unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];  | 
649  |  |     size_t dtls_cookie_len;  | 
650  |  |     unsigned char dtls_cookie[DTLS1_COOKIE_LENGTH];  | 
651  |  |     PACKET ciphersuites;  | 
652  |  |     size_t compressions_len;  | 
653  |  |     unsigned char compressions[MAX_COMPRESSIONS_SIZE];  | 
654  |  |     PACKET extensions;  | 
655  |  |     size_t pre_proc_exts_len;  | 
656  |  |     RAW_EXTENSION *pre_proc_exts;  | 
657  |  | } CLIENTHELLO_MSG;  | 
658  |  |  | 
659  |  | /*  | 
660  |  |  * Extension index values NOTE: Any updates to these defines should be mirrored  | 
661  |  |  * with equivalent updates to ext_defs in extensions.c  | 
662  |  |  */  | 
663  |  | typedef enum tlsext_index_en { | 
664  |  |     TLSEXT_IDX_renegotiate,  | 
665  |  |     TLSEXT_IDX_server_name,  | 
666  |  |     TLSEXT_IDX_max_fragment_length,  | 
667  |  |     TLSEXT_IDX_srp,  | 
668  |  |     TLSEXT_IDX_ec_point_formats,  | 
669  |  |     TLSEXT_IDX_supported_groups,  | 
670  |  |     TLSEXT_IDX_session_ticket,  | 
671  |  |     TLSEXT_IDX_status_request,  | 
672  |  |     TLSEXT_IDX_next_proto_neg,  | 
673  |  |     TLSEXT_IDX_application_layer_protocol_negotiation,  | 
674  |  |     TLSEXT_IDX_use_srtp,  | 
675  |  |     TLSEXT_IDX_encrypt_then_mac,  | 
676  |  |     TLSEXT_IDX_signed_certificate_timestamp,  | 
677  |  |     TLSEXT_IDX_extended_master_secret,  | 
678  |  |     TLSEXT_IDX_signature_algorithms_cert,  | 
679  |  |     TLSEXT_IDX_post_handshake_auth,  | 
680  |  |     TLSEXT_IDX_client_cert_type,  | 
681  |  |     TLSEXT_IDX_server_cert_type,  | 
682  |  |     TLSEXT_IDX_signature_algorithms,  | 
683  |  |     TLSEXT_IDX_supported_versions,  | 
684  |  |     TLSEXT_IDX_psk_kex_modes,  | 
685  |  |     TLSEXT_IDX_key_share,  | 
686  |  |     TLSEXT_IDX_cookie,  | 
687  |  |     TLSEXT_IDX_cryptopro_bug,  | 
688  |  |     TLSEXT_IDX_compress_certificate,  | 
689  |  |     TLSEXT_IDX_early_data,  | 
690  |  |     TLSEXT_IDX_certificate_authorities,  | 
691  |  |     TLSEXT_IDX_padding,  | 
692  |  |     TLSEXT_IDX_psk,  | 
693  |  |     /* Dummy index - must always be the last entry */  | 
694  |  |     TLSEXT_IDX_num_builtins  | 
695  |  | } TLSEXT_INDEX;  | 
696  |  |  | 
697  |  | DEFINE_LHASH_OF_EX(SSL_SESSION);  | 
698  |  | /* Needed in ssl_cert.c */  | 
699  |  | DEFINE_LHASH_OF_EX(X509_NAME);  | 
700  |  |  | 
701  | 0  | # define TLSEXT_KEYNAME_LENGTH  16  | 
702  |  | # define TLSEXT_TICK_KEY_LENGTH 32  | 
703  |  |  | 
704  |  | typedef struct ssl_ctx_ext_secure_st { | 
705  |  |     unsigned char tick_hmac_key[TLSEXT_TICK_KEY_LENGTH];  | 
706  |  |     unsigned char tick_aes_key[TLSEXT_TICK_KEY_LENGTH];  | 
707  |  | } SSL_CTX_EXT_SECURE;  | 
708  |  |  | 
709  |  | /*  | 
710  |  |  * Helper function for HMAC  | 
711  |  |  * The structure should be considered opaque, it will change once the low  | 
712  |  |  * level deprecated calls are removed.  At that point it can be replaced  | 
713  |  |  * by EVP_MAC_CTX and most of the functions converted to macros or inlined  | 
714  |  |  * directly.  | 
715  |  |  */  | 
716  |  | typedef struct ssl_hmac_st { | 
717  |  |     EVP_MAC_CTX *ctx;  | 
718  |  | # ifndef OPENSSL_NO_DEPRECATED_3_0  | 
719  |  |     HMAC_CTX *old_ctx;  | 
720  |  | # endif  | 
721  |  | } SSL_HMAC;  | 
722  |  |  | 
723  |  | SSL_HMAC *ssl_hmac_new(const SSL_CTX *ctx);  | 
724  |  | void ssl_hmac_free(SSL_HMAC *ctx);  | 
725  |  | # ifndef OPENSSL_NO_DEPRECATED_3_0  | 
726  |  | HMAC_CTX *ssl_hmac_get0_HMAC_CTX(SSL_HMAC *ctx);  | 
727  |  | # endif  | 
728  |  | EVP_MAC_CTX *ssl_hmac_get0_EVP_MAC_CTX(SSL_HMAC *ctx);  | 
729  |  | int ssl_hmac_init(SSL_HMAC *ctx, void *key, size_t len, char *md);  | 
730  |  | int ssl_hmac_update(SSL_HMAC *ctx, const unsigned char *data, size_t len);  | 
731  |  | int ssl_hmac_final(SSL_HMAC *ctx, unsigned char *md, size_t *len,  | 
732  |  |                    size_t max_size);  | 
733  |  | size_t ssl_hmac_size(const SSL_HMAC *ctx);  | 
734  |  |  | 
735  |  | int ssl_get_EC_curve_nid(const EVP_PKEY *pkey);  | 
736  |  | __owur int tls13_set_encoded_pub_key(EVP_PKEY *pkey,  | 
737  |  |                                      const unsigned char *enckey,  | 
738  |  |                                      size_t enckeylen);  | 
739  |  |  | 
740  |  | typedef struct tls_group_info_st { | 
741  |  |     char *tlsname;           /* Curve Name as in TLS specs */  | 
742  |  |     char *realname;          /* Curve Name according to provider */  | 
743  |  |     char *algorithm;         /* Algorithm name to fetch */  | 
744  |  |     unsigned int secbits;    /* Bits of security (from SP800-57) */  | 
745  |  |     uint16_t group_id;       /* Group ID */  | 
746  |  |     int mintls;              /* Minimum TLS version, -1 unsupported */  | 
747  |  |     int maxtls;              /* Maximum TLS version (or 0 for undefined) */  | 
748  |  |     int mindtls;             /* Minimum DTLS version, -1 unsupported */  | 
749  |  |     int maxdtls;             /* Maximum DTLS version (or 0 for undefined) */  | 
750  |  |     char is_kem;             /* Mode for this Group: 0 is KEX, 1 is KEM */  | 
751  |  | } TLS_GROUP_INFO;  | 
752  |  |  | 
753  |  | typedef struct tls_sigalg_info_st { | 
754  |  |     char *name;              /* name as in IANA TLS specs */  | 
755  |  |     uint16_t code_point;     /* IANA-specified code point of sigalg-name */  | 
756  |  |     char *sigalg_name;       /* (combined) sigalg name */  | 
757  |  |     char *sigalg_oid;        /* (combined) sigalg OID */  | 
758  |  |     char *sig_name;          /* pure signature algorithm name */  | 
759  |  |     char *sig_oid;           /* pure signature algorithm OID */  | 
760  |  |     char *hash_name;         /* hash algorithm name */  | 
761  |  |     char *hash_oid;          /* hash algorithm OID */  | 
762  |  |     char *keytype;           /* keytype name */  | 
763  |  |     char *keytype_oid;       /* keytype OID */  | 
764  |  |     unsigned int secbits;    /* Bits of security (from SP800-57) */  | 
765  |  |     int mintls;              /* Minimum TLS version, -1 unsupported */  | 
766  |  |     int maxtls;              /* Maximum TLS version (or 0 for undefined) */  | 
767  |  |     int mindtls;             /* Minimum DTLS version, -1 unsupported */  | 
768  |  |     int maxdtls;             /* Maximum DTLS version (or 0 for undefined) */  | 
769  |  | } TLS_SIGALG_INFO;  | 
770  |  |  | 
771  |  | /*  | 
772  |  |  * Structure containing table entry of certificate info corresponding to  | 
773  |  |  * CERT_PKEY entries  | 
774  |  |  */  | 
775  |  | typedef struct { | 
776  |  |     int nid; /* NID of public key algorithm */  | 
777  |  |     uint32_t amask; /* authmask corresponding to key type */  | 
778  |  | } SSL_CERT_LOOKUP;  | 
779  |  |  | 
780  |  | /* flags values */  | 
781  |  | # define TLS_GROUP_TYPE             0x0000000FU /* Mask for group type */  | 
782  |  | # define TLS_GROUP_CURVE_PRIME      0x00000001U  | 
783  |  | # define TLS_GROUP_CURVE_CHAR2      0x00000002U  | 
784  |  | # define TLS_GROUP_CURVE_CUSTOM     0x00000004U  | 
785  |  | # define TLS_GROUP_FFDHE            0x00000008U  | 
786  |  | # define TLS_GROUP_ONLY_FOR_TLS1_3  0x00000010U  | 
787  |  |  | 
788  |  | # define TLS_GROUP_FFDHE_FOR_TLS1_3 (TLS_GROUP_FFDHE|TLS_GROUP_ONLY_FOR_TLS1_3)  | 
789  |  |  | 
790  |  | /* We limit the number of key shares sent */  | 
791  |  | # ifndef OPENSSL_CLIENT_MAX_KEY_SHARES  | 
792  | 0  | #  define OPENSSL_CLIENT_MAX_KEY_SHARES 4  | 
793  |  | # endif  | 
794  |  |  | 
795  |  | struct ssl_ctx_st { | 
796  |  |     OSSL_LIB_CTX *libctx;  | 
797  |  |  | 
798  |  |     const SSL_METHOD *method;  | 
799  |  |     STACK_OF(SSL_CIPHER) *cipher_list;  | 
800  |  |     /* same as above but sorted for lookup */  | 
801  |  |     STACK_OF(SSL_CIPHER) *cipher_list_by_id;  | 
802  |  |     /* TLSv1.3 specific ciphersuites */  | 
803  |  |     STACK_OF(SSL_CIPHER) *tls13_ciphersuites;  | 
804  |  |     struct x509_store_st /* X509_STORE */ *cert_store;  | 
805  |  |     LHASH_OF(SSL_SESSION) *sessions;  | 
806  |  |     /*  | 
807  |  |      * Most session-ids that will be cached, default is  | 
808  |  |      * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited.  | 
809  |  |      */  | 
810  |  |     size_t session_cache_size;  | 
811  |  |     struct ssl_session_st *session_cache_head;  | 
812  |  |     struct ssl_session_st *session_cache_tail;  | 
813  |  |     /*  | 
814  |  |      * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT,  | 
815  |  |      * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which  | 
816  |  |      * means only SSL_accept will cache SSL_SESSIONS.  | 
817  |  |      */  | 
818  |  |     uint32_t session_cache_mode;  | 
819  |  |     /*  | 
820  |  |      * If timeout is not 0, it is the default timeout value set when  | 
821  |  |      * SSL_new() is called.  This has been put in to make life easier to set  | 
822  |  |      * things up  | 
823  |  |      */  | 
824  |  |     OSSL_TIME session_timeout;  | 
825  |  |     /*  | 
826  |  |      * If this callback is not null, it will be called each time a session id  | 
827  |  |      * is added to the cache.  If this function returns 1, it means that the  | 
828  |  |      * callback will do an SSL_SESSION_free() when it has finished using it.  | 
829  |  |      * Otherwise, on 0, it means the callback has finished with it. If  | 
830  |  |      * remove_session_cb is not null, it will be called when a session-id is  | 
831  |  |      * removed from the cache.  After the call, OpenSSL will  | 
832  |  |      * SSL_SESSION_free() it.  | 
833  |  |      */  | 
834  |  |     int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess);  | 
835  |  |     void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess);  | 
836  |  |     SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl,  | 
837  |  |                                     const unsigned char *data, int len,  | 
838  |  |                                     int *copy);  | 
839  |  |     struct { | 
840  |  |         TSAN_QUALIFIER int sess_connect;       /* SSL new conn - started */  | 
841  |  |         TSAN_QUALIFIER int sess_connect_renegotiate; /* SSL reneg - requested */  | 
842  |  |         TSAN_QUALIFIER int sess_connect_good;  /* SSL new conne/reneg - finished */  | 
843  |  |         TSAN_QUALIFIER int sess_accept;        /* SSL new accept - started */  | 
844  |  |         TSAN_QUALIFIER int sess_accept_renegotiate; /* SSL reneg - requested */  | 
845  |  |         TSAN_QUALIFIER int sess_accept_good;   /* SSL accept/reneg - finished */  | 
846  |  |         TSAN_QUALIFIER int sess_miss;          /* session lookup misses */  | 
847  |  |         TSAN_QUALIFIER int sess_timeout;       /* reuse attempt on timeouted session */  | 
848  |  |         TSAN_QUALIFIER int sess_cache_full;    /* session removed due to full cache */  | 
849  |  |         TSAN_QUALIFIER int sess_hit;           /* session reuse actually done */  | 
850  |  |         TSAN_QUALIFIER int sess_cb_hit;        /* session-id that was not in  | 
851  |  |                                                 * the cache was passed back via  | 
852  |  |                                                 * the callback. This indicates  | 
853  |  |                                                 * that the application is  | 
854  |  |                                                 * supplying session-id's from  | 
855  |  |                                                 * other processes - spooky  | 
856  |  |                                                 * :-) */  | 
857  |  |     } stats;  | 
858  |  | #ifdef TSAN_REQUIRES_LOCKING  | 
859  |  |     CRYPTO_RWLOCK *tsan_lock;  | 
860  |  | #endif  | 
861  |  |  | 
862  |  |     CRYPTO_REF_COUNT references;  | 
863  |  |  | 
864  |  |     /* if defined, these override the X509_verify_cert() calls */  | 
865  |  |     int (*app_verify_callback) (X509_STORE_CTX *, void *);  | 
866  |  |     void *app_verify_arg;  | 
867  |  |     /*  | 
868  |  |      * before OpenSSL 0.9.7, 'app_verify_arg' was ignored  | 
869  |  |      * ('app_verify_callback' was called with just one argument) | 
870  |  |      */  | 
871  |  |  | 
872  |  |     /* Default password callback. */  | 
873  |  |     pem_password_cb *default_passwd_callback;  | 
874  |  |  | 
875  |  |     /* Default password callback user data. */  | 
876  |  |     void *default_passwd_callback_userdata;  | 
877  |  |  | 
878  |  |     /* get client cert callback */  | 
879  |  |     int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey);  | 
880  |  |  | 
881  |  |     /* cookie generate callback */  | 
882  |  |     int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie,  | 
883  |  |                               unsigned int *cookie_len);  | 
884  |  |  | 
885  |  |     /* verify cookie callback */  | 
886  |  |     int (*app_verify_cookie_cb) (SSL *ssl, const unsigned char *cookie,  | 
887  |  |                                  unsigned int cookie_len);  | 
888  |  |  | 
889  |  |     /* TLS1.3 app-controlled cookie generate callback */  | 
890  |  |     int (*gen_stateless_cookie_cb) (SSL *ssl, unsigned char *cookie,  | 
891  |  |                                     size_t *cookie_len);  | 
892  |  |  | 
893  |  |     /* TLS1.3 verify app-controlled cookie callback */  | 
894  |  |     int (*verify_stateless_cookie_cb) (SSL *ssl, const unsigned char *cookie,  | 
895  |  |                                        size_t cookie_len);  | 
896  |  |  | 
897  |  |     CRYPTO_EX_DATA ex_data;  | 
898  |  |  | 
899  |  |     const EVP_MD *md5;          /* For SSLv3/TLSv1 'ssl3-md5' */  | 
900  |  |     const EVP_MD *sha1;         /* For SSLv3/TLSv1 'ssl3-sha1' */  | 
901  |  |  | 
902  |  |     STACK_OF(X509) *extra_certs;  | 
903  |  |     STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */  | 
904  |  |  | 
905  |  |     /* Default values used when no per-SSL value is defined follow */  | 
906  |  |  | 
907  |  |     /* used if SSL's info_callback is NULL */  | 
908  |  |     void (*info_callback) (const SSL *ssl, int type, int val);  | 
909  |  |  | 
910  |  |     /*  | 
911  |  |      * What we put in certificate_authorities extension for TLS 1.3  | 
912  |  |      * (ClientHello and CertificateRequest) or just client cert requests for  | 
913  |  |      * earlier versions. If client_ca_names is populated then it is only used  | 
914  |  |      * for client cert requests, and in preference to ca_names.  | 
915  |  |      */  | 
916  |  |     STACK_OF(X509_NAME) *ca_names;  | 
917  |  |     STACK_OF(X509_NAME) *client_ca_names;  | 
918  |  |  | 
919  |  |     /*  | 
920  |  |      * Default values to use in SSL structures follow (these are copied by  | 
921  |  |      * SSL_new)  | 
922  |  |      */  | 
923  |  |  | 
924  |  |     uint64_t options;  | 
925  |  |     uint32_t mode;  | 
926  |  |     int min_proto_version;  | 
927  |  |     int max_proto_version;  | 
928  |  |     size_t max_cert_list;  | 
929  |  |  | 
930  |  |     struct cert_st /* CERT */ *cert;  | 
931  |  |     SSL_CERT_LOOKUP *ssl_cert_info;  | 
932  |  |     int read_ahead;  | 
933  |  |  | 
934  |  |     /* callback that allows applications to peek at protocol messages */  | 
935  |  |     ossl_msg_cb msg_callback;  | 
936  |  |     void *msg_callback_arg;  | 
937  |  |  | 
938  |  |     uint32_t verify_mode;  | 
939  |  |     size_t sid_ctx_length;  | 
940  |  |     unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];  | 
941  |  |     /* called 'verify_callback' in the SSL */  | 
942  |  |     int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx);  | 
943  |  |  | 
944  |  |     /* Default generate session ID callback. */  | 
945  |  |     GEN_SESSION_CB generate_session_id;  | 
946  |  |  | 
947  |  |     X509_VERIFY_PARAM *param;  | 
948  |  |  | 
949  |  |     int quiet_shutdown;  | 
950  |  |  | 
951  |  | # ifndef OPENSSL_NO_CT  | 
952  |  |     CTLOG_STORE *ctlog_store;   /* CT Log Store */  | 
953  |  |     /*  | 
954  |  |      * Validates that the SCTs (Signed Certificate Timestamps) are sufficient.  | 
955  |  |      * If they are not, the connection should be aborted.  | 
956  |  |      */  | 
957  |  |     ssl_ct_validation_cb ct_validation_callback;  | 
958  |  |     void *ct_validation_callback_arg;  | 
959  |  | # endif  | 
960  |  |  | 
961  |  |     /*  | 
962  |  |      * If we're using more than one pipeline how should we divide the data  | 
963  |  |      * up between the pipes?  | 
964  |  |      */  | 
965  |  |     size_t split_send_fragment;  | 
966  |  |     /*  | 
967  |  |      * Maximum amount of data to send in one fragment. actual record size can  | 
968  |  |      * be more than this due to padding and MAC overheads.  | 
969  |  |      */  | 
970  |  |     size_t max_send_fragment;  | 
971  |  |  | 
972  |  |     /* Up to how many pipelines should we use? If 0 then 1 is assumed */  | 
973  |  |     size_t max_pipelines;  | 
974  |  |  | 
975  |  |     /* The default read buffer length to use (0 means not set) */  | 
976  |  |     size_t default_read_buf_len;  | 
977  |  |  | 
978  |  | # ifndef OPENSSL_NO_ENGINE  | 
979  |  |     /*  | 
980  |  |      * Engine to pass requests for client certs to  | 
981  |  |      */  | 
982  |  |     ENGINE *client_cert_engine;  | 
983  |  | # endif  | 
984  |  |  | 
985  |  |     /* ClientHello callback.  Mostly for extensions, but not entirely. */  | 
986  |  |     SSL_client_hello_cb_fn client_hello_cb;  | 
987  |  |     void *client_hello_cb_arg;  | 
988  |  |  | 
989  |  |     /* Callback to announce new pending ssl objects in the accept queue */  | 
990  |  |     SSL_new_pending_conn_cb_fn new_pending_conn_cb;  | 
991  |  |     void *new_pending_conn_arg;  | 
992  |  |  | 
993  |  |     /* TLS extensions. */  | 
994  |  |     struct { | 
995  |  |         /* TLS extensions servername callback */  | 
996  |  |         int (*servername_cb) (SSL *, int *, void *);  | 
997  |  |         void *servername_arg;  | 
998  |  |         /* RFC 4507 session ticket keys */  | 
999  |  |         unsigned char tick_key_name[TLSEXT_KEYNAME_LENGTH];  | 
1000  |  |         SSL_CTX_EXT_SECURE *secure;  | 
1001  |  | # ifndef OPENSSL_NO_DEPRECATED_3_0  | 
1002  |  |         /* Callback to support customisation of ticket key setting */  | 
1003  |  |         int (*ticket_key_cb) (SSL *ssl,  | 
1004  |  |                               unsigned char *name, unsigned char *iv,  | 
1005  |  |                               EVP_CIPHER_CTX *ectx, HMAC_CTX *hctx, int enc);  | 
1006  |  | #endif  | 
1007  |  |         int (*ticket_key_evp_cb) (SSL *ssl,  | 
1008  |  |                                   unsigned char *name, unsigned char *iv,  | 
1009  |  |                                   EVP_CIPHER_CTX *ectx, EVP_MAC_CTX *hctx,  | 
1010  |  |                                   int enc);  | 
1011  |  |  | 
1012  |  |         /* certificate status request info */  | 
1013  |  |         /* Callback for status request */  | 
1014  |  |         int (*status_cb) (SSL *ssl, void *arg);  | 
1015  |  |         void *status_arg;  | 
1016  |  |         /* ext status type used for CSR extension (OCSP Stapling) */  | 
1017  |  |         int status_type;  | 
1018  |  |         /* RFC 4366 Maximum Fragment Length Negotiation */  | 
1019  |  |         uint8_t max_fragment_len_mode;  | 
1020  |  |  | 
1021  |  |         /* EC extension values inherited by SSL structure */  | 
1022  |  |         size_t ecpointformats_len;  | 
1023  |  |         unsigned char *ecpointformats;  | 
1024  |  |  | 
1025  |  |         size_t supportedgroups_len;  | 
1026  |  |         uint16_t *supportedgroups;  | 
1027  |  |  | 
1028  |  |         size_t keyshares_len;  | 
1029  |  |         uint16_t *keyshares;  | 
1030  |  |  | 
1031  |  |         size_t tuples_len; /* Number of group tuples */  | 
1032  |  |         size_t *tuples; /* Number of groups in each group tuple */  | 
1033  |  |  | 
1034  |  |         /*  | 
1035  |  |          * ALPN information (we are in the process of transitioning from NPN to  | 
1036  |  |          * ALPN.)  | 
1037  |  |          */  | 
1038  |  |  | 
1039  |  |         /*-  | 
1040  |  |          * For a server, this contains a callback function that allows the  | 
1041  |  |          * server to select the protocol for the connection.  | 
1042  |  |          *   out: on successful return, this must point to the raw protocol  | 
1043  |  |          *        name (without the length prefix).  | 
1044  |  |          *   outlen: on successful return, this contains the length of |*out|.  | 
1045  |  |          *   in: points to the client's list of supported protocols in  | 
1046  |  |          *       wire-format.  | 
1047  |  |          *   inlen: the length of |in|.  | 
1048  |  |          */  | 
1049  |  |         int (*alpn_select_cb) (SSL *s,  | 
1050  |  |                                const unsigned char **out,  | 
1051  |  |                                unsigned char *outlen,  | 
1052  |  |                                const unsigned char *in,  | 
1053  |  |                                unsigned int inlen, void *arg);  | 
1054  |  |         void *alpn_select_cb_arg;  | 
1055  |  |  | 
1056  |  |         /*  | 
1057  |  |          * For a client, this contains the list of supported protocols in wire  | 
1058  |  |          * format.  | 
1059  |  |          */  | 
1060  |  |         unsigned char *alpn;  | 
1061  |  |         size_t alpn_len;  | 
1062  |  |  | 
1063  |  | # ifndef OPENSSL_NO_NEXTPROTONEG  | 
1064  |  |         /* Next protocol negotiation information */  | 
1065  |  |  | 
1066  |  |         /*  | 
1067  |  |          * For a server, this contains a callback function by which the set of  | 
1068  |  |          * advertised protocols can be provided.  | 
1069  |  |          */  | 
1070  |  |         SSL_CTX_npn_advertised_cb_func npn_advertised_cb;  | 
1071  |  |         void *npn_advertised_cb_arg;  | 
1072  |  |         /*  | 
1073  |  |          * For a client, this contains a callback function that selects the next  | 
1074  |  |          * protocol from the list provided by the server.  | 
1075  |  |          */  | 
1076  |  |         SSL_CTX_npn_select_cb_func npn_select_cb;  | 
1077  |  |         void *npn_select_cb_arg;  | 
1078  |  | # endif  | 
1079  |  |  | 
1080  |  |         unsigned char cookie_hmac_key[SHA256_DIGEST_LENGTH];  | 
1081  |  |     } ext;  | 
1082  |  |  | 
1083  |  | # ifndef OPENSSL_NO_PSK  | 
1084  |  |     SSL_psk_client_cb_func psk_client_callback;  | 
1085  |  |     SSL_psk_server_cb_func psk_server_callback;  | 
1086  |  | # endif  | 
1087  |  |     SSL_psk_find_session_cb_func psk_find_session_cb;  | 
1088  |  |     SSL_psk_use_session_cb_func psk_use_session_cb;  | 
1089  |  |  | 
1090  |  | # ifndef OPENSSL_NO_SRP  | 
1091  |  |     SRP_CTX srp_ctx;            /* ctx for SRP authentication */  | 
1092  |  | # endif  | 
1093  |  |  | 
1094  |  |     /* Shared DANE context */  | 
1095  |  |     struct dane_ctx_st dane;  | 
1096  |  |  | 
1097  |  | # ifndef OPENSSL_NO_SRTP  | 
1098  |  |     /* SRTP profiles we are willing to do from RFC 5764 */  | 
1099  |  |     STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;  | 
1100  |  | # endif  | 
1101  |  |     /*  | 
1102  |  |      * Callback for disabling session caching and ticket support on a session  | 
1103  |  |      * basis, depending on the chosen cipher.  | 
1104  |  |      */  | 
1105  |  |     int (*not_resumable_session_cb) (SSL *ssl, int is_forward_secure);  | 
1106  |  |  | 
1107  |  |     CRYPTO_RWLOCK *lock;  | 
1108  |  |  | 
1109  |  |     /*  | 
1110  |  |      * Callback for logging key material for use with debugging tools like  | 
1111  |  |      * Wireshark. The callback should log `line` followed by a newline.  | 
1112  |  |      */  | 
1113  |  |     SSL_CTX_keylog_cb_func keylog_callback;  | 
1114  |  |  | 
1115  |  |     /*  | 
1116  |  |      * Private flag for internal key logging based on SSLKEYLOG env  | 
1117  |  |      */  | 
1118  |  | # ifndef OPENSSL_NO_SSLKEYLOG  | 
1119  |  |     uint32_t do_sslkeylog;  | 
1120  |  | # endif  | 
1121  |  |  | 
1122  |  |     /*  | 
1123  |  |      * The maximum number of bytes advertised in session tickets that can be  | 
1124  |  |      * sent as early data.  | 
1125  |  |      */  | 
1126  |  |     uint32_t max_early_data;  | 
1127  |  |  | 
1128  |  |     /*  | 
1129  |  |      * The maximum number of bytes of early data that a server will tolerate  | 
1130  |  |      * (which should be at least as much as max_early_data).  | 
1131  |  |      */  | 
1132  |  |     uint32_t recv_max_early_data;  | 
1133  |  |  | 
1134  |  |     /* TLS1.3 padding callback */  | 
1135  |  |     size_t (*record_padding_cb)(SSL *s, int type, size_t len, void *arg);  | 
1136  |  |     void *record_padding_arg;  | 
1137  |  |     size_t block_padding;  | 
1138  |  |     size_t hs_padding;  | 
1139  |  |  | 
1140  |  |     /* Session ticket appdata */  | 
1141  |  |     SSL_CTX_generate_session_ticket_fn generate_ticket_cb;  | 
1142  |  |     SSL_CTX_decrypt_session_ticket_fn decrypt_ticket_cb;  | 
1143  |  |     void *ticket_cb_data;  | 
1144  |  |  | 
1145  |  |     /* The number of TLS1.3 tickets to automatically send */  | 
1146  |  |     size_t num_tickets;  | 
1147  |  |  | 
1148  |  |     /* Callback to determine if early_data is acceptable or not */  | 
1149  |  |     SSL_allow_early_data_cb_fn allow_early_data_cb;  | 
1150  |  |     void *allow_early_data_cb_data;  | 
1151  |  |  | 
1152  |  |     /* Do we advertise Post-handshake auth support? */  | 
1153  |  |     int pha_enabled;  | 
1154  |  |  | 
1155  |  |     /* Callback for SSL async handling */  | 
1156  |  |     SSL_async_callback_fn async_cb;  | 
1157  |  |     void *async_cb_arg;  | 
1158  |  |  | 
1159  |  |     char *propq;  | 
1160  |  |  | 
1161  |  |     int ssl_mac_pkey_id[SSL_MD_NUM_IDX];  | 
1162  |  |     const EVP_CIPHER *ssl_cipher_methods[SSL_ENC_NUM_IDX];  | 
1163  |  |     const EVP_MD *ssl_digest_methods[SSL_MD_NUM_IDX];  | 
1164  |  |     size_t ssl_mac_secret_size[SSL_MD_NUM_IDX];  | 
1165  |  |  | 
1166  |  |     size_t sigalg_lookup_cache_len;  | 
1167  |  |     size_t tls12_sigalgs_len;  | 
1168  |  |     /* Cache of all sigalgs we know and whether they are available or not */  | 
1169  |  |     struct sigalg_lookup_st *sigalg_lookup_cache;  | 
1170  |  |     /* List of all sigalgs (code points) available, incl. from providers */  | 
1171  |  |     uint16_t *tls12_sigalgs;  | 
1172  |  |  | 
1173  |  |     TLS_GROUP_INFO *group_list;  | 
1174  |  |     size_t group_list_len;  | 
1175  |  |     size_t group_list_max_len;  | 
1176  |  |  | 
1177  |  |     TLS_SIGALG_INFO *sigalg_list;  | 
1178  |  |     size_t sigalg_list_len;  | 
1179  |  |     size_t sigalg_list_max_len;  | 
1180  |  |  | 
1181  |  |     /* masks of disabled algorithms */  | 
1182  |  |     uint32_t disabled_enc_mask;  | 
1183  |  |     uint32_t disabled_mac_mask;  | 
1184  |  |     uint32_t disabled_mkey_mask;  | 
1185  |  |     uint32_t disabled_auth_mask;  | 
1186  |  |  | 
1187  |  | #ifndef OPENSSL_NO_COMP_ALG  | 
1188  |  |     /* certificate compression preferences */  | 
1189  |  |     int cert_comp_prefs[TLSEXT_comp_cert_limit];  | 
1190  |  | #endif  | 
1191  |  |  | 
1192  |  |     /* Certificate Type stuff - for RPK vs X.509 */  | 
1193  |  |     unsigned char *client_cert_type;  | 
1194  |  |     size_t client_cert_type_len;  | 
1195  |  |     unsigned char *server_cert_type;  | 
1196  |  |     size_t server_cert_type_len;  | 
1197  |  |  | 
1198  |  | # ifndef OPENSSL_NO_QUIC  | 
1199  |  |     uint64_t domain_flags;  | 
1200  |  |     SSL_TOKEN_STORE *tokencache;  | 
1201  |  | # endif  | 
1202  |  |  | 
1203  |  | # ifndef OPENSSL_NO_QLOG  | 
1204  |  |     char *qlog_title; /* Session title for qlog */  | 
1205  |  | # endif  | 
1206  |  | };  | 
1207  |  |  | 
1208  |  | typedef struct ossl_quic_tls_callbacks_st { | 
1209  |  |     int (*crypto_send_cb)(SSL *s, const unsigned char *buf, size_t buf_len,  | 
1210  |  |                           size_t *consumed, void *arg);  | 
1211  |  |     int (*crypto_recv_rcd_cb)(SSL *s, const unsigned char **buf,  | 
1212  |  |                               size_t *bytes_read, void *arg);  | 
1213  |  |     int (*crypto_release_rcd_cb)(SSL *s, size_t bytes_read, void *arg);  | 
1214  |  |     int (*yield_secret_cb)(SSL *s, uint32_t prot_level, int direction,  | 
1215  |  |                            const unsigned char *secret, size_t secret_len,  | 
1216  |  |                            void *arg);  | 
1217  |  |     int (*got_transport_params_cb)(SSL *s, const unsigned char *params,  | 
1218  |  |                                    size_t params_len,  | 
1219  |  |                                    void *arg);  | 
1220  |  |     int (*alert_cb)(SSL *s, unsigned char alert_code, void *arg);  | 
1221  |  | } OSSL_QUIC_TLS_CALLBACKS;  | 
1222  |  |  | 
1223  |  | typedef struct cert_pkey_st CERT_PKEY;  | 
1224  |  |  | 
1225  | 0  | #define SSL_TYPE_SSL_CONNECTION     0  | 
1226  | 0  | #define SSL_TYPE_QUIC_CONNECTION    0x80  | 
1227  | 0  | #define SSL_TYPE_QUIC_XSO           0x81  | 
1228  | 0  | #define SSL_TYPE_QUIC_LISTENER      0x82  | 
1229  | 0  | #define SSL_TYPE_QUIC_DOMAIN        0x83  | 
1230  |  |  | 
1231  | 0  | #define SSL_TYPE_IS_QUIC(x)         (((x) & 0x80) != 0)  | 
1232  |  |  | 
1233  |  | struct ssl_st { | 
1234  |  |     int type;  | 
1235  |  |     SSL_CTX *ctx;  | 
1236  |  |     const SSL_METHOD *defltmeth;  | 
1237  |  |     const SSL_METHOD *method;  | 
1238  |  |     CRYPTO_REF_COUNT references;  | 
1239  |  |     CRYPTO_RWLOCK *lock;  | 
1240  |  |     /* extra application data */  | 
1241  |  |     CRYPTO_EX_DATA ex_data;  | 
1242  |  | };  | 
1243  |  |  | 
1244  |  | struct ssl_connection_st { | 
1245  |  |     /* type identifier and common data */  | 
1246  |  |     struct ssl_st ssl;  | 
1247  |  |  | 
1248  |  |     /*  | 
1249  |  |      * The actual end user's SSL object. Could be different to this one for  | 
1250  |  |      * QUIC  | 
1251  |  |      */  | 
1252  |  |     SSL *user_ssl;  | 
1253  |  |  | 
1254  |  |     /*  | 
1255  |  |      * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION,  | 
1256  |  |      * DTLS1_VERSION)  | 
1257  |  |      */  | 
1258  |  |     int version;  | 
1259  |  |     /*  | 
1260  |  |      * There are 2 BIO's even though they are normally both the same.  This  | 
1261  |  |      * is so data can be read and written to different handlers  | 
1262  |  |      */  | 
1263  |  |     /* used by SSL_read */  | 
1264  |  |     BIO *rbio;  | 
1265  |  |     /* used by SSL_write */  | 
1266  |  |     BIO *wbio;  | 
1267  |  |     /* used during session-id reuse to concatenate messages */  | 
1268  |  |     BIO *bbio;  | 
1269  |  |     /*  | 
1270  |  |      * This holds a variable that indicates what we were doing when a 0 or -1  | 
1271  |  |      * is returned.  This is needed for non-blocking IO so we know what  | 
1272  |  |      * request needs re-doing when in SSL_accept or SSL_connect  | 
1273  |  |      */  | 
1274  |  |     int rwstate;  | 
1275  |  |     int (*handshake_func) (SSL *);  | 
1276  |  |     /*  | 
1277  |  |      * Imagine that here's a boolean member "init" that is switched as soon  | 
1278  |  |      * as SSL_set_{accept/connect}_state is called for the first time, so | 
1279  |  |      * that "state" and "handshake_func" are properly initialized.  But as  | 
1280  |  |      * handshake_func is == 0 until then, we use this test instead of an  | 
1281  |  |      * "init" member.  | 
1282  |  |      */  | 
1283  |  |     /* are we the server side? */  | 
1284  |  |     int server;  | 
1285  |  |     /*  | 
1286  |  |      * Generate a new session or reuse an old one.  | 
1287  |  |      * NB: For servers, the 'new' session may actually be a previously  | 
1288  |  |      * cached session or even the previous session unless  | 
1289  |  |      * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set  | 
1290  |  |      */  | 
1291  |  |     int new_session;  | 
1292  |  |     /* don't send shutdown packets */  | 
1293  |  |     int quiet_shutdown;  | 
1294  |  |     /* we have shut things down, 0x01 sent, 0x02 for received */  | 
1295  |  |     int shutdown;  | 
1296  |  |     /* Timestamps used to calculate the handshake RTT */  | 
1297  |  |     OSSL_TIME ts_msg_write;  | 
1298  |  |     OSSL_TIME ts_msg_read;  | 
1299  |  |     /* where we are */  | 
1300  |  |     OSSL_STATEM statem;  | 
1301  |  |     SSL_EARLY_DATA_STATE early_data_state;  | 
1302  |  |     BUF_MEM *init_buf;          /* buffer used during init */  | 
1303  |  |     void *init_msg;             /* pointer to handshake message body, set by  | 
1304  |  |                                  * tls_get_message_header() */  | 
1305  |  |     size_t init_num;               /* amount read/written */  | 
1306  |  |     size_t init_off;               /* amount read/written */  | 
1307  |  |  | 
1308  |  |     size_t ssl_pkey_num;  | 
1309  |  |  | 
1310  |  |     /* QUIC TLS fields */  | 
1311  |  |     OSSL_QUIC_TLS_CALLBACKS qtcb;  | 
1312  |  |     void *qtarg;  | 
1313  |  |     QUIC_TLS *qtls;  | 
1314  |  |  | 
1315  |  |     struct { | 
1316  |  |         long flags;  | 
1317  |  |         unsigned char server_random[SSL3_RANDOM_SIZE];  | 
1318  |  |         unsigned char client_random[SSL3_RANDOM_SIZE];  | 
1319  |  |  | 
1320  |  |         /* used during startup, digest all incoming/outgoing packets */  | 
1321  |  |         BIO *handshake_buffer;  | 
1322  |  |         /*  | 
1323  |  |          * When handshake digest is determined, buffer is hashed and  | 
1324  |  |          * freed and MD_CTX for the required digest is stored here.  | 
1325  |  |          */  | 
1326  |  |         EVP_MD_CTX *handshake_dgst;  | 
1327  |  |         /*  | 
1328  |  |          * Set whenever an expected ChangeCipherSpec message is processed.  | 
1329  |  |          * Unset when the peer's Finished message is received.  | 
1330  |  |          * Unexpected ChangeCipherSpec messages trigger a fatal alert.  | 
1331  |  |          */  | 
1332  |  |         int change_cipher_spec;  | 
1333  |  |         int warn_alert;  | 
1334  |  |         int fatal_alert;  | 
1335  |  |         /*  | 
1336  |  |          * we allow one fatal and one warning alert to be outstanding, send close  | 
1337  |  |          * alert via the warning alert  | 
1338  |  |          */  | 
1339  |  |         int alert_dispatch;  | 
1340  |  |         unsigned char send_alert[2];  | 
1341  |  |         /*  | 
1342  |  |          * This flag is set when we should renegotiate ASAP, basically when there  | 
1343  |  |          * is no more data in the read or write buffers  | 
1344  |  |          */  | 
1345  |  |         int renegotiate;  | 
1346  |  |         int total_renegotiations;  | 
1347  |  |         int num_renegotiations;  | 
1348  |  |         int in_read_app_data;  | 
1349  |  |  | 
1350  |  |         struct { | 
1351  |  |             /* actually only need to be 16+20 for SSLv3 and 12 for TLS */  | 
1352  |  |             unsigned char finish_md[EVP_MAX_MD_SIZE * 2];  | 
1353  |  |             size_t finish_md_len;  | 
1354  |  |             unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2];  | 
1355  |  |             size_t peer_finish_md_len;  | 
1356  |  |             size_t message_size;  | 
1357  |  |             int message_type;  | 
1358  |  |             /* used to hold the new cipher we are going to use */  | 
1359  |  |             const SSL_CIPHER *new_cipher;  | 
1360  |  |             EVP_PKEY *pkey;         /* holds short lived key exchange key */  | 
1361  |  |             /* holds the array of short lived key exchange key (pointers) */  | 
1362  |  |             EVP_PKEY *ks_pkey[OPENSSL_CLIENT_MAX_KEY_SHARES];  | 
1363  |  |             uint16_t ks_group_id[OPENSSL_CLIENT_MAX_KEY_SHARES]; /* The IDs of the keyshare keys */  | 
1364  |  |             size_t num_ks_pkey; /* how many keyshares are there */  | 
1365  |  |             /* used for certificate requests */  | 
1366  |  |             int cert_req;  | 
1367  |  |             /* Certificate types in certificate request message. */  | 
1368  |  |             uint8_t *ctype;  | 
1369  |  |             size_t ctype_len;  | 
1370  |  |             /* Certificate authorities list peer sent */  | 
1371  |  |             STACK_OF(X509_NAME) *peer_ca_names;  | 
1372  |  |             size_t key_block_length;  | 
1373  |  |             unsigned char *key_block;  | 
1374  |  |             const EVP_CIPHER *new_sym_enc;  | 
1375  |  |             const EVP_MD *new_hash;  | 
1376  |  |             int new_mac_pkey_type;  | 
1377  |  |             size_t new_mac_secret_size;  | 
1378  |  | # ifndef OPENSSL_NO_COMP  | 
1379  |  |             const SSL_COMP *new_compression;  | 
1380  |  | # else  | 
1381  |  |             char *new_compression;  | 
1382  |  | # endif  | 
1383  |  |             int cert_request;  | 
1384  |  |             /* Raw values of the cipher list from a client */  | 
1385  |  |             unsigned char *ciphers_raw;  | 
1386  |  |             size_t ciphers_rawlen;  | 
1387  |  |             /* Temporary storage for premaster secret */  | 
1388  |  |             unsigned char *pms;  | 
1389  |  |             size_t pmslen;  | 
1390  |  | # ifndef OPENSSL_NO_PSK  | 
1391  |  |             /* Temporary storage for PSK key */  | 
1392  |  |             unsigned char *psk;  | 
1393  |  |             size_t psklen;  | 
1394  |  | # endif  | 
1395  |  |             /* Signature algorithm we actually use */  | 
1396  |  |             const struct sigalg_lookup_st *sigalg;  | 
1397  |  |             /* Pointer to certificate we use */  | 
1398  |  |             CERT_PKEY *cert;  | 
1399  |  |             /*  | 
1400  |  |              * signature algorithms peer reports: e.g. supported signature  | 
1401  |  |              * algorithms extension for server or as part of a certificate  | 
1402  |  |              * request for client.  | 
1403  |  |              * Keep track of the algorithms for TLS and X.509 usage separately.  | 
1404  |  |              */  | 
1405  |  |             uint16_t *peer_sigalgs;  | 
1406  |  |             uint16_t *peer_cert_sigalgs;  | 
1407  |  |             /* Size of above arrays */  | 
1408  |  |             size_t peer_sigalgslen;  | 
1409  |  |             size_t peer_cert_sigalgslen;  | 
1410  |  |             /* Sigalg peer actually uses */  | 
1411  |  |             const struct sigalg_lookup_st *peer_sigalg;  | 
1412  |  |             /*  | 
1413  |  |              * Set if corresponding CERT_PKEY can be used with current  | 
1414  |  |              * SSL session: e.g. appropriate curve, signature algorithms etc.  | 
1415  |  |              * If zero it can't be used at all.  | 
1416  |  |              */  | 
1417  |  |             uint32_t *valid_flags;  | 
1418  |  |             /*  | 
1419  |  |              * For servers the following masks are for the key and auth algorithms  | 
1420  |  |              * that are supported by the certs below. For clients they are masks of  | 
1421  |  |              * *disabled* algorithms based on the current session.  | 
1422  |  |              */  | 
1423  |  |             uint32_t mask_k;  | 
1424  |  |             uint32_t mask_a;  | 
1425  |  |             /*  | 
1426  |  |              * The following are used by the client to see if a cipher is allowed or  | 
1427  |  |              * not.  It contains the minimum and maximum version the client's using  | 
1428  |  |              * based on what it knows so far.  | 
1429  |  |              */  | 
1430  |  |             int min_ver;  | 
1431  |  |             int max_ver;  | 
1432  |  |         } tmp;  | 
1433  |  |  | 
1434  |  |         /* Connection binding to prevent renegotiation attacks */  | 
1435  |  |         unsigned char previous_client_finished[EVP_MAX_MD_SIZE];  | 
1436  |  |         size_t previous_client_finished_len;  | 
1437  |  |         unsigned char previous_server_finished[EVP_MAX_MD_SIZE];  | 
1438  |  |         size_t previous_server_finished_len;  | 
1439  |  |         int send_connection_binding;  | 
1440  |  |  | 
1441  |  | # ifndef OPENSSL_NO_NEXTPROTONEG  | 
1442  |  |         /*  | 
1443  |  |          * Set if we saw the Next Protocol Negotiation extension from our peer.  | 
1444  |  |          */  | 
1445  |  |         int npn_seen;  | 
1446  |  | # endif  | 
1447  |  |  | 
1448  |  |         /*  | 
1449  |  |          * ALPN information (we are in the process of transitioning from NPN to  | 
1450  |  |          * ALPN.)  | 
1451  |  |          */  | 
1452  |  |  | 
1453  |  |         /*  | 
1454  |  |          * In a server these point to the selected ALPN protocol after the  | 
1455  |  |          * ClientHello has been processed. In a client these contain the protocol  | 
1456  |  |          * that the server selected once the ServerHello has been processed.  | 
1457  |  |          */  | 
1458  |  |         unsigned char *alpn_selected;  | 
1459  |  |         size_t alpn_selected_len;  | 
1460  |  |         /* used by the server to know what options were proposed */  | 
1461  |  |         unsigned char *alpn_proposed;  | 
1462  |  |         size_t alpn_proposed_len;  | 
1463  |  |         /* used by the client to know if it actually sent alpn */  | 
1464  |  |         int alpn_sent;  | 
1465  |  |  | 
1466  |  |         /*  | 
1467  |  |          * This is set to true if we believe that this is a version of Safari  | 
1468  |  |          * running on OS X 10.6 or newer. We wish to know this because Safari on  | 
1469  |  |          * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support.  | 
1470  |  |          */  | 
1471  |  |         char is_probably_safari;  | 
1472  |  |  | 
1473  |  |         /*  | 
1474  |  |          * Track whether we did a key exchange this handshake or not, so  | 
1475  |  |          * SSL_get_negotiated_group() knows whether to fall back to the  | 
1476  |  |          * value in the SSL_SESSION.  | 
1477  |  |          */  | 
1478  |  |         char did_kex;  | 
1479  |  |         /* For clients: peer temporary key */  | 
1480  |  |         /* The group_id for the key exchange key */  | 
1481  |  |         uint16_t group_id;  | 
1482  |  |         EVP_PKEY *peer_tmp;  | 
1483  |  |         /* The cached group_id candidate for the key exchange key */  | 
1484  |  |         uint16_t group_id_candidate;  | 
1485  |  |     } s3;  | 
1486  |  |  | 
1487  |  |     struct dtls1_state_st *d1;  /* DTLSv1 variables */  | 
1488  |  |     /* callback that allows applications to peek at protocol messages */  | 
1489  |  |     void (*msg_callback) (int write_p, int version, int content_type,  | 
1490  |  |                           const void *buf, size_t len, SSL *ssl, void *arg);  | 
1491  |  |     void *msg_callback_arg;  | 
1492  |  |     int hit;                    /* reusing a previous session */  | 
1493  |  |     X509_VERIFY_PARAM *param;  | 
1494  |  |     /* Per connection DANE state */  | 
1495  |  |     SSL_DANE dane;  | 
1496  |  |     /* crypto */  | 
1497  |  |     STACK_OF(SSL_CIPHER) *peer_ciphers;  | 
1498  |  |     STACK_OF(SSL_CIPHER) *cipher_list;  | 
1499  |  |     STACK_OF(SSL_CIPHER) *cipher_list_by_id;  | 
1500  |  |     /* TLSv1.3 specific ciphersuites */  | 
1501  |  |     STACK_OF(SSL_CIPHER) *tls13_ciphersuites;  | 
1502  |  |     /*  | 
1503  |  |      * These are the ones being used, the ones in SSL_SESSION are the ones to  | 
1504  |  |      * be 'copied' into these ones  | 
1505  |  |      */  | 
1506  |  |     uint32_t mac_flags;  | 
1507  |  |     /*  | 
1508  |  |      * The TLS1.3 secrets.  | 
1509  |  |      */  | 
1510  |  |     unsigned char early_secret[EVP_MAX_MD_SIZE];  | 
1511  |  |     unsigned char handshake_secret[EVP_MAX_MD_SIZE];  | 
1512  |  |     unsigned char master_secret[EVP_MAX_MD_SIZE];  | 
1513  |  |     unsigned char resumption_master_secret[EVP_MAX_MD_SIZE];  | 
1514  |  |     unsigned char client_finished_secret[EVP_MAX_MD_SIZE];  | 
1515  |  |     unsigned char server_finished_secret[EVP_MAX_MD_SIZE];  | 
1516  |  |     unsigned char server_finished_hash[EVP_MAX_MD_SIZE];  | 
1517  |  |     unsigned char handshake_traffic_hash[EVP_MAX_MD_SIZE];  | 
1518  |  |     unsigned char client_app_traffic_secret[EVP_MAX_MD_SIZE];  | 
1519  |  |     unsigned char server_app_traffic_secret[EVP_MAX_MD_SIZE];  | 
1520  |  |     unsigned char exporter_master_secret[EVP_MAX_MD_SIZE];  | 
1521  |  |     unsigned char early_exporter_master_secret[EVP_MAX_MD_SIZE];  | 
1522  |  |  | 
1523  |  |     /* session info */  | 
1524  |  |     /* client cert? */  | 
1525  |  |     /* This is used to hold the server certificate used */  | 
1526  |  |     struct cert_st /* CERT */ *cert;  | 
1527  |  |  | 
1528  |  |     /*  | 
1529  |  |      * The hash of all messages prior to the CertificateVerify, and the length  | 
1530  |  |      * of that hash.  | 
1531  |  |      */  | 
1532  |  |     unsigned char cert_verify_hash[EVP_MAX_MD_SIZE];  | 
1533  |  |     size_t cert_verify_hash_len;  | 
1534  |  |  | 
1535  |  |     /* Flag to indicate whether we should send a HelloRetryRequest or not */  | 
1536  |  |     enum {SSL_HRR_NONE = 0, SSL_HRR_PENDING, SSL_HRR_COMPLETE} | 
1537  |  |         hello_retry_request;  | 
1538  |  |  | 
1539  |  |     /*  | 
1540  |  |      * the session_id_context is used to ensure sessions are only reused in  | 
1541  |  |      * the appropriate context  | 
1542  |  |      */  | 
1543  |  |     size_t sid_ctx_length;  | 
1544  |  |     unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];  | 
1545  |  |     /* This can also be in the session once a session is established */  | 
1546  |  |     SSL_SESSION *session;  | 
1547  |  |     /* TLSv1.3 PSK session */  | 
1548  |  |     SSL_SESSION *psksession;  | 
1549  |  |     unsigned char *psksession_id;  | 
1550  |  |     size_t psksession_id_len;  | 
1551  |  |     /* Default generate session ID callback. */  | 
1552  |  |     GEN_SESSION_CB generate_session_id;  | 
1553  |  |     /*  | 
1554  |  |      * The temporary TLSv1.3 session id. This isn't really a session id at all  | 
1555  |  |      * but is a random value sent in the legacy session id field.  | 
1556  |  |      */  | 
1557  |  |     unsigned char tmp_session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];  | 
1558  |  |     size_t tmp_session_id_len;  | 
1559  |  |     /* Used in SSL3 */  | 
1560  |  |     /*  | 
1561  |  |      * 0 don't care about verify failure.  | 
1562  |  |      * 1 fail if verify fails  | 
1563  |  |      */  | 
1564  |  |     uint32_t verify_mode;  | 
1565  |  |     /* fail if callback returns 0 */  | 
1566  |  |     int (*verify_callback) (int ok, X509_STORE_CTX *ctx);  | 
1567  |  |     /* optional informational callback */  | 
1568  |  |     void (*info_callback) (const SSL *ssl, int type, int val);  | 
1569  |  |     /* error bytes to be written */  | 
1570  |  |     int error;  | 
1571  |  |     /* actual code */  | 
1572  |  |     int error_code;  | 
1573  |  | # ifndef OPENSSL_NO_PSK  | 
1574  |  |     SSL_psk_client_cb_func psk_client_callback;  | 
1575  |  |     SSL_psk_server_cb_func psk_server_callback;  | 
1576  |  | # endif  | 
1577  |  |     SSL_psk_find_session_cb_func psk_find_session_cb;  | 
1578  |  |     SSL_psk_use_session_cb_func psk_use_session_cb;  | 
1579  |  |  | 
1580  |  |     /* Verified chain of peer */  | 
1581  |  |     STACK_OF(X509) *verified_chain;  | 
1582  |  |     long verify_result;  | 
1583  |  |     /*  | 
1584  |  |      * What we put in certificate_authorities extension for TLS 1.3  | 
1585  |  |      * (ClientHello and CertificateRequest) or just client cert requests for  | 
1586  |  |      * earlier versions. If client_ca_names is populated then it is only used  | 
1587  |  |      * for client cert requests, and in preference to ca_names.  | 
1588  |  |      */  | 
1589  |  |     STACK_OF(X509_NAME) *ca_names;  | 
1590  |  |     STACK_OF(X509_NAME) *client_ca_names;  | 
1591  |  |     /* protocol behaviour */  | 
1592  |  |     uint64_t options;  | 
1593  |  |     /* API behaviour */  | 
1594  |  |     uint32_t mode;  | 
1595  |  |     int min_proto_version;  | 
1596  |  |     int max_proto_version;  | 
1597  |  |     size_t max_cert_list;  | 
1598  |  |     int first_packet;  | 
1599  |  |     /*  | 
1600  |  |      * What was passed in ClientHello.legacy_version. Used for RSA pre-master  | 
1601  |  |      * secret and SSLv3/TLS (<=1.2) rollback check  | 
1602  |  |      */  | 
1603  |  |     int client_version;  | 
1604  |  |     /*  | 
1605  |  |      * If we're using more than one pipeline how should we divide the data  | 
1606  |  |      * up between the pipes?  | 
1607  |  |      */  | 
1608  |  |     size_t split_send_fragment;  | 
1609  |  |     /*  | 
1610  |  |      * Maximum amount of data to send in one fragment. actual record size can  | 
1611  |  |      * be more than this due to padding and MAC overheads.  | 
1612  |  |      */  | 
1613  |  |     size_t max_send_fragment;  | 
1614  |  |     /* Up to how many pipelines should we use? If 0 then 1 is assumed */  | 
1615  |  |     size_t max_pipelines;  | 
1616  |  |  | 
1617  |  |     struct { | 
1618  |  |         /* Built-in extension flags */  | 
1619  |  |         uint8_t extflags[TLSEXT_IDX_num_builtins];  | 
1620  |  |         /* TLS extension debug callback */  | 
1621  |  |         void (*debug_cb)(SSL *s, int client_server, int type,  | 
1622  |  |                          const unsigned char *data, int len, void *arg);  | 
1623  |  |         void *debug_arg;  | 
1624  |  |         char *hostname;  | 
1625  |  |         /* certificate status request info */  | 
1626  |  |         /* Status type or -1 if no status type */  | 
1627  |  |         int status_type;  | 
1628  |  |         /* Raw extension data, if seen */  | 
1629  |  |         unsigned char *scts;  | 
1630  |  |         /* Length of raw extension data, if seen */  | 
1631  |  |         uint16_t scts_len;  | 
1632  |  |         /* Expect OCSP CertificateStatus message */  | 
1633  |  |         int status_expected;  | 
1634  |  |  | 
1635  |  |         struct { | 
1636  |  |             /* OCSP status request only */  | 
1637  |  |             STACK_OF(OCSP_RESPID) *ids;  | 
1638  |  |             X509_EXTENSIONS *exts;  | 
1639  |  |             /* OCSP response received or to be sent */  | 
1640  |  |             unsigned char *resp;  | 
1641  |  |             size_t resp_len;  | 
1642  |  |             STACK_OF(OCSP_RESPONSE) *resp_ex;  | 
1643  |  |         } ocsp;  | 
1644  |  |  | 
1645  |  |         /* RFC4507 session ticket expected to be received or sent */  | 
1646  |  |         int ticket_expected;  | 
1647  |  |         /* TLS 1.3 tickets requested by the application. */  | 
1648  |  |         int extra_tickets_expected;  | 
1649  |  |  | 
1650  |  |         /* our list */  | 
1651  |  |         size_t ecpointformats_len;  | 
1652  |  |         unsigned char *ecpointformats;  | 
1653  |  |         /* peer's list */  | 
1654  |  |         size_t peer_ecpointformats_len;  | 
1655  |  |         unsigned char *peer_ecpointformats;  | 
1656  |  |  | 
1657  |  |         /* our list */  | 
1658  |  |         size_t supportedgroups_len;  | 
1659  |  |         uint16_t *supportedgroups;  | 
1660  |  |         /* peer's list */  | 
1661  |  |         size_t peer_supportedgroups_len;  | 
1662  |  |         uint16_t *peer_supportedgroups;  | 
1663  |  |  | 
1664  |  |         /* key shares */  | 
1665  |  |         size_t keyshares_len;  | 
1666  |  |         uint16_t *keyshares;  | 
1667  |  |         /* supported groups tuples */  | 
1668  |  |         size_t tuples_len;  | 
1669  |  |         size_t *tuples;  | 
1670  |  |  | 
1671  |  |         /* TLS Session Ticket extension override */  | 
1672  |  |         TLS_SESSION_TICKET_EXT *session_ticket;  | 
1673  |  |         /* TLS Session Ticket extension callback */  | 
1674  |  |         tls_session_ticket_ext_cb_fn session_ticket_cb;  | 
1675  |  |         void *session_ticket_cb_arg;  | 
1676  |  |         /* TLS pre-shared secret session resumption */  | 
1677  |  |         tls_session_secret_cb_fn session_secret_cb;  | 
1678  |  |         void *session_secret_cb_arg;  | 
1679  |  |         /*  | 
1680  |  |          * For a client, this contains the list of supported protocols in wire  | 
1681  |  |          * format.  | 
1682  |  |          */  | 
1683  |  |         unsigned char *alpn;  | 
1684  |  |         size_t alpn_len;  | 
1685  |  |         /*  | 
1686  |  |          * Next protocol negotiation. For the client, this is the protocol that  | 
1687  |  |          * we sent in NextProtocol and is set when handling ServerHello  | 
1688  |  |          * extensions. For a server, this is the client's selected_protocol from  | 
1689  |  |          * NextProtocol and is set when handling the NextProtocol message, before  | 
1690  |  |          * the Finished message.  | 
1691  |  |          */  | 
1692  |  |         unsigned char *npn;  | 
1693  |  |         size_t npn_len;  | 
1694  |  |  | 
1695  |  |         /* The available PSK key exchange modes */  | 
1696  |  |         int psk_kex_mode;  | 
1697  |  |  | 
1698  |  |         /* Set to one if we have negotiated ETM */  | 
1699  |  |         int use_etm;  | 
1700  |  |  | 
1701  |  |         /* Are we expecting to receive early data? */  | 
1702  |  |         int early_data;  | 
1703  |  |         /* Is the session suitable for early data? */  | 
1704  |  |         int early_data_ok;  | 
1705  |  |  | 
1706  |  |         /* May be sent by a server in HRR. Must be echoed back in ClientHello */  | 
1707  |  |         unsigned char *tls13_cookie;  | 
1708  |  |         size_t tls13_cookie_len;  | 
1709  |  |         /* Have we received a cookie from the client? */  | 
1710  |  |         int cookieok;  | 
1711  |  |  | 
1712  |  |         /*  | 
1713  |  |          * Maximum Fragment Length as per RFC 4366.  | 
1714  |  |          * If this member contains one of the allowed values (1-4)  | 
1715  |  |          * then we should include Maximum Fragment Length Negotiation  | 
1716  |  |          * extension in Client Hello.  | 
1717  |  |          * Please note that value of this member does not have direct  | 
1718  |  |          * effect. The actual (binding) value is stored in SSL_SESSION,  | 
1719  |  |          * as this extension is optional on server side.  | 
1720  |  |          */  | 
1721  |  |         uint8_t max_fragment_len_mode;  | 
1722  |  |  | 
1723  |  |         /*  | 
1724  |  |          * On the client side the number of ticket identities we sent in the  | 
1725  |  |          * ClientHello. On the server side the identity of the ticket we  | 
1726  |  |          * selected.  | 
1727  |  |          */  | 
1728  |  |         int tick_identity;  | 
1729  |  |  | 
1730  |  |         /* This is the list of algorithms the peer supports that we also support */  | 
1731  |  |         int compress_certificate_from_peer[TLSEXT_comp_cert_limit];  | 
1732  |  |         /* indicate that we sent the extension, so we'll accept it */  | 
1733  |  |         int compress_certificate_sent;  | 
1734  |  |  | 
1735  |  |         uint8_t client_cert_type;  | 
1736  |  |         uint8_t client_cert_type_ctos;  | 
1737  |  |         uint8_t server_cert_type;  | 
1738  |  |         uint8_t server_cert_type_ctos;  | 
1739  |  |     } ext;  | 
1740  |  |  | 
1741  |  |     /*  | 
1742  |  |      * Parsed form of the ClientHello, kept around across client_hello_cb  | 
1743  |  |      * calls.  | 
1744  |  |      */  | 
1745  |  |     CLIENTHELLO_MSG *clienthello;  | 
1746  |  |  | 
1747  |  |     /*-  | 
1748  |  |      * no further mod of servername  | 
1749  |  |      * 0 : call the servername extension callback.  | 
1750  |  |      * 1 : prepare 2, allow last ack just after in server callback.  | 
1751  |  |      * 2 : don't call servername callback, no ack in server hello  | 
1752  |  |      */  | 
1753  |  |     int servername_done;  | 
1754  |  | # ifndef OPENSSL_NO_CT  | 
1755  |  |     /*  | 
1756  |  |      * Validates that the SCTs (Signed Certificate Timestamps) are sufficient.  | 
1757  |  |      * If they are not, the connection should be aborted.  | 
1758  |  |      */  | 
1759  |  |     ssl_ct_validation_cb ct_validation_callback;  | 
1760  |  |     /* User-supplied argument that is passed to the ct_validation_callback */  | 
1761  |  |     void *ct_validation_callback_arg;  | 
1762  |  |     /*  | 
1763  |  |      * Consolidated stack of SCTs from all sources.  | 
1764  |  |      * Lazily populated by CT_get_peer_scts(SSL*)  | 
1765  |  |      */  | 
1766  |  |     STACK_OF(SCT) *scts;  | 
1767  |  |     /* Have we attempted to find/parse SCTs yet? */  | 
1768  |  |     int scts_parsed;  | 
1769  |  | # endif  | 
1770  |  |     SSL_CTX *session_ctx;       /* initial ctx, used to store sessions */  | 
1771  |  | # ifndef OPENSSL_NO_SRTP  | 
1772  |  |     /* What we'll do */  | 
1773  |  |     STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;  | 
1774  |  |     /* What's been chosen */  | 
1775  |  |     SRTP_PROTECTION_PROFILE *srtp_profile;  | 
1776  |  | # endif  | 
1777  |  |     /*-  | 
1778  |  |      * 1 if we are renegotiating.  | 
1779  |  |      * 2 if we are a server and are inside a handshake  | 
1780  |  |      * (i.e. not just sending a HelloRequest)  | 
1781  |  |      */  | 
1782  |  |     int renegotiate;  | 
1783  |  |     /* If sending a KeyUpdate is pending */  | 
1784  |  |     int key_update;  | 
1785  |  |     /* Post-handshake authentication state */  | 
1786  |  |     SSL_PHA_STATE post_handshake_auth;  | 
1787  |  |     int pha_enabled;  | 
1788  |  |     uint8_t* pha_context;  | 
1789  |  |     size_t pha_context_len;  | 
1790  |  |     int certreqs_sent;  | 
1791  |  |     EVP_MD_CTX *pha_dgst; /* this is just the digest through ClientFinished */  | 
1792  |  |  | 
1793  |  | # ifndef OPENSSL_NO_SRP  | 
1794  |  |     /* ctx for SRP authentication */  | 
1795  |  |     SRP_CTX srp_ctx;  | 
1796  |  | # endif  | 
1797  |  |     /*  | 
1798  |  |      * Callback for disabling session caching and ticket support on a session  | 
1799  |  |      * basis, depending on the chosen cipher.  | 
1800  |  |      */  | 
1801  |  |     int (*not_resumable_session_cb) (SSL *ssl, int is_forward_secure);  | 
1802  |  |  | 
1803  |  |     /* Record layer data */  | 
1804  |  |     RECORD_LAYER rlayer;  | 
1805  |  |  | 
1806  |  |     /* Default password callback. */  | 
1807  |  |     pem_password_cb *default_passwd_callback;  | 
1808  |  |     /* Default password callback user data. */  | 
1809  |  |     void *default_passwd_callback_userdata;  | 
1810  |  |     /* Async Job info */  | 
1811  |  |     ASYNC_JOB *job;  | 
1812  |  |     ASYNC_WAIT_CTX *waitctx;  | 
1813  |  |     size_t asyncrw;  | 
1814  |  |  | 
1815  |  |     /*  | 
1816  |  |      * The maximum number of bytes advertised in session tickets that can be  | 
1817  |  |      * sent as early data.  | 
1818  |  |      */  | 
1819  |  |     uint32_t max_early_data;  | 
1820  |  |     /*  | 
1821  |  |      * The maximum number of bytes of early data that a server will tolerate  | 
1822  |  |      * (which should be at least as much as max_early_data).  | 
1823  |  |      */  | 
1824  |  |     uint32_t recv_max_early_data;  | 
1825  |  |  | 
1826  |  |     /*  | 
1827  |  |      * The number of bytes of early data received so far. If we accepted early  | 
1828  |  |      * data then this is a count of the plaintext bytes. If we rejected it then  | 
1829  |  |      * this is a count of the ciphertext bytes.  | 
1830  |  |      */  | 
1831  |  |     uint32_t early_data_count;  | 
1832  |  |  | 
1833  |  |     /* The number of TLS1.3 tickets to automatically send */  | 
1834  |  |     size_t num_tickets;  | 
1835  |  |     /* The number of TLS1.3 tickets actually sent so far */  | 
1836  |  |     size_t sent_tickets;  | 
1837  |  |     /* The next nonce value to use when we send a ticket on this connection */  | 
1838  |  |     uint64_t next_ticket_nonce;  | 
1839  |  |  | 
1840  |  |     /* Callback to determine if early_data is acceptable or not */  | 
1841  |  |     SSL_allow_early_data_cb_fn allow_early_data_cb;  | 
1842  |  |     void *allow_early_data_cb_data;  | 
1843  |  |  | 
1844  |  |     /* Callback for SSL async handling */  | 
1845  |  |     SSL_async_callback_fn async_cb;  | 
1846  |  |     void *async_cb_arg;  | 
1847  |  |  | 
1848  |  |     /*  | 
1849  |  |      * Signature algorithms shared by client and server: cached because these  | 
1850  |  |      * are used most often.  | 
1851  |  |      */  | 
1852  |  |     const struct sigalg_lookup_st **shared_sigalgs;  | 
1853  |  |     size_t shared_sigalgslen;  | 
1854  |  |  | 
1855  |  | #ifndef OPENSSL_NO_COMP_ALG  | 
1856  |  |     /* certificate compression preferences */  | 
1857  |  |     int cert_comp_prefs[TLSEXT_comp_cert_limit];  | 
1858  |  | #endif  | 
1859  |  |  | 
1860  |  |     /* Certificate Type stuff - for RPK vs X.509 */  | 
1861  |  |     unsigned char *client_cert_type;  | 
1862  |  |     size_t client_cert_type_len;  | 
1863  |  |     unsigned char *server_cert_type;  | 
1864  |  |     size_t server_cert_type_len;  | 
1865  |  | };  | 
1866  |  |  | 
1867  |  | /*  | 
1868  |  |  * Structure containing table entry of values associated with the signature  | 
1869  |  |  * algorithms (signature scheme) extension  | 
1870  |  | */  | 
1871  |  | typedef struct sigalg_lookup_st { | 
1872  |  |     /* TLS 1.3 signature scheme name */  | 
1873  |  |     const char *name;  | 
1874  |  |     /* TLS 1.2 signature scheme name */  | 
1875  |  |     const char *name12;  | 
1876  |  |     /* Raw value used in extension */  | 
1877  |  |     uint16_t sigalg;  | 
1878  |  |     /* NID of hash algorithm or NID_undef if no hash */  | 
1879  |  |     int hash;  | 
1880  |  |     /* Index of hash algorithm or -1 if no hash algorithm */  | 
1881  |  |     int hash_idx;  | 
1882  |  |     /* NID of signature algorithm */  | 
1883  |  |     int sig;  | 
1884  |  |     /* Index of signature algorithm */  | 
1885  |  |     int sig_idx;  | 
1886  |  |     /* Combined hash and signature NID, if any */  | 
1887  |  |     int sigandhash;  | 
1888  |  |     /* Required public key curve (ECDSA only) */  | 
1889  |  |     int curve;  | 
1890  |  |     /* Whether this signature algorithm is actually available for use */  | 
1891  |  |     int available;  | 
1892  |  |     /* Whether this signature algorithm is by default advertised */  | 
1893  |  |     int advertise;  | 
1894  |  |     /* Supported protocol ranges */  | 
1895  |  |     int mintls;  | 
1896  |  |     int maxtls;  | 
1897  |  |     int mindtls;  | 
1898  |  |     int maxdtls;  | 
1899  |  | } SIGALG_LOOKUP;  | 
1900  |  |  | 
1901  |  | /* DTLS structures */  | 
1902  |  |  | 
1903  |  | # ifndef OPENSSL_NO_SCTP  | 
1904  |  | #  define DTLS1_SCTP_AUTH_LABEL   "EXPORTER_DTLS_OVER_SCTP"  | 
1905  |  | # endif  | 
1906  |  |  | 
1907  |  | /* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */  | 
1908  | 0  | # define DTLS1_MAX_MTU_OVERHEAD                   48  | 
1909  |  |  | 
1910  |  | struct dtls1_retransmit_state { | 
1911  |  |     const OSSL_RECORD_METHOD *wrlmethod;  | 
1912  |  |     OSSL_RECORD_LAYER *wrl;  | 
1913  |  | };  | 
1914  |  |  | 
1915  |  | struct hm_header_st { | 
1916  |  |     unsigned char type;  | 
1917  |  |     size_t msg_len;  | 
1918  |  |     unsigned short seq;  | 
1919  |  |     size_t frag_off;  | 
1920  |  |     size_t frag_len;  | 
1921  |  |     unsigned int is_ccs;  | 
1922  |  |     struct dtls1_retransmit_state saved_retransmit_state;  | 
1923  |  | };  | 
1924  |  |  | 
1925  |  | typedef struct hm_fragment_st { | 
1926  |  |     struct hm_header_st msg_header;  | 
1927  |  |     unsigned char *fragment;  | 
1928  |  |     unsigned char *reassembly;  | 
1929  |  | } hm_fragment;  | 
1930  |  |  | 
1931  |  | typedef struct pqueue_st pqueue;  | 
1932  |  | typedef struct pitem_st pitem;  | 
1933  |  |  | 
1934  |  | struct pitem_st { | 
1935  |  |     unsigned char priority[8];  /* 64-bit value in big-endian encoding */  | 
1936  |  |     void *data;  | 
1937  |  |     pitem *next;  | 
1938  |  | };  | 
1939  |  |  | 
1940  |  | typedef struct pitem_st *piterator;  | 
1941  |  |  | 
1942  |  | pitem *pitem_new(unsigned char *prio64be, void *data);  | 
1943  |  | void pitem_free(pitem *item);  | 
1944  |  | pqueue *pqueue_new(void);  | 
1945  |  | void pqueue_free(pqueue *pq);  | 
1946  |  | pitem *pqueue_insert(pqueue *pq, pitem *item);  | 
1947  |  | pitem *pqueue_peek(pqueue *pq);  | 
1948  |  | pitem *pqueue_pop(pqueue *pq);  | 
1949  |  | pitem *pqueue_find(pqueue *pq, unsigned char *prio64be);  | 
1950  |  | pitem *pqueue_iterator(pqueue *pq);  | 
1951  |  | pitem *pqueue_next(piterator *iter);  | 
1952  |  | size_t pqueue_size(pqueue *pq);  | 
1953  |  |  | 
1954  |  | typedef struct dtls1_state_st { | 
1955  |  |     unsigned char cookie[DTLS1_COOKIE_LENGTH];  | 
1956  |  |     size_t cookie_len;  | 
1957  |  |     unsigned int cookie_verified;  | 
1958  |  |     /* handshake message numbers */  | 
1959  |  |     unsigned short handshake_write_seq;  | 
1960  |  |     unsigned short next_handshake_write_seq;  | 
1961  |  |     unsigned short handshake_read_seq;  | 
1962  |  |     /* Buffered handshake messages */  | 
1963  |  |     pqueue *buffered_messages;  | 
1964  |  |     /* Buffered (sent) handshake records */  | 
1965  |  |     pqueue *sent_messages;  | 
1966  |  |     size_t link_mtu;      /* max on-the-wire DTLS packet size */  | 
1967  |  |     size_t mtu;           /* max DTLS packet size */  | 
1968  |  |     struct hm_header_st w_msg_hdr;  | 
1969  |  |     struct hm_header_st r_msg_hdr;  | 
1970  |  |     /* Number of alerts received so far */  | 
1971  |  |     unsigned int timeout_num_alerts;  | 
1972  |  |     /*  | 
1973  |  |      * Indicates when the last handshake msg sent will timeout  | 
1974  |  |      */  | 
1975  |  |     OSSL_TIME next_timeout;  | 
1976  |  |     /* Timeout duration */  | 
1977  |  |     unsigned int timeout_duration_us;  | 
1978  |  |  | 
1979  |  |     unsigned int retransmitting;  | 
1980  |  | # ifndef OPENSSL_NO_SCTP  | 
1981  |  |     int shutdown_received;  | 
1982  |  | # endif  | 
1983  |  |  | 
1984  |  |     DTLS_timer_cb timer_cb;  | 
1985  |  |  | 
1986  |  | } DTLS1_STATE;  | 
1987  |  |  | 
1988  |  | /*  | 
1989  |  |  * From ECC-TLS draft, used in encoding the curve type in ECParameters  | 
1990  |  |  */  | 
1991  |  | #  define EXPLICIT_PRIME_CURVE_TYPE  1  | 
1992  |  | #  define EXPLICIT_CHAR2_CURVE_TYPE  2  | 
1993  | 0  | #  define NAMED_CURVE_TYPE           3  | 
1994  |  |  | 
1995  |  | # ifndef OPENSSL_NO_COMP_ALG  | 
1996  |  | struct ossl_comp_cert_st { | 
1997  |  |     unsigned char *data;  | 
1998  |  |     size_t len;  | 
1999  |  |     size_t orig_len;  | 
2000  |  |     CRYPTO_REF_COUNT references;  | 
2001  |  |     int alg;  | 
2002  |  | };  | 
2003  |  | typedef struct ossl_comp_cert_st OSSL_COMP_CERT;  | 
2004  |  |  | 
2005  |  | void OSSL_COMP_CERT_free(OSSL_COMP_CERT *c);  | 
2006  |  | int OSSL_COMP_CERT_up_ref(OSSL_COMP_CERT *c);  | 
2007  |  | # endif  | 
2008  |  |  | 
2009  |  | struct cert_pkey_st { | 
2010  |  |     X509 *x509;  | 
2011  |  |     EVP_PKEY *privatekey;  | 
2012  |  |     /* Chain for this certificate */  | 
2013  |  |     STACK_OF(X509) *chain;  | 
2014  |  |     /*-  | 
2015  |  |      * serverinfo data for this certificate.  The data is in TLS Extension  | 
2016  |  |      * wire format, specifically it's a series of records like:  | 
2017  |  |      *   uint16_t extension_type; // (RFC 5246, 7.4.1.4, Extension)  | 
2018  |  |      *   uint16_t length;  | 
2019  |  |      *   uint8_t data[length];  | 
2020  |  |      */  | 
2021  |  |     unsigned char *serverinfo;  | 
2022  |  |     size_t serverinfo_length;  | 
2023  |  | # ifndef OPENSSL_NO_COMP_ALG  | 
2024  |  |     /* Compressed certificate data - index 0 is unused */  | 
2025  |  |     OSSL_COMP_CERT *comp_cert[TLSEXT_comp_cert_limit];  | 
2026  |  |     int cert_comp_used;  | 
2027  |  | # endif  | 
2028  |  | };  | 
2029  |  | /* Retrieve Suite B flags */  | 
2030  | 0  | # define tls1_suiteb(s)  (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)  | 
2031  |  | /* Uses to check strict mode: suite B modes are always strict */  | 
2032  |  | # define SSL_CERT_FLAGS_CHECK_TLS_STRICT \  | 
2033  | 0  |         (SSL_CERT_FLAG_SUITEB_128_LOS|SSL_CERT_FLAG_TLS_STRICT)  | 
2034  |  |  | 
2035  |  | typedef enum { | 
2036  |  |     ENDPOINT_CLIENT = 0,  | 
2037  |  |     ENDPOINT_SERVER,  | 
2038  |  |     ENDPOINT_BOTH  | 
2039  |  | } ENDPOINT;  | 
2040  |  |  | 
2041  |  |  | 
2042  |  | typedef struct { | 
2043  |  |     unsigned short ext_type;  | 
2044  |  |     ENDPOINT role;  | 
2045  |  |     /* The context which this extension applies to */  | 
2046  |  |     unsigned int context;  | 
2047  |  |     /*  | 
2048  |  |      * Per-connection flags relating to this extension type: not used if  | 
2049  |  |      * part of an SSL_CTX structure.  | 
2050  |  |      */  | 
2051  |  |     uint32_t ext_flags;  | 
2052  |  |     SSL_custom_ext_add_cb_ex add_cb;  | 
2053  |  |     SSL_custom_ext_free_cb_ex free_cb;  | 
2054  |  |     void *add_arg;  | 
2055  |  |     SSL_custom_ext_parse_cb_ex parse_cb;  | 
2056  |  |     void *parse_arg;  | 
2057  |  | } custom_ext_method;  | 
2058  |  |  | 
2059  |  | /* ext_flags values */  | 
2060  |  |  | 
2061  |  | /*  | 
2062  |  |  * Indicates an extension has been received. Used to check for unsolicited or  | 
2063  |  |  * duplicate extensions.  | 
2064  |  |  */  | 
2065  | 0  | # define SSL_EXT_FLAG_RECEIVED   0x1  | 
2066  |  | /*  | 
2067  |  |  * Indicates an extension has been sent: used to enable sending of  | 
2068  |  |  * corresponding ServerHello extension.  | 
2069  |  |  */  | 
2070  | 0  | # define SSL_EXT_FLAG_SENT       0x2  | 
2071  |  | /*  | 
2072  |  |  * Indicates an extension that was set on SSL object and needs to be  | 
2073  |  |  * preserved when switching SSL contexts.  | 
2074  |  |  */  | 
2075  | 0  | # define SSL_EXT_FLAG_CONN       0x4  | 
2076  |  |  | 
2077  |  | typedef struct { | 
2078  |  |     custom_ext_method *meths;  | 
2079  |  |     size_t meths_count;  | 
2080  |  | } custom_ext_methods;  | 
2081  |  |  | 
2082  |  | typedef struct cert_st { | 
2083  |  |     /* Current active set */  | 
2084  |  |     /*  | 
2085  |  |      * ALWAYS points to an element of the pkeys array  | 
2086  |  |      * Probably it would make more sense to store  | 
2087  |  |      * an index, not a pointer.  | 
2088  |  |      */  | 
2089  |  |     CERT_PKEY *key;  | 
2090  |  |  | 
2091  |  |     EVP_PKEY *dh_tmp;  | 
2092  |  |     DH *(*dh_tmp_cb) (SSL *ssl, int is_export, int keysize);  | 
2093  |  |     int dh_tmp_auto;  | 
2094  |  |     /* Flags related to certificates */  | 
2095  |  |     uint32_t cert_flags;  | 
2096  |  |     CERT_PKEY *pkeys;  | 
2097  |  |     size_t ssl_pkey_num;  | 
2098  |  |     /* Custom certificate types sent in certificate request message. */  | 
2099  |  |     uint8_t *ctype;  | 
2100  |  |     size_t ctype_len;  | 
2101  |  |     /*  | 
2102  |  |      * supported signature algorithms. When set on a client this is sent in  | 
2103  |  |      * the client hello as the supported signature algorithms extension. For  | 
2104  |  |      * servers it represents the signature algorithms we are willing to use.  | 
2105  |  |      */  | 
2106  |  |     uint16_t *conf_sigalgs;  | 
2107  |  |     /* Size of above array */  | 
2108  |  |     size_t conf_sigalgslen;  | 
2109  |  |     /*  | 
2110  |  |      * Client authentication signature algorithms, if not set then uses  | 
2111  |  |      * conf_sigalgs. On servers these will be the signature algorithms sent  | 
2112  |  |      * to the client in a certificate request for TLS 1.2. On a client this  | 
2113  |  |      * represents the signature algorithms we are willing to use for client  | 
2114  |  |      * authentication.  | 
2115  |  |      */  | 
2116  |  |     uint16_t *client_sigalgs;  | 
2117  |  |     /* Size of above array */  | 
2118  |  |     size_t client_sigalgslen;  | 
2119  |  |     /*  | 
2120  |  |      * Certificate setup callback: if set is called whenever a certificate  | 
2121  |  |      * may be required (client or server). the callback can then examine any  | 
2122  |  |      * appropriate parameters and setup any certificates required. This  | 
2123  |  |      * allows advanced applications to select certificates on the fly: for  | 
2124  |  |      * example based on supported signature algorithms or curves.  | 
2125  |  |      */  | 
2126  |  |     int (*cert_cb) (SSL *ssl, void *arg);  | 
2127  |  |     void *cert_cb_arg;  | 
2128  |  |     /*  | 
2129  |  |      * Optional X509_STORE for chain building or certificate validation If  | 
2130  |  |      * NULL the parent SSL_CTX store is used instead.  | 
2131  |  |      */  | 
2132  |  |     X509_STORE *chain_store;  | 
2133  |  |     X509_STORE *verify_store;  | 
2134  |  |     /* Custom extensions */  | 
2135  |  |     custom_ext_methods custext;  | 
2136  |  |     /* Security callback */  | 
2137  |  |     int (*sec_cb) (const SSL *s, const SSL_CTX *ctx, int op, int bits, int nid,  | 
2138  |  |                    void *other, void *ex);  | 
2139  |  |     /* Security level */  | 
2140  |  |     int sec_level;  | 
2141  |  |     void *sec_ex;  | 
2142  |  | # ifndef OPENSSL_NO_PSK  | 
2143  |  |     /* If not NULL psk identity hint to use for servers */  | 
2144  |  |     char *psk_identity_hint;  | 
2145  |  | # endif  | 
2146  |  |     CRYPTO_REF_COUNT references;             /* >1 only if SSL_copy_session_id is used */  | 
2147  |  | } CERT;  | 
2148  |  |  | 
2149  |  | /*  | 
2150  |  |  * This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff It is a bit  | 
2151  |  |  * of a mess of functions, but hell, think of it as an opaque structure :-)  | 
2152  |  |  */  | 
2153  |  | typedef struct ssl3_enc_method { | 
2154  |  |     int (*setup_key_block) (SSL_CONNECTION *);  | 
2155  |  |     int (*generate_master_secret) (SSL_CONNECTION *, unsigned char *,  | 
2156  |  |                                    unsigned char *, size_t, size_t *);  | 
2157  |  |     int (*change_cipher_state) (SSL_CONNECTION *, int);  | 
2158  |  |     size_t (*final_finish_mac) (SSL_CONNECTION *, const char *, size_t,  | 
2159  |  |                                 unsigned char *);  | 
2160  |  |     const char *client_finished_label;  | 
2161  |  |     size_t client_finished_label_len;  | 
2162  |  |     const char *server_finished_label;  | 
2163  |  |     size_t server_finished_label_len;  | 
2164  |  |     int (*alert_value) (int);  | 
2165  |  |     int (*export_keying_material) (SSL_CONNECTION *, unsigned char *, size_t,  | 
2166  |  |                                    const char *, size_t,  | 
2167  |  |                                    const unsigned char *, size_t,  | 
2168  |  |                                    int use_context);  | 
2169  |  |     /* Various flags indicating protocol version requirements */  | 
2170  |  |     uint32_t enc_flags;  | 
2171  |  |     /* Set the handshake header */  | 
2172  |  |     int (*set_handshake_header) (SSL_CONNECTION *s, WPACKET *pkt, int type);  | 
2173  |  |     /* Close construction of the handshake message */  | 
2174  |  |     int (*close_construct_packet) (SSL_CONNECTION *s, WPACKET *pkt, int htype);  | 
2175  |  |     /* Write out handshake message */  | 
2176  |  |     int (*do_write) (SSL_CONNECTION *s);  | 
2177  |  | } SSL3_ENC_METHOD;  | 
2178  |  |  | 
2179  |  | # define ssl_set_handshake_header(s, pkt, htype) \  | 
2180  | 0  |     SSL_CONNECTION_GET_SSL(s)->method->ssl3_enc->set_handshake_header((s), (pkt), (htype))  | 
2181  |  | # define ssl_close_construct_packet(s, pkt, htype) \  | 
2182  | 0  |     SSL_CONNECTION_GET_SSL(s)->method->ssl3_enc->close_construct_packet((s), (pkt), (htype))  | 
2183  | 0  | # define ssl_do_write(s)  SSL_CONNECTION_GET_SSL(s)->method->ssl3_enc->do_write(s)  | 
2184  |  |  | 
2185  |  | /* Values for enc_flags */  | 
2186  |  |  | 
2187  |  | /* Uses signature algorithms extension */  | 
2188  | 0  | # define SSL_ENC_FLAG_SIGALGS            0x2  | 
2189  |  | /* Uses SHA256 default PRF */  | 
2190  | 0  | # define SSL_ENC_FLAG_SHA256_PRF         0x4  | 
2191  |  | /* Is DTLS */  | 
2192  | 0  | # define SSL_ENC_FLAG_DTLS               0x8  | 
2193  |  | /*  | 
2194  |  |  * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may  | 
2195  |  |  * apply to others in future.  | 
2196  |  |  */  | 
2197  | 0  | # define SSL_ENC_FLAG_TLS1_2_CIPHERS     0x10  | 
2198  |  |  | 
2199  |  | typedef enum downgrade_en { | 
2200  |  |     DOWNGRADE_NONE,  | 
2201  |  |     DOWNGRADE_TO_1_2,  | 
2202  |  |     DOWNGRADE_TO_1_1  | 
2203  |  | } DOWNGRADE;  | 
2204  |  |  | 
2205  |  | /*  | 
2206  |  |  * Dummy status type for the status_type extension. Indicates no status type  | 
2207  |  |  * set  | 
2208  |  |  */  | 
2209  | 0  | #define TLSEXT_STATUSTYPE_nothing  -1  | 
2210  |  |  | 
2211  |  | /* Sigalgs values */  | 
2212  | 0  | #define TLSEXT_SIGALG_ecdsa_secp256r1_sha256                    0x0403  | 
2213  | 0  | #define TLSEXT_SIGALG_ecdsa_secp384r1_sha384                    0x0503  | 
2214  |  | #define TLSEXT_SIGALG_ecdsa_secp521r1_sha512                    0x0603  | 
2215  |  | #define TLSEXT_SIGALG_ecdsa_sha224                              0x0303  | 
2216  |  | #define TLSEXT_SIGALG_ecdsa_sha1                                0x0203  | 
2217  |  | #define TLSEXT_SIGALG_rsa_pss_rsae_sha256                       0x0804  | 
2218  |  | #define TLSEXT_SIGALG_rsa_pss_rsae_sha384                       0x0805  | 
2219  |  | #define TLSEXT_SIGALG_rsa_pss_rsae_sha512                       0x0806  | 
2220  |  | #define TLSEXT_SIGALG_rsa_pss_pss_sha256                        0x0809  | 
2221  |  | #define TLSEXT_SIGALG_rsa_pss_pss_sha384                        0x080a  | 
2222  |  | #define TLSEXT_SIGALG_rsa_pss_pss_sha512                        0x080b  | 
2223  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha256                          0x0401  | 
2224  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha384                          0x0501  | 
2225  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha512                          0x0601  | 
2226  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha224                          0x0301  | 
2227  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha1                            0x0201  | 
2228  |  | #define TLSEXT_SIGALG_dsa_sha256                                0x0402  | 
2229  |  | #define TLSEXT_SIGALG_dsa_sha384                                0x0502  | 
2230  |  | #define TLSEXT_SIGALG_dsa_sha512                                0x0602  | 
2231  |  | #define TLSEXT_SIGALG_dsa_sha224                                0x0302  | 
2232  |  | #define TLSEXT_SIGALG_dsa_sha1                                  0x0202  | 
2233  |  | #define TLSEXT_SIGALG_gostr34102012_256_intrinsic               0x0840  | 
2234  |  | #define TLSEXT_SIGALG_gostr34102012_512_intrinsic               0x0841  | 
2235  |  | #define TLSEXT_SIGALG_gostr34102012_256_gostr34112012_256       0xeeee  | 
2236  |  | #define TLSEXT_SIGALG_gostr34102012_512_gostr34112012_512       0xefef  | 
2237  |  | #define TLSEXT_SIGALG_gostr34102001_gostr3411                   0xeded  | 
2238  |  |  | 
2239  | 0  | #define TLSEXT_SIGALG_ed25519                                   0x0807  | 
2240  | 0  | #define TLSEXT_SIGALG_ed448                                     0x0808  | 
2241  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP256r1_sha256              0x081a  | 
2242  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP384r1_sha384              0x081b  | 
2243  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP512r1_sha512              0x081c  | 
2244  |  | #define TLSEXT_SIGALG_mldsa44                                   0x0904  | 
2245  |  | #define TLSEXT_SIGALG_mldsa65                                   0x0905  | 
2246  |  | #define TLSEXT_SIGALG_mldsa87                                   0x0906  | 
2247  |  |  | 
2248  |  | /* Sigalgs names */  | 
2249  |  | #define TLSEXT_SIGALG_ecdsa_secp256r1_sha256_name                    "ecdsa_secp256r1_sha256"  | 
2250  |  | #define TLSEXT_SIGALG_ecdsa_secp384r1_sha384_name                    "ecdsa_secp384r1_sha384"  | 
2251  |  | #define TLSEXT_SIGALG_ecdsa_secp521r1_sha512_name                    "ecdsa_secp521r1_sha512"  | 
2252  |  | #define TLSEXT_SIGALG_ecdsa_sha224_name                              "ecdsa_sha224"  | 
2253  |  | #define TLSEXT_SIGALG_ecdsa_sha1_name                                "ecdsa_sha1"  | 
2254  |  | #define TLSEXT_SIGALG_rsa_pss_rsae_sha256_name                       "rsa_pss_rsae_sha256"  | 
2255  |  | #define TLSEXT_SIGALG_rsa_pss_rsae_sha384_name                       "rsa_pss_rsae_sha384"  | 
2256  |  | #define TLSEXT_SIGALG_rsa_pss_rsae_sha512_name                       "rsa_pss_rsae_sha512"  | 
2257  |  | #define TLSEXT_SIGALG_rsa_pss_pss_sha256_name                        "rsa_pss_pss_sha256"  | 
2258  |  | #define TLSEXT_SIGALG_rsa_pss_pss_sha384_name                        "rsa_pss_pss_sha384"  | 
2259  |  | #define TLSEXT_SIGALG_rsa_pss_pss_sha512_name                        "rsa_pss_pss_sha512"  | 
2260  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha256_name                          "rsa_pkcs1_sha256"  | 
2261  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha384_name                          "rsa_pkcs1_sha384"  | 
2262  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha512_name                          "rsa_pkcs1_sha512"  | 
2263  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha224_name                          "rsa_pkcs1_sha224"  | 
2264  |  | #define TLSEXT_SIGALG_rsa_pkcs1_sha1_name                            "rsa_pkcs1_sha1"  | 
2265  |  | #define TLSEXT_SIGALG_dsa_sha256_name                                "dsa_sha256"  | 
2266  |  | #define TLSEXT_SIGALG_dsa_sha384_name                                "dsa_sha384"  | 
2267  |  | #define TLSEXT_SIGALG_dsa_sha512_name                                "dsa_sha512"  | 
2268  |  | #define TLSEXT_SIGALG_dsa_sha224_name                                "dsa_sha224"  | 
2269  |  | #define TLSEXT_SIGALG_dsa_sha1_name                                  "dsa_sha1"  | 
2270  |  | #define TLSEXT_SIGALG_gostr34102012_256_intrinsic_name               "gostr34102012_256"  | 
2271  |  | #define TLSEXT_SIGALG_gostr34102012_512_intrinsic_name               "gostr34102012_512"  | 
2272  |  | #define TLSEXT_SIGALG_gostr34102012_256_intrinsic_alias              "gost2012_256"  | 
2273  |  | #define TLSEXT_SIGALG_gostr34102012_512_intrinsic_alias              "gost2012_512"  | 
2274  |  | #define TLSEXT_SIGALG_gostr34102012_256_gostr34112012_256_name       "gost2012_256"  | 
2275  |  | #define TLSEXT_SIGALG_gostr34102012_512_gostr34112012_512_name       "gost2012_512"  | 
2276  |  | #define TLSEXT_SIGALG_gostr34102001_gostr3411_name                   "gost2001_gost94"  | 
2277  |  |  | 
2278  |  | #define TLSEXT_SIGALG_ed25519_name                                   "ed25519"  | 
2279  |  | #define TLSEXT_SIGALG_ed448_name                                     "ed448"  | 
2280  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP256r1_sha256_name              "ecdsa_brainpoolP256r1tls13_sha256"  | 
2281  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP384r1_sha384_name              "ecdsa_brainpoolP384r1tls13_sha384"  | 
2282  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP512r1_sha512_name              "ecdsa_brainpoolP512r1tls13_sha512"  | 
2283  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP256r1_sha256_alias             "ecdsa_brainpoolP256r1_sha256"  | 
2284  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP384r1_sha384_alias             "ecdsa_brainpoolP384r1_sha384"  | 
2285  |  | #define TLSEXT_SIGALG_ecdsa_brainpoolP512r1_sha512_alias             "ecdsa_brainpoolP512r1_sha512"  | 
2286  |  | #define TLSEXT_SIGALG_mldsa44_name                                   "mldsa44"  | 
2287  |  | #define TLSEXT_SIGALG_mldsa65_name                                   "mldsa65"  | 
2288  |  | #define TLSEXT_SIGALG_mldsa87_name                                   "mldsa87"  | 
2289  |  |  | 
2290  |  | /* Known PSK key exchange modes */  | 
2291  | 0  | #define TLSEXT_KEX_MODE_KE                                      0x00  | 
2292  | 0  | #define TLSEXT_KEX_MODE_KE_DHE                                  0x01  | 
2293  |  |  | 
2294  |  | /*  | 
2295  |  |  * Internal representations of key exchange modes  | 
2296  |  |  */  | 
2297  | 0  | #define TLSEXT_KEX_MODE_FLAG_NONE                               0  | 
2298  | 0  | #define TLSEXT_KEX_MODE_FLAG_KE                                 1  | 
2299  | 0  | #define TLSEXT_KEX_MODE_FLAG_KE_DHE                             2  | 
2300  |  |  | 
2301  | 0  | #define SSL_USE_PSS(s) (s->s3.tmp.peer_sigalg != NULL && \  | 
2302  | 0  |                         s->s3.tmp.peer_sigalg->sig == EVP_PKEY_RSA_PSS)  | 
2303  |  |  | 
2304  |  | /* TLSv1.3 downgrade protection sentinel values */  | 
2305  |  | extern const unsigned char tls11downgrade[8];  | 
2306  |  | extern const unsigned char tls12downgrade[8];  | 
2307  |  |  | 
2308  |  | extern const SSL3_ENC_METHOD ssl3_undef_enc_method;  | 
2309  |  |  | 
2310  |  | __owur const SSL_METHOD *sslv3_method(void);  | 
2311  |  | __owur const SSL_METHOD *sslv3_server_method(void);  | 
2312  |  | __owur const SSL_METHOD *sslv3_client_method(void);  | 
2313  |  | __owur const SSL_METHOD *tlsv1_method(void);  | 
2314  |  | __owur const SSL_METHOD *tlsv1_server_method(void);  | 
2315  |  | __owur const SSL_METHOD *tlsv1_client_method(void);  | 
2316  |  | __owur const SSL_METHOD *tlsv1_1_method(void);  | 
2317  |  | __owur const SSL_METHOD *tlsv1_1_server_method(void);  | 
2318  |  | __owur const SSL_METHOD *tlsv1_1_client_method(void);  | 
2319  |  | __owur const SSL_METHOD *tlsv1_2_method(void);  | 
2320  |  | __owur const SSL_METHOD *tlsv1_2_server_method(void);  | 
2321  |  | __owur const SSL_METHOD *tlsv1_2_client_method(void);  | 
2322  |  | __owur const SSL_METHOD *tlsv1_3_method(void);  | 
2323  |  | __owur const SSL_METHOD *tlsv1_3_server_method(void);  | 
2324  |  | __owur const SSL_METHOD *tlsv1_3_client_method(void);  | 
2325  |  | __owur const SSL_METHOD *dtlsv1_method(void);  | 
2326  |  | __owur const SSL_METHOD *dtlsv1_server_method(void);  | 
2327  |  | __owur const SSL_METHOD *dtlsv1_client_method(void);  | 
2328  |  | __owur const SSL_METHOD *dtls_bad_ver_client_method(void);  | 
2329  |  | __owur const SSL_METHOD *dtlsv1_2_method(void);  | 
2330  |  | __owur const SSL_METHOD *dtlsv1_2_server_method(void);  | 
2331  |  | __owur const SSL_METHOD *dtlsv1_2_client_method(void);  | 
2332  |  |  | 
2333  |  | extern const SSL3_ENC_METHOD TLSv1_enc_data;  | 
2334  |  | extern const SSL3_ENC_METHOD TLSv1_1_enc_data;  | 
2335  |  | extern const SSL3_ENC_METHOD TLSv1_2_enc_data;  | 
2336  |  | extern const SSL3_ENC_METHOD TLSv1_3_enc_data;  | 
2337  |  | extern const SSL3_ENC_METHOD SSLv3_enc_data;  | 
2338  |  | extern const SSL3_ENC_METHOD DTLSv1_enc_data;  | 
2339  |  | extern const SSL3_ENC_METHOD DTLSv1_2_enc_data;  | 
2340  |  |  | 
2341  |  | /*  | 
2342  |  |  * Flags for SSL methods  | 
2343  |  |  */  | 
2344  | 0  | # define SSL_METHOD_NO_FIPS      (1U<<0)  | 
2345  | 0  | # define SSL_METHOD_NO_SUITEB    (1U<<1)  | 
2346  |  |  | 
2347  |  | # define IMPLEMENT_tls_meth_func(version, flags, mask, func_name, s_accept, \  | 
2348  |  |                                  s_connect, enc_data) \  | 
2349  |  | const SSL_METHOD *func_name(void)  \  | 
2350  | 0  |         { \ | 
2351  | 0  |         static const SSL_METHOD func_name##_data= { \ | 
2352  | 0  |                 version, \  | 
2353  | 0  |                 flags, \  | 
2354  | 0  |                 mask, \  | 
2355  | 0  |                 ossl_ssl_connection_new, \  | 
2356  | 0  |                 ossl_ssl_connection_free, \  | 
2357  | 0  |                 ossl_ssl_connection_reset, \  | 
2358  | 0  |                 tls1_new, \  | 
2359  | 0  |                 tls1_clear, \  | 
2360  | 0  |                 tls1_free, \  | 
2361  | 0  |                 s_accept, \  | 
2362  | 0  |                 s_connect, \  | 
2363  | 0  |                 ssl3_read, \  | 
2364  | 0  |                 ssl3_peek, \  | 
2365  | 0  |                 ssl3_write, \  | 
2366  | 0  |                 ssl3_shutdown, \  | 
2367  | 0  |                 ssl3_renegotiate, \  | 
2368  | 0  |                 ssl3_renegotiate_check, \  | 
2369  | 0  |                 ssl3_read_bytes, \  | 
2370  | 0  |                 ssl3_write_bytes, \  | 
2371  | 0  |                 ssl3_dispatch_alert, \  | 
2372  | 0  |                 ssl3_ctrl, \  | 
2373  | 0  |                 ssl3_ctx_ctrl, \  | 
2374  | 0  |                 ssl3_get_cipher_by_char, \  | 
2375  | 0  |                 ssl3_put_cipher_by_char, \  | 
2376  | 0  |                 ssl3_pending, \  | 
2377  | 0  |                 ssl3_num_ciphers, \  | 
2378  | 0  |                 ssl3_get_cipher, \  | 
2379  | 0  |                 tls1_default_timeout, \  | 
2380  | 0  |                 &enc_data, \  | 
2381  | 0  |                 ssl_undefined_void_function, \  | 
2382  | 0  |                 ssl3_callback_ctrl, \  | 
2383  | 0  |                 ssl3_ctx_callback_ctrl, \  | 
2384  | 0  |         }; \  | 
2385  | 0  |         return &func_name##_data; \  | 
2386  | 0  |         } Unexecuted instantiation: TLS_method Unexecuted instantiation: tlsv1_3_method Unexecuted instantiation: tlsv1_2_method Unexecuted instantiation: tlsv1_1_method Unexecuted instantiation: tlsv1_method Unexecuted instantiation: TLS_server_method Unexecuted instantiation: tlsv1_3_server_method Unexecuted instantiation: tlsv1_2_server_method Unexecuted instantiation: tlsv1_1_server_method Unexecuted instantiation: tlsv1_server_method Unexecuted instantiation: TLS_client_method Unexecuted instantiation: tlsv1_3_client_method Unexecuted instantiation: tlsv1_2_client_method Unexecuted instantiation: tlsv1_1_client_method Unexecuted instantiation: tlsv1_client_method  | 
2387  |  |  | 
2388  |  | # define IMPLEMENT_ssl3_meth_func(func_name, s_accept, s_connect) \  | 
2389  |  | const SSL_METHOD *func_name(void)  \  | 
2390  | 0  |         { \ | 
2391  | 0  |         static const SSL_METHOD func_name##_data= { \ | 
2392  | 0  |                 SSL3_VERSION, \  | 
2393  | 0  |                 SSL_METHOD_NO_FIPS | SSL_METHOD_NO_SUITEB, \  | 
2394  | 0  |                 SSL_OP_NO_SSLv3, \  | 
2395  | 0  |                 ossl_ssl_connection_new, \  | 
2396  | 0  |                 ossl_ssl_connection_free, \  | 
2397  | 0  |                 ossl_ssl_connection_reset, \  | 
2398  | 0  |                 ssl3_new, \  | 
2399  | 0  |                 ssl3_clear, \  | 
2400  | 0  |                 ssl3_free, \  | 
2401  | 0  |                 s_accept, \  | 
2402  | 0  |                 s_connect, \  | 
2403  | 0  |                 ssl3_read, \  | 
2404  | 0  |                 ssl3_peek, \  | 
2405  | 0  |                 ssl3_write, \  | 
2406  | 0  |                 ssl3_shutdown, \  | 
2407  | 0  |                 ssl3_renegotiate, \  | 
2408  | 0  |                 ssl3_renegotiate_check, \  | 
2409  | 0  |                 ssl3_read_bytes, \  | 
2410  | 0  |                 ssl3_write_bytes, \  | 
2411  | 0  |                 ssl3_dispatch_alert, \  | 
2412  | 0  |                 ssl3_ctrl, \  | 
2413  | 0  |                 ssl3_ctx_ctrl, \  | 
2414  | 0  |                 ssl3_get_cipher_by_char, \  | 
2415  | 0  |                 ssl3_put_cipher_by_char, \  | 
2416  | 0  |                 ssl3_pending, \  | 
2417  | 0  |                 ssl3_num_ciphers, \  | 
2418  | 0  |                 ssl3_get_cipher, \  | 
2419  | 0  |                 ssl3_default_timeout, \  | 
2420  | 0  |                 &SSLv3_enc_data, \  | 
2421  | 0  |                 ssl_undefined_void_function, \  | 
2422  | 0  |                 ssl3_callback_ctrl, \  | 
2423  | 0  |                 ssl3_ctx_callback_ctrl, \  | 
2424  | 0  |         }; \  | 
2425  | 0  |         return &func_name##_data; \  | 
2426  | 0  |         } Unexecuted instantiation: sslv3_method Unexecuted instantiation: sslv3_server_method Unexecuted instantiation: sslv3_client_method  | 
2427  |  |  | 
2428  |  | # define IMPLEMENT_dtls1_meth_func(version, flags, mask, func_name, s_accept, \  | 
2429  |  |                                         s_connect, enc_data) \  | 
2430  |  | const SSL_METHOD *func_name(void)  \  | 
2431  | 0  |         { \ | 
2432  | 0  |         static const SSL_METHOD func_name##_data= { \ | 
2433  | 0  |                 version, \  | 
2434  | 0  |                 flags, \  | 
2435  | 0  |                 mask, \  | 
2436  | 0  |                 ossl_ssl_connection_new, \  | 
2437  | 0  |                 ossl_ssl_connection_free, \  | 
2438  | 0  |                 ossl_ssl_connection_reset, \  | 
2439  | 0  |                 dtls1_new, \  | 
2440  | 0  |                 dtls1_clear, \  | 
2441  | 0  |                 dtls1_free, \  | 
2442  | 0  |                 s_accept, \  | 
2443  | 0  |                 s_connect, \  | 
2444  | 0  |                 ssl3_read, \  | 
2445  | 0  |                 ssl3_peek, \  | 
2446  | 0  |                 ssl3_write, \  | 
2447  | 0  |                 dtls1_shutdown, \  | 
2448  | 0  |                 ssl3_renegotiate, \  | 
2449  | 0  |                 ssl3_renegotiate_check, \  | 
2450  | 0  |                 dtls1_read_bytes, \  | 
2451  | 0  |                 dtls1_write_app_data_bytes, \  | 
2452  | 0  |                 dtls1_dispatch_alert, \  | 
2453  | 0  |                 dtls1_ctrl, \  | 
2454  | 0  |                 ssl3_ctx_ctrl, \  | 
2455  | 0  |                 ssl3_get_cipher_by_char, \  | 
2456  | 0  |                 ssl3_put_cipher_by_char, \  | 
2457  | 0  |                 ssl3_pending, \  | 
2458  | 0  |                 ssl3_num_ciphers, \  | 
2459  | 0  |                 ssl3_get_cipher, \  | 
2460  | 0  |                 dtls1_default_timeout, \  | 
2461  | 0  |                 &enc_data, \  | 
2462  | 0  |                 ssl_undefined_void_function, \  | 
2463  | 0  |                 ssl3_callback_ctrl, \  | 
2464  | 0  |                 ssl3_ctx_callback_ctrl, \  | 
2465  | 0  |         }; \  | 
2466  | 0  |         return &func_name##_data; \  | 
2467  | 0  |         } Unexecuted instantiation: dtlsv1_method Unexecuted instantiation: dtlsv1_2_method Unexecuted instantiation: DTLS_method Unexecuted instantiation: dtlsv1_server_method Unexecuted instantiation: dtlsv1_2_server_method Unexecuted instantiation: DTLS_server_method Unexecuted instantiation: dtlsv1_client_method Unexecuted instantiation: dtls_bad_ver_client_method Unexecuted instantiation: dtlsv1_2_client_method Unexecuted instantiation: DTLS_client_method  | 
2468  |  |  | 
2469  |  | struct openssl_ssl_test_functions { | 
2470  |  |     int (*p_ssl_init_wbio_buffer) (SSL_CONNECTION *s);  | 
2471  |  | };  | 
2472  |  |  | 
2473  |  | const char *ssl_protocol_to_string(int version);  | 
2474  |  |  | 
2475  |  | static ossl_inline int tls12_rpk_and_privkey(const SSL_CONNECTION *sc, int idx)  | 
2476  | 0  | { | 
2477  |  |     /*  | 
2478  |  |      * This is to check for special cases when using RPK with just  | 
2479  |  |      * a private key, and NO CERTIFICATE  | 
2480  |  |      */  | 
2481  | 0  |     return ((sc->server && sc->ext.server_cert_type == TLSEXT_cert_type_rpk)  | 
2482  | 0  |             || (!sc->server && sc->ext.client_cert_type == TLSEXT_cert_type_rpk))  | 
2483  | 0  |         && sc->cert->pkeys[idx].privatekey != NULL  | 
2484  | 0  |         && sc->cert->pkeys[idx].x509 == NULL;  | 
2485  | 0  | } Unexecuted instantiation: methods.c:tls12_rpk_and_privkey Unexecuted instantiation: s3_lib.c:tls12_rpk_and_privkey Unexecuted instantiation: s3_msg.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_cert.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_ciph.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_init.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_lib.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_mcnf.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_rsa.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_sess.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_stat.c:tls12_rpk_and_privkey Unexecuted instantiation: t1_lib.c:tls12_rpk_and_privkey Unexecuted instantiation: tls13_enc.c:tls12_rpk_and_privkey Unexecuted instantiation: tls_depr.c:tls12_rpk_and_privkey Unexecuted instantiation: tls_srp.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_impl.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_method.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_obj.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_port.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_record_rx.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_record_shared.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_record_tx.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_record_util.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_thread_assist.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_tls.c:tls12_rpk_and_privkey Unexecuted instantiation: rec_layer_d1.c:tls12_rpk_and_privkey Unexecuted instantiation: rec_layer_s3.c:tls12_rpk_and_privkey Unexecuted instantiation: dtls_meth.c:tls12_rpk_and_privkey Unexecuted instantiation: tls1_meth.c:tls12_rpk_and_privkey Unexecuted instantiation: tls_common.c:tls12_rpk_and_privkey Unexecuted instantiation: tls_multib.c:tls12_rpk_and_privkey Unexecuted instantiation: tlsany_meth.c:tls12_rpk_and_privkey Unexecuted instantiation: extensions.c:tls12_rpk_and_privkey Unexecuted instantiation: extensions_clnt.c:tls12_rpk_and_privkey Unexecuted instantiation: extensions_cust.c:tls12_rpk_and_privkey Unexecuted instantiation: extensions_srvr.c:tls12_rpk_and_privkey Unexecuted instantiation: statem.c:tls12_rpk_and_privkey Unexecuted instantiation: statem_clnt.c:tls12_rpk_and_privkey Unexecuted instantiation: statem_dtls.c:tls12_rpk_and_privkey Unexecuted instantiation: statem_lib.c:tls12_rpk_and_privkey Unexecuted instantiation: statem_srvr.c:tls12_rpk_and_privkey Unexecuted instantiation: d1_lib.c:tls12_rpk_and_privkey Unexecuted instantiation: d1_msg.c:tls12_rpk_and_privkey Unexecuted instantiation: d1_srtp.c:tls12_rpk_and_privkey Unexecuted instantiation: pqueue.c:tls12_rpk_and_privkey Unexecuted instantiation: s3_enc.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_asn1.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl_conf.c:tls12_rpk_and_privkey Unexecuted instantiation: t1_enc.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_channel.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_engine.c:tls12_rpk_and_privkey Unexecuted instantiation: quic_rx_depack.c:tls12_rpk_and_privkey Unexecuted instantiation: ssl3_meth.c:tls12_rpk_and_privkey Unexecuted instantiation: tls13_meth.c:tls12_rpk_and_privkey  | 
2486  |  |  | 
2487  |  | static ossl_inline int ssl_has_cert_type(const SSL_CONNECTION *sc, unsigned char ct)  | 
2488  | 0  | { | 
2489  | 0  |     unsigned char *ptr;  | 
2490  | 0  |     size_t len;  | 
2491  |  | 
  | 
2492  | 0  |     if (sc->server) { | 
2493  | 0  |         ptr = sc->server_cert_type;  | 
2494  | 0  |         len = sc->server_cert_type_len;  | 
2495  | 0  |     } else { | 
2496  | 0  |         ptr = sc->client_cert_type;  | 
2497  | 0  |         len = sc->client_cert_type_len;  | 
2498  | 0  |     }  | 
2499  |  | 
  | 
2500  | 0  |     if (ptr == NULL)  | 
2501  | 0  |         return 0;  | 
2502  |  |  | 
2503  | 0  |     return memchr(ptr, ct, len) != NULL;  | 
2504  | 0  | } Unexecuted instantiation: methods.c:ssl_has_cert_type Unexecuted instantiation: s3_lib.c:ssl_has_cert_type Unexecuted instantiation: s3_msg.c:ssl_has_cert_type Unexecuted instantiation: ssl_cert.c:ssl_has_cert_type Unexecuted instantiation: ssl_ciph.c:ssl_has_cert_type Unexecuted instantiation: ssl_init.c:ssl_has_cert_type Unexecuted instantiation: ssl_lib.c:ssl_has_cert_type Unexecuted instantiation: ssl_mcnf.c:ssl_has_cert_type Unexecuted instantiation: ssl_rsa.c:ssl_has_cert_type Unexecuted instantiation: ssl_sess.c:ssl_has_cert_type Unexecuted instantiation: ssl_stat.c:ssl_has_cert_type Unexecuted instantiation: t1_lib.c:ssl_has_cert_type Unexecuted instantiation: tls13_enc.c:ssl_has_cert_type Unexecuted instantiation: tls_depr.c:ssl_has_cert_type Unexecuted instantiation: tls_srp.c:ssl_has_cert_type Unexecuted instantiation: quic_impl.c:ssl_has_cert_type Unexecuted instantiation: quic_method.c:ssl_has_cert_type Unexecuted instantiation: quic_obj.c:ssl_has_cert_type Unexecuted instantiation: quic_port.c:ssl_has_cert_type Unexecuted instantiation: quic_record_rx.c:ssl_has_cert_type Unexecuted instantiation: quic_record_shared.c:ssl_has_cert_type Unexecuted instantiation: quic_record_tx.c:ssl_has_cert_type Unexecuted instantiation: quic_record_util.c:ssl_has_cert_type Unexecuted instantiation: quic_thread_assist.c:ssl_has_cert_type Unexecuted instantiation: quic_tls.c:ssl_has_cert_type Unexecuted instantiation: rec_layer_d1.c:ssl_has_cert_type Unexecuted instantiation: rec_layer_s3.c:ssl_has_cert_type Unexecuted instantiation: dtls_meth.c:ssl_has_cert_type Unexecuted instantiation: tls1_meth.c:ssl_has_cert_type Unexecuted instantiation: tls_common.c:ssl_has_cert_type Unexecuted instantiation: tls_multib.c:ssl_has_cert_type Unexecuted instantiation: tlsany_meth.c:ssl_has_cert_type Unexecuted instantiation: extensions.c:ssl_has_cert_type Unexecuted instantiation: extensions_clnt.c:ssl_has_cert_type Unexecuted instantiation: extensions_cust.c:ssl_has_cert_type Unexecuted instantiation: extensions_srvr.c:ssl_has_cert_type Unexecuted instantiation: statem.c:ssl_has_cert_type Unexecuted instantiation: statem_clnt.c:ssl_has_cert_type Unexecuted instantiation: statem_dtls.c:ssl_has_cert_type Unexecuted instantiation: statem_lib.c:ssl_has_cert_type Unexecuted instantiation: statem_srvr.c:ssl_has_cert_type Unexecuted instantiation: d1_lib.c:ssl_has_cert_type Unexecuted instantiation: d1_msg.c:ssl_has_cert_type Unexecuted instantiation: d1_srtp.c:ssl_has_cert_type Unexecuted instantiation: pqueue.c:ssl_has_cert_type Unexecuted instantiation: s3_enc.c:ssl_has_cert_type Unexecuted instantiation: ssl_asn1.c:ssl_has_cert_type Unexecuted instantiation: ssl_conf.c:ssl_has_cert_type Unexecuted instantiation: t1_enc.c:ssl_has_cert_type Unexecuted instantiation: quic_channel.c:ssl_has_cert_type Unexecuted instantiation: quic_engine.c:ssl_has_cert_type Unexecuted instantiation: quic_rx_depack.c:ssl_has_cert_type Unexecuted instantiation: ssl3_meth.c:ssl_has_cert_type Unexecuted instantiation: tls13_meth.c:ssl_has_cert_type  | 
2505  |  |  | 
2506  |  | /* Returns true if certificate and private key for 'idx' are present */  | 
2507  |  | static ossl_inline int ssl_has_cert(const SSL_CONNECTION *s, int idx)  | 
2508  | 0  | { | 
2509  | 0  |     if (idx < 0 || idx >= (int)s->ssl_pkey_num)  | 
2510  | 0  |         return 0;  | 
2511  |  |  | 
2512  |  |     /* If RPK is enabled for this SSL... only require private key */  | 
2513  | 0  |     if (ssl_has_cert_type(s, TLSEXT_cert_type_rpk))  | 
2514  | 0  |         return s->cert->pkeys[idx].privatekey != NULL;  | 
2515  |  |  | 
2516  | 0  |     return s->cert->pkeys[idx].x509 != NULL  | 
2517  | 0  |         && s->cert->pkeys[idx].privatekey != NULL;  | 
2518  | 0  | } Unexecuted instantiation: methods.c:ssl_has_cert Unexecuted instantiation: s3_lib.c:ssl_has_cert Unexecuted instantiation: s3_msg.c:ssl_has_cert Unexecuted instantiation: ssl_cert.c:ssl_has_cert Unexecuted instantiation: ssl_ciph.c:ssl_has_cert Unexecuted instantiation: ssl_init.c:ssl_has_cert Unexecuted instantiation: ssl_lib.c:ssl_has_cert Unexecuted instantiation: ssl_mcnf.c:ssl_has_cert Unexecuted instantiation: ssl_rsa.c:ssl_has_cert Unexecuted instantiation: ssl_sess.c:ssl_has_cert Unexecuted instantiation: ssl_stat.c:ssl_has_cert Unexecuted instantiation: t1_lib.c:ssl_has_cert Unexecuted instantiation: tls13_enc.c:ssl_has_cert Unexecuted instantiation: tls_depr.c:ssl_has_cert Unexecuted instantiation: tls_srp.c:ssl_has_cert Unexecuted instantiation: quic_impl.c:ssl_has_cert Unexecuted instantiation: quic_method.c:ssl_has_cert Unexecuted instantiation: quic_obj.c:ssl_has_cert Unexecuted instantiation: quic_port.c:ssl_has_cert Unexecuted instantiation: quic_record_rx.c:ssl_has_cert Unexecuted instantiation: quic_record_shared.c:ssl_has_cert Unexecuted instantiation: quic_record_tx.c:ssl_has_cert Unexecuted instantiation: quic_record_util.c:ssl_has_cert Unexecuted instantiation: quic_thread_assist.c:ssl_has_cert Unexecuted instantiation: quic_tls.c:ssl_has_cert Unexecuted instantiation: rec_layer_d1.c:ssl_has_cert Unexecuted instantiation: rec_layer_s3.c:ssl_has_cert Unexecuted instantiation: dtls_meth.c:ssl_has_cert Unexecuted instantiation: tls1_meth.c:ssl_has_cert Unexecuted instantiation: tls_common.c:ssl_has_cert Unexecuted instantiation: tls_multib.c:ssl_has_cert Unexecuted instantiation: tlsany_meth.c:ssl_has_cert Unexecuted instantiation: extensions.c:ssl_has_cert Unexecuted instantiation: extensions_clnt.c:ssl_has_cert Unexecuted instantiation: extensions_cust.c:ssl_has_cert Unexecuted instantiation: extensions_srvr.c:ssl_has_cert Unexecuted instantiation: statem.c:ssl_has_cert Unexecuted instantiation: statem_clnt.c:ssl_has_cert Unexecuted instantiation: statem_dtls.c:ssl_has_cert Unexecuted instantiation: statem_lib.c:ssl_has_cert Unexecuted instantiation: statem_srvr.c:ssl_has_cert Unexecuted instantiation: d1_lib.c:ssl_has_cert Unexecuted instantiation: d1_msg.c:ssl_has_cert Unexecuted instantiation: d1_srtp.c:ssl_has_cert Unexecuted instantiation: pqueue.c:ssl_has_cert Unexecuted instantiation: s3_enc.c:ssl_has_cert Unexecuted instantiation: ssl_asn1.c:ssl_has_cert Unexecuted instantiation: ssl_conf.c:ssl_has_cert Unexecuted instantiation: t1_enc.c:ssl_has_cert Unexecuted instantiation: quic_channel.c:ssl_has_cert Unexecuted instantiation: quic_engine.c:ssl_has_cert Unexecuted instantiation: quic_rx_depack.c:ssl_has_cert Unexecuted instantiation: ssl3_meth.c:ssl_has_cert Unexecuted instantiation: tls13_meth.c:ssl_has_cert  | 
2519  |  |  | 
2520  |  | static ossl_inline void tls1_get_peer_groups(SSL_CONNECTION *s,  | 
2521  |  |                                              const uint16_t **pgroups,  | 
2522  |  |                                              size_t *pgroupslen)  | 
2523  | 0  | { | 
2524  | 0  |     *pgroups = s->ext.peer_supportedgroups;  | 
2525  | 0  |     *pgroupslen = s->ext.peer_supportedgroups_len;  | 
2526  | 0  | } Unexecuted instantiation: methods.c:tls1_get_peer_groups Unexecuted instantiation: s3_lib.c:tls1_get_peer_groups Unexecuted instantiation: s3_msg.c:tls1_get_peer_groups Unexecuted instantiation: ssl_cert.c:tls1_get_peer_groups Unexecuted instantiation: ssl_ciph.c:tls1_get_peer_groups Unexecuted instantiation: ssl_init.c:tls1_get_peer_groups Unexecuted instantiation: ssl_lib.c:tls1_get_peer_groups Unexecuted instantiation: ssl_mcnf.c:tls1_get_peer_groups Unexecuted instantiation: ssl_rsa.c:tls1_get_peer_groups Unexecuted instantiation: ssl_sess.c:tls1_get_peer_groups Unexecuted instantiation: ssl_stat.c:tls1_get_peer_groups Unexecuted instantiation: t1_lib.c:tls1_get_peer_groups Unexecuted instantiation: tls13_enc.c:tls1_get_peer_groups Unexecuted instantiation: tls_depr.c:tls1_get_peer_groups Unexecuted instantiation: tls_srp.c:tls1_get_peer_groups Unexecuted instantiation: quic_impl.c:tls1_get_peer_groups Unexecuted instantiation: quic_method.c:tls1_get_peer_groups Unexecuted instantiation: quic_obj.c:tls1_get_peer_groups Unexecuted instantiation: quic_port.c:tls1_get_peer_groups Unexecuted instantiation: quic_record_rx.c:tls1_get_peer_groups Unexecuted instantiation: quic_record_shared.c:tls1_get_peer_groups Unexecuted instantiation: quic_record_tx.c:tls1_get_peer_groups Unexecuted instantiation: quic_record_util.c:tls1_get_peer_groups Unexecuted instantiation: quic_thread_assist.c:tls1_get_peer_groups Unexecuted instantiation: quic_tls.c:tls1_get_peer_groups Unexecuted instantiation: rec_layer_d1.c:tls1_get_peer_groups Unexecuted instantiation: rec_layer_s3.c:tls1_get_peer_groups Unexecuted instantiation: dtls_meth.c:tls1_get_peer_groups Unexecuted instantiation: tls1_meth.c:tls1_get_peer_groups Unexecuted instantiation: tls_common.c:tls1_get_peer_groups Unexecuted instantiation: tls_multib.c:tls1_get_peer_groups Unexecuted instantiation: tlsany_meth.c:tls1_get_peer_groups Unexecuted instantiation: extensions.c:tls1_get_peer_groups Unexecuted instantiation: extensions_clnt.c:tls1_get_peer_groups Unexecuted instantiation: extensions_cust.c:tls1_get_peer_groups Unexecuted instantiation: extensions_srvr.c:tls1_get_peer_groups Unexecuted instantiation: statem.c:tls1_get_peer_groups Unexecuted instantiation: statem_clnt.c:tls1_get_peer_groups Unexecuted instantiation: statem_dtls.c:tls1_get_peer_groups Unexecuted instantiation: statem_lib.c:tls1_get_peer_groups Unexecuted instantiation: statem_srvr.c:tls1_get_peer_groups Unexecuted instantiation: d1_lib.c:tls1_get_peer_groups Unexecuted instantiation: d1_msg.c:tls1_get_peer_groups Unexecuted instantiation: d1_srtp.c:tls1_get_peer_groups Unexecuted instantiation: pqueue.c:tls1_get_peer_groups Unexecuted instantiation: s3_enc.c:tls1_get_peer_groups Unexecuted instantiation: ssl_asn1.c:tls1_get_peer_groups Unexecuted instantiation: ssl_conf.c:tls1_get_peer_groups Unexecuted instantiation: t1_enc.c:tls1_get_peer_groups Unexecuted instantiation: quic_channel.c:tls1_get_peer_groups Unexecuted instantiation: quic_engine.c:tls1_get_peer_groups Unexecuted instantiation: quic_rx_depack.c:tls1_get_peer_groups Unexecuted instantiation: ssl3_meth.c:tls1_get_peer_groups Unexecuted instantiation: tls13_meth.c:tls1_get_peer_groups  | 
2527  |  |  | 
2528  |  | # ifndef OPENSSL_UNIT_TEST  | 
2529  |  |  | 
2530  |  | __owur int ossl_ssl_init(SSL *ssl, SSL_CTX *ctx, const SSL_METHOD *method,  | 
2531  |  |                          int type);  | 
2532  |  | __owur SSL *ossl_ssl_connection_new_int(SSL_CTX *ctx, SSL *user_ssl,  | 
2533  |  |                                         const SSL_METHOD *method);  | 
2534  |  | __owur SSL *ossl_ssl_connection_new(SSL_CTX *ctx);  | 
2535  |  | void ossl_ssl_connection_free(SSL *ssl);  | 
2536  |  | __owur int ossl_ssl_connection_reset(SSL *ssl);  | 
2537  |  |  | 
2538  |  | __owur int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes);  | 
2539  |  | __owur int ssl_write_internal(SSL *s, const void *buf, size_t num,  | 
2540  |  |                               uint64_t flags, size_t *written);  | 
2541  |  | int ssl_clear_bad_session(SSL_CONNECTION *s);  | 
2542  |  | __owur CERT *ssl_cert_new(size_t ssl_pkey_num);  | 
2543  |  | __owur CERT *ssl_cert_dup(CERT *cert);  | 
2544  |  | void ssl_cert_clear_certs(CERT *c);  | 
2545  |  | void ssl_cert_free(CERT *c);  | 
2546  |  | __owur int ssl_generate_session_id(SSL_CONNECTION *s, SSL_SESSION *ss);  | 
2547  |  | __owur int ssl_get_new_session(SSL_CONNECTION *s, int session);  | 
2548  |  | __owur SSL_SESSION *lookup_sess_in_cache(SSL_CONNECTION *s,  | 
2549  |  |                                          const unsigned char *sess_id,  | 
2550  |  |                                          size_t sess_id_len);  | 
2551  |  | __owur int ssl_get_prev_session(SSL_CONNECTION *s, CLIENTHELLO_MSG *hello);  | 
2552  |  | __owur SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket);  | 
2553  |  | __owur int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b);  | 
2554  |  | DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);  | 
2555  |  | __owur int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,  | 
2556  |  |                                  const SSL_CIPHER *const *bp);  | 
2557  |  | __owur STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(SSL_CTX *ctx,  | 
2558  |  |                                                     STACK_OF(SSL_CIPHER) *tls13_ciphersuites,  | 
2559  |  |                                                     STACK_OF(SSL_CIPHER) **cipher_list,  | 
2560  |  |                                                     STACK_OF(SSL_CIPHER) **cipher_list_by_id,  | 
2561  |  |                                                     const char *rule_str,  | 
2562  |  |                                                     CERT *c);  | 
2563  |  | __owur int ssl_cache_cipherlist(SSL_CONNECTION *s, PACKET *cipher_suites,  | 
2564  |  |                                 int sslv2format);  | 
2565  |  | __owur int ossl_bytes_to_cipher_list(SSL_CONNECTION *s, PACKET *cipher_suites,  | 
2566  |  |                                      STACK_OF(SSL_CIPHER) **skp,  | 
2567  |  |                                      STACK_OF(SSL_CIPHER) **scsvs, int sslv2format,  | 
2568  |  |                                      int fatal);  | 
2569  |  | void ssl_update_cache(SSL_CONNECTION *s, int mode);  | 
2570  |  | __owur int ssl_cipher_get_evp_cipher(SSL_CTX *ctx, const SSL_CIPHER *sslc,  | 
2571  |  |                                      const EVP_CIPHER **enc);  | 
2572  |  | __owur int ssl_cipher_get_evp_md_mac(SSL_CTX *ctx, const SSL_CIPHER *sslc,  | 
2573  |  |                                      const EVP_MD **md,  | 
2574  |  |                                      int *mac_pkey_type, size_t *mac_secret_size);  | 
2575  |  | __owur int ssl_cipher_get_evp(SSL_CTX *ctxc, const SSL_SESSION *s,  | 
2576  |  |                               const EVP_CIPHER **enc, const EVP_MD **md,  | 
2577  |  |                               int *mac_pkey_type, size_t *mac_secret_size,  | 
2578  |  |                               SSL_COMP **comp, int use_etm);  | 
2579  |  | __owur int ssl_cipher_get_overhead(const SSL_CIPHER *c, size_t *mac_overhead,  | 
2580  |  |                                    size_t *int_overhead, size_t *blocksize,  | 
2581  |  |                                    size_t *ext_overhead);  | 
2582  |  | __owur int ssl_cert_is_disabled(SSL_CTX *ctx, size_t idx);  | 
2583  |  | __owur const SSL_CIPHER *ssl_get_cipher_by_char(SSL_CONNECTION *ssl,  | 
2584  |  |                                                 const unsigned char *ptr,  | 
2585  |  |                                                 int all);  | 
2586  |  | __owur int ssl_cert_set0_chain(SSL_CONNECTION *s, SSL_CTX *ctx,  | 
2587  |  |                                STACK_OF(X509) *chain);  | 
2588  |  | __owur int ssl_cert_set1_chain(SSL_CONNECTION *s, SSL_CTX *ctx,  | 
2589  |  |                                STACK_OF(X509) *chain);  | 
2590  |  | __owur int ssl_cert_add0_chain_cert(SSL_CONNECTION *s, SSL_CTX *ctx, X509 *x);  | 
2591  |  | __owur int ssl_cert_add1_chain_cert(SSL_CONNECTION *s, SSL_CTX *ctx, X509 *x);  | 
2592  |  | __owur int ssl_cert_select_current(CERT *c, X509 *x);  | 
2593  |  | __owur int ssl_cert_set_current(CERT *c, long arg);  | 
2594  |  | void ssl_cert_set_cert_cb(CERT *c, int (*cb) (SSL *ssl, void *arg), void *arg);  | 
2595  |  |  | 
2596  |  | __owur int ssl_verify_cert_chain(SSL_CONNECTION *s, STACK_OF(X509) *sk);  | 
2597  |  | __owur int ssl_verify_rpk(SSL_CONNECTION *s, EVP_PKEY *rpk);  | 
2598  |  | __owur int ssl_verify_ocsp(SSL *s, STACK_OF(X509) *sk);  | 
2599  |  | __owur int ssl_build_cert_chain(SSL_CONNECTION *s, SSL_CTX *ctx, int flags);  | 
2600  |  | __owur int ssl_cert_set_cert_store(CERT *c, X509_STORE *store, int chain,  | 
2601  |  |                                    int ref);  | 
2602  |  | __owur int ssl_cert_get_cert_store(CERT *c, X509_STORE **pstore, int chain);  | 
2603  |  |  | 
2604  |  | __owur int ssl_security(const SSL_CONNECTION *s, int op, int bits, int nid,  | 
2605  |  |                         void *other);  | 
2606  |  | __owur int ssl_ctx_security(const SSL_CTX *ctx, int op, int bits, int nid,  | 
2607  |  |                             void *other);  | 
2608  |  | int ssl_get_security_level_bits(const SSL *s, const SSL_CTX *ctx, int *levelp);  | 
2609  |  |  | 
2610  |  | __owur int ssl_cert_lookup_by_nid(int nid, size_t *pidx, SSL_CTX *ctx);  | 
2611  |  | __owur const SSL_CERT_LOOKUP *ssl_cert_lookup_by_pkey(const EVP_PKEY *pk,  | 
2612  |  |                                                       size_t *pidx,  | 
2613  |  |                                                       SSL_CTX *ctx);  | 
2614  |  | __owur const SSL_CERT_LOOKUP *ssl_cert_lookup_by_idx(size_t idx, SSL_CTX *ctx);  | 
2615  |  |  | 
2616  |  | int ssl_undefined_function(SSL *s);  | 
2617  |  | __owur int ssl_undefined_void_function(void);  | 
2618  |  | __owur int ssl_get_server_cert_serverinfo(SSL_CONNECTION *s,  | 
2619  |  |                                           const unsigned char **serverinfo,  | 
2620  |  |                                           size_t *serverinfo_length);  | 
2621  |  | void ssl_set_masks(SSL_CONNECTION *s);  | 
2622  |  | __owur STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL_CONNECTION *sc);  | 
2623  |  | __owur int ssl_x509err2alert(int type);  | 
2624  |  | void ssl_sort_cipher_list(void);  | 
2625  |  | int ssl_load_ciphers(SSL_CTX *ctx);  | 
2626  |  | __owur int ssl_setup_sigalgs(SSL_CTX *ctx);  | 
2627  |  | int ssl_load_groups(SSL_CTX *ctx);  | 
2628  |  | int ssl_load_sigalgs(SSL_CTX *ctx);  | 
2629  |  | __owur int ssl_fill_hello_random(SSL_CONNECTION *s, int server,  | 
2630  |  |                                  unsigned char *field, size_t len,  | 
2631  |  |                                  DOWNGRADE dgrd);  | 
2632  |  | __owur int ssl_generate_master_secret(SSL_CONNECTION *s, unsigned char *pms,  | 
2633  |  |                                       size_t pmslen, int free_pms);  | 
2634  |  | __owur EVP_PKEY *ssl_generate_pkey(SSL_CONNECTION *s, EVP_PKEY *pm);  | 
2635  |  | __owur int ssl_gensecret(SSL_CONNECTION *s, unsigned char *pms, size_t pmslen);  | 
2636  |  | __owur int ssl_derive(SSL_CONNECTION *s, EVP_PKEY *privkey, EVP_PKEY *pubkey,  | 
2637  |  |                       int genmaster);  | 
2638  |  | __owur int ssl_decapsulate(SSL_CONNECTION *s, EVP_PKEY *privkey,  | 
2639  |  |                            const unsigned char *ct, size_t ctlen,  | 
2640  |  |                            int gensecret);  | 
2641  |  | __owur int ssl_encapsulate(SSL_CONNECTION *s, EVP_PKEY *pubkey,  | 
2642  |  |                            unsigned char **ctp, size_t *ctlenp,  | 
2643  |  |                            int gensecret);  | 
2644  |  | __owur EVP_PKEY *ssl_dh_to_pkey(DH *dh);  | 
2645  |  | __owur int ssl_set_tmp_ecdh_groups(uint16_t **pext, size_t *pextlen,  | 
2646  |  |                                    uint16_t **ksext, size_t *ksextlen,  | 
2647  |  |                                    size_t **tplext, size_t *tplextlen,  | 
2648  |  |                                    void *key);  | 
2649  |  | __owur unsigned int ssl_get_max_send_fragment(const SSL_CONNECTION *sc);  | 
2650  |  | __owur unsigned int ssl_get_split_send_fragment(const SSL_CONNECTION *sc);  | 
2651  |  |  | 
2652  |  | __owur const SSL_CIPHER *ssl3_get_cipher_by_id(uint32_t id);  | 
2653  |  | __owur const SSL_CIPHER *ssl3_get_cipher_by_std_name(const char *stdname);  | 
2654  |  | __owur const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p);  | 
2655  |  | __owur int ssl3_put_cipher_by_char(const SSL_CIPHER *c, WPACKET *pkt,  | 
2656  |  |                                    size_t *len);  | 
2657  |  | int ssl3_init_finished_mac(SSL_CONNECTION *s);  | 
2658  |  | __owur int ssl3_setup_key_block(SSL_CONNECTION *s);  | 
2659  |  | __owur int ssl3_change_cipher_state(SSL_CONNECTION *s, int which);  | 
2660  |  | void ssl3_cleanup_key_block(SSL_CONNECTION *s);  | 
2661  |  | __owur int ssl3_do_write(SSL_CONNECTION *s, uint8_t type);  | 
2662  |  | int ssl3_send_alert(SSL_CONNECTION *s, int level, int desc);  | 
2663  |  | __owur int ssl3_generate_master_secret(SSL_CONNECTION *s, unsigned char *out,  | 
2664  |  |                                        unsigned char *p, size_t len,  | 
2665  |  |                                        size_t *secret_size);  | 
2666  |  | __owur int ssl3_get_req_cert_type(SSL_CONNECTION *s, WPACKET *pkt);  | 
2667  |  | __owur int ssl3_num_ciphers(void);  | 
2668  |  | __owur const SSL_CIPHER *ssl3_get_cipher(unsigned int u);  | 
2669  |  | int ssl3_renegotiate(SSL *ssl);  | 
2670  |  | int ssl3_renegotiate_check(SSL *ssl, int initok);  | 
2671  |  | void ssl3_digest_master_key_set_params(const SSL_SESSION *session,  | 
2672  |  |                                        OSSL_PARAM params[]);  | 
2673  |  | __owur int ssl3_dispatch_alert(SSL *s);  | 
2674  |  | __owur size_t ssl3_final_finish_mac(SSL_CONNECTION *s, const char *sender,  | 
2675  |  |                                     size_t slen, unsigned char *p);  | 
2676  |  | __owur int ssl3_finish_mac(SSL_CONNECTION *s, const unsigned char *buf,  | 
2677  |  |                            size_t len);  | 
2678  |  | void ssl3_free_digest_list(SSL_CONNECTION *s);  | 
2679  |  | __owur unsigned long ssl3_output_cert_chain(SSL_CONNECTION *s, WPACKET *pkt,  | 
2680  |  |                                             CERT_PKEY *cpk, int for_comp);  | 
2681  |  | __owur const SSL_CIPHER *ssl3_choose_cipher(SSL_CONNECTION *s,  | 
2682  |  |                                             STACK_OF(SSL_CIPHER) *clnt,  | 
2683  |  |                                             STACK_OF(SSL_CIPHER) *srvr);  | 
2684  |  | __owur int ssl3_digest_cached_records(SSL_CONNECTION *s, int keep);  | 
2685  |  | __owur int ssl3_new(SSL *s);  | 
2686  |  | void ssl3_free(SSL *s);  | 
2687  |  | __owur int ssl3_read(SSL *s, void *buf, size_t len, size_t *readbytes);  | 
2688  |  | __owur int ssl3_peek(SSL *s, void *buf, size_t len, size_t *readbytes);  | 
2689  |  | __owur int ssl3_write(SSL *s, const void *buf, size_t len, size_t *written);  | 
2690  |  | __owur int ssl3_shutdown(SSL *s);  | 
2691  |  | int ssl3_clear(SSL *s);  | 
2692  |  | __owur long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg);  | 
2693  |  | __owur long ssl3_ctx_ctrl(SSL_CTX *s, int cmd, long larg, void *parg);  | 
2694  |  | __owur long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void));  | 
2695  |  | __owur long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp) (void));  | 
2696  |  |  | 
2697  |  | __owur int ssl3_do_change_cipher_spec(SSL_CONNECTION *s);  | 
2698  |  | __owur OSSL_TIME ssl3_default_timeout(void);  | 
2699  |  |  | 
2700  |  | __owur int ssl3_set_handshake_header(SSL_CONNECTION *s, WPACKET *pkt,  | 
2701  |  |                                      int htype);  | 
2702  |  | __owur int tls_close_construct_packet(SSL_CONNECTION *s, WPACKET *pkt, int htype);  | 
2703  |  | __owur int tls_setup_handshake(SSL_CONNECTION *s);  | 
2704  |  | __owur int dtls1_set_handshake_header(SSL_CONNECTION *s, WPACKET *pkt, int htype);  | 
2705  |  | __owur int dtls1_close_construct_packet(SSL_CONNECTION *s, WPACKET *pkt, int htype);  | 
2706  |  | __owur int ssl3_handshake_write(SSL_CONNECTION *s);  | 
2707  |  |  | 
2708  |  | __owur int ssl_allow_compression(SSL_CONNECTION *s);  | 
2709  |  |  | 
2710  |  | __owur int ssl_version_cmp(const SSL_CONNECTION *s, int versiona, int versionb);  | 
2711  |  | __owur int ssl_version_supported(const SSL_CONNECTION *s, int version,  | 
2712  |  |                                  const SSL_METHOD **meth);  | 
2713  |  |  | 
2714  |  | __owur int ssl_set_client_hello_version(SSL_CONNECTION *s);  | 
2715  |  | __owur int ssl_check_version_downgrade(SSL_CONNECTION *s);  | 
2716  |  | __owur int ssl_set_version_bound(int method_version, int version, int *bound);  | 
2717  |  | __owur int ssl_choose_server_version(SSL_CONNECTION *s, CLIENTHELLO_MSG *hello,  | 
2718  |  |                                      DOWNGRADE *dgrd);  | 
2719  |  | __owur int ssl_choose_client_version(SSL_CONNECTION *s, int version,  | 
2720  |  |                                      RAW_EXTENSION *extensions);  | 
2721  |  | __owur int ssl_get_min_max_version(const SSL_CONNECTION *s, int *min_version,  | 
2722  |  |                                    int *max_version, int *real_max);  | 
2723  |  |  | 
2724  |  | __owur OSSL_TIME tls1_default_timeout(void);  | 
2725  |  | __owur int dtls1_do_write(SSL_CONNECTION *s, uint8_t type);  | 
2726  |  | void dtls1_set_message_header(SSL_CONNECTION *s,  | 
2727  |  |                               unsigned char mt,  | 
2728  |  |                               size_t len,  | 
2729  |  |                               size_t frag_off, size_t frag_len);  | 
2730  |  |  | 
2731  |  | int dtls1_write_app_data_bytes(SSL *s, uint8_t type, const void *buf_,  | 
2732  |  |                                size_t len, size_t *written);  | 
2733  |  |  | 
2734  |  | __owur int dtls1_read_failed(SSL_CONNECTION *s, int code);  | 
2735  |  | __owur int dtls1_buffer_message(SSL_CONNECTION *s, int ccs);  | 
2736  |  | __owur int dtls1_retransmit_message(SSL_CONNECTION *s, unsigned short seq,  | 
2737  |  |                                     int *found);  | 
2738  |  | __owur int dtls1_get_queue_priority(unsigned short seq, int is_ccs);  | 
2739  |  | int dtls1_retransmit_buffered_messages(SSL_CONNECTION *s);  | 
2740  |  | void dtls1_clear_received_buffer(SSL_CONNECTION *s);  | 
2741  |  | void dtls1_clear_sent_buffer(SSL_CONNECTION *s);  | 
2742  |  | void dtls1_get_message_header(const unsigned char *data,  | 
2743  |  |                               struct hm_header_st *msg_hdr);  | 
2744  |  | __owur OSSL_TIME dtls1_default_timeout(void);  | 
2745  |  | __owur int dtls1_get_timeout(const SSL_CONNECTION *s, OSSL_TIME *timeleft);  | 
2746  |  | __owur int dtls1_check_timeout_num(SSL_CONNECTION *s);  | 
2747  |  | __owur int dtls1_handle_timeout(SSL_CONNECTION *s);  | 
2748  |  | void dtls1_start_timer(SSL_CONNECTION *s);  | 
2749  |  | void dtls1_stop_timer(SSL_CONNECTION *s);  | 
2750  |  | __owur int dtls1_is_timer_expired(SSL_CONNECTION *s);  | 
2751  |  | __owur int dtls_raw_hello_verify_request(WPACKET *pkt, unsigned char *cookie,  | 
2752  |  |                                          size_t cookie_len);  | 
2753  |  | __owur size_t dtls1_min_mtu(SSL_CONNECTION *s);  | 
2754  |  | void dtls1_hm_fragment_free(hm_fragment *frag);  | 
2755  |  | __owur int dtls1_query_mtu(SSL_CONNECTION *s);  | 
2756  |  |  | 
2757  |  | __owur int tls1_new(SSL *s);  | 
2758  |  | void tls1_free(SSL *s);  | 
2759  |  | int tls1_clear(SSL *s);  | 
2760  |  |  | 
2761  |  | __owur int dtls1_new(SSL *s);  | 
2762  |  | void dtls1_free(SSL *s);  | 
2763  |  | int dtls1_clear(SSL *s);  | 
2764  |  | long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg);  | 
2765  |  | __owur int dtls1_shutdown(SSL *s);  | 
2766  |  |  | 
2767  |  | __owur int dtls1_dispatch_alert(SSL *s);  | 
2768  |  |  | 
2769  |  | __owur int ssl_init_wbio_buffer(SSL_CONNECTION *s);  | 
2770  |  | int ssl_free_wbio_buffer(SSL_CONNECTION *s);  | 
2771  |  |  | 
2772  |  | __owur int tls1_change_cipher_state(SSL_CONNECTION *s, int which);  | 
2773  |  | __owur int tls1_setup_key_block(SSL_CONNECTION *s);  | 
2774  |  | __owur size_t tls1_final_finish_mac(SSL_CONNECTION *s, const char *str,  | 
2775  |  |                                     size_t slen, unsigned char *p);  | 
2776  |  | __owur int tls1_generate_master_secret(SSL_CONNECTION *s, unsigned char *out,  | 
2777  |  |                                        unsigned char *p, size_t len,  | 
2778  |  |                                        size_t *secret_size);  | 
2779  |  | __owur int tls13_setup_key_block(SSL_CONNECTION *s);  | 
2780  |  | __owur size_t tls13_final_finish_mac(SSL_CONNECTION *s, const char *str, size_t slen,  | 
2781  |  |                                      unsigned char *p);  | 
2782  |  | __owur int tls13_store_handshake_traffic_hash(SSL_CONNECTION *s);  | 
2783  |  | __owur int tls13_store_server_finished_hash(SSL_CONNECTION *s);  | 
2784  |  | __owur int tls13_change_cipher_state(SSL_CONNECTION *s, int which);  | 
2785  |  | __owur int tls13_update_key(SSL_CONNECTION *s, int send);  | 
2786  |  | __owur int tls13_hkdf_expand(SSL_CONNECTION *s,  | 
2787  |  |                              const EVP_MD *md,  | 
2788  |  |                              const unsigned char *secret,  | 
2789  |  |                              const unsigned char *label, size_t labellen,  | 
2790  |  |                              const unsigned char *data, size_t datalen,  | 
2791  |  |                              unsigned char *out, size_t outlen, int fatal);  | 
2792  |  | __owur int tls13_hkdf_expand_ex(OSSL_LIB_CTX *libctx, const char *propq,  | 
2793  |  |                                 const EVP_MD *md,  | 
2794  |  |                                 const unsigned char *secret,  | 
2795  |  |                                 const unsigned char *label, size_t labellen,  | 
2796  |  |                                 const unsigned char *data, size_t datalen,  | 
2797  |  |                                 unsigned char *out, size_t outlen,  | 
2798  |  |                                 int raise_error);  | 
2799  |  | __owur int tls13_derive_key(SSL_CONNECTION *s, const EVP_MD *md,  | 
2800  |  |                             const unsigned char *secret, unsigned char *key,  | 
2801  |  |                             size_t keylen);  | 
2802  |  | __owur int tls13_derive_iv(SSL_CONNECTION *s, const EVP_MD *md,  | 
2803  |  |                            const unsigned char *secret, unsigned char *iv,  | 
2804  |  |                            size_t ivlen);  | 
2805  |  | __owur int tls13_derive_finishedkey(SSL_CONNECTION *s, const EVP_MD *md,  | 
2806  |  |                                     const unsigned char *secret,  | 
2807  |  |                                     unsigned char *fin, size_t finlen);  | 
2808  |  | int tls13_generate_secret(SSL_CONNECTION *s, const EVP_MD *md,  | 
2809  |  |                           const unsigned char *prevsecret,  | 
2810  |  |                           const unsigned char *insecret,  | 
2811  |  |                           size_t insecretlen,  | 
2812  |  |                           unsigned char *outsecret);  | 
2813  |  | __owur int tls13_generate_handshake_secret(SSL_CONNECTION *s,  | 
2814  |  |                                            const unsigned char *insecret,  | 
2815  |  |                                            size_t insecretlen);  | 
2816  |  | __owur int tls13_generate_master_secret(SSL_CONNECTION *s, unsigned char *out,  | 
2817  |  |                                         unsigned char *prev, size_t prevlen,  | 
2818  |  |                                         size_t *secret_size);  | 
2819  |  | __owur int tls1_export_keying_material(SSL_CONNECTION *s,  | 
2820  |  |                                        unsigned char *out, size_t olen,  | 
2821  |  |                                        const char *label, size_t llen,  | 
2822  |  |                                        const unsigned char *p, size_t plen,  | 
2823  |  |                                        int use_context);  | 
2824  |  | __owur int tls13_export_keying_material(SSL_CONNECTION *s,  | 
2825  |  |                                         unsigned char *out, size_t olen,  | 
2826  |  |                                         const char *label, size_t llen,  | 
2827  |  |                                         const unsigned char *context,  | 
2828  |  |                                         size_t contextlen, int use_context);  | 
2829  |  | __owur int tls13_export_keying_material_early(SSL_CONNECTION *s,  | 
2830  |  |                                               unsigned char *out, size_t olen,  | 
2831  |  |                                               const char *label, size_t llen,  | 
2832  |  |                                               const unsigned char *context,  | 
2833  |  |                                               size_t contextlen);  | 
2834  |  | __owur int tls1_alert_code(int code);  | 
2835  |  | __owur int tls13_alert_code(int code);  | 
2836  |  | __owur int ssl3_alert_code(int code);  | 
2837  |  |  | 
2838  |  | __owur int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL_CONNECTION *s);  | 
2839  |  |  | 
2840  |  | SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n);  | 
2841  |  |  | 
2842  |  | __owur const TLS_GROUP_INFO *tls1_group_id_lookup(SSL_CTX *ctx, uint16_t curve_id);  | 
2843  |  | __owur const char *tls1_group_id2name(SSL_CTX *ctx, uint16_t group_id);  | 
2844  |  | __owur int tls1_group_id2nid(uint16_t group_id, int include_unknown);  | 
2845  |  | __owur uint16_t tls1_nid2group_id(int nid);  | 
2846  |  | __owur int tls1_check_group_id(SSL_CONNECTION *s, uint16_t group_id,  | 
2847  |  |                                int check_own_curves);  | 
2848  |  | __owur int tls1_get0_implemented_groups(int min_proto_version,  | 
2849  |  |                                         int max_proto_version,  | 
2850  |  |                                         TLS_GROUP_INFO *grps,  | 
2851  |  |                                         size_t num, long all,  | 
2852  |  |                                         STACK_OF(OPENSSL_CSTRING) *out);  | 
2853  |  | __owur uint16_t tls1_shared_group(SSL_CONNECTION *s, int nmatch);  | 
2854  |  | __owur int tls1_set_groups(uint16_t **grpext, size_t *grpextlen,  | 
2855  |  |                            uint16_t **ksext, size_t *ksextlen,  | 
2856  |  |                            size_t **tplext, size_t *tplextlen,  | 
2857  |  |                            int *curves, size_t ncurves);  | 
2858  |  | __owur int tls1_set_groups_list(SSL_CTX *ctx,  | 
2859  |  |                                 uint16_t **grpext, size_t *grpextlen,  | 
2860  |  |                                 uint16_t **ksext, size_t *ksextlen,  | 
2861  |  |                                 size_t **tplext, size_t *tplextlen,  | 
2862  |  |                                 const char *str);  | 
2863  |  | __owur EVP_PKEY *ssl_generate_pkey_group(SSL_CONNECTION *s, uint16_t id);  | 
2864  |  | __owur int tls_valid_group(SSL_CONNECTION *s, uint16_t group_id, int minversion,  | 
2865  |  |                            int maxversion, int isec, int *okfortls13);  | 
2866  |  | __owur EVP_PKEY *ssl_generate_param_group(SSL_CONNECTION *s, uint16_t id);  | 
2867  |  | void tls1_get_formatlist(SSL_CONNECTION *s, const unsigned char **pformats,  | 
2868  |  |                          size_t *num_formats);  | 
2869  |  | __owur int tls1_check_ec_tmp_key(SSL_CONNECTION *s, unsigned long id);  | 
2870  |  |  | 
2871  |  | __owur int tls_group_allowed(SSL_CONNECTION *s, uint16_t curve, int op);  | 
2872  |  | void tls1_get_supported_groups(SSL_CONNECTION *s, const uint16_t **pgroups,  | 
2873  |  |                                size_t *pgroupslen);  | 
2874  |  | void tls1_get_requested_keyshare_groups(SSL_CONNECTION *s, const uint16_t **pgroups,  | 
2875  |  |                                         size_t *pgroupslen);  | 
2876  |  | void tls1_get_group_tuples(SSL_CONNECTION *s, const size_t **ptuples,  | 
2877  |  |                            size_t *ptupleslen);  | 
2878  |  |  | 
2879  |  | __owur int tls1_set_server_sigalgs(SSL_CONNECTION *s);  | 
2880  |  |  | 
2881  |  | __owur SSL_TICKET_STATUS tls_get_ticket_from_client(SSL_CONNECTION *s,  | 
2882  |  |                                                     CLIENTHELLO_MSG *hello,  | 
2883  |  |                                                     SSL_SESSION **ret);  | 
2884  |  | __owur SSL_TICKET_STATUS tls_decrypt_ticket(SSL_CONNECTION *s,  | 
2885  |  |                                             const unsigned char *etick,  | 
2886  |  |                                             size_t eticklen,  | 
2887  |  |                                             const unsigned char *sess_id,  | 
2888  |  |                                             size_t sesslen, SSL_SESSION **psess);  | 
2889  |  |  | 
2890  |  | __owur int tls_use_ticket(SSL_CONNECTION *s);  | 
2891  |  |  | 
2892  |  | void ssl_set_sig_mask(uint32_t *pmask_a, SSL_CONNECTION *s, int op);  | 
2893  |  |  | 
2894  |  | __owur int tls1_set_sigalgs_list(SSL_CTX *ctx, CERT *c, const char *str, int client);  | 
2895  |  | __owur int tls1_set_raw_sigalgs(CERT *c, const uint16_t *psigs, size_t salglen,  | 
2896  |  |                                 int client);  | 
2897  |  | __owur int tls1_set_sigalgs(CERT *c, const int *salg, size_t salglen,  | 
2898  |  |                             int client);  | 
2899  |  | int tls1_check_chain(SSL_CONNECTION *s, X509 *x, EVP_PKEY *pk,  | 
2900  |  |                      STACK_OF(X509) *chain, int idx);  | 
2901  |  | void tls1_set_cert_validity(SSL_CONNECTION *s);  | 
2902  |  |  | 
2903  |  | #  ifndef OPENSSL_NO_CT  | 
2904  |  | __owur int ssl_validate_ct(SSL_CONNECTION *s);  | 
2905  |  | #  endif  | 
2906  |  |  | 
2907  |  | __owur EVP_PKEY *ssl_get_auto_dh(SSL_CONNECTION *s);  | 
2908  |  |  | 
2909  |  | __owur int ssl_security_cert(SSL_CONNECTION *s, SSL_CTX *ctx, X509 *x, int vfy,  | 
2910  |  |                              int is_ee);  | 
2911  |  | __owur int ssl_security_cert_chain(SSL_CONNECTION *s, STACK_OF(X509) *sk,  | 
2912  |  |                                    X509 *ex, int vfy);  | 
2913  |  |  | 
2914  |  | int tls_choose_sigalg(SSL_CONNECTION *s, int fatalerrs);  | 
2915  |  |  | 
2916  |  | __owur long ssl_get_algorithm2(SSL_CONNECTION *s);  | 
2917  |  | __owur int tls12_copy_sigalgs(SSL_CONNECTION *s, WPACKET *pkt,  | 
2918  |  |                               const uint16_t *psig, size_t psiglen);  | 
2919  |  | __owur int tls1_save_u16(PACKET *pkt, uint16_t **pdest, size_t *pdestlen);  | 
2920  |  | __owur int tls1_save_sigalgs(SSL_CONNECTION *s, PACKET *pkt, int cert);  | 
2921  |  | __owur int tls1_process_sigalgs(SSL_CONNECTION *s);  | 
2922  |  | __owur int tls1_set_peer_legacy_sigalg(SSL_CONNECTION *s, const EVP_PKEY *pkey);  | 
2923  |  | __owur int tls1_lookup_md(SSL_CTX *ctx, const SIGALG_LOOKUP *lu,  | 
2924  |  |                           const EVP_MD **pmd);  | 
2925  |  | __owur size_t tls12_get_psigalgs(SSL_CONNECTION *s, int sent,  | 
2926  |  |                                  const uint16_t **psigs);  | 
2927  |  | __owur int tls_check_sigalg_curve(const SSL_CONNECTION *s, int curve);  | 
2928  |  | __owur int tls12_check_peer_sigalg(SSL_CONNECTION *s, uint16_t, EVP_PKEY *pkey);  | 
2929  |  | __owur int ssl_set_client_disabled(SSL_CONNECTION *s);  | 
2930  |  | __owur int ssl_cipher_disabled(const SSL_CONNECTION *s, const SSL_CIPHER *c,  | 
2931  |  |                                int op, int echde);  | 
2932  |  |  | 
2933  |  | __owur int ssl_handshake_hash(SSL_CONNECTION *s,  | 
2934  |  |                               unsigned char *out, size_t outlen,  | 
2935  |  |                               size_t *hashlen);  | 
2936  |  | __owur const EVP_MD *ssl_md(SSL_CTX *ctx, int idx);  | 
2937  |  | int ssl_get_md_idx(int md_nid);  | 
2938  |  | __owur const EVP_MD *ssl_handshake_md(SSL_CONNECTION *s);  | 
2939  |  | __owur const EVP_MD *ssl_prf_md(SSL_CONNECTION *s);  | 
2940  |  |  | 
2941  |  | __owur int ossl_adjust_domain_flags(uint64_t domain_flags,  | 
2942  |  |                                     uint64_t *p_domain_flags);  | 
2943  |  |  | 
2944  |  | /*  | 
2945  |  |  * ssl_log_rsa_client_key_exchange logs |premaster| to the SSL_CTX associated  | 
2946  |  |  * with |ssl|, if logging is enabled. It returns one on success and zero on  | 
2947  |  |  * failure. The entry is identified by the first 8 bytes of  | 
2948  |  |  * |encrypted_premaster|.  | 
2949  |  |  */  | 
2950  |  | __owur int ssl_log_rsa_client_key_exchange(SSL_CONNECTION *s,  | 
2951  |  |                                            const uint8_t *encrypted_premaster,  | 
2952  |  |                                            size_t encrypted_premaster_len,  | 
2953  |  |                                            const uint8_t *premaster,  | 
2954  |  |                                            size_t premaster_len);  | 
2955  |  |  | 
2956  |  | /*  | 
2957  |  |  * ssl_log_secret logs |secret| to the SSL_CTX associated with |ssl|, if  | 
2958  |  |  * logging is available. It returns one on success and zero on failure. It tags  | 
2959  |  |  * the entry with |label|.  | 
2960  |  |  */  | 
2961  |  | __owur int ssl_log_secret(SSL_CONNECTION *s, const char *label,  | 
2962  |  |                           const uint8_t *secret, size_t secret_len);  | 
2963  |  |  | 
2964  | 0  | #define MASTER_SECRET_LABEL "CLIENT_RANDOM"  | 
2965  | 0  | #define CLIENT_EARLY_LABEL "CLIENT_EARLY_TRAFFIC_SECRET"  | 
2966  | 0  | #define CLIENT_HANDSHAKE_LABEL "CLIENT_HANDSHAKE_TRAFFIC_SECRET"  | 
2967  | 0  | #define SERVER_HANDSHAKE_LABEL "SERVER_HANDSHAKE_TRAFFIC_SECRET"  | 
2968  | 0  | #define CLIENT_APPLICATION_LABEL "CLIENT_TRAFFIC_SECRET_0"  | 
2969  | 0  | #define CLIENT_APPLICATION_N_LABEL "CLIENT_TRAFFIC_SECRET_N"  | 
2970  | 0  | #define SERVER_APPLICATION_LABEL "SERVER_TRAFFIC_SECRET_0"  | 
2971  | 0  | #define SERVER_APPLICATION_N_LABEL "SERVER_TRAFFIC_SECRET_N"  | 
2972  | 0  | #define EARLY_EXPORTER_SECRET_LABEL "EARLY_EXPORTER_SECRET"  | 
2973  | 0  | #define EXPORTER_SECRET_LABEL "EXPORTER_SECRET"  | 
2974  |  |  | 
2975  |  | __owur int srp_generate_server_master_secret(SSL_CONNECTION *s);  | 
2976  |  | __owur int srp_generate_client_master_secret(SSL_CONNECTION *s);  | 
2977  |  | __owur int srp_verify_server_param(SSL_CONNECTION *s);  | 
2978  |  |  | 
2979  |  | /* statem/statem_srvr.c */  | 
2980  |  |  | 
2981  |  | __owur int send_certificate_request(SSL_CONNECTION *s);  | 
2982  |  |  | 
2983  |  | /* statem/extensions_cust.c */  | 
2984  |  |  | 
2985  |  | custom_ext_method *custom_ext_find(const custom_ext_methods *exts,  | 
2986  |  |                                    ENDPOINT role, unsigned int ext_type,  | 
2987  |  |                                    size_t *idx);  | 
2988  |  |  | 
2989  |  | void custom_ext_init(custom_ext_methods *meths);  | 
2990  |  |  | 
2991  |  | int ossl_tls_add_custom_ext_intern(SSL_CTX *ctx, custom_ext_methods *exts,  | 
2992  |  |                                    ENDPOINT role, unsigned int ext_type,  | 
2993  |  |                                    unsigned int context,  | 
2994  |  |                                    SSL_custom_ext_add_cb_ex add_cb,  | 
2995  |  |                                    SSL_custom_ext_free_cb_ex free_cb,  | 
2996  |  |                                    void *add_arg,  | 
2997  |  |                                    SSL_custom_ext_parse_cb_ex parse_cb,  | 
2998  |  |                                    void *parse_arg);  | 
2999  |  | __owur int custom_ext_parse(SSL_CONNECTION *s, unsigned int context,  | 
3000  |  |                             unsigned int ext_type,  | 
3001  |  |                             const unsigned char *ext_data, size_t ext_size,  | 
3002  |  |                             X509 *x, size_t chainidx);  | 
3003  |  | __owur int custom_ext_add(SSL_CONNECTION *s, int context, WPACKET *pkt, X509 *x,  | 
3004  |  |                           size_t chainidx, int maxversion);  | 
3005  |  |  | 
3006  |  | __owur int custom_exts_copy(custom_ext_methods *dst,  | 
3007  |  |                             const custom_ext_methods *src);  | 
3008  |  | __owur int custom_exts_copy_conn(custom_ext_methods *dst,  | 
3009  |  |                                  const custom_ext_methods *src);  | 
3010  |  | __owur int custom_exts_copy_flags(custom_ext_methods *dst,  | 
3011  |  |                                   const custom_ext_methods *src);  | 
3012  |  | void custom_exts_free(custom_ext_methods *exts);  | 
3013  |  |  | 
3014  |  | /* ssl_mcnf.c */  | 
3015  |  | int ssl_ctx_system_config(SSL_CTX *ctx);  | 
3016  |  |  | 
3017  |  | const EVP_CIPHER *ssl_evp_cipher_fetch(OSSL_LIB_CTX *libctx,  | 
3018  |  |                                        int nid,  | 
3019  |  |                                        const char *properties);  | 
3020  |  | int ssl_evp_cipher_up_ref(const EVP_CIPHER *cipher);  | 
3021  |  | void ssl_evp_cipher_free(const EVP_CIPHER *cipher);  | 
3022  |  | const EVP_MD *ssl_evp_md_fetch(OSSL_LIB_CTX *libctx,  | 
3023  |  |                                int nid,  | 
3024  |  |                                const char *properties);  | 
3025  |  | int ssl_evp_md_up_ref(const EVP_MD *md);  | 
3026  |  | void ssl_evp_md_free(const EVP_MD *md);  | 
3027  |  |  | 
3028  |  | void tls_engine_finish(ENGINE *e);  | 
3029  |  | const EVP_CIPHER *tls_get_cipher_from_engine(int nid);  | 
3030  |  | const EVP_MD *tls_get_digest_from_engine(int nid);  | 
3031  |  | int tls_engine_load_ssl_client_cert(SSL_CONNECTION *s, X509 **px509,  | 
3032  |  |                                     EVP_PKEY **ppkey);  | 
3033  |  | int ssl_hmac_old_new(SSL_HMAC *ret);  | 
3034  |  | void ssl_hmac_old_free(SSL_HMAC *ctx);  | 
3035  |  | int ssl_hmac_old_init(SSL_HMAC *ctx, void *key, size_t len, char *md);  | 
3036  |  | int ssl_hmac_old_update(SSL_HMAC *ctx, const unsigned char *data, size_t len);  | 
3037  |  | int ssl_hmac_old_final(SSL_HMAC *ctx, unsigned char *md, size_t *len);  | 
3038  |  | size_t ssl_hmac_old_size(const SSL_HMAC *ctx);  | 
3039  |  |  | 
3040  |  | int ssl_ctx_srp_ctx_free_intern(SSL_CTX *ctx);  | 
3041  |  | int ssl_ctx_srp_ctx_init_intern(SSL_CTX *ctx);  | 
3042  |  | int ssl_srp_ctx_free_intern(SSL_CONNECTION *s);  | 
3043  |  | int ssl_srp_ctx_init_intern(SSL_CONNECTION *s);  | 
3044  |  |  | 
3045  |  | int ssl_srp_calc_a_param_intern(SSL_CONNECTION *s);  | 
3046  |  | int ssl_srp_server_param_with_username_intern(SSL_CONNECTION *s, int *ad);  | 
3047  |  |  | 
3048  |  | void ssl_session_calculate_timeout(SSL_SESSION *ss);  | 
3049  |  |  | 
3050  |  | # else /* OPENSSL_UNIT_TEST */  | 
3051  |  |  | 
3052  |  | #  define ssl_init_wbio_buffer SSL_test_functions()->p_ssl_init_wbio_buffer  | 
3053  |  |  | 
3054  |  | # endif  | 
3055  |  |  | 
3056  |  | /* Some helper routines to support TSAN operations safely */  | 
3057  |  | static ossl_unused ossl_inline int ssl_tsan_lock(const SSL_CTX *ctx)  | 
3058  | 0  | { | 
3059  |  | #ifdef TSAN_REQUIRES_LOCKING  | 
3060  |  |     if (!CRYPTO_THREAD_write_lock(ctx->tsan_lock))  | 
3061  |  |         return 0;  | 
3062  |  | #endif  | 
3063  | 0  |     return 1;  | 
3064  | 0  | } Unexecuted instantiation: methods.c:ssl_tsan_lock Unexecuted instantiation: s3_lib.c:ssl_tsan_lock Unexecuted instantiation: s3_msg.c:ssl_tsan_lock Unexecuted instantiation: ssl_cert.c:ssl_tsan_lock Unexecuted instantiation: ssl_ciph.c:ssl_tsan_lock Unexecuted instantiation: ssl_init.c:ssl_tsan_lock Unexecuted instantiation: ssl_lib.c:ssl_tsan_lock Unexecuted instantiation: ssl_mcnf.c:ssl_tsan_lock Unexecuted instantiation: ssl_rsa.c:ssl_tsan_lock Unexecuted instantiation: ssl_sess.c:ssl_tsan_lock Unexecuted instantiation: ssl_stat.c:ssl_tsan_lock Unexecuted instantiation: t1_lib.c:ssl_tsan_lock Unexecuted instantiation: tls13_enc.c:ssl_tsan_lock Unexecuted instantiation: tls_depr.c:ssl_tsan_lock Unexecuted instantiation: tls_srp.c:ssl_tsan_lock Unexecuted instantiation: quic_impl.c:ssl_tsan_lock Unexecuted instantiation: quic_method.c:ssl_tsan_lock Unexecuted instantiation: quic_obj.c:ssl_tsan_lock Unexecuted instantiation: quic_port.c:ssl_tsan_lock Unexecuted instantiation: quic_record_rx.c:ssl_tsan_lock Unexecuted instantiation: quic_record_shared.c:ssl_tsan_lock Unexecuted instantiation: quic_record_tx.c:ssl_tsan_lock Unexecuted instantiation: quic_record_util.c:ssl_tsan_lock Unexecuted instantiation: quic_thread_assist.c:ssl_tsan_lock Unexecuted instantiation: quic_tls.c:ssl_tsan_lock Unexecuted instantiation: rec_layer_d1.c:ssl_tsan_lock Unexecuted instantiation: rec_layer_s3.c:ssl_tsan_lock Unexecuted instantiation: dtls_meth.c:ssl_tsan_lock Unexecuted instantiation: tls1_meth.c:ssl_tsan_lock Unexecuted instantiation: tls_common.c:ssl_tsan_lock Unexecuted instantiation: tls_multib.c:ssl_tsan_lock Unexecuted instantiation: tlsany_meth.c:ssl_tsan_lock Unexecuted instantiation: extensions.c:ssl_tsan_lock Unexecuted instantiation: extensions_clnt.c:ssl_tsan_lock Unexecuted instantiation: extensions_cust.c:ssl_tsan_lock Unexecuted instantiation: extensions_srvr.c:ssl_tsan_lock Unexecuted instantiation: statem.c:ssl_tsan_lock Unexecuted instantiation: statem_clnt.c:ssl_tsan_lock Unexecuted instantiation: statem_dtls.c:ssl_tsan_lock Unexecuted instantiation: statem_lib.c:ssl_tsan_lock Unexecuted instantiation: statem_srvr.c:ssl_tsan_lock Unexecuted instantiation: d1_lib.c:ssl_tsan_lock Unexecuted instantiation: d1_msg.c:ssl_tsan_lock Unexecuted instantiation: d1_srtp.c:ssl_tsan_lock Unexecuted instantiation: pqueue.c:ssl_tsan_lock Unexecuted instantiation: s3_enc.c:ssl_tsan_lock Unexecuted instantiation: ssl_asn1.c:ssl_tsan_lock Unexecuted instantiation: ssl_conf.c:ssl_tsan_lock Unexecuted instantiation: t1_enc.c:ssl_tsan_lock Unexecuted instantiation: quic_channel.c:ssl_tsan_lock Unexecuted instantiation: quic_engine.c:ssl_tsan_lock Unexecuted instantiation: quic_rx_depack.c:ssl_tsan_lock Unexecuted instantiation: ssl3_meth.c:ssl_tsan_lock Unexecuted instantiation: tls13_meth.c:ssl_tsan_lock  | 
3065  |  |  | 
3066  |  | static ossl_unused ossl_inline void ssl_tsan_unlock(const SSL_CTX *ctx)  | 
3067  | 0  | { | 
3068  |  | #ifdef TSAN_REQUIRES_LOCKING  | 
3069  |  |     CRYPTO_THREAD_unlock(ctx->tsan_lock);  | 
3070  |  | #endif  | 
3071  | 0  | } Unexecuted instantiation: methods.c:ssl_tsan_unlock Unexecuted instantiation: s3_lib.c:ssl_tsan_unlock Unexecuted instantiation: s3_msg.c:ssl_tsan_unlock Unexecuted instantiation: ssl_cert.c:ssl_tsan_unlock Unexecuted instantiation: ssl_ciph.c:ssl_tsan_unlock Unexecuted instantiation: ssl_init.c:ssl_tsan_unlock Unexecuted instantiation: ssl_lib.c:ssl_tsan_unlock Unexecuted instantiation: ssl_mcnf.c:ssl_tsan_unlock Unexecuted instantiation: ssl_rsa.c:ssl_tsan_unlock Unexecuted instantiation: ssl_sess.c:ssl_tsan_unlock Unexecuted instantiation: ssl_stat.c:ssl_tsan_unlock Unexecuted instantiation: t1_lib.c:ssl_tsan_unlock Unexecuted instantiation: tls13_enc.c:ssl_tsan_unlock Unexecuted instantiation: tls_depr.c:ssl_tsan_unlock Unexecuted instantiation: tls_srp.c:ssl_tsan_unlock Unexecuted instantiation: quic_impl.c:ssl_tsan_unlock Unexecuted instantiation: quic_method.c:ssl_tsan_unlock Unexecuted instantiation: quic_obj.c:ssl_tsan_unlock Unexecuted instantiation: quic_port.c:ssl_tsan_unlock Unexecuted instantiation: quic_record_rx.c:ssl_tsan_unlock Unexecuted instantiation: quic_record_shared.c:ssl_tsan_unlock Unexecuted instantiation: quic_record_tx.c:ssl_tsan_unlock Unexecuted instantiation: quic_record_util.c:ssl_tsan_unlock Unexecuted instantiation: quic_thread_assist.c:ssl_tsan_unlock Unexecuted instantiation: quic_tls.c:ssl_tsan_unlock Unexecuted instantiation: rec_layer_d1.c:ssl_tsan_unlock Unexecuted instantiation: rec_layer_s3.c:ssl_tsan_unlock Unexecuted instantiation: dtls_meth.c:ssl_tsan_unlock Unexecuted instantiation: tls1_meth.c:ssl_tsan_unlock Unexecuted instantiation: tls_common.c:ssl_tsan_unlock Unexecuted instantiation: tls_multib.c:ssl_tsan_unlock Unexecuted instantiation: tlsany_meth.c:ssl_tsan_unlock Unexecuted instantiation: extensions.c:ssl_tsan_unlock Unexecuted instantiation: extensions_clnt.c:ssl_tsan_unlock Unexecuted instantiation: extensions_cust.c:ssl_tsan_unlock Unexecuted instantiation: extensions_srvr.c:ssl_tsan_unlock Unexecuted instantiation: statem.c:ssl_tsan_unlock Unexecuted instantiation: statem_clnt.c:ssl_tsan_unlock Unexecuted instantiation: statem_dtls.c:ssl_tsan_unlock Unexecuted instantiation: statem_lib.c:ssl_tsan_unlock Unexecuted instantiation: statem_srvr.c:ssl_tsan_unlock Unexecuted instantiation: d1_lib.c:ssl_tsan_unlock Unexecuted instantiation: d1_msg.c:ssl_tsan_unlock Unexecuted instantiation: d1_srtp.c:ssl_tsan_unlock Unexecuted instantiation: pqueue.c:ssl_tsan_unlock Unexecuted instantiation: s3_enc.c:ssl_tsan_unlock Unexecuted instantiation: ssl_asn1.c:ssl_tsan_unlock Unexecuted instantiation: ssl_conf.c:ssl_tsan_unlock Unexecuted instantiation: t1_enc.c:ssl_tsan_unlock Unexecuted instantiation: quic_channel.c:ssl_tsan_unlock Unexecuted instantiation: quic_engine.c:ssl_tsan_unlock Unexecuted instantiation: quic_rx_depack.c:ssl_tsan_unlock Unexecuted instantiation: ssl3_meth.c:ssl_tsan_unlock Unexecuted instantiation: tls13_meth.c:ssl_tsan_unlock  | 
3072  |  |  | 
3073  |  | static ossl_unused ossl_inline void ssl_tsan_counter(const SSL_CTX *ctx,  | 
3074  |  |                                                      TSAN_QUALIFIER int *stat)  | 
3075  | 0  | { | 
3076  | 0  |     if (ssl_tsan_lock(ctx)) { | 
3077  | 0  |         tsan_counter(stat);  | 
3078  | 0  |         ssl_tsan_unlock(ctx);  | 
3079  | 0  |     }  | 
3080  | 0  | } Unexecuted instantiation: methods.c:ssl_tsan_counter Unexecuted instantiation: s3_lib.c:ssl_tsan_counter Unexecuted instantiation: s3_msg.c:ssl_tsan_counter Unexecuted instantiation: ssl_cert.c:ssl_tsan_counter Unexecuted instantiation: ssl_ciph.c:ssl_tsan_counter Unexecuted instantiation: ssl_init.c:ssl_tsan_counter Unexecuted instantiation: ssl_lib.c:ssl_tsan_counter Unexecuted instantiation: ssl_mcnf.c:ssl_tsan_counter Unexecuted instantiation: ssl_rsa.c:ssl_tsan_counter Unexecuted instantiation: ssl_sess.c:ssl_tsan_counter Unexecuted instantiation: ssl_stat.c:ssl_tsan_counter Unexecuted instantiation: t1_lib.c:ssl_tsan_counter Unexecuted instantiation: tls13_enc.c:ssl_tsan_counter Unexecuted instantiation: tls_depr.c:ssl_tsan_counter Unexecuted instantiation: tls_srp.c:ssl_tsan_counter Unexecuted instantiation: quic_impl.c:ssl_tsan_counter Unexecuted instantiation: quic_method.c:ssl_tsan_counter Unexecuted instantiation: quic_obj.c:ssl_tsan_counter Unexecuted instantiation: quic_port.c:ssl_tsan_counter Unexecuted instantiation: quic_record_rx.c:ssl_tsan_counter Unexecuted instantiation: quic_record_shared.c:ssl_tsan_counter Unexecuted instantiation: quic_record_tx.c:ssl_tsan_counter Unexecuted instantiation: quic_record_util.c:ssl_tsan_counter Unexecuted instantiation: quic_thread_assist.c:ssl_tsan_counter Unexecuted instantiation: quic_tls.c:ssl_tsan_counter Unexecuted instantiation: rec_layer_d1.c:ssl_tsan_counter Unexecuted instantiation: rec_layer_s3.c:ssl_tsan_counter Unexecuted instantiation: dtls_meth.c:ssl_tsan_counter Unexecuted instantiation: tls1_meth.c:ssl_tsan_counter Unexecuted instantiation: tls_common.c:ssl_tsan_counter Unexecuted instantiation: tls_multib.c:ssl_tsan_counter Unexecuted instantiation: tlsany_meth.c:ssl_tsan_counter Unexecuted instantiation: extensions.c:ssl_tsan_counter Unexecuted instantiation: extensions_clnt.c:ssl_tsan_counter Unexecuted instantiation: extensions_cust.c:ssl_tsan_counter Unexecuted instantiation: extensions_srvr.c:ssl_tsan_counter Unexecuted instantiation: statem.c:ssl_tsan_counter Unexecuted instantiation: statem_clnt.c:ssl_tsan_counter Unexecuted instantiation: statem_dtls.c:ssl_tsan_counter Unexecuted instantiation: statem_lib.c:ssl_tsan_counter Unexecuted instantiation: statem_srvr.c:ssl_tsan_counter Unexecuted instantiation: d1_lib.c:ssl_tsan_counter Unexecuted instantiation: d1_msg.c:ssl_tsan_counter Unexecuted instantiation: d1_srtp.c:ssl_tsan_counter Unexecuted instantiation: pqueue.c:ssl_tsan_counter Unexecuted instantiation: s3_enc.c:ssl_tsan_counter Unexecuted instantiation: ssl_asn1.c:ssl_tsan_counter Unexecuted instantiation: ssl_conf.c:ssl_tsan_counter Unexecuted instantiation: t1_enc.c:ssl_tsan_counter Unexecuted instantiation: quic_channel.c:ssl_tsan_counter Unexecuted instantiation: quic_engine.c:ssl_tsan_counter Unexecuted instantiation: quic_rx_depack.c:ssl_tsan_counter Unexecuted instantiation: ssl3_meth.c:ssl_tsan_counter Unexecuted instantiation: tls13_meth.c:ssl_tsan_counter  | 
3081  |  |  | 
3082  |  | int ossl_comp_has_alg(int a);  | 
3083  |  | size_t ossl_calculate_comp_expansion(int alg, size_t length);  | 
3084  |  |  | 
3085  |  | void ossl_ssl_set_custom_record_layer(SSL_CONNECTION *s,  | 
3086  |  |                                       const OSSL_RECORD_METHOD *meth,  | 
3087  |  |                                       void *rlarg);  | 
3088  |  |  | 
3089  |  | long ossl_ctrl_internal(SSL *s, int cmd, long larg, void *parg, int no_quic);  | 
3090  |  |  | 
3091  |  | /*  | 
3092  |  |  * Options which no longer have any effect, but which can be implemented  | 
3093  |  |  * as no-ops for QUIC.  | 
3094  |  |  */  | 
3095  |  | #define OSSL_LEGACY_SSL_OPTIONS                 \  | 
3096  | 0  |     (SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG  | \  | 
3097  | 0  |      SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER        | \  | 
3098  | 0  |      SSL_OP_SSLEAY_080_CLIENT_DH_BUG          | \  | 
3099  | 0  |      SSL_OP_TLS_D5_BUG                        | \  | 
3100  | 0  |      SSL_OP_TLS_BLOCK_PADDING_BUG             | \  | 
3101  | 0  |      SSL_OP_MSIE_SSLV2_RSA_PADDING            | \  | 
3102  | 0  |      SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG       | \  | 
3103  | 0  |      SSL_OP_MICROSOFT_SESS_ID_BUG             | \  | 
3104  | 0  |      SSL_OP_NETSCAPE_CHALLENGE_BUG            | \  | 
3105  | 0  |      SSL_OP_PKCS1_CHECK_1                     | \  | 
3106  | 0  |      SSL_OP_PKCS1_CHECK_2                     | \  | 
3107  | 0  |      SSL_OP_SINGLE_DH_USE                     | \  | 
3108  | 0  |      SSL_OP_SINGLE_ECDH_USE                   | \  | 
3109  | 0  |      SSL_OP_EPHEMERAL_RSA                     )  | 
3110  |  |  | 
3111  |  | /* This option is undefined in public headers with no-dtls1-method. */  | 
3112  |  | #ifndef SSL_OP_CISCO_ANYCONNECT  | 
3113  |  | # define SSL_OP_CISCO_ANYCONNECT 0  | 
3114  |  | #endif  | 
3115  |  | /*  | 
3116  |  |  * Options which are no-ops under QUIC or TLSv1.3 and which are therefore  | 
3117  |  |  * allowed but ignored under QUIC.  | 
3118  |  |  */  | 
3119  |  | #define OSSL_TLS1_2_OPTIONS                     \  | 
3120  | 0  |     (SSL_OP_CRYPTOPRO_TLSEXT_BUG              | \  | 
3121  | 0  |      SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS       | \  | 
3122  | 0  |      SSL_OP_ALLOW_CLIENT_RENEGOTIATION        | \  | 
3123  | 0  |      SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION | \  | 
3124  | 0  |      SSL_OP_NO_COMPRESSION                    | \  | 
3125  | 0  |      SSL_OP_NO_SSLv3                          | \  | 
3126  | 0  |      SSL_OP_NO_TLSv1                          | \  | 
3127  | 0  |      SSL_OP_NO_TLSv1_1                        | \  | 
3128  | 0  |      SSL_OP_NO_TLSv1_2                        | \  | 
3129  | 0  |      SSL_OP_NO_DTLSv1                         | \  | 
3130  | 0  |      SSL_OP_NO_DTLSv1_2                       | \  | 
3131  | 0  |      SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION | \  | 
3132  | 0  |      SSL_OP_CISCO_ANYCONNECT                  | \  | 
3133  | 0  |      SSL_OP_NO_RENEGOTIATION                  | \  | 
3134  | 0  |      SSL_OP_NO_EXTENDED_MASTER_SECRET         | \  | 
3135  | 0  |      SSL_OP_NO_ENCRYPT_THEN_MAC               | \  | 
3136  | 0  |      SSL_OP_COOKIE_EXCHANGE                   | \  | 
3137  | 0  |      SSL_OP_LEGACY_SERVER_CONNECT             | \  | 
3138  | 0  |      SSL_OP_IGNORE_UNEXPECTED_EOF             )  | 
3139  |  |  | 
3140  |  | /* Total mask of connection-level options permitted or ignored under QUIC. */  | 
3141  |  | #define OSSL_QUIC_PERMITTED_OPTIONS_CONN        \  | 
3142  | 0  |     (OSSL_LEGACY_SSL_OPTIONS                  | \  | 
3143  | 0  |      OSSL_TLS1_2_OPTIONS                      | \  | 
3144  | 0  |      SSL_OP_SERVER_PREFERENCE                 | \  | 
3145  | 0  |      SSL_OP_DISABLE_TLSEXT_CA_NAMES           | \  | 
3146  | 0  |      SSL_OP_NO_TX_CERTIFICATE_COMPRESSION     | \  | 
3147  | 0  |      SSL_OP_NO_RX_CERTIFICATE_COMPRESSION     | \  | 
3148  | 0  |      SSL_OP_PRIORITIZE_CHACHA                 | \  | 
3149  | 0  |      SSL_OP_NO_QUERY_MTU                      | \  | 
3150  | 0  |      SSL_OP_NO_TICKET                         | \  | 
3151  | 0  |      SSL_OP_NO_ANTI_REPLAY                    )  | 
3152  |  |  | 
3153  |  | /* Total mask of stream-level options permitted or ignored under QUIC. */  | 
3154  |  | #define OSSL_QUIC_PERMITTED_OPTIONS_STREAM      \  | 
3155  | 0  |     (OSSL_LEGACY_SSL_OPTIONS                  | \  | 
3156  | 0  |      OSSL_TLS1_2_OPTIONS                      | \  | 
3157  | 0  |      SSL_OP_CLEANSE_PLAINTEXT                 )  | 
3158  |  |  | 
3159  |  | /* Total mask of options permitted on either connections or streams. */  | 
3160  |  | #define OSSL_QUIC_PERMITTED_OPTIONS             \  | 
3161  | 0  |     (OSSL_QUIC_PERMITTED_OPTIONS_CONN |         \  | 
3162  | 0  |      OSSL_QUIC_PERMITTED_OPTIONS_STREAM)  | 
3163  |  |  | 
3164  |  | /* Total mask of domain flags supported on a QUIC SSL_CTX. */  | 
3165  |  | #define OSSL_QUIC_SUPPORTED_DOMAIN_FLAGS        \  | 
3166  | 0  |     (SSL_DOMAIN_FLAG_SINGLE_THREAD |            \  | 
3167  | 0  |      SSL_DOMAIN_FLAG_MULTI_THREAD |             \  | 
3168  | 0  |      SSL_DOMAIN_FLAG_THREAD_ASSISTED |          \  | 
3169  | 0  |      SSL_DOMAIN_FLAG_BLOCKING |                 \  | 
3170  | 0  |      SSL_DOMAIN_FLAG_LEGACY_BLOCKING)  | 
3171  |  |  | 
3172  |  | #endif  |