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