/src/openssl/ssl/ssl_locl.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* ssl/ssl_locl.h */ |
2 | | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | | * All rights reserved. |
4 | | * |
5 | | * This package is an SSL implementation written |
6 | | * by Eric Young (eay@cryptsoft.com). |
7 | | * The implementation was written so as to conform with Netscapes SSL. |
8 | | * |
9 | | * This library is free for commercial and non-commercial use as long as |
10 | | * the following conditions are aheared to. The following conditions |
11 | | * apply to all code found in this distribution, be it the RC4, RSA, |
12 | | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
13 | | * included with this distribution is covered by the same copyright terms |
14 | | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
15 | | * |
16 | | * Copyright remains Eric Young's, and as such any Copyright notices in |
17 | | * the code are not to be removed. |
18 | | * If this package is used in a product, Eric Young should be given attribution |
19 | | * as the author of the parts of the library used. |
20 | | * This can be in the form of a textual message at program startup or |
21 | | * in documentation (online or textual) provided with the package. |
22 | | * |
23 | | * Redistribution and use in source and binary forms, with or without |
24 | | * modification, are permitted provided that the following conditions |
25 | | * are met: |
26 | | * 1. Redistributions of source code must retain the copyright |
27 | | * notice, this list of conditions and the following disclaimer. |
28 | | * 2. Redistributions in binary form must reproduce the above copyright |
29 | | * notice, this list of conditions and the following disclaimer in the |
30 | | * documentation and/or other materials provided with the distribution. |
31 | | * 3. All advertising materials mentioning features or use of this software |
32 | | * must display the following acknowledgement: |
33 | | * "This product includes cryptographic software written by |
34 | | * Eric Young (eay@cryptsoft.com)" |
35 | | * The word 'cryptographic' can be left out if the rouines from the library |
36 | | * being used are not cryptographic related :-). |
37 | | * 4. If you include any Windows specific code (or a derivative thereof) from |
38 | | * the apps directory (application code) you must include an acknowledgement: |
39 | | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
40 | | * |
41 | | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
42 | | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
43 | | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
44 | | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
45 | | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
46 | | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
47 | | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
48 | | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
49 | | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
50 | | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
51 | | * SUCH DAMAGE. |
52 | | * |
53 | | * The licence and distribution terms for any publically available version or |
54 | | * derivative of this code cannot be changed. i.e. this code cannot simply be |
55 | | * copied and put under another distribution licence |
56 | | * [including the GNU Public Licence.] |
57 | | */ |
58 | | /* ==================================================================== |
59 | | * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. |
60 | | * |
61 | | * Redistribution and use in source and binary forms, with or without |
62 | | * modification, are permitted provided that the following conditions |
63 | | * are met: |
64 | | * |
65 | | * 1. Redistributions of source code must retain the above copyright |
66 | | * notice, this list of conditions and the following disclaimer. |
67 | | * |
68 | | * 2. Redistributions in binary form must reproduce the above copyright |
69 | | * notice, this list of conditions and the following disclaimer in |
70 | | * the documentation and/or other materials provided with the |
71 | | * distribution. |
72 | | * |
73 | | * 3. All advertising materials mentioning features or use of this |
74 | | * software must display the following acknowledgment: |
75 | | * "This product includes software developed by the OpenSSL Project |
76 | | * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" |
77 | | * |
78 | | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to |
79 | | * endorse or promote products derived from this software without |
80 | | * prior written permission. For written permission, please contact |
81 | | * openssl-core@openssl.org. |
82 | | * |
83 | | * 5. Products derived from this software may not be called "OpenSSL" |
84 | | * nor may "OpenSSL" appear in their names without prior written |
85 | | * permission of the OpenSSL Project. |
86 | | * |
87 | | * 6. Redistributions of any form whatsoever must retain the following |
88 | | * acknowledgment: |
89 | | * "This product includes software developed by the OpenSSL Project |
90 | | * for use in the OpenSSL Toolkit (http://www.openssl.org/)" |
91 | | * |
92 | | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY |
93 | | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
94 | | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
95 | | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR |
96 | | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
97 | | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
98 | | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
99 | | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
100 | | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
101 | | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
102 | | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
103 | | * OF THE POSSIBILITY OF SUCH DAMAGE. |
104 | | * ==================================================================== |
105 | | * |
106 | | * This product includes cryptographic software written by Eric Young |
107 | | * (eay@cryptsoft.com). This product includes software written by Tim |
108 | | * Hudson (tjh@cryptsoft.com). |
109 | | * |
110 | | */ |
111 | | /* ==================================================================== |
112 | | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. |
113 | | * ECC cipher suite support in OpenSSL originally developed by |
114 | | * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. |
115 | | */ |
116 | | /* ==================================================================== |
117 | | * Copyright 2005 Nokia. All rights reserved. |
118 | | * |
119 | | * The portions of the attached software ("Contribution") is developed by |
120 | | * Nokia Corporation and is licensed pursuant to the OpenSSL open source |
121 | | * license. |
122 | | * |
123 | | * The Contribution, originally written by Mika Kousa and Pasi Eronen of |
124 | | * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites |
125 | | * support (see RFC 4279) to OpenSSL. |
126 | | * |
127 | | * No patent licenses or other rights except those expressly stated in |
128 | | * the OpenSSL open source license shall be deemed granted or received |
129 | | * expressly, by implication, estoppel, or otherwise. |
130 | | * |
131 | | * No assurances are provided by Nokia that the Contribution does not |
132 | | * infringe the patent or other intellectual property rights of any third |
133 | | * party or that the license provides you with all the necessary rights |
134 | | * to make use of the Contribution. |
135 | | * |
136 | | * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN |
137 | | * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA |
138 | | * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY |
139 | | * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR |
140 | | * OTHERWISE. |
141 | | */ |
142 | | |
143 | | #ifndef HEADER_SSL_LOCL_H |
144 | | # define HEADER_SSL_LOCL_H |
145 | | # include <stdlib.h> |
146 | | # include <time.h> |
147 | | # include <string.h> |
148 | | # include <errno.h> |
149 | | |
150 | | # include "e_os.h" |
151 | | |
152 | | # include <openssl/buffer.h> |
153 | | # ifndef OPENSSL_NO_COMP |
154 | | # include <openssl/comp.h> |
155 | | # endif |
156 | | # include <openssl/bio.h> |
157 | | # include <openssl/stack.h> |
158 | | # ifndef OPENSSL_NO_RSA |
159 | | # include <openssl/rsa.h> |
160 | | # endif |
161 | | # ifndef OPENSSL_NO_DSA |
162 | | # include <openssl/dsa.h> |
163 | | # endif |
164 | | # include <openssl/err.h> |
165 | | # include <openssl/ssl.h> |
166 | | # include <openssl/symhacks.h> |
167 | | |
168 | | # ifdef OPENSSL_BUILD_SHLIBSSL |
169 | | # undef OPENSSL_EXTERN |
170 | | # define OPENSSL_EXTERN OPENSSL_EXPORT |
171 | | # endif |
172 | | |
173 | | # undef PKCS1_CHECK |
174 | | |
175 | | # define c2l(c,l) (l = ((unsigned long)(*((c)++))) , \ |
176 | | l|=(((unsigned long)(*((c)++)))<< 8), \ |
177 | | l|=(((unsigned long)(*((c)++)))<<16), \ |
178 | | l|=(((unsigned long)(*((c)++)))<<24)) |
179 | | |
180 | | /* NOTE - c is not incremented as per c2l */ |
181 | | # define c2ln(c,l1,l2,n) { \ |
182 | | c+=n; \ |
183 | | l1=l2=0; \ |
184 | | switch (n) { \ |
185 | | case 8: l2 =((unsigned long)(*(--(c))))<<24; \ |
186 | | case 7: l2|=((unsigned long)(*(--(c))))<<16; \ |
187 | | case 6: l2|=((unsigned long)(*(--(c))))<< 8; \ |
188 | | case 5: l2|=((unsigned long)(*(--(c)))); \ |
189 | | case 4: l1 =((unsigned long)(*(--(c))))<<24; \ |
190 | | case 3: l1|=((unsigned long)(*(--(c))))<<16; \ |
191 | | case 2: l1|=((unsigned long)(*(--(c))))<< 8; \ |
192 | | case 1: l1|=((unsigned long)(*(--(c)))); \ |
193 | | } \ |
194 | | } |
195 | | |
196 | | # define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \ |
197 | | *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ |
198 | | *((c)++)=(unsigned char)(((l)>>16)&0xff), \ |
199 | | *((c)++)=(unsigned char)(((l)>>24)&0xff)) |
200 | | |
201 | 0 | # define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24, \ |
202 | 0 | l|=((unsigned long)(*((c)++)))<<16, \ |
203 | 0 | l|=((unsigned long)(*((c)++)))<< 8, \ |
204 | 0 | l|=((unsigned long)(*((c)++)))) |
205 | | |
206 | 0 | # define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \ |
207 | 0 | *((c)++)=(unsigned char)(((l)>>16)&0xff), \ |
208 | 0 | *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ |
209 | 0 | *((c)++)=(unsigned char)(((l) )&0xff)) |
210 | | |
211 | | # define l2n6(l,c) (*((c)++)=(unsigned char)(((l)>>40)&0xff), \ |
212 | | *((c)++)=(unsigned char)(((l)>>32)&0xff), \ |
213 | | *((c)++)=(unsigned char)(((l)>>24)&0xff), \ |
214 | | *((c)++)=(unsigned char)(((l)>>16)&0xff), \ |
215 | | *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ |
216 | | *((c)++)=(unsigned char)(((l) )&0xff)) |
217 | | |
218 | 0 | # define l2n8(l,c) (*((c)++)=(unsigned char)(((l)>>56)&0xff), \ |
219 | 0 | *((c)++)=(unsigned char)(((l)>>48)&0xff), \ |
220 | 0 | *((c)++)=(unsigned char)(((l)>>40)&0xff), \ |
221 | 0 | *((c)++)=(unsigned char)(((l)>>32)&0xff), \ |
222 | 0 | *((c)++)=(unsigned char)(((l)>>24)&0xff), \ |
223 | 0 | *((c)++)=(unsigned char)(((l)>>16)&0xff), \ |
224 | 0 | *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ |
225 | 0 | *((c)++)=(unsigned char)(((l) )&0xff)) |
226 | | |
227 | | # define n2l6(c,l) (l =((BN_ULLONG)(*((c)++)))<<40, \ |
228 | | l|=((BN_ULLONG)(*((c)++)))<<32, \ |
229 | | l|=((BN_ULLONG)(*((c)++)))<<24, \ |
230 | | l|=((BN_ULLONG)(*((c)++)))<<16, \ |
231 | | l|=((BN_ULLONG)(*((c)++)))<< 8, \ |
232 | | l|=((BN_ULLONG)(*((c)++)))) |
233 | | |
234 | | /* NOTE - c is not incremented as per l2c */ |
235 | | # define l2cn(l1,l2,c,n) { \ |
236 | | c+=n; \ |
237 | | switch (n) { \ |
238 | | case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \ |
239 | | case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \ |
240 | | case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \ |
241 | | case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \ |
242 | | case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \ |
243 | | case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \ |
244 | | case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \ |
245 | | case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \ |
246 | | } \ |
247 | | } |
248 | | |
249 | 0 | # define n2s(c,s) ((s=(((unsigned int)(c[0]))<< 8)| \ |
250 | 0 | (((unsigned int)(c[1])) )),c+=2) |
251 | 0 | # define s2n(s,c) ((c[0]=(unsigned char)(((s)>> 8)&0xff), \ |
252 | 0 | c[1]=(unsigned char)(((s) )&0xff)),c+=2) |
253 | | |
254 | 0 | # define n2l3(c,l) ((l =(((unsigned long)(c[0]))<<16)| \ |
255 | 0 | (((unsigned long)(c[1]))<< 8)| \ |
256 | 0 | (((unsigned long)(c[2])) )),c+=3) |
257 | | |
258 | 0 | # define l2n3(l,c) ((c[0]=(unsigned char)(((l)>>16)&0xff), \ |
259 | 0 | c[1]=(unsigned char)(((l)>> 8)&0xff), \ |
260 | 0 | c[2]=(unsigned char)(((l) )&0xff)),c+=3) |
261 | | |
262 | | /* LOCAL STUFF */ |
263 | | |
264 | | # define SSL_DECRYPT 0 |
265 | | # define SSL_ENCRYPT 1 |
266 | | |
267 | | # define TWO_BYTE_BIT 0x80 |
268 | | # define SEC_ESC_BIT 0x40 |
269 | | # define TWO_BYTE_MASK 0x7fff |
270 | | # define THREE_BYTE_MASK 0x3fff |
271 | | |
272 | | # define INC32(a) ((a)=((a)+1)&0xffffffffL) |
273 | | # define DEC32(a) ((a)=((a)-1)&0xffffffffL) |
274 | | # define MAX_MAC_SIZE 20 /* up from 16 for SSLv3 */ |
275 | | |
276 | | /* |
277 | | * Define the Bitmasks for SSL_CIPHER.algorithms. |
278 | | * This bits are used packed as dense as possible. If new methods/ciphers |
279 | | * etc will be added, the bits a likely to change, so this information |
280 | | * is for internal library use only, even though SSL_CIPHER.algorithms |
281 | | * can be publicly accessed. |
282 | | * Use the according functions for cipher management instead. |
283 | | * |
284 | | * The bit mask handling in the selection and sorting scheme in |
285 | | * ssl_create_cipher_list() has only limited capabilities, reflecting |
286 | | * that the different entities within are mutually exclusive: |
287 | | * ONLY ONE BIT PER MASK CAN BE SET AT A TIME. |
288 | | */ |
289 | | |
290 | | /* Bits for algorithm_mkey (key exchange algorithm) */ |
291 | | /* RSA key exchange */ |
292 | 2.48k | # define SSL_kRSA 0x00000001L |
293 | | /* DH cert, RSA CA cert */ |
294 | 0 | # define SSL_kDHr 0x00000002L |
295 | | /* DH cert, DSA CA cert */ |
296 | 0 | # define SSL_kDHd 0x00000004L |
297 | | /* tmp DH key no DH cert */ |
298 | 0 | # define SSL_kEDH 0x00000008L |
299 | | /* forward-compatible synonym */ |
300 | 0 | # define SSL_kDHE SSL_kEDH |
301 | | /* Kerberos5 key exchange */ |
302 | 4.97k | # define SSL_kKRB5 0x00000010L |
303 | | /* ECDH cert, RSA CA cert */ |
304 | 0 | # define SSL_kECDHr 0x00000020L |
305 | | /* ECDH cert, ECDSA CA cert */ |
306 | 0 | # define SSL_kECDHe 0x00000040L |
307 | | /* ephemeral ECDH */ |
308 | 4.97k | # define SSL_kEECDH 0x00000080L |
309 | | /* forward-compatible synonym */ |
310 | 0 | # define SSL_kECDHE SSL_kEECDH |
311 | | /* PSK */ |
312 | 2.48k | # define SSL_kPSK 0x00000100L |
313 | | /* GOST key exchange */ |
314 | 2.48k | # define SSL_kGOST 0x00000200L |
315 | | /* SRP */ |
316 | 0 | # define SSL_kSRP 0x00000400L |
317 | | |
318 | | /* Bits for algorithm_auth (server authentication) */ |
319 | | /* RSA auth */ |
320 | 0 | # define SSL_aRSA 0x00000001L |
321 | | /* DSS auth */ |
322 | 0 | # define SSL_aDSS 0x00000002L |
323 | | /* no auth (i.e. use ADH or AECDH) */ |
324 | 2.48k | # define SSL_aNULL 0x00000004L |
325 | | /* Fixed DH auth (kDHd or kDHr) */ |
326 | 0 | # define SSL_aDH 0x00000008L |
327 | | /* Fixed ECDH auth (kECDHe or kECDHr) */ |
328 | 2.48k | # define SSL_aECDH 0x00000010L |
329 | | /* KRB5 auth */ |
330 | 2.48k | # define SSL_aKRB5 0x00000020L |
331 | | /* ECDSA auth*/ |
332 | 0 | # define SSL_aECDSA 0x00000040L |
333 | | /* PSK auth */ |
334 | 0 | # define SSL_aPSK 0x00000080L |
335 | | /* GOST R 34.10-94 signature auth */ |
336 | 7.45k | # define SSL_aGOST94 0x00000100L |
337 | | /* GOST R 34.10-2001 signature auth */ |
338 | 7.45k | # define SSL_aGOST01 0x00000200L |
339 | | /* SRP auth */ |
340 | 0 | # define SSL_aSRP 0x00000400L |
341 | | |
342 | | /* Bits for algorithm_enc (symmetric encryption) */ |
343 | 0 | # define SSL_DES 0x00000001L |
344 | 0 | # define SSL_3DES 0x00000002L |
345 | 2.48k | # define SSL_RC4 0x00000004L |
346 | 0 | # define SSL_RC2 0x00000008L |
347 | 0 | # define SSL_IDEA 0x00000010L |
348 | 0 | # define SSL_eNULL 0x00000020L |
349 | 2.48k | # define SSL_AES128 0x00000040L |
350 | 2.48k | # define SSL_AES256 0x00000080L |
351 | 0 | # define SSL_CAMELLIA128 0x00000100L |
352 | 0 | # define SSL_CAMELLIA256 0x00000200L |
353 | 0 | # define SSL_eGOST2814789CNT 0x00000400L |
354 | 0 | # define SSL_SEED 0x00000800L |
355 | 2.48k | # define SSL_AES128GCM 0x00001000L |
356 | 2.48k | # define SSL_AES256GCM 0x00002000L |
357 | | |
358 | 2.48k | # define SSL_AES (SSL_AES128|SSL_AES256|SSL_AES128GCM|SSL_AES256GCM) |
359 | | # define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256) |
360 | | |
361 | | /* Bits for algorithm_mac (symmetric authentication) */ |
362 | | |
363 | 2.48k | # define SSL_MD5 0x00000001L |
364 | 0 | # define SSL_SHA1 0x00000002L |
365 | 0 | # define SSL_GOST94 0x00000004L |
366 | 2.48k | # define SSL_GOST89MAC 0x00000008L |
367 | 0 | # define SSL_SHA256 0x00000010L |
368 | 0 | # define SSL_SHA384 0x00000020L |
369 | | /* Not a real MAC, just an indication it is part of cipher */ |
370 | 0 | # define SSL_AEAD 0x00000040L |
371 | | |
372 | | /* Bits for algorithm_ssl (protocol version) */ |
373 | 0 | # define SSL_SSLV2 0x00000001UL |
374 | 0 | # define SSL_SSLV3 0x00000002UL |
375 | | # define SSL_TLSV1 SSL_SSLV3/* for now */ |
376 | 0 | # define SSL_TLSV1_2 0x00000004UL |
377 | | |
378 | | /* Bits for algorithm2 (handshake digests and other extra flags) */ |
379 | | |
380 | 0 | # define SSL_HANDSHAKE_MAC_MD5 0x10 |
381 | 0 | # define SSL_HANDSHAKE_MAC_SHA 0x20 |
382 | | # define SSL_HANDSHAKE_MAC_GOST94 0x40 |
383 | 0 | # define SSL_HANDSHAKE_MAC_SHA256 0x80 |
384 | | # define SSL_HANDSHAKE_MAC_SHA384 0x100 |
385 | 0 | # define SSL_HANDSHAKE_MAC_DEFAULT (SSL_HANDSHAKE_MAC_MD5 | SSL_HANDSHAKE_MAC_SHA) |
386 | | |
387 | | /* |
388 | | * When adding new digest in the ssl_ciph.c and increment SSM_MD_NUM_IDX make |
389 | | * sure to update this constant too |
390 | | */ |
391 | 0 | # define SSL_MAX_DIGEST 6 |
392 | | |
393 | | # define TLS1_PRF_DGST_MASK (0xff << TLS1_PRF_DGST_SHIFT) |
394 | | |
395 | 0 | # define TLS1_PRF_DGST_SHIFT 10 |
396 | 0 | # define TLS1_PRF_MD5 (SSL_HANDSHAKE_MAC_MD5 << TLS1_PRF_DGST_SHIFT) |
397 | 0 | # define TLS1_PRF_SHA1 (SSL_HANDSHAKE_MAC_SHA << TLS1_PRF_DGST_SHIFT) |
398 | 0 | # define TLS1_PRF_SHA256 (SSL_HANDSHAKE_MAC_SHA256 << TLS1_PRF_DGST_SHIFT) |
399 | | # define TLS1_PRF_SHA384 (SSL_HANDSHAKE_MAC_SHA384 << TLS1_PRF_DGST_SHIFT) |
400 | | # define TLS1_PRF_GOST94 (SSL_HANDSHAKE_MAC_GOST94 << TLS1_PRF_DGST_SHIFT) |
401 | 0 | # define TLS1_PRF (TLS1_PRF_MD5 | TLS1_PRF_SHA1) |
402 | | |
403 | | /* |
404 | | * Stream MAC for GOST ciphersuites from cryptopro draft (currently this also |
405 | | * goes into algorithm2) |
406 | | */ |
407 | 0 | # define TLS1_STREAM_MAC 0x04 |
408 | | |
409 | | /* |
410 | | * Export and cipher strength information. For each cipher we have to decide |
411 | | * whether it is exportable or not. This information is likely to change |
412 | | * over time, since the export control rules are no static technical issue. |
413 | | * |
414 | | * Independent of the export flag the cipher strength is sorted into classes. |
415 | | * SSL_EXP40 was denoting the 40bit US export limit of past times, which now |
416 | | * is at 56bit (SSL_EXP56). If the exportable cipher class is going to change |
417 | | * again (eg. to 64bit) the use of "SSL_EXP*" becomes blurred even more, |
418 | | * since SSL_EXP64 could be similar to SSL_LOW. |
419 | | * For this reason SSL_MICRO and SSL_MINI macros are included to widen the |
420 | | * namespace of SSL_LOW-SSL_HIGH to lower values. As development of speed |
421 | | * and ciphers goes, another extension to SSL_SUPER and/or SSL_ULTRA would |
422 | | * be possible. |
423 | | */ |
424 | 2.81M | # define SSL_EXP_MASK 0x00000003L |
425 | 2.78M | # define SSL_STRONG_MASK 0x000001fcL |
426 | | |
427 | | # define SSL_NOT_EXP 0x00000001L |
428 | 0 | # define SSL_EXPORT 0x00000002L |
429 | | |
430 | | # define SSL_STRONG_NONE 0x00000004L |
431 | 0 | # define SSL_EXP40 0x00000008L |
432 | | # define SSL_MICRO (SSL_EXP40) |
433 | | # define SSL_EXP56 0x00000010L |
434 | | # define SSL_MINI (SSL_EXP56) |
435 | | # define SSL_LOW 0x00000020L |
436 | | # define SSL_MEDIUM 0x00000040L |
437 | | # define SSL_HIGH 0x00000080L |
438 | | # define SSL_FIPS 0x00000100L |
439 | 1.56M | # define SSL_NOT_DEFAULT 0x00000200L |
440 | | |
441 | | /* we have used 000003ff - 22 bits left to go */ |
442 | | |
443 | | /*- |
444 | | * Macros to check the export status and cipher strength for export ciphers. |
445 | | * Even though the macros for EXPORT and EXPORT40/56 have similar names, |
446 | | * their meaning is different: |
447 | | * *_EXPORT macros check the 'exportable' status. |
448 | | * *_EXPORT40/56 macros are used to check whether a certain cipher strength |
449 | | * is given. |
450 | | * Since the SSL_IS_EXPORT* and SSL_EXPORT* macros depend on the correct |
451 | | * algorithm structure element to be passed (algorithms, algo_strength) and no |
452 | | * typechecking can be done as they are all of type unsigned long, their |
453 | | * direct usage is discouraged. |
454 | | * Use the SSL_C_* macros instead. |
455 | | */ |
456 | 0 | # define SSL_IS_EXPORT(a) ((a)&SSL_EXPORT) |
457 | | # define SSL_IS_EXPORT56(a) ((a)&SSL_EXP56) |
458 | 0 | # define SSL_IS_EXPORT40(a) ((a)&SSL_EXP40) |
459 | 0 | # define SSL_C_IS_EXPORT(c) SSL_IS_EXPORT((c)->algo_strength) |
460 | | # define SSL_C_IS_EXPORT56(c) SSL_IS_EXPORT56((c)->algo_strength) |
461 | | # define SSL_C_IS_EXPORT40(c) SSL_IS_EXPORT40((c)->algo_strength) |
462 | | |
463 | 0 | # define SSL_EXPORT_KEYLENGTH(a,s) (SSL_IS_EXPORT40(s) ? 5 : \ |
464 | 0 | (a) == SSL_DES ? 8 : 7) |
465 | 0 | # define SSL_EXPORT_PKEYLENGTH(a) (SSL_IS_EXPORT40(a) ? 512 : 1024) |
466 | 0 | # define SSL_C_EXPORT_KEYLENGTH(c) SSL_EXPORT_KEYLENGTH((c)->algorithm_enc, \ |
467 | 0 | (c)->algo_strength) |
468 | 0 | # define SSL_C_EXPORT_PKEYLENGTH(c) SSL_EXPORT_PKEYLENGTH((c)->algo_strength) |
469 | | |
470 | | /* Check if an SSL structure is using DTLS */ |
471 | 0 | # define SSL_IS_DTLS(s) (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS) |
472 | | /* See if we need explicit IV */ |
473 | | # define SSL_USE_EXPLICIT_IV(s) \ |
474 | 0 | (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV) |
475 | | /* |
476 | | * See if we use signature algorithms extension and signature algorithm |
477 | | * before signatures. |
478 | | */ |
479 | | # define SSL_USE_SIGALGS(s) \ |
480 | 0 | (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SIGALGS) |
481 | | /* |
482 | | * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may |
483 | | * apply to others in future. |
484 | | */ |
485 | | # define SSL_USE_TLS1_2_CIPHERS(s) \ |
486 | 0 | (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS) |
487 | | /* |
488 | | * Determine if a client can use TLS 1.2 ciphersuites: can't rely on method |
489 | | * flags because it may not be set to correct version yet. |
490 | | */ |
491 | | # define SSL_CLIENT_USE_TLS1_2_CIPHERS(s) \ |
492 | 0 | ((SSL_IS_DTLS(s) && s->client_version <= DTLS1_2_VERSION) || \ |
493 | 0 | (!SSL_IS_DTLS(s) && s->client_version >= TLS1_2_VERSION)) |
494 | | /* |
495 | | * Determine if a client should send signature algorithms extension: |
496 | | * as with TLS1.2 cipher we can't rely on method flags. |
497 | | */ |
498 | | # define SSL_CLIENT_USE_SIGALGS(s) \ |
499 | 0 | SSL_CLIENT_USE_TLS1_2_CIPHERS(s) |
500 | | |
501 | | /* Mostly for SSLv3 */ |
502 | 2.48k | # define SSL_PKEY_RSA_ENC 0 |
503 | 1.24k | # define SSL_PKEY_RSA_SIGN 1 |
504 | 1.24k | # define SSL_PKEY_DSA_SIGN 2 |
505 | 0 | # define SSL_PKEY_DH_RSA 3 |
506 | 0 | # define SSL_PKEY_DH_DSA 4 |
507 | 1.24k | # define SSL_PKEY_ECC 5 |
508 | 0 | # define SSL_PKEY_GOST94 6 |
509 | 0 | # define SSL_PKEY_GOST01 7 |
510 | 11.1k | # define SSL_PKEY_NUM 8 |
511 | | |
512 | | /*- |
513 | | * SSL_kRSA <- RSA_ENC | (RSA_TMP & RSA_SIGN) | |
514 | | * <- (EXPORT & (RSA_ENC | RSA_TMP) & RSA_SIGN) |
515 | | * SSL_kDH <- DH_ENC & (RSA_ENC | RSA_SIGN | DSA_SIGN) |
516 | | * SSL_kEDH <- RSA_ENC | RSA_SIGN | DSA_SIGN |
517 | | * SSL_aRSA <- RSA_ENC | RSA_SIGN |
518 | | * SSL_aDSS <- DSA_SIGN |
519 | | */ |
520 | | |
521 | | /*- |
522 | | #define CERT_INVALID 0 |
523 | | #define CERT_PUBLIC_KEY 1 |
524 | | #define CERT_PRIVATE_KEY 2 |
525 | | */ |
526 | | |
527 | | # ifndef OPENSSL_NO_EC |
528 | | /* |
529 | | * From ECC-TLS draft, used in encoding the curve type in ECParameters |
530 | | */ |
531 | | # define EXPLICIT_PRIME_CURVE_TYPE 1 |
532 | | # define EXPLICIT_CHAR2_CURVE_TYPE 2 |
533 | 0 | # define NAMED_CURVE_TYPE 3 |
534 | | # endif /* OPENSSL_NO_EC */ |
535 | | |
536 | | typedef struct cert_pkey_st { |
537 | | X509 *x509; |
538 | | EVP_PKEY *privatekey; |
539 | | /* Digest to use when signing */ |
540 | | const EVP_MD *digest; |
541 | | /* Chain for this certificate */ |
542 | | STACK_OF(X509) *chain; |
543 | | # ifndef OPENSSL_NO_TLSEXT |
544 | | /*- |
545 | | * serverinfo data for this certificate. The data is in TLS Extension |
546 | | * wire format, specifically it's a series of records like: |
547 | | * uint16_t extension_type; // (RFC 5246, 7.4.1.4, Extension) |
548 | | * uint16_t length; |
549 | | * uint8_t data[length]; |
550 | | */ |
551 | | unsigned char *serverinfo; |
552 | | size_t serverinfo_length; |
553 | | # endif |
554 | | /* |
555 | | * Set if CERT_PKEY can be used with current SSL session: e.g. |
556 | | * appropriate curve, signature algorithms etc. If zero it can't be used |
557 | | * at all. |
558 | | */ |
559 | | int valid_flags; |
560 | | } CERT_PKEY; |
561 | | /* Retrieve Suite B flags */ |
562 | 0 | # define tls1_suiteb(s) (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS) |
563 | | /* Uses to check strict mode: suite B modes are always strict */ |
564 | | # define SSL_CERT_FLAGS_CHECK_TLS_STRICT \ |
565 | 0 | (SSL_CERT_FLAG_SUITEB_128_LOS|SSL_CERT_FLAG_TLS_STRICT) |
566 | | |
567 | | typedef struct { |
568 | | unsigned short ext_type; |
569 | | /* |
570 | | * Per-connection flags relating to this extension type: not used if |
571 | | * part of an SSL_CTX structure. |
572 | | */ |
573 | | unsigned short ext_flags; |
574 | | custom_ext_add_cb add_cb; |
575 | | custom_ext_free_cb free_cb; |
576 | | void *add_arg; |
577 | | custom_ext_parse_cb parse_cb; |
578 | | void *parse_arg; |
579 | | } custom_ext_method; |
580 | | |
581 | | /* ext_flags values */ |
582 | | |
583 | | /* |
584 | | * Indicates an extension has been received. Used to check for unsolicited or |
585 | | * duplicate extensions. |
586 | | */ |
587 | 0 | # define SSL_EXT_FLAG_RECEIVED 0x1 |
588 | | /* |
589 | | * Indicates an extension has been sent: used to enable sending of |
590 | | * corresponding ServerHello extension. |
591 | | */ |
592 | 0 | # define SSL_EXT_FLAG_SENT 0x2 |
593 | | |
594 | 0 | # define MAX_WARN_ALERT_COUNT 5 |
595 | | |
596 | | typedef struct { |
597 | | custom_ext_method *meths; |
598 | | size_t meths_count; |
599 | | } custom_ext_methods; |
600 | | |
601 | | typedef struct cert_st { |
602 | | /* Current active set */ |
603 | | /* |
604 | | * ALWAYS points to an element of the pkeys array |
605 | | * Probably it would make more sense to store |
606 | | * an index, not a pointer. |
607 | | */ |
608 | | CERT_PKEY *key; |
609 | | /* |
610 | | * For servers the following masks are for the key and auth algorithms |
611 | | * that are supported by the certs below. For clients they are masks of |
612 | | * *disabled* algorithms based on the current session. |
613 | | */ |
614 | | int valid; |
615 | | unsigned long mask_k; |
616 | | unsigned long mask_a; |
617 | | unsigned long export_mask_k; |
618 | | unsigned long export_mask_a; |
619 | | /* Client only */ |
620 | | unsigned long mask_ssl; |
621 | | # ifndef OPENSSL_NO_RSA |
622 | | RSA *rsa_tmp; |
623 | | RSA *(*rsa_tmp_cb) (SSL *ssl, int is_export, int keysize); |
624 | | # endif |
625 | | # ifndef OPENSSL_NO_DH |
626 | | DH *dh_tmp; |
627 | | DH *(*dh_tmp_cb) (SSL *ssl, int is_export, int keysize); |
628 | | # endif |
629 | | # ifndef OPENSSL_NO_ECDH |
630 | | EC_KEY *ecdh_tmp; |
631 | | /* Callback for generating ephemeral ECDH keys */ |
632 | | EC_KEY *(*ecdh_tmp_cb) (SSL *ssl, int is_export, int keysize); |
633 | | /* Select ECDH parameters automatically */ |
634 | | int ecdh_tmp_auto; |
635 | | # endif |
636 | | /* Flags related to certificates */ |
637 | | unsigned int cert_flags; |
638 | | CERT_PKEY pkeys[SSL_PKEY_NUM]; |
639 | | /* |
640 | | * Certificate types (received or sent) in certificate request message. |
641 | | * On receive this is only set if number of certificate types exceeds |
642 | | * SSL3_CT_NUMBER. |
643 | | */ |
644 | | unsigned char *ctypes; |
645 | | size_t ctype_num; |
646 | | /* |
647 | | * signature algorithms peer reports: e.g. supported signature algorithms |
648 | | * extension for server or as part of a certificate request for client. |
649 | | */ |
650 | | unsigned char *peer_sigalgs; |
651 | | /* Size of above array */ |
652 | | size_t peer_sigalgslen; |
653 | | /* |
654 | | * suppported signature algorithms. When set on a client this is sent in |
655 | | * the client hello as the supported signature algorithms extension. For |
656 | | * servers it represents the signature algorithms we are willing to use. |
657 | | */ |
658 | | unsigned char *conf_sigalgs; |
659 | | /* Size of above array */ |
660 | | size_t conf_sigalgslen; |
661 | | /* |
662 | | * Client authentication signature algorithms, if not set then uses |
663 | | * conf_sigalgs. On servers these will be the signature algorithms sent |
664 | | * to the client in a cerificate request for TLS 1.2. On a client this |
665 | | * represents the signature algortithms we are willing to use for client |
666 | | * authentication. |
667 | | */ |
668 | | unsigned char *client_sigalgs; |
669 | | /* Size of above array */ |
670 | | size_t client_sigalgslen; |
671 | | /* |
672 | | * Signature algorithms shared by client and server: cached because these |
673 | | * are used most often. |
674 | | */ |
675 | | TLS_SIGALGS *shared_sigalgs; |
676 | | size_t shared_sigalgslen; |
677 | | /* |
678 | | * Certificate setup callback: if set is called whenever a certificate |
679 | | * may be required (client or server). the callback can then examine any |
680 | | * appropriate parameters and setup any certificates required. This |
681 | | * allows advanced applications to select certificates on the fly: for |
682 | | * example based on supported signature algorithms or curves. |
683 | | */ |
684 | | int (*cert_cb) (SSL *ssl, void *arg); |
685 | | void *cert_cb_arg; |
686 | | /* |
687 | | * Optional X509_STORE for chain building or certificate validation If |
688 | | * NULL the parent SSL_CTX store is used instead. |
689 | | */ |
690 | | X509_STORE *chain_store; |
691 | | X509_STORE *verify_store; |
692 | | /* Raw values of the cipher list from a client */ |
693 | | unsigned char *ciphers_raw; |
694 | | size_t ciphers_rawlen; |
695 | | /* Custom extension methods for server and client */ |
696 | | custom_ext_methods cli_ext; |
697 | | custom_ext_methods srv_ext; |
698 | | int references; /* >1 only if SSL_copy_session_id is used */ |
699 | | /* non-optimal, but here due to compatibility */ |
700 | | unsigned char *alpn_proposed; /* server */ |
701 | | unsigned int alpn_proposed_len; |
702 | | int alpn_sent; /* client */ |
703 | | /* Count of the number of consecutive warning alerts received */ |
704 | | unsigned int alert_count; |
705 | | } CERT; |
706 | | |
707 | | typedef struct sess_cert_st { |
708 | | STACK_OF(X509) *cert_chain; /* as received from peer (not for SSL2) */ |
709 | | /* The 'peer_...' members are used only by clients. */ |
710 | | int peer_cert_type; |
711 | | CERT_PKEY *peer_key; /* points to an element of peer_pkeys (never |
712 | | * NULL!) */ |
713 | | CERT_PKEY peer_pkeys[SSL_PKEY_NUM]; |
714 | | /* |
715 | | * Obviously we don't have the private keys of these, so maybe we |
716 | | * shouldn't even use the CERT_PKEY type here. |
717 | | */ |
718 | | # ifndef OPENSSL_NO_RSA |
719 | | RSA *peer_rsa_tmp; /* not used for SSL 2 */ |
720 | | # endif |
721 | | # ifndef OPENSSL_NO_DH |
722 | | DH *peer_dh_tmp; /* not used for SSL 2 */ |
723 | | # endif |
724 | | # ifndef OPENSSL_NO_ECDH |
725 | | EC_KEY *peer_ecdh_tmp; |
726 | | # endif |
727 | | int references; /* actually always 1 at the moment */ |
728 | | } SESS_CERT; |
729 | | /* Structure containing decoded values of signature algorithms extension */ |
730 | | struct tls_sigalgs_st { |
731 | | /* NID of hash algorithm */ |
732 | | int hash_nid; |
733 | | /* NID of signature algorithm */ |
734 | | int sign_nid; |
735 | | /* Combined hash and signature NID */ |
736 | | int signandhash_nid; |
737 | | /* Raw values used in extension */ |
738 | | unsigned char rsign; |
739 | | unsigned char rhash; |
740 | | }; |
741 | | |
742 | | /* |
743 | | * #define MAC_DEBUG |
744 | | */ |
745 | | |
746 | | /* |
747 | | * #define ERR_DEBUG |
748 | | */ |
749 | | /* |
750 | | * #define ABORT_DEBUG |
751 | | */ |
752 | | /* |
753 | | * #define PKT_DEBUG 1 |
754 | | */ |
755 | | /* |
756 | | * #define DES_DEBUG |
757 | | */ |
758 | | /* |
759 | | * #define DES_OFB_DEBUG |
760 | | */ |
761 | | /* |
762 | | * #define SSL_DEBUG |
763 | | */ |
764 | | /* |
765 | | * #define RSA_DEBUG |
766 | | */ |
767 | | /* |
768 | | * #define IDEA_DEBUG |
769 | | */ |
770 | | |
771 | | # define FP_ICC (int (*)(const void *,const void *)) |
772 | | # define ssl_put_cipher_by_char(ssl,ciph,ptr) \ |
773 | 0 | ((ssl)->method->put_cipher_by_char((ciph),(ptr))) |
774 | | |
775 | | /* |
776 | | * This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff It is a bit |
777 | | * of a mess of functions, but hell, think of it as an opaque structure :-) |
778 | | */ |
779 | | typedef struct ssl3_enc_method { |
780 | | int (*enc) (SSL *, int); |
781 | | int (*mac) (SSL *, unsigned char *, int); |
782 | | int (*setup_key_block) (SSL *); |
783 | | int (*generate_master_secret) (SSL *, unsigned char *, unsigned char *, |
784 | | int); |
785 | | int (*change_cipher_state) (SSL *, int); |
786 | | int (*final_finish_mac) (SSL *, const char *, int, unsigned char *); |
787 | | int finish_mac_length; |
788 | | int (*cert_verify_mac) (SSL *, int, unsigned char *); |
789 | | const char *client_finished_label; |
790 | | int client_finished_label_len; |
791 | | const char *server_finished_label; |
792 | | int server_finished_label_len; |
793 | | int (*alert_value) (int); |
794 | | int (*export_keying_material) (SSL *, unsigned char *, size_t, |
795 | | const char *, size_t, |
796 | | const unsigned char *, size_t, |
797 | | int use_context); |
798 | | /* Various flags indicating protocol version requirements */ |
799 | | unsigned int enc_flags; |
800 | | /* Handshake header length */ |
801 | | unsigned int hhlen; |
802 | | /* Set the handshake header */ |
803 | | void (*set_handshake_header) (SSL *s, int type, unsigned long len); |
804 | | /* Write out handshake message */ |
805 | | int (*do_write) (SSL *s); |
806 | | } SSL3_ENC_METHOD; |
807 | | |
808 | 0 | # define SSL_HM_HEADER_LENGTH(s) s->method->ssl3_enc->hhlen |
809 | | # define ssl_handshake_start(s) \ |
810 | 0 | (((unsigned char *)s->init_buf->data) + s->method->ssl3_enc->hhlen) |
811 | | # define ssl_set_handshake_header(s, htype, len) \ |
812 | 0 | s->method->ssl3_enc->set_handshake_header(s, htype, len) |
813 | 0 | # define ssl_do_write(s) s->method->ssl3_enc->do_write(s) |
814 | | |
815 | | /* Values for enc_flags */ |
816 | | |
817 | | /* Uses explicit IV for CBC mode */ |
818 | 0 | # define SSL_ENC_FLAG_EXPLICIT_IV 0x1 |
819 | | /* Uses signature algorithms extension */ |
820 | 0 | # define SSL_ENC_FLAG_SIGALGS 0x2 |
821 | | /* Uses SHA256 default PRF */ |
822 | 0 | # define SSL_ENC_FLAG_SHA256_PRF 0x4 |
823 | | /* Is DTLS */ |
824 | 1.24k | # define SSL_ENC_FLAG_DTLS 0x8 |
825 | | /* |
826 | | * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may |
827 | | * apply to others in future. |
828 | | */ |
829 | 0 | # define SSL_ENC_FLAG_TLS1_2_CIPHERS 0x10 |
830 | | |
831 | | # ifndef OPENSSL_NO_COMP |
832 | | /* Used for holding the relevant compression methods loaded into SSL_CTX */ |
833 | | typedef struct ssl3_comp_st { |
834 | | int comp_id; /* The identifier byte for this compression |
835 | | * type */ |
836 | | char *name; /* Text name used for the compression type */ |
837 | | COMP_METHOD *method; /* The method :-) */ |
838 | | } SSL3_COMP; |
839 | | # endif |
840 | | |
841 | | # ifndef OPENSSL_NO_BUF_FREELISTS |
842 | | typedef struct ssl3_buf_freelist_st { |
843 | | size_t chunklen; |
844 | | unsigned int len; |
845 | | struct ssl3_buf_freelist_entry_st *head; |
846 | | } SSL3_BUF_FREELIST; |
847 | | |
848 | | typedef struct ssl3_buf_freelist_entry_st { |
849 | | struct ssl3_buf_freelist_entry_st *next; |
850 | | } SSL3_BUF_FREELIST_ENTRY; |
851 | | # endif |
852 | | |
853 | | extern SSL3_ENC_METHOD ssl3_undef_enc_method; |
854 | | OPENSSL_EXTERN const SSL_CIPHER ssl2_ciphers[]; |
855 | | OPENSSL_EXTERN SSL_CIPHER ssl3_ciphers[]; |
856 | | |
857 | | SSL_METHOD *ssl_bad_method(int ver); |
858 | | |
859 | | extern SSL3_ENC_METHOD TLSv1_enc_data; |
860 | | extern SSL3_ENC_METHOD TLSv1_1_enc_data; |
861 | | extern SSL3_ENC_METHOD TLSv1_2_enc_data; |
862 | | extern SSL3_ENC_METHOD SSLv3_enc_data; |
863 | | extern SSL3_ENC_METHOD DTLSv1_enc_data; |
864 | | extern SSL3_ENC_METHOD DTLSv1_2_enc_data; |
865 | | |
866 | | # define IMPLEMENT_tls_meth_func(version, func_name, s_accept, s_connect, \ |
867 | | s_get_meth, enc_data) \ |
868 | | const SSL_METHOD *func_name(void) \ |
869 | 0 | { \ |
870 | 0 | static const SSL_METHOD func_name##_data= { \ |
871 | 0 | version, \ |
872 | 0 | tls1_new, \ |
873 | 0 | tls1_clear, \ |
874 | 0 | tls1_free, \ |
875 | 0 | s_accept, \ |
876 | 0 | s_connect, \ |
877 | 0 | ssl3_read, \ |
878 | 0 | ssl3_peek, \ |
879 | 0 | ssl3_write, \ |
880 | 0 | ssl3_shutdown, \ |
881 | 0 | ssl3_renegotiate, \ |
882 | 0 | ssl3_renegotiate_check, \ |
883 | 0 | ssl3_get_message, \ |
884 | 0 | ssl3_read_bytes, \ |
885 | 0 | ssl3_write_bytes, \ |
886 | 0 | ssl3_dispatch_alert, \ |
887 | 0 | ssl3_ctrl, \ |
888 | 0 | ssl3_ctx_ctrl, \ |
889 | 0 | ssl3_get_cipher_by_char, \ |
890 | 0 | ssl3_put_cipher_by_char, \ |
891 | 0 | ssl3_pending, \ |
892 | 0 | ssl3_num_ciphers, \ |
893 | 0 | ssl3_get_cipher, \ |
894 | 0 | s_get_meth, \ |
895 | 0 | tls1_default_timeout, \ |
896 | 0 | &enc_data, \ |
897 | 0 | ssl_undefined_void_function, \ |
898 | 0 | ssl3_callback_ctrl, \ |
899 | 0 | ssl3_ctx_callback_ctrl, \ |
900 | 0 | }; \ |
901 | 0 | return &func_name##_data; \ |
902 | 0 | } Unexecuted instantiation: TLSv1_2_client_method Unexecuted instantiation: TLSv1_1_client_method Unexecuted instantiation: TLSv1_client_method Unexecuted instantiation: TLSv1_2_method Unexecuted instantiation: TLSv1_1_method Unexecuted instantiation: TLSv1_method Unexecuted instantiation: TLSv1_2_server_method Unexecuted instantiation: TLSv1_1_server_method Unexecuted instantiation: TLSv1_server_method |
903 | | |
904 | | # define IMPLEMENT_ssl3_meth_func(func_name, s_accept, s_connect, s_get_meth) \ |
905 | | const SSL_METHOD *func_name(void) \ |
906 | 0 | { \ |
907 | 0 | static const SSL_METHOD func_name##_data= { \ |
908 | 0 | SSL3_VERSION, \ |
909 | 0 | ssl3_new, \ |
910 | 0 | ssl3_clear, \ |
911 | 0 | ssl3_free, \ |
912 | 0 | s_accept, \ |
913 | 0 | s_connect, \ |
914 | 0 | ssl3_read, \ |
915 | 0 | ssl3_peek, \ |
916 | 0 | ssl3_write, \ |
917 | 0 | ssl3_shutdown, \ |
918 | 0 | ssl3_renegotiate, \ |
919 | 0 | ssl3_renegotiate_check, \ |
920 | 0 | ssl3_get_message, \ |
921 | 0 | ssl3_read_bytes, \ |
922 | 0 | ssl3_write_bytes, \ |
923 | 0 | ssl3_dispatch_alert, \ |
924 | 0 | ssl3_ctrl, \ |
925 | 0 | ssl3_ctx_ctrl, \ |
926 | 0 | ssl3_get_cipher_by_char, \ |
927 | 0 | ssl3_put_cipher_by_char, \ |
928 | 0 | ssl3_pending, \ |
929 | 0 | ssl3_num_ciphers, \ |
930 | 0 | ssl3_get_cipher, \ |
931 | 0 | s_get_meth, \ |
932 | 0 | ssl3_default_timeout, \ |
933 | 0 | &SSLv3_enc_data, \ |
934 | 0 | ssl_undefined_void_function, \ |
935 | 0 | ssl3_callback_ctrl, \ |
936 | 0 | ssl3_ctx_callback_ctrl, \ |
937 | 0 | }; \ |
938 | 0 | return &func_name##_data; \ |
939 | 0 | } Unexecuted instantiation: SSLv3_client_method Unexecuted instantiation: SSLv3_method Unexecuted instantiation: SSLv3_server_method |
940 | | |
941 | | # define IMPLEMENT_ssl23_meth_func(func_name, s_accept, s_connect, s_get_meth) \ |
942 | | const SSL_METHOD *func_name(void) \ |
943 | 1.24k | { \ |
944 | 1.24k | static const SSL_METHOD func_name##_data= { \ |
945 | 1.24k | TLS1_2_VERSION, \ |
946 | 1.24k | tls1_new, \ |
947 | 1.24k | tls1_clear, \ |
948 | 1.24k | tls1_free, \ |
949 | 1.24k | s_accept, \ |
950 | 1.24k | s_connect, \ |
951 | 1.24k | ssl23_read, \ |
952 | 1.24k | ssl23_peek, \ |
953 | 1.24k | ssl23_write, \ |
954 | 1.24k | ssl_undefined_function, \ |
955 | 1.24k | ssl_undefined_function, \ |
956 | 1.24k | ssl_ok, \ |
957 | 1.24k | ssl3_get_message, \ |
958 | 1.24k | ssl3_read_bytes, \ |
959 | 1.24k | ssl3_write_bytes, \ |
960 | 1.24k | ssl3_dispatch_alert, \ |
961 | 1.24k | ssl3_ctrl, \ |
962 | 1.24k | ssl3_ctx_ctrl, \ |
963 | 1.24k | ssl23_get_cipher_by_char, \ |
964 | 1.24k | ssl23_put_cipher_by_char, \ |
965 | 1.24k | ssl_undefined_const_function, \ |
966 | 1.24k | ssl23_num_ciphers, \ |
967 | 1.24k | ssl23_get_cipher, \ |
968 | 1.24k | s_get_meth, \ |
969 | 1.24k | ssl23_default_timeout, \ |
970 | 1.24k | &TLSv1_2_enc_data, \ |
971 | 1.24k | ssl_undefined_void_function, \ |
972 | 1.24k | ssl3_callback_ctrl, \ |
973 | 1.24k | ssl3_ctx_callback_ctrl, \ |
974 | 1.24k | }; \ |
975 | 1.24k | return &func_name##_data; \ |
976 | 1.24k | } Line | Count | Source | 943 | 1.24k | { \ | 944 | 1.24k | static const SSL_METHOD func_name##_data= { \ | 945 | 1.24k | TLS1_2_VERSION, \ | 946 | 1.24k | tls1_new, \ | 947 | 1.24k | tls1_clear, \ | 948 | 1.24k | tls1_free, \ | 949 | 1.24k | s_accept, \ | 950 | 1.24k | s_connect, \ | 951 | 1.24k | ssl23_read, \ | 952 | 1.24k | ssl23_peek, \ | 953 | 1.24k | ssl23_write, \ | 954 | 1.24k | ssl_undefined_function, \ | 955 | 1.24k | ssl_undefined_function, \ | 956 | 1.24k | ssl_ok, \ | 957 | 1.24k | ssl3_get_message, \ | 958 | 1.24k | ssl3_read_bytes, \ | 959 | 1.24k | ssl3_write_bytes, \ | 960 | 1.24k | ssl3_dispatch_alert, \ | 961 | 1.24k | ssl3_ctrl, \ | 962 | 1.24k | ssl3_ctx_ctrl, \ | 963 | 1.24k | ssl23_get_cipher_by_char, \ | 964 | 1.24k | ssl23_put_cipher_by_char, \ | 965 | 1.24k | ssl_undefined_const_function, \ | 966 | 1.24k | ssl23_num_ciphers, \ | 967 | 1.24k | ssl23_get_cipher, \ | 968 | 1.24k | s_get_meth, \ | 969 | 1.24k | ssl23_default_timeout, \ | 970 | 1.24k | &TLSv1_2_enc_data, \ | 971 | 1.24k | ssl_undefined_void_function, \ | 972 | 1.24k | ssl3_callback_ctrl, \ | 973 | 1.24k | ssl3_ctx_callback_ctrl, \ | 974 | 1.24k | }; \ | 975 | 1.24k | return &func_name##_data; \ | 976 | 1.24k | } |
Unexecuted instantiation: SSLv23_method Unexecuted instantiation: SSLv23_server_method |
977 | | |
978 | | # define IMPLEMENT_ssl2_meth_func(func_name, s_accept, s_connect, s_get_meth) \ |
979 | | const SSL_METHOD *func_name(void) \ |
980 | | { \ |
981 | | static const SSL_METHOD func_name##_data= { \ |
982 | | SSL2_VERSION, \ |
983 | | ssl2_new, /* local */ \ |
984 | | ssl2_clear, /* local */ \ |
985 | | ssl2_free, /* local */ \ |
986 | | s_accept, \ |
987 | | s_connect, \ |
988 | | ssl2_read, \ |
989 | | ssl2_peek, \ |
990 | | ssl2_write, \ |
991 | | ssl2_shutdown, \ |
992 | | ssl_ok, /* NULL - renegotiate */ \ |
993 | | ssl_ok, /* NULL - check renegotiate */ \ |
994 | | NULL, /* NULL - ssl_get_message */ \ |
995 | | NULL, /* NULL - ssl_get_record */ \ |
996 | | NULL, /* NULL - ssl_write_bytes */ \ |
997 | | NULL, /* NULL - dispatch_alert */ \ |
998 | | ssl2_ctrl, /* local */ \ |
999 | | ssl2_ctx_ctrl, /* local */ \ |
1000 | | ssl2_get_cipher_by_char, \ |
1001 | | ssl2_put_cipher_by_char, \ |
1002 | | ssl2_pending, \ |
1003 | | ssl2_num_ciphers, \ |
1004 | | ssl2_get_cipher, \ |
1005 | | s_get_meth, \ |
1006 | | ssl2_default_timeout, \ |
1007 | | &ssl3_undef_enc_method, \ |
1008 | | ssl_undefined_void_function, \ |
1009 | | ssl2_callback_ctrl, /* local */ \ |
1010 | | ssl2_ctx_callback_ctrl, /* local */ \ |
1011 | | }; \ |
1012 | | return &func_name##_data; \ |
1013 | | } |
1014 | | |
1015 | | # define IMPLEMENT_dtls1_meth_func(version, func_name, s_accept, s_connect, \ |
1016 | | s_get_meth, enc_data) \ |
1017 | | const SSL_METHOD *func_name(void) \ |
1018 | 0 | { \ |
1019 | 0 | static const SSL_METHOD func_name##_data= { \ |
1020 | 0 | version, \ |
1021 | 0 | dtls1_new, \ |
1022 | 0 | dtls1_clear, \ |
1023 | 0 | dtls1_free, \ |
1024 | 0 | s_accept, \ |
1025 | 0 | s_connect, \ |
1026 | 0 | ssl3_read, \ |
1027 | 0 | ssl3_peek, \ |
1028 | 0 | ssl3_write, \ |
1029 | 0 | dtls1_shutdown, \ |
1030 | 0 | ssl3_renegotiate, \ |
1031 | 0 | ssl3_renegotiate_check, \ |
1032 | 0 | dtls1_get_message, \ |
1033 | 0 | dtls1_read_bytes, \ |
1034 | 0 | dtls1_write_app_data_bytes, \ |
1035 | 0 | dtls1_dispatch_alert, \ |
1036 | 0 | dtls1_ctrl, \ |
1037 | 0 | ssl3_ctx_ctrl, \ |
1038 | 0 | ssl3_get_cipher_by_char, \ |
1039 | 0 | ssl3_put_cipher_by_char, \ |
1040 | 0 | ssl3_pending, \ |
1041 | 0 | ssl3_num_ciphers, \ |
1042 | 0 | dtls1_get_cipher, \ |
1043 | 0 | s_get_meth, \ |
1044 | 0 | dtls1_default_timeout, \ |
1045 | 0 | &enc_data, \ |
1046 | 0 | ssl_undefined_void_function, \ |
1047 | 0 | ssl3_callback_ctrl, \ |
1048 | 0 | ssl3_ctx_callback_ctrl, \ |
1049 | 0 | }; \ |
1050 | 0 | return &func_name##_data; \ |
1051 | 0 | } Unexecuted instantiation: DTLSv1_client_method Unexecuted instantiation: DTLSv1_2_client_method Unexecuted instantiation: DTLS_client_method Unexecuted instantiation: DTLSv1_method Unexecuted instantiation: DTLSv1_2_method Unexecuted instantiation: DTLS_method Unexecuted instantiation: DTLSv1_server_method Unexecuted instantiation: DTLSv1_2_server_method Unexecuted instantiation: DTLS_server_method |
1052 | | |
1053 | | struct openssl_ssl_test_functions { |
1054 | | int (*p_ssl_init_wbio_buffer) (SSL *s, int push); |
1055 | | int (*p_ssl3_setup_buffers) (SSL *s); |
1056 | | int (*p_tls1_process_heartbeat) (SSL *s); |
1057 | | int (*p_dtls1_process_heartbeat) (SSL *s); |
1058 | | }; |
1059 | | |
1060 | | # ifndef OPENSSL_UNIT_TEST |
1061 | | |
1062 | | void ssl_clear_cipher_ctx(SSL *s); |
1063 | | int ssl_clear_bad_session(SSL *s); |
1064 | | CERT *ssl_cert_new(void); |
1065 | | CERT *ssl_cert_dup(CERT *cert); |
1066 | | void ssl_cert_set_default_md(CERT *cert); |
1067 | | int ssl_cert_inst(CERT **o); |
1068 | | void ssl_cert_clear_certs(CERT *c); |
1069 | | void ssl_cert_free(CERT *c); |
1070 | | SESS_CERT *ssl_sess_cert_new(void); |
1071 | | void ssl_sess_cert_free(SESS_CERT *sc); |
1072 | | int ssl_set_peer_cert_type(SESS_CERT *c, int type); |
1073 | | int ssl_get_new_session(SSL *s, int session); |
1074 | | int ssl_get_prev_session(SSL *s, unsigned char *session, int len, |
1075 | | const unsigned char *limit); |
1076 | | SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket); |
1077 | | int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b); |
1078 | | DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id); |
1079 | | int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap, |
1080 | | const SSL_CIPHER *const *bp); |
1081 | | STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, unsigned char *p, |
1082 | | int num, |
1083 | | STACK_OF(SSL_CIPHER) **skp); |
1084 | | int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk, |
1085 | | unsigned char *p, |
1086 | | int (*put_cb) (const SSL_CIPHER *, |
1087 | | unsigned char *)); |
1088 | | STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth, |
1089 | | STACK_OF(SSL_CIPHER) **pref, |
1090 | | STACK_OF(SSL_CIPHER) **sorted, |
1091 | | const char *rule_str, CERT *c); |
1092 | | void ssl_update_cache(SSL *s, int mode); |
1093 | | int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, |
1094 | | const EVP_MD **md, int *mac_pkey_type, |
1095 | | int *mac_secret_size, SSL_COMP **comp); |
1096 | | int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md); |
1097 | | int ssl_cipher_get_cert_index(const SSL_CIPHER *c); |
1098 | | const SSL_CIPHER *ssl_get_cipher_by_char(SSL *ssl, const unsigned char *ptr); |
1099 | | int ssl_cert_set0_chain(CERT *c, STACK_OF(X509) *chain); |
1100 | | int ssl_cert_set1_chain(CERT *c, STACK_OF(X509) *chain); |
1101 | | int ssl_cert_add0_chain_cert(CERT *c, X509 *x); |
1102 | | int ssl_cert_add1_chain_cert(CERT *c, X509 *x); |
1103 | | int ssl_cert_select_current(CERT *c, X509 *x); |
1104 | | int ssl_cert_set_current(CERT *c, long arg); |
1105 | | X509 *ssl_cert_get0_next_certificate(CERT *c, int first); |
1106 | | void ssl_cert_set_cert_cb(CERT *c, int (*cb) (SSL *ssl, void *arg), |
1107 | | void *arg); |
1108 | | |
1109 | | int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk); |
1110 | | int ssl_add_cert_chain(SSL *s, CERT_PKEY *cpk, unsigned long *l); |
1111 | | int ssl_build_cert_chain(CERT *c, X509_STORE *chain_store, int flags); |
1112 | | int ssl_cert_set_cert_store(CERT *c, X509_STORE *store, int chain, int ref); |
1113 | | int ssl_undefined_function(SSL *s); |
1114 | | int ssl_undefined_void_function(void); |
1115 | | int ssl_undefined_const_function(const SSL *s); |
1116 | | CERT_PKEY *ssl_get_server_send_pkey(const SSL *s); |
1117 | | # ifndef OPENSSL_NO_TLSEXT |
1118 | | int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo, |
1119 | | size_t *serverinfo_length); |
1120 | | # endif |
1121 | | EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *c, const EVP_MD **pmd); |
1122 | | int ssl_cert_type(X509 *x, EVP_PKEY *pkey); |
1123 | | void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher); |
1124 | | STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s); |
1125 | | int ssl_verify_alarm_type(long type); |
1126 | | void ssl_load_ciphers(void); |
1127 | | int ssl_fill_hello_random(SSL *s, int server, unsigned char *field, int len); |
1128 | | |
1129 | | int ssl2_enc_init(SSL *s, int client); |
1130 | | int ssl2_generate_key_material(SSL *s); |
1131 | | int ssl2_enc(SSL *s, int send_data); |
1132 | | void ssl2_mac(SSL *s, unsigned char *mac, int send_data); |
1133 | | const SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p); |
1134 | | int ssl2_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p); |
1135 | | int ssl2_part_read(SSL *s, unsigned long f, int i); |
1136 | | int ssl2_do_write(SSL *s); |
1137 | | int ssl2_set_certificate(SSL *s, int type, int len, |
1138 | | const unsigned char *data); |
1139 | | void ssl2_return_error(SSL *s, int reason); |
1140 | | void ssl2_write_error(SSL *s); |
1141 | | int ssl2_num_ciphers(void); |
1142 | | const SSL_CIPHER *ssl2_get_cipher(unsigned int u); |
1143 | | int ssl2_new(SSL *s); |
1144 | | void ssl2_free(SSL *s); |
1145 | | int ssl2_accept(SSL *s); |
1146 | | int ssl2_connect(SSL *s); |
1147 | | int ssl2_read(SSL *s, void *buf, int len); |
1148 | | int ssl2_peek(SSL *s, void *buf, int len); |
1149 | | int ssl2_write(SSL *s, const void *buf, int len); |
1150 | | int ssl2_shutdown(SSL *s); |
1151 | | void ssl2_clear(SSL *s); |
1152 | | long ssl2_ctrl(SSL *s, int cmd, long larg, void *parg); |
1153 | | long ssl2_ctx_ctrl(SSL_CTX *s, int cmd, long larg, void *parg); |
1154 | | long ssl2_callback_ctrl(SSL *s, int cmd, void (*fp) (void)); |
1155 | | long ssl2_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp) (void)); |
1156 | | int ssl2_pending(const SSL *s); |
1157 | | long ssl2_default_timeout(void); |
1158 | | |
1159 | | const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p); |
1160 | | int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p); |
1161 | | int ssl3_init_finished_mac(SSL *s); |
1162 | | int ssl3_send_server_certificate(SSL *s); |
1163 | | int ssl3_send_newsession_ticket(SSL *s); |
1164 | | int ssl3_send_cert_status(SSL *s); |
1165 | | int ssl3_get_finished(SSL *s, int state_a, int state_b); |
1166 | | int ssl3_setup_key_block(SSL *s); |
1167 | | int ssl3_send_change_cipher_spec(SSL *s, int state_a, int state_b); |
1168 | | int ssl3_change_cipher_state(SSL *s, int which); |
1169 | | void ssl3_cleanup_key_block(SSL *s); |
1170 | | int ssl3_do_write(SSL *s, int type); |
1171 | | int ssl3_send_alert(SSL *s, int level, int desc); |
1172 | | int ssl3_generate_master_secret(SSL *s, unsigned char *out, |
1173 | | unsigned char *p, int len); |
1174 | | int ssl3_get_req_cert_type(SSL *s, unsigned char *p); |
1175 | | long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok); |
1176 | | int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen); |
1177 | | int ssl3_num_ciphers(void); |
1178 | | const SSL_CIPHER *ssl3_get_cipher(unsigned int u); |
1179 | | int ssl3_renegotiate(SSL *ssl); |
1180 | | int ssl3_renegotiate_check(SSL *ssl); |
1181 | | int ssl3_dispatch_alert(SSL *s); |
1182 | | int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek); |
1183 | | int ssl3_write_bytes(SSL *s, int type, const void *buf, int len); |
1184 | | int ssl3_final_finish_mac(SSL *s, const char *sender, int slen, |
1185 | | unsigned char *p); |
1186 | | int ssl3_cert_verify_mac(SSL *s, int md_nid, unsigned char *p); |
1187 | | void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len); |
1188 | | int ssl3_enc(SSL *s, int send_data); |
1189 | | int n_ssl3_mac(SSL *ssl, unsigned char *md, int send_data); |
1190 | | void ssl3_free_digest_list(SSL *s); |
1191 | | unsigned long ssl3_output_cert_chain(SSL *s, CERT_PKEY *cpk); |
1192 | | SSL_CIPHER *ssl3_choose_cipher(SSL *ssl, STACK_OF(SSL_CIPHER) *clnt, |
1193 | | STACK_OF(SSL_CIPHER) *srvr); |
1194 | | int ssl3_setup_buffers(SSL *s); |
1195 | | int ssl3_setup_read_buffer(SSL *s); |
1196 | | int ssl3_setup_write_buffer(SSL *s); |
1197 | | int ssl3_release_read_buffer(SSL *s); |
1198 | | int ssl3_release_write_buffer(SSL *s); |
1199 | | int ssl3_digest_cached_records(SSL *s); |
1200 | | int ssl3_new(SSL *s); |
1201 | | void ssl3_free(SSL *s); |
1202 | | int ssl3_accept(SSL *s); |
1203 | | int ssl3_connect(SSL *s); |
1204 | | int ssl3_read(SSL *s, void *buf, int len); |
1205 | | int ssl3_peek(SSL *s, void *buf, int len); |
1206 | | int ssl3_write(SSL *s, const void *buf, int len); |
1207 | | int ssl3_shutdown(SSL *s); |
1208 | | void ssl3_clear(SSL *s); |
1209 | | long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg); |
1210 | | long ssl3_ctx_ctrl(SSL_CTX *s, int cmd, long larg, void *parg); |
1211 | | long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void)); |
1212 | | long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp) (void)); |
1213 | | int ssl3_pending(const SSL *s); |
1214 | | |
1215 | | void ssl3_record_sequence_update(unsigned char *seq); |
1216 | | int ssl3_do_change_cipher_spec(SSL *ssl); |
1217 | | long ssl3_default_timeout(void); |
1218 | | |
1219 | | void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len); |
1220 | | int ssl3_handshake_write(SSL *s); |
1221 | | |
1222 | | int ssl23_num_ciphers(void); |
1223 | | const SSL_CIPHER *ssl23_get_cipher(unsigned int u); |
1224 | | int ssl23_read(SSL *s, void *buf, int len); |
1225 | | int ssl23_peek(SSL *s, void *buf, int len); |
1226 | | int ssl23_write(SSL *s, const void *buf, int len); |
1227 | | int ssl23_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p); |
1228 | | const SSL_CIPHER *ssl23_get_cipher_by_char(const unsigned char *p); |
1229 | | long ssl23_default_timeout(void); |
1230 | | |
1231 | | long tls1_default_timeout(void); |
1232 | | int dtls1_do_write(SSL *s, int type); |
1233 | | int ssl3_read_n(SSL *s, int n, int max, int extend); |
1234 | | int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek); |
1235 | | int ssl3_do_compress(SSL *ssl); |
1236 | | int ssl3_do_uncompress(SSL *ssl); |
1237 | | int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, |
1238 | | unsigned int len); |
1239 | | unsigned char *dtls1_set_message_header(SSL *s, |
1240 | | unsigned char *p, unsigned char mt, |
1241 | | unsigned long len, |
1242 | | unsigned long frag_off, |
1243 | | unsigned long frag_len); |
1244 | | |
1245 | | int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf, int len); |
1246 | | int dtls1_write_bytes(SSL *s, int type, const void *buf, int len); |
1247 | | |
1248 | | int dtls1_send_change_cipher_spec(SSL *s, int a, int b); |
1249 | | int dtls1_read_failed(SSL *s, int code); |
1250 | | int dtls1_buffer_message(SSL *s, int ccs); |
1251 | | int dtls1_retransmit_message(SSL *s, unsigned short seq, |
1252 | | unsigned long frag_off, int *found); |
1253 | | int dtls1_get_queue_priority(unsigned short seq, int is_ccs); |
1254 | | int dtls1_retransmit_buffered_messages(SSL *s); |
1255 | | void dtls1_clear_received_buffer(SSL *s); |
1256 | | void dtls1_clear_sent_buffer(SSL *s); |
1257 | | void dtls1_get_message_header(unsigned char *data, |
1258 | | struct hm_header_st *msg_hdr); |
1259 | | void dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr); |
1260 | | void dtls1_reset_seq_numbers(SSL *s, int rw); |
1261 | | long dtls1_default_timeout(void); |
1262 | | struct timeval *dtls1_get_timeout(SSL *s, struct timeval *timeleft); |
1263 | | int dtls1_check_timeout_num(SSL *s); |
1264 | | int dtls1_handle_timeout(SSL *s); |
1265 | | const SSL_CIPHER *dtls1_get_cipher(unsigned int u); |
1266 | | void dtls1_start_timer(SSL *s); |
1267 | | void dtls1_stop_timer(SSL *s); |
1268 | | int dtls1_is_timer_expired(SSL *s); |
1269 | | void dtls1_double_timeout(SSL *s); |
1270 | | int dtls1_send_newsession_ticket(SSL *s); |
1271 | | unsigned int dtls1_min_mtu(SSL *s); |
1272 | | unsigned int dtls1_link_min_mtu(void); |
1273 | | void dtls1_hm_fragment_free(hm_fragment *frag); |
1274 | | |
1275 | | /* some client-only functions */ |
1276 | | int ssl3_client_hello(SSL *s); |
1277 | | int ssl3_get_server_hello(SSL *s); |
1278 | | int ssl3_get_certificate_request(SSL *s); |
1279 | | int ssl3_get_new_session_ticket(SSL *s); |
1280 | | int ssl3_get_cert_status(SSL *s); |
1281 | | int ssl3_get_server_done(SSL *s); |
1282 | | int ssl3_send_client_verify(SSL *s); |
1283 | | int ssl3_send_client_certificate(SSL *s); |
1284 | | int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey); |
1285 | | int ssl3_send_client_key_exchange(SSL *s); |
1286 | | int ssl3_get_key_exchange(SSL *s); |
1287 | | int ssl3_get_server_certificate(SSL *s); |
1288 | | int ssl3_check_cert_and_algorithm(SSL *s); |
1289 | | # ifndef OPENSSL_NO_TLSEXT |
1290 | | # ifndef OPENSSL_NO_NEXTPROTONEG |
1291 | | int ssl3_send_next_proto(SSL *s); |
1292 | | # endif |
1293 | | # endif |
1294 | | |
1295 | | int dtls1_client_hello(SSL *s); |
1296 | | |
1297 | | /* some server-only functions */ |
1298 | | int ssl3_get_client_hello(SSL *s); |
1299 | | int ssl3_send_server_hello(SSL *s); |
1300 | | int ssl3_send_hello_request(SSL *s); |
1301 | | int ssl3_send_server_key_exchange(SSL *s); |
1302 | | int ssl3_send_certificate_request(SSL *s); |
1303 | | int ssl3_send_server_done(SSL *s); |
1304 | | int ssl3_get_client_certificate(SSL *s); |
1305 | | int ssl3_get_client_key_exchange(SSL *s); |
1306 | | int ssl3_get_cert_verify(SSL *s); |
1307 | | # ifndef OPENSSL_NO_NEXTPROTONEG |
1308 | | int ssl3_get_next_proto(SSL *s); |
1309 | | # endif |
1310 | | |
1311 | | int ssl23_accept(SSL *s); |
1312 | | int ssl23_connect(SSL *s); |
1313 | | int ssl23_read_bytes(SSL *s, int n); |
1314 | | int ssl23_write_bytes(SSL *s); |
1315 | | |
1316 | | int tls1_new(SSL *s); |
1317 | | void tls1_free(SSL *s); |
1318 | | void tls1_clear(SSL *s); |
1319 | | long tls1_ctrl(SSL *s, int cmd, long larg, void *parg); |
1320 | | long tls1_callback_ctrl(SSL *s, int cmd, void (*fp) (void)); |
1321 | | |
1322 | | int dtls1_new(SSL *s); |
1323 | | int dtls1_accept(SSL *s); |
1324 | | int dtls1_connect(SSL *s); |
1325 | | void dtls1_free(SSL *s); |
1326 | | void dtls1_clear(SSL *s); |
1327 | | long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg); |
1328 | | int dtls1_shutdown(SSL *s); |
1329 | | |
1330 | | long dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok); |
1331 | | int dtls1_get_record(SSL *s); |
1332 | | int do_dtls1_write(SSL *s, int type, const unsigned char *buf, |
1333 | | unsigned int len, int create_empty_fragement); |
1334 | | int dtls1_dispatch_alert(SSL *s); |
1335 | | |
1336 | | int ssl_init_wbio_buffer(SSL *s, int push); |
1337 | | void ssl_free_wbio_buffer(SSL *s); |
1338 | | |
1339 | | int tls1_change_cipher_state(SSL *s, int which); |
1340 | | int tls1_setup_key_block(SSL *s); |
1341 | | int tls1_enc(SSL *s, int snd); |
1342 | | int tls1_final_finish_mac(SSL *s, |
1343 | | const char *str, int slen, unsigned char *p); |
1344 | | int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *p); |
1345 | | int tls1_mac(SSL *ssl, unsigned char *md, int snd); |
1346 | | int tls1_generate_master_secret(SSL *s, unsigned char *out, |
1347 | | unsigned char *p, int len); |
1348 | | int tls1_export_keying_material(SSL *s, unsigned char *out, size_t olen, |
1349 | | const char *label, size_t llen, |
1350 | | const unsigned char *p, size_t plen, |
1351 | | int use_context); |
1352 | | int tls1_alert_code(int code); |
1353 | | int ssl3_alert_code(int code); |
1354 | | int ssl_ok(SSL *s); |
1355 | | |
1356 | | # ifndef OPENSSL_NO_ECDH |
1357 | | int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s); |
1358 | | # endif |
1359 | | |
1360 | | SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n); |
1361 | | |
1362 | | # ifndef OPENSSL_NO_EC |
1363 | | int tls1_ec_curve_id2nid(int curve_id); |
1364 | | int tls1_ec_nid2curve_id(int nid); |
1365 | | int tls1_check_curve(SSL *s, const unsigned char *p, size_t len); |
1366 | | int tls1_shared_curve(SSL *s, int nmatch); |
1367 | | int tls1_set_curves(unsigned char **pext, size_t *pextlen, |
1368 | | int *curves, size_t ncurves); |
1369 | | int tls1_set_curves_list(unsigned char **pext, size_t *pextlen, |
1370 | | const char *str); |
1371 | | # ifndef OPENSSL_NO_ECDH |
1372 | | int tls1_check_ec_tmp_key(SSL *s, unsigned long id); |
1373 | | # endif /* OPENSSL_NO_ECDH */ |
1374 | | # endif /* OPENSSL_NO_EC */ |
1375 | | |
1376 | | # ifndef OPENSSL_NO_TLSEXT |
1377 | | int tls1_shared_list(SSL *s, |
1378 | | const unsigned char *l1, size_t l1len, |
1379 | | const unsigned char *l2, size_t l2len, int nmatch); |
1380 | | unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf, |
1381 | | unsigned char *limit, int *al); |
1382 | | unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf, |
1383 | | unsigned char *limit, int *al); |
1384 | | int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, |
1385 | | unsigned char *limit); |
1386 | | int tls1_set_server_sigalgs(SSL *s); |
1387 | | int ssl_check_clienthello_tlsext_late(SSL *s, int *al); |
1388 | | int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, |
1389 | | unsigned char *d, int n); |
1390 | | int ssl_prepare_clienthello_tlsext(SSL *s); |
1391 | | int ssl_prepare_serverhello_tlsext(SSL *s); |
1392 | | |
1393 | | # ifndef OPENSSL_NO_HEARTBEATS |
1394 | | int tls1_heartbeat(SSL *s); |
1395 | | int dtls1_heartbeat(SSL *s); |
1396 | | int tls1_process_heartbeat(SSL *s); |
1397 | | int dtls1_process_heartbeat(SSL *s); |
1398 | | # endif |
1399 | | |
1400 | | # ifdef OPENSSL_NO_SHA256 |
1401 | | # define tlsext_tick_md EVP_sha1 |
1402 | | # else |
1403 | 0 | # define tlsext_tick_md EVP_sha256 |
1404 | | # endif |
1405 | | int tls1_process_ticket(SSL *s, unsigned char *session_id, int len, |
1406 | | const unsigned char *limit, SSL_SESSION **ret); |
1407 | | |
1408 | | int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, |
1409 | | const EVP_MD *md); |
1410 | | int tls12_get_sigid(const EVP_PKEY *pk); |
1411 | | const EVP_MD *tls12_get_hash(unsigned char hash_alg); |
1412 | | |
1413 | | int tls1_set_sigalgs_list(CERT *c, const char *str, int client); |
1414 | | int tls1_set_sigalgs(CERT *c, const int *salg, size_t salglen, int client); |
1415 | | int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain, |
1416 | | int idx); |
1417 | | void tls1_set_cert_validity(SSL *s); |
1418 | | |
1419 | | # endif |
1420 | | EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md); |
1421 | | void ssl_clear_hash_ctx(EVP_MD_CTX **hash); |
1422 | | int ssl_add_serverhello_renegotiate_ext(SSL *s, unsigned char *p, int *len, |
1423 | | int maxlen); |
1424 | | int ssl_parse_serverhello_renegotiate_ext(SSL *s, unsigned char *d, int len, |
1425 | | int *al); |
1426 | | int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, int *len, |
1427 | | int maxlen); |
1428 | | int ssl_parse_clienthello_renegotiate_ext(SSL *s, unsigned char *d, int len, |
1429 | | int *al); |
1430 | | long ssl_get_algorithm2(SSL *s); |
1431 | | int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize); |
1432 | | int tls1_process_sigalgs(SSL *s); |
1433 | | size_t tls12_get_psigalgs(SSL *s, int sent, const unsigned char **psigs); |
1434 | | int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s, |
1435 | | const unsigned char *sig, EVP_PKEY *pkey); |
1436 | | void ssl_set_client_disabled(SSL *s); |
1437 | | |
1438 | | int ssl_add_clienthello_use_srtp_ext(SSL *s, unsigned char *p, int *len, |
1439 | | int maxlen); |
1440 | | int ssl_parse_clienthello_use_srtp_ext(SSL *s, unsigned char *d, int len, |
1441 | | int *al); |
1442 | | int ssl_add_serverhello_use_srtp_ext(SSL *s, unsigned char *p, int *len, |
1443 | | int maxlen); |
1444 | | int ssl_parse_serverhello_use_srtp_ext(SSL *s, unsigned char *d, int len, |
1445 | | int *al); |
1446 | | |
1447 | | /* s3_cbc.c */ |
1448 | | void ssl3_cbc_copy_mac(unsigned char *out, |
1449 | | const SSL3_RECORD *rec, |
1450 | | unsigned md_size, unsigned orig_len); |
1451 | | int ssl3_cbc_remove_padding(const SSL *s, |
1452 | | SSL3_RECORD *rec, |
1453 | | unsigned block_size, unsigned mac_size); |
1454 | | int tls1_cbc_remove_padding(const SSL *s, |
1455 | | SSL3_RECORD *rec, |
1456 | | unsigned block_size, unsigned mac_size); |
1457 | | char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx); |
1458 | | int ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, |
1459 | | unsigned char *md_out, |
1460 | | size_t *md_out_size, |
1461 | | const unsigned char header[13], |
1462 | | const unsigned char *data, |
1463 | | size_t data_plus_mac_size, |
1464 | | size_t data_plus_mac_plus_padding_size, |
1465 | | const unsigned char *mac_secret, |
1466 | | unsigned mac_secret_length, char is_sslv3); |
1467 | | |
1468 | | void tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx, |
1469 | | EVP_MD_CTX *mac_ctx, const unsigned char *data, |
1470 | | size_t data_len, size_t orig_len); |
1471 | | |
1472 | | int srp_verify_server_param(SSL *s, int *al); |
1473 | | |
1474 | | /* t1_ext.c */ |
1475 | | |
1476 | | void custom_ext_init(custom_ext_methods *meths); |
1477 | | |
1478 | | int custom_ext_parse(SSL *s, int server, |
1479 | | unsigned int ext_type, |
1480 | | const unsigned char *ext_data, size_t ext_size, int *al); |
1481 | | int custom_ext_add(SSL *s, int server, |
1482 | | unsigned char **pret, unsigned char *limit, int *al); |
1483 | | |
1484 | | int custom_exts_copy(custom_ext_methods *dst, const custom_ext_methods *src); |
1485 | | int custom_exts_copy_flags(custom_ext_methods *dst, |
1486 | | const custom_ext_methods *src); |
1487 | | void custom_exts_free(custom_ext_methods *exts); |
1488 | | |
1489 | | # else |
1490 | | |
1491 | | # define ssl_init_wbio_buffer SSL_test_functions()->p_ssl_init_wbio_buffer |
1492 | | # define ssl3_setup_buffers SSL_test_functions()->p_ssl3_setup_buffers |
1493 | | # define tls1_process_heartbeat SSL_test_functions()->p_tls1_process_heartbeat |
1494 | | # define dtls1_process_heartbeat SSL_test_functions()->p_dtls1_process_heartbeat |
1495 | | |
1496 | | # endif |
1497 | | #endif |