]> git.ipfire.org Git - thirdparty/openssl.git/blame - ssl/ssl_locl.h
Remove the type variable
[thirdparty/openssl.git] / ssl / ssl_locl.h
CommitLineData
d02b48c6 1/* ssl/ssl_locl.h */
58964a49 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
d02b48c6
RE
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.
0f113f3e 8 *
d02b48c6
RE
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).
0f113f3e 15 *
d02b48c6
RE
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.
0f113f3e 22 *
d02b48c6
RE
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 :-).
0f113f3e 37 * 4. If you include any Windows specific code (or a derivative thereof) from
d02b48c6
RE
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
0f113f3e 40 *
d02b48c6
RE
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.
0f113f3e 52 *
d02b48c6
RE
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 */
5a4fbc69 58/* ====================================================================
52b8dad8 59 * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
5a4fbc69
BM
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
0f113f3e 66 * notice, this list of conditions and the following disclaimer.
5a4fbc69
BM
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 */
ea262260
BM
111/* ====================================================================
112 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
0f113f3e 113 * ECC cipher suite support in OpenSSL originally developed by
ea262260
BM
114 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
115 */
ddac1974
NL
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 */
d02b48c6
RE
142
143#ifndef HEADER_SSL_LOCL_H
0f113f3e
MC
144# define HEADER_SSL_LOCL_H
145# include <stdlib.h>
146# include <time.h>
147# include <string.h>
148# include <errno.h>
d02b48c6 149
0f113f3e 150# include "e_os.h"
d02b48c6 151
0f113f3e
MC
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>
d02b48c6 167
c99c4c11 168#include "record/record.h"
7e729bb5 169#include "packet_locl.h"
52e1d7b1 170
0f113f3e
MC
171# ifdef OPENSSL_BUILD_SHLIBSSL
172# undef OPENSSL_EXTERN
173# define OPENSSL_EXTERN OPENSSL_EXPORT
174# endif
26da3e65 175
0f113f3e 176# undef PKCS1_CHECK
d02b48c6 177
0f113f3e
MC
178# define c2l(c,l) (l = ((unsigned long)(*((c)++))) , \
179 l|=(((unsigned long)(*((c)++)))<< 8), \
180 l|=(((unsigned long)(*((c)++)))<<16), \
181 l|=(((unsigned long)(*((c)++)))<<24))
d02b48c6
RE
182
183/* NOTE - c is not incremented as per c2l */
0f113f3e
MC
184# define c2ln(c,l1,l2,n) { \
185 c+=n; \
186 l1=l2=0; \
187 switch (n) { \
188 case 8: l2 =((unsigned long)(*(--(c))))<<24; \
189 case 7: l2|=((unsigned long)(*(--(c))))<<16; \
190 case 6: l2|=((unsigned long)(*(--(c))))<< 8; \
191 case 5: l2|=((unsigned long)(*(--(c)))); \
192 case 4: l1 =((unsigned long)(*(--(c))))<<24; \
193 case 3: l1|=((unsigned long)(*(--(c))))<<16; \
194 case 2: l1|=((unsigned long)(*(--(c))))<< 8; \
195 case 1: l1|=((unsigned long)(*(--(c)))); \
196 } \
197 }
198
199# define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
200 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
201 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
202 *((c)++)=(unsigned char)(((l)>>24)&0xff))
203
204# define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24, \
205 l|=((unsigned long)(*((c)++)))<<16, \
206 l|=((unsigned long)(*((c)++)))<< 8, \
207 l|=((unsigned long)(*((c)++))))
208
209# define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
210 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
211 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
212 *((c)++)=(unsigned char)(((l) )&0xff))
213
214# define l2n6(l,c) (*((c)++)=(unsigned char)(((l)>>40)&0xff), \
215 *((c)++)=(unsigned char)(((l)>>32)&0xff), \
216 *((c)++)=(unsigned char)(((l)>>24)&0xff), \
217 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
218 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
219 *((c)++)=(unsigned char)(((l) )&0xff))
220
221# define l2n8(l,c) (*((c)++)=(unsigned char)(((l)>>56)&0xff), \
222 *((c)++)=(unsigned char)(((l)>>48)&0xff), \
223 *((c)++)=(unsigned char)(((l)>>40)&0xff), \
224 *((c)++)=(unsigned char)(((l)>>32)&0xff), \
225 *((c)++)=(unsigned char)(((l)>>24)&0xff), \
226 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
227 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
228 *((c)++)=(unsigned char)(((l) )&0xff))
229
230# define n2l6(c,l) (l =((BN_ULLONG)(*((c)++)))<<40, \
231 l|=((BN_ULLONG)(*((c)++)))<<32, \
232 l|=((BN_ULLONG)(*((c)++)))<<24, \
233 l|=((BN_ULLONG)(*((c)++)))<<16, \
234 l|=((BN_ULLONG)(*((c)++)))<< 8, \
235 l|=((BN_ULLONG)(*((c)++))))
36d16f8e 236
d02b48c6 237/* NOTE - c is not incremented as per l2c */
0f113f3e
MC
238# define l2cn(l1,l2,c,n) { \
239 c+=n; \
240 switch (n) { \
241 case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
242 case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
243 case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
244 case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
245 case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
246 case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
247 case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
248 case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
249 } \
250 }
251
252# define n2s(c,s) ((s=(((unsigned int)(c[0]))<< 8)| \
253 (((unsigned int)(c[1])) )),c+=2)
254# define s2n(s,c) ((c[0]=(unsigned char)(((s)>> 8)&0xff), \
255 c[1]=(unsigned char)(((s) )&0xff)),c+=2)
256
257# define n2l3(c,l) ((l =(((unsigned long)(c[0]))<<16)| \
258 (((unsigned long)(c[1]))<< 8)| \
259 (((unsigned long)(c[2])) )),c+=3)
260
261# define l2n3(l,c) ((c[0]=(unsigned char)(((l)>>16)&0xff), \
262 c[1]=(unsigned char)(((l)>> 8)&0xff), \
263 c[2]=(unsigned char)(((l) )&0xff)),c+=3)
d02b48c6
RE
264
265/* LOCAL STUFF */
266
0f113f3e
MC
267# define SSL_DECRYPT 0
268# define SSL_ENCRYPT 1
d02b48c6 269
0f113f3e
MC
270# define TWO_BYTE_BIT 0x80
271# define SEC_ESC_BIT 0x40
272# define TWO_BYTE_MASK 0x7fff
273# define THREE_BYTE_MASK 0x3fff
d02b48c6 274
0f113f3e
MC
275# define INC32(a) ((a)=((a)+1)&0xffffffffL)
276# define DEC32(a) ((a)=((a)-1)&0xffffffffL)
277# define MAX_MAC_SIZE 20 /* up from 16 for SSLv3 */
d02b48c6 278
018e57c7
DSH
279/*
280 * Define the Bitmasks for SSL_CIPHER.algorithms.
281 * This bits are used packed as dense as possible. If new methods/ciphers
282 * etc will be added, the bits a likely to change, so this information
283 * is for internal library use only, even though SSL_CIPHER.algorithms
284 * can be publicly accessed.
285 * Use the according functions for cipher management instead.
286 *
657e60fa 287 * The bit mask handling in the selection and sorting scheme in
018e57c7 288 * ssl_create_cipher_list() has only limited capabilities, reflecting
657e60fa 289 * that the different entities within are mutually exclusive:
018e57c7
DSH
290 * ONLY ONE BIT PER MASK CAN BE SET AT A TIME.
291 */
52b8dad8
BM
292
293/* Bits for algorithm_mkey (key exchange algorithm) */
68d39f3c 294/* RSA key exchange */
0f113f3e 295# define SSL_kRSA 0x00000001L
68d39f3c 296/* DH cert, RSA CA cert */
0f113f3e 297# define SSL_kDHr 0x00000002L
68d39f3c 298/* DH cert, DSA CA cert */
0f113f3e 299# define SSL_kDHd 0x00000004L
68d39f3c 300/* tmp DH key no DH cert */
0f113f3e 301# define SSL_kDHE 0x00000008L
68d39f3c 302/* synonym */
0f113f3e 303# define SSL_kEDH SSL_kDHE
68d39f3c 304/* ECDH cert, RSA CA cert */
0f113f3e 305# define SSL_kECDHr 0x00000020L
68d39f3c 306/* ECDH cert, ECDSA CA cert */
0f113f3e 307# define SSL_kECDHe 0x00000040L
68d39f3c 308/* ephemeral ECDH */
0f113f3e 309# define SSL_kECDHE 0x00000080L
68d39f3c 310/* synonym */
0f113f3e 311# define SSL_kEECDH SSL_kECDHE
68d39f3c 312/* PSK */
0f113f3e 313# define SSL_kPSK 0x00000100L
68d39f3c 314/* GOST key exchange */
0f113f3e 315# define SSL_kGOST 0x00000200L
68d39f3c 316/* SRP */
0f113f3e 317# define SSL_kSRP 0x00000400L
52b8dad8 318
64651d39
DSH
319# define SSL_kRSAPSK 0x00000800L
320# define SSL_kECDHEPSK 0x00001000L
321# define SSL_kDHEPSK 0x00002000L
322
323/* all PSK */
324
325#define SSL_PSK (SSL_kPSK | SSL_kRSAPSK | SSL_kECDHEPSK | SSL_kDHEPSK)
326
52b8dad8 327/* Bits for algorithm_auth (server authentication) */
68d39f3c 328/* RSA auth */
0f113f3e 329# define SSL_aRSA 0x00000001L
68d39f3c 330/* DSS auth */
0f113f3e 331# define SSL_aDSS 0x00000002L
68d39f3c 332/* no auth (i.e. use ADH or AECDH) */
0f113f3e 333# define SSL_aNULL 0x00000004L
68d39f3c 334/* Fixed DH auth (kDHd or kDHr) */
0f113f3e 335# define SSL_aDH 0x00000008L
68d39f3c 336/* Fixed ECDH auth (kECDHe or kECDHr) */
0f113f3e 337# define SSL_aECDH 0x00000010L
68d39f3c 338/* ECDSA auth*/
0f113f3e 339# define SSL_aECDSA 0x00000040L
68d39f3c 340/* PSK auth */
0f113f3e 341# define SSL_aPSK 0x00000080L
68d39f3c 342/* GOST R 34.10-2001 signature auth */
0f113f3e 343# define SSL_aGOST01 0x00000200L
68d39f3c 344/* SRP auth */
0f113f3e 345# define SSL_aSRP 0x00000400L
52b8dad8
BM
346
347/* Bits for algorithm_enc (symmetric encryption) */
0f113f3e
MC
348# define SSL_DES 0x00000001L
349# define SSL_3DES 0x00000002L
350# define SSL_RC4 0x00000004L
351# define SSL_RC2 0x00000008L
352# define SSL_IDEA 0x00000010L
353# define SSL_eNULL 0x00000020L
354# define SSL_AES128 0x00000040L
355# define SSL_AES256 0x00000080L
356# define SSL_CAMELLIA128 0x00000100L
357# define SSL_CAMELLIA256 0x00000200L
358# define SSL_eGOST2814789CNT 0x00000400L
359# define SSL_SEED 0x00000800L
360# define SSL_AES128GCM 0x00001000L
361# define SSL_AES256GCM 0x00002000L
e75c5a79
DSH
362# define SSL_AES128CCM 0x00004000L
363# define SSL_AES256CCM 0x00008000L
3d3701ea
DSH
364# define SSL_AES128CCM8 0x00010000L
365# define SSL_AES256CCM8 0x00020000L
0f113f3e 366
3d3701ea 367# define SSL_AES (SSL_AES128|SSL_AES256|SSL_AES128GCM|SSL_AES256GCM|SSL_AES128CCM|SSL_AES256CCM|SSL_AES128CCM8|SSL_AES256CCM8)
0f113f3e 368# define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256)
52b8dad8
BM
369
370/* Bits for algorithm_mac (symmetric authentication) */
28dd49fa 371
0f113f3e
MC
372# define SSL_MD5 0x00000001L
373# define SSL_SHA1 0x00000002L
374# define SSL_GOST94 0x00000004L
375# define SSL_GOST89MAC 0x00000008L
376# define SSL_SHA256 0x00000010L
377# define SSL_SHA384 0x00000020L
28dd49fa 378/* Not a real MAC, just an indication it is part of cipher */
0f113f3e 379# define SSL_AEAD 0x00000040L
52b8dad8
BM
380
381/* Bits for algorithm_ssl (protocol version) */
0f113f3e
MC
382# define SSL_SSLV3 0x00000002L
383# define SSL_TLSV1 SSL_SSLV3/* for now */
384# define SSL_TLSV1_2 0x00000004L
761772d7
BM
385
386/* Bits for algorithm2 (handshake digests and other extra flags) */
81025661 387
0f113f3e
MC
388# define SSL_HANDSHAKE_MAC_MD5 0x10
389# define SSL_HANDSHAKE_MAC_SHA 0x20
390# define SSL_HANDSHAKE_MAC_GOST94 0x40
391# define SSL_HANDSHAKE_MAC_SHA256 0x80
392# define SSL_HANDSHAKE_MAC_SHA384 0x100
393# define SSL_HANDSHAKE_MAC_DEFAULT (SSL_HANDSHAKE_MAC_MD5 | SSL_HANDSHAKE_MAC_SHA)
81025661 394
0f113f3e
MC
395/*
396 * When adding new digest in the ssl_ciph.c and increment SSM_MD_NUM_IDX make
397 * sure to update this constant too
398 */
399# define SSL_MAX_DIGEST 6
761772d7 400
0f113f3e
MC
401# define TLS1_PRF_DGST_SHIFT 10
402# define TLS1_PRF_MD5 (SSL_HANDSHAKE_MAC_MD5 << TLS1_PRF_DGST_SHIFT)
403# define TLS1_PRF_SHA1 (SSL_HANDSHAKE_MAC_SHA << TLS1_PRF_DGST_SHIFT)
404# define TLS1_PRF_SHA256 (SSL_HANDSHAKE_MAC_SHA256 << TLS1_PRF_DGST_SHIFT)
405# define TLS1_PRF_SHA384 (SSL_HANDSHAKE_MAC_SHA384 << TLS1_PRF_DGST_SHIFT)
406# define TLS1_PRF_GOST94 (SSL_HANDSHAKE_MAC_GOST94 << TLS1_PRF_DGST_SHIFT)
407# define TLS1_PRF (TLS1_PRF_MD5 | TLS1_PRF_SHA1)
761772d7 408
0f113f3e
MC
409/*
410 * Stream MAC for GOST ciphersuites from cryptopro draft (currently this also
411 * goes into algorithm2)
412 */
413# define TLS1_STREAM_MAC 0x04
761772d7 414
018e57c7 415/*
657e60fa 416 * Export and cipher strength information. For each cipher we have to decide
018e57c7
DSH
417 * whether it is exportable or not. This information is likely to change
418 * over time, since the export control rules are no static technical issue.
419 *
420 * Independent of the export flag the cipher strength is sorted into classes.
421 * SSL_EXP40 was denoting the 40bit US export limit of past times, which now
422 * is at 56bit (SSL_EXP56). If the exportable cipher class is going to change
657e60fa 423 * again (eg. to 64bit) the use of "SSL_EXP*" becomes blurred even more,
018e57c7
DSH
424 * since SSL_EXP64 could be similar to SSL_LOW.
425 * For this reason SSL_MICRO and SSL_MINI macros are included to widen the
426 * namespace of SSL_LOW-SSL_HIGH to lower values. As development of speed
427 * and ciphers goes, another extension to SSL_SUPER and/or SSL_ULTRA would
428 * be possible.
429 */
0f113f3e
MC
430# define SSL_EXP_MASK 0x00000003L
431# define SSL_STRONG_MASK 0x000001fcL
c84f7f4a 432# define SSL_DEFAULT_MASK 0X00000200L
0f113f3e
MC
433
434# define SSL_NOT_EXP 0x00000001L
435# define SSL_EXPORT 0x00000002L
436
437# define SSL_STRONG_NONE 0x00000004L
438# define SSL_EXP40 0x00000008L
439# define SSL_MICRO (SSL_EXP40)
440# define SSL_EXP56 0x00000010L
441# define SSL_MINI (SSL_EXP56)
442# define SSL_LOW 0x00000020L
443# define SSL_MEDIUM 0x00000040L
444# define SSL_HIGH 0x00000080L
445# define SSL_FIPS 0x00000100L
018e57c7 446
c84f7f4a
MC
447# define SSL_NOT_DEFAULT 0x00000200L
448
449/* we have used 000003ff - 22 bits left to go */
018e57c7 450
1d97c843 451/*-
018e57c7
DSH
452 * Macros to check the export status and cipher strength for export ciphers.
453 * Even though the macros for EXPORT and EXPORT40/56 have similar names,
454 * their meaning is different:
455 * *_EXPORT macros check the 'exportable' status.
456 * *_EXPORT40/56 macros are used to check whether a certain cipher strength
457 * is given.
458 * Since the SSL_IS_EXPORT* and SSL_EXPORT* macros depend on the correct
459 * algorithm structure element to be passed (algorithms, algo_strength) and no
460 * typechecking can be done as they are all of type unsigned long, their
461 * direct usage is discouraged.
462 * Use the SSL_C_* macros instead.
463 */
0f113f3e
MC
464# define SSL_IS_EXPORT(a) ((a)&SSL_EXPORT)
465# define SSL_IS_EXPORT56(a) ((a)&SSL_EXP56)
466# define SSL_IS_EXPORT40(a) ((a)&SSL_EXP40)
467# define SSL_C_IS_EXPORT(c) SSL_IS_EXPORT((c)->algo_strength)
468# define SSL_C_IS_EXPORT56(c) SSL_IS_EXPORT56((c)->algo_strength)
469# define SSL_C_IS_EXPORT40(c) SSL_IS_EXPORT40((c)->algo_strength)
470
471# define SSL_EXPORT_KEYLENGTH(a,s) (SSL_IS_EXPORT40(s) ? 5 : \
472 (a) == SSL_DES ? 8 : 7)
473# define SSL_EXPORT_PKEYLENGTH(a) (SSL_IS_EXPORT40(a) ? 512 : 1024)
474# define SSL_C_EXPORT_KEYLENGTH(c) SSL_EXPORT_KEYLENGTH((c)->algorithm_enc, \
475 (c)->algo_strength)
476# define SSL_C_EXPORT_PKEYLENGTH(c) SSL_EXPORT_PKEYLENGTH((c)->algo_strength)
d02b48c6 477
890f2f8b 478/* Check if an SSL structure is using DTLS */
0f113f3e 479# define SSL_IS_DTLS(s) (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
cbd64894 480/* See if we need explicit IV */
0f113f3e
MC
481# define SSL_USE_EXPLICIT_IV(s) \
482 (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV)
483/*
484 * See if we use signature algorithms extension and signature algorithm
485 * before signatures.
cbd64894 486 */
0f113f3e
MC
487# define SSL_USE_SIGALGS(s) \
488 (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SIGALGS)
489/*
490 * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may
491 * apply to others in future.
4221c0dd 492 */
0f113f3e
MC
493# define SSL_USE_TLS1_2_CIPHERS(s) \
494 (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS)
495/*
496 * Determine if a client can use TLS 1.2 ciphersuites: can't rely on method
1e2d4cb0
DSH
497 * flags because it may not be set to correct version yet.
498 */
0f113f3e
MC
499# define SSL_CLIENT_USE_TLS1_2_CIPHERS(s) \
500 ((SSL_IS_DTLS(s) && s->client_version <= DTLS1_2_VERSION) || \
501 (!SSL_IS_DTLS(s) && s->client_version >= TLS1_2_VERSION))
502
503# ifdef TLSEXT_TYPE_encrypt_then_mac
504# define SSL_USE_ETM(s) (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC)
505# else
506# define SSL_USE_ETM(s) (0)
507# endif
5e3ff62c 508
d02b48c6 509/* Mostly for SSLv3 */
0f113f3e
MC
510# define SSL_PKEY_RSA_ENC 0
511# define SSL_PKEY_RSA_SIGN 1
512# define SSL_PKEY_DSA_SIGN 2
513# define SSL_PKEY_DH_RSA 3
514# define SSL_PKEY_DH_DSA 4
515# define SSL_PKEY_ECC 5
0f113f3e
MC
516# define SSL_PKEY_GOST01 7
517# define SSL_PKEY_NUM 8
d02b48c6 518
1d97c843
TH
519/*-
520 * SSL_kRSA <- RSA_ENC | (RSA_TMP & RSA_SIGN) |
0f113f3e 521 * <- (EXPORT & (RSA_ENC | RSA_TMP) & RSA_SIGN)
d02b48c6 522 * SSL_kDH <- DH_ENC & (RSA_ENC | RSA_SIGN | DSA_SIGN)
5a21cadb 523 * SSL_kDHE <- RSA_ENC | RSA_SIGN | DSA_SIGN
d02b48c6
RE
524 * SSL_aRSA <- RSA_ENC | RSA_SIGN
525 * SSL_aDSS <- DSA_SIGN
526 */
527
23a22b4c 528/*-
0f113f3e
MC
529#define CERT_INVALID 0
530#define CERT_PUBLIC_KEY 1
531#define CERT_PRIVATE_KEY 2
d02b48c6
RE
532*/
533
e9fa092e
EK
534
535/* CipherSuite length. SSLv3 and all TLS versions. */
536#define TLS_CIPHER_LEN 2
b6ba4014
MC
537/* used to hold info on the particular ciphers used */
538struct ssl_cipher_st {
539 int valid;
540 const char *name; /* text name */
541 unsigned long id; /* id, 4 bytes, first is version */
542 /*
543 * changed in 0.9.9: these four used to be portions of a single value
544 * 'algorithms'
545 */
546 unsigned long algorithm_mkey; /* key exchange algorithm */
547 unsigned long algorithm_auth; /* server authentication */
548 unsigned long algorithm_enc; /* symmetric encryption */
549 unsigned long algorithm_mac; /* symmetric authentication */
550 unsigned long algorithm_ssl; /* (major) protocol version */
551 unsigned long algo_strength; /* strength and export flags */
552 unsigned long algorithm2; /* Extra flags */
553 int strength_bits; /* Number of bits really used */
554 int alg_bits; /* Number of bits for algorithm */
555};
556
557/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */
558struct ssl_method_st {
559 int version;
560 int (*ssl_new) (SSL *s);
561 void (*ssl_clear) (SSL *s);
562 void (*ssl_free) (SSL *s);
563 int (*ssl_accept) (SSL *s);
564 int (*ssl_connect) (SSL *s);
565 int (*ssl_read) (SSL *s, void *buf, int len);
566 int (*ssl_peek) (SSL *s, void *buf, int len);
567 int (*ssl_write) (SSL *s, const void *buf, int len);
568 int (*ssl_shutdown) (SSL *s);
569 int (*ssl_renegotiate) (SSL *s);
570 int (*ssl_renegotiate_check) (SSL *s);
571 long (*ssl_get_message) (SSL *s, int st1, int stn, int mt, long
572 max, int *ok);
657da85e
MC
573 int (*ssl_read_bytes) (SSL *s, int type, int *recvd_type,
574 unsigned char *buf, int len, int peek);
b6ba4014
MC
575 int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, int len);
576 int (*ssl_dispatch_alert) (SSL *s);
577 long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg);
578 long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg);
579 const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr);
580 int (*put_cipher_by_char) (const SSL_CIPHER *cipher, unsigned char *ptr);
581 int (*ssl_pending) (const SSL *s);
582 int (*num_ciphers) (void);
583 const SSL_CIPHER *(*get_cipher) (unsigned ncipher);
584 const struct ssl_method_st *(*get_ssl_method) (int version);
585 long (*get_timeout) (void);
586 const struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
587 int (*ssl_version) (void);
588 long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void));
589 long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void));
590};
591
592/*-
593 * Lets make this into an ASN.1 type structure as follows
594 * SSL_SESSION_ID ::= SEQUENCE {
595 * version INTEGER, -- structure version number
596 * SSLversion INTEGER, -- SSL version number
597 * Cipher OCTET STRING, -- the 3 byte cipher ID
598 * Session_ID OCTET STRING, -- the Session ID
599 * Master_key OCTET STRING, -- the master key
b6ba4014
MC
600 * Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument
601 * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time
602 * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds
603 * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate
604 * Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context
605 * Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer'
606 * HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension
607 * PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint
608 * PSK_identity [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity
609 * Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket
610 * Ticket [10] EXPLICIT OCTET STRING, -- session ticket (clients only)
611 * Compression_meth [11] EXPLICIT OCTET STRING, -- optional compression method
612 * SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username
6f152a15 613 * flags [ 13 ] EXPLICIT INTEGER -- optional flags
b6ba4014
MC
614 * }
615 * Look in ssl/ssl_asn1.c for more details
616 * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).
617 */
618struct ssl_session_st {
619 int ssl_version; /* what ssl version session info is being
620 * kept in here? */
621 int master_key_length;
622 unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];
623 /* session_id - valid? */
624 unsigned int session_id_length;
625 unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
626 /*
627 * this is used to determine whether the session is being reused in the
628 * appropriate context. It is up to the application to set this, via
629 * SSL_new
630 */
631 unsigned int sid_ctx_length;
632 unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
b6ba4014
MC
633# ifndef OPENSSL_NO_PSK
634 char *psk_identity_hint;
635 char *psk_identity;
636# endif
637 /*
638 * Used to indicate that session resumption is not allowed. Applications
639 * can also set this bit for a new session via not_resumable_session_cb
640 * to disable session caching and tickets.
641 */
642 int not_resumable;
a273c6ee 643 /* This is the cert and type for the other end. */
b6ba4014 644 X509 *peer;
a273c6ee 645 int peer_type;
c34b0f99
DSH
646 /* Certificate chain of peer */
647 STACK_OF(X509) *peer_chain;
b6ba4014
MC
648 /*
649 * when app_verify_callback accepts a session where the peer's
650 * certificate is not ok, we must remember the error for session reuse:
651 */
652 long verify_result; /* only for servers */
653 int references;
654 long timeout;
655 long time;
656 unsigned int compress_meth; /* Need to lookup the method */
657 const SSL_CIPHER *cipher;
658 unsigned long cipher_id; /* when ASN.1 loaded, this needs to be used
659 * to load the 'cipher' structure */
660 STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */
661 CRYPTO_EX_DATA ex_data; /* application specific data */
662 /*
663 * These are used to make removal of session-ids more efficient and to
664 * implement a maximum cache size.
665 */
666 struct ssl_session_st *prev, *next;
b6ba4014 667 char *tlsext_hostname;
e481f9b9 668# ifndef OPENSSL_NO_EC
b6ba4014
MC
669 size_t tlsext_ecpointformatlist_length;
670 unsigned char *tlsext_ecpointformatlist; /* peer's list */
671 size_t tlsext_ellipticcurvelist_length;
672 unsigned char *tlsext_ellipticcurvelist; /* peer's list */
e481f9b9 673# endif /* OPENSSL_NO_EC */
b6ba4014
MC
674 /* RFC4507 info */
675 unsigned char *tlsext_tick; /* Session ticket */
676 size_t tlsext_ticklen; /* Session ticket length */
75ea3632 677 unsigned long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */
b6ba4014
MC
678# ifndef OPENSSL_NO_SRP
679 char *srp_username;
680# endif
f7d53487 681 uint32_t flags;
b6ba4014
MC
682};
683
6f152a15
DSH
684/* Extended master secret support */
685# define SSL_SESS_FLAG_EXTMS 0x1
686
b6ba4014
MC
687
688# ifndef OPENSSL_NO_SRP
689
690typedef struct srp_ctx_st {
691 /* param for all the callbacks */
692 void *SRP_cb_arg;
693 /* set client Hello login callback */
694 int (*TLS_ext_srp_username_callback) (SSL *, int *, void *);
695 /* set SRP N/g param callback for verification */
696 int (*SRP_verify_param_callback) (SSL *, void *);
697 /* set SRP client passwd callback */
698 char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *);
699 char *login;
700 BIGNUM *N, *g, *s, *B, *A;
701 BIGNUM *a, *b, *v;
702 char *info;
703 int strength;
704 unsigned long srp_Mask;
705} SRP_CTX;
706
707# endif
708
9a555706 709typedef struct ssl_comp_st SSL_COMP;
b6ba4014
MC
710
711struct ssl_comp_st {
712 int id;
713 const char *name;
b6ba4014 714 COMP_METHOD *method;
b6ba4014
MC
715};
716
717DECLARE_STACK_OF(SSL_COMP)
718DECLARE_LHASH_OF(SSL_SESSION);
719
f8e0a557
MC
720/*
721 * Valid return codes used for functions performing work prior to or after
722 * sending or receiving a message
723 */
724enum WORK_STATE {
725 /* Something went wrong */
726 WORK_ERROR,
727 /* We're done working and there shouldn't be anything else to do after */
728 WORK_FINISHED_STOP,
729 /* We're done working move onto the next thing */
730 WORK_FINISHED_CONTINUE,
731 /* We're working on phase A */
732 WORK_MORE_A,
733 /* We're working on phase B */
734 WORK_MORE_B
735};
736
737/* Write transition return codes */
738enum WRITE_TRAN {
739 /* Something went wrong */
740 WRITE_TRAN_ERROR,
741 /* A transition was successfully completed and we should continue */
742 WRITE_TRAN_CONTINUE,
743 /* There is no more write work to be done */
744 WRITE_TRAN_FINISHED
745};
746
747/* Message processing return codes */
748enum MSG_PROCESS_RETURN {
749 MSG_PROCESS_ERROR,
750 MSG_PROCESS_FINISHED_READING,
751 MSG_PROCESS_CONTINUE_PROCESSING,
752 MSG_PROCESS_CONTINUE_READING
753};
754
755/* Message flow states */
756enum MSG_FLOW_STATE {
757 /* No handshake in progress */
758 MSG_FLOW_UNINITED,
759 /* A permanent error with this connection */
760 MSG_FLOW_ERROR,
761 /* We are about to renegotiate */
762 MSG_FLOW_RENEGOTIATE,
763 /* We are reading messages */
764 MSG_FLOW_READING,
765 /* We are writing messages */
766 MSG_FLOW_WRITING,
767 /* Handshake has finished */
768 MSG_FLOW_FINISHED
769};
770
771/* Read states */
772enum READ_STATE {
773 READ_STATE_HEADER,
774 READ_STATE_BODY,
775 READ_STATE_POST_PROCESS
776};
777
778/* Write states */
779enum WRITE_STATE {
780 WRITE_STATE_TRANSITION,
781 WRITE_STATE_PRE_WORK,
782 WRITE_STATE_SEND,
783 WRITE_STATE_POST_WORK
784};
785
786struct statem_st {
787 enum MSG_FLOW_STATE state;
788 enum WRITE_STATE write_state;
789 enum WORK_STATE write_state_work;
790 enum READ_STATE read_state;
791 enum WORK_STATE read_state_work;
792 enum HANDSHAKE_STATE hand_state;
49ae7423 793 int in_init;
f8e0a557
MC
794 int read_state_first_init;
795 int use_timer;
8723588e
MC
796#ifndef OPENSSL_NO_SCTP
797 int in_sctp_read_sock;
798#endif
f8e0a557
MC
799};
800typedef struct statem_st STATEM;
801
802
b6ba4014
MC
803struct ssl_ctx_st {
804 const SSL_METHOD *method;
805 STACK_OF(SSL_CIPHER) *cipher_list;
806 /* same as above but sorted for lookup */
807 STACK_OF(SSL_CIPHER) *cipher_list_by_id;
808 struct x509_store_st /* X509_STORE */ *cert_store;
809 LHASH_OF(SSL_SESSION) *sessions;
810 /*
811 * Most session-ids that will be cached, default is
812 * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited.
813 */
814 unsigned long session_cache_size;
815 struct ssl_session_st *session_cache_head;
816 struct ssl_session_st *session_cache_tail;
817 /*
818 * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT,
819 * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which
820 * means only SSL_accept which cache SSL_SESSIONS.
821 */
f7d53487 822 uint32_t session_cache_mode;
b6ba4014
MC
823 /*
824 * If timeout is not 0, it is the default timeout value set when
825 * SSL_new() is called. This has been put in to make life easier to set
826 * things up
827 */
828 long session_timeout;
829 /*
830 * If this callback is not null, it will be called each time a session id
831 * is added to the cache. If this function returns 1, it means that the
832 * callback will do a SSL_SESSION_free() when it has finished using it.
833 * Otherwise, on 0, it means the callback has finished with it. If
834 * remove_session_cb is not null, it will be called when a session-id is
835 * removed from the cache. After the call, OpenSSL will
836 * SSL_SESSION_free() it.
837 */
838 int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess);
839 void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess);
840 SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl,
841 unsigned char *data, int len, int *copy);
842 struct {
843 int sess_connect; /* SSL new conn - started */
844 int sess_connect_renegotiate; /* SSL reneg - requested */
845 int sess_connect_good; /* SSL new conne/reneg - finished */
846 int sess_accept; /* SSL new accept - started */
847 int sess_accept_renegotiate; /* SSL reneg - requested */
848 int sess_accept_good; /* SSL accept/reneg - finished */
849 int sess_miss; /* session lookup misses */
850 int sess_timeout; /* reuse attempt on timeouted session */
851 int sess_cache_full; /* session removed due to full cache */
852 int sess_hit; /* session reuse actually done */
853 int sess_cb_hit; /* session-id that was not in the cache was
854 * passed back via the callback. This
855 * indicates that the application is
856 * supplying session-id's from other
857 * processes - spooky :-) */
858 } stats;
859
860 int references;
861
862 /* if defined, these override the X509_verify_cert() calls */
863 int (*app_verify_callback) (X509_STORE_CTX *, void *);
864 void *app_verify_arg;
865 /*
866 * before OpenSSL 0.9.7, 'app_verify_arg' was ignored
867 * ('app_verify_callback' was called with just one argument)
868 */
869
870 /* Default password callback. */
871 pem_password_cb *default_passwd_callback;
872
873 /* Default password callback user data. */
874 void *default_passwd_callback_userdata;
875
876 /* get client cert callback */
877 int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey);
878
879 /* cookie generate callback */
880 int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie,
881 unsigned int *cookie_len);
882
883 /* verify cookie callback */
31011544 884 int (*app_verify_cookie_cb) (SSL *ssl, const unsigned char *cookie,
b6ba4014
MC
885 unsigned int cookie_len);
886
887 CRYPTO_EX_DATA ex_data;
888
889 const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */
890 const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */
891
892 STACK_OF(X509) *extra_certs;
893 STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */
894
895 /* Default values used when no per-SSL value is defined follow */
896
897 /* used if SSL's info_callback is NULL */
898 void (*info_callback) (const SSL *ssl, int type, int val);
899
900 /* what we put in client cert requests */
901 STACK_OF(X509_NAME) *client_CA;
902
903 /*
904 * Default values to use in SSL structures follow (these are copied by
905 * SSL_new)
906 */
907
f7d53487
DSH
908 uint32_t options;
909 uint32_t mode;
b6ba4014
MC
910 long max_cert_list;
911
912 struct cert_st /* CERT */ *cert;
913 int read_ahead;
914
915 /* callback that allows applications to peek at protocol messages */
916 void (*msg_callback) (int write_p, int version, int content_type,
917 const void *buf, size_t len, SSL *ssl, void *arg);
918 void *msg_callback_arg;
919
f7d53487 920 uint32_t verify_mode;
b6ba4014
MC
921 unsigned int sid_ctx_length;
922 unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
923 /* called 'verify_callback' in the SSL */
924 int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx);
925
926 /* Default generate session ID callback. */
927 GEN_SESSION_CB generate_session_id;
928
929 X509_VERIFY_PARAM *param;
930
931 int quiet_shutdown;
932
933 /*
934 * Maximum amount of data to send in one fragment. actual record size can
935 * be more than this due to padding and MAC overheads.
936 */
937 unsigned int max_send_fragment;
938
939# ifndef OPENSSL_NO_ENGINE
940 /*
941 * Engine to pass requests for client certs to
942 */
943 ENGINE *client_cert_engine;
944# endif
945
b6ba4014
MC
946 /* TLS extensions servername callback */
947 int (*tlsext_servername_callback) (SSL *, int *, void *);
948 void *tlsext_servername_arg;
949 /* RFC 4507 session ticket keys */
950 unsigned char tlsext_tick_key_name[16];
951 unsigned char tlsext_tick_hmac_key[16];
952 unsigned char tlsext_tick_aes_key[16];
953 /* Callback to support customisation of ticket key setting */
954 int (*tlsext_ticket_key_cb) (SSL *ssl,
955 unsigned char *name, unsigned char *iv,
956 EVP_CIPHER_CTX *ectx,
957 HMAC_CTX *hctx, int enc);
958
959 /* certificate status request info */
960 /* Callback for status request */
961 int (*tlsext_status_cb) (SSL *ssl, void *arg);
962 void *tlsext_status_arg;
b6ba4014
MC
963
964# ifndef OPENSSL_NO_PSK
b6ba4014
MC
965 unsigned int (*psk_client_callback) (SSL *ssl, const char *hint,
966 char *identity,
967 unsigned int max_identity_len,
968 unsigned char *psk,
969 unsigned int max_psk_len);
970 unsigned int (*psk_server_callback) (SSL *ssl, const char *identity,
971 unsigned char *psk,
972 unsigned int max_psk_len);
973# endif
974
975# ifndef OPENSSL_NO_SRP
976 SRP_CTX srp_ctx; /* ctx for SRP authentication */
977# endif
978
e481f9b9 979# ifndef OPENSSL_NO_NEXTPROTONEG
b6ba4014
MC
980 /* Next protocol negotiation information */
981 /* (for experimental NPN extension). */
982
983 /*
984 * For a server, this contains a callback function by which the set of
985 * advertised protocols can be provided.
986 */
987 int (*next_protos_advertised_cb) (SSL *s, const unsigned char **buf,
988 unsigned int *len, void *arg);
989 void *next_protos_advertised_cb_arg;
990 /*
991 * For a client, this contains a callback function that selects the next
992 * protocol from the list provided by the server.
993 */
994 int (*next_proto_select_cb) (SSL *s, unsigned char **out,
995 unsigned char *outlen,
996 const unsigned char *in,
997 unsigned int inlen, void *arg);
998 void *next_proto_select_cb_arg;
e481f9b9 999# endif
b6ba4014
MC
1000
1001 /*
1002 * ALPN information (we are in the process of transitioning from NPN to
1003 * ALPN.)
1004 */
1005
1006 /*-
1007 * For a server, this contains a callback function that allows the
1008 * server to select the protocol for the connection.
1009 * out: on successful return, this must point to the raw protocol
1010 * name (without the length prefix).
1011 * outlen: on successful return, this contains the length of |*out|.
1012 * in: points to the client's list of supported protocols in
1013 * wire-format.
1014 * inlen: the length of |in|.
1015 */
1016 int (*alpn_select_cb) (SSL *s,
1017 const unsigned char **out,
1018 unsigned char *outlen,
1019 const unsigned char *in,
1020 unsigned int inlen, void *arg);
1021 void *alpn_select_cb_arg;
1022
1023 /*
1024 * For a client, this contains the list of supported protocols in wire
1025 * format.
1026 */
1027 unsigned char *alpn_client_proto_list;
1028 unsigned alpn_client_proto_list_len;
1029
1030 /* SRTP profiles we are willing to do from RFC 5764 */
1031 STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;
b6ba4014
MC
1032 /*
1033 * Callback for disabling session caching and ticket support on a session
1034 * basis, depending on the chosen cipher.
1035 */
1036 int (*not_resumable_session_cb) (SSL *ssl, int is_forward_secure);
1037# ifndef OPENSSL_NO_EC
1038 /* EC extension values inherited by SSL structure */
1039 size_t tlsext_ecpointformatlist_length;
1040 unsigned char *tlsext_ecpointformatlist;
1041 size_t tlsext_ellipticcurvelist_length;
1042 unsigned char *tlsext_ellipticcurvelist;
1043# endif /* OPENSSL_NO_EC */
1044};
1045
1046
1047struct ssl_st {
1048 /*
1049 * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION,
1050 * DTLS1_VERSION)
1051 */
1052 int version;
23a635c0 1053
b6ba4014
MC
1054 /* SSLv3 */
1055 const SSL_METHOD *method;
1056 /*
1057 * There are 2 BIO's even though they are normally both the same. This
1058 * is so data can be read and written to different handlers
1059 */
1060 /* used by SSL_read */
1061 BIO *rbio;
1062 /* used by SSL_write */
1063 BIO *wbio;
1064 /* used during session-id reuse to concatenate messages */
1065 BIO *bbio;
1066 /*
1067 * This holds a variable that indicates what we were doing when a 0 or -1
1068 * is returned. This is needed for non-blocking IO so we know what
1069 * request needs re-doing when in SSL_accept or SSL_connect
1070 */
1071 int rwstate;
1072 /* true when we are actually in SSL_accept() or SSL_connect() */
1073 int in_handshake;
1074 int (*handshake_func) (SSL *);
1075 /*
1076 * Imagine that here's a boolean member "init" that is switched as soon
1077 * as SSL_set_{accept/connect}_state is called for the first time, so
1078 * that "state" and "handshake_func" are properly initialized. But as
1079 * handshake_func is == 0 until then, we use this test instead of an
1080 * "init" member.
1081 */
23a635c0 1082 /* are we the server side? */
b6ba4014
MC
1083 int server;
1084 /*
1085 * Generate a new session or reuse an old one.
1086 * NB: For servers, the 'new' session may actually be a previously
1087 * cached session or even the previous session unless
1088 * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set
1089 */
1090 int new_session;
1091 /* don't send shutdown packets */
1092 int quiet_shutdown;
1093 /* we have shut things down, 0x01 sent, 0x02 for received */
1094 int shutdown;
1095 /* where we are */
1096 int state;
f8e0a557
MC
1097 STATEM statem;
1098
b6ba4014
MC
1099 BUF_MEM *init_buf; /* buffer used during init */
1100 void *init_msg; /* pointer to handshake message body, set by
1101 * ssl3_get_message() */
1102 int init_num; /* amount read/written */
1103 int init_off; /* amount read/written */
7a7048af 1104
b6ba4014
MC
1105 struct ssl3_state_st *s3; /* SSLv3 variables */
1106 struct dtls1_state_st *d1; /* DTLSv1 variables */
52e1d7b1 1107
e27f234a
MC
1108 /* Should we skip the CertificateVerify message? */
1109 unsigned int no_cert_verify;
1110
b6ba4014
MC
1111 /* callback that allows applications to peek at protocol messages */
1112 void (*msg_callback) (int write_p, int version, int content_type,
1113 const void *buf, size_t len, SSL *ssl, void *arg);
1114 void *msg_callback_arg;
1115 int hit; /* reusing a previous session */
1116 X509_VERIFY_PARAM *param;
1117 /* crypto */
1118 STACK_OF(SSL_CIPHER) *cipher_list;
1119 STACK_OF(SSL_CIPHER) *cipher_list_by_id;
1120 /*
1121 * These are the ones being used, the ones in SSL_SESSION are the ones to
1122 * be 'copied' into these ones
1123 */
f7d53487 1124 uint32_t mac_flags;
b6ba4014
MC
1125 EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */
1126 EVP_MD_CTX *read_hash; /* used for mac generation */
9a555706 1127 COMP_CTX *compress; /* compression */
b6ba4014 1128 COMP_CTX *expand; /* uncompress */
b6ba4014
MC
1129 EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
1130 EVP_MD_CTX *write_hash; /* used for mac generation */
b6ba4014
MC
1131 /* session info */
1132 /* client cert? */
1133 /* This is used to hold the server certificate used */
1134 struct cert_st /* CERT */ *cert;
1135 /*
1136 * the session_id_context is used to ensure sessions are only reused in
1137 * the appropriate context
1138 */
1139 unsigned int sid_ctx_length;
1140 unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
1141 /* This can also be in the session once a session is established */
1142 SSL_SESSION *session;
1143 /* Default generate session ID callback. */
1144 GEN_SESSION_CB generate_session_id;
1145 /* Used in SSL3 */
1146 /*
1147 * 0 don't care about verify failure.
1148 * 1 fail if verify fails
1149 */
f7d53487 1150 uint32_t verify_mode;
b6ba4014
MC
1151 /* fail if callback returns 0 */
1152 int (*verify_callback) (int ok, X509_STORE_CTX *ctx);
1153 /* optional informational callback */
1154 void (*info_callback) (const SSL *ssl, int type, int val);
1155 /* error bytes to be written */
1156 int error;
1157 /* actual code */
1158 int error_code;
b6ba4014
MC
1159# ifndef OPENSSL_NO_PSK
1160 unsigned int (*psk_client_callback) (SSL *ssl, const char *hint,
1161 char *identity,
1162 unsigned int max_identity_len,
1163 unsigned char *psk,
1164 unsigned int max_psk_len);
1165 unsigned int (*psk_server_callback) (SSL *ssl, const char *identity,
1166 unsigned char *psk,
1167 unsigned int max_psk_len);
1168# endif
1169 SSL_CTX *ctx;
1170 /*
1171 * set this flag to 1 and a sleep(1) is put into all SSL_read() and
1172 * SSL_write() calls, good for nbio debuging :-)
1173 */
1174 int debug;
1175 /* extra application data */
1176 long verify_result;
1177 CRYPTO_EX_DATA ex_data;
1178 /* for server side, keep the list of CA_dn we can use */
1179 STACK_OF(X509_NAME) *client_CA;
1180 int references;
1181 /* protocol behaviour */
f7d53487 1182 uint32_t options;
b6ba4014 1183 /* API behaviour */
f7d53487 1184 uint32_t mode;
b6ba4014
MC
1185 long max_cert_list;
1186 int first_packet;
1187 /* what was passed, used for SSLv3/TLS rollback check */
1188 int client_version;
1189 unsigned int max_send_fragment;
e481f9b9 1190
b6ba4014
MC
1191 /* TLS extension debug callback */
1192 void (*tlsext_debug_cb) (SSL *s, int client_server, int type,
1193 unsigned char *data, int len, void *arg);
1194 void *tlsext_debug_arg;
1195 char *tlsext_hostname;
1196 /*-
1197 * no further mod of servername
1198 * 0 : call the servername extension callback.
1199 * 1 : prepare 2, allow last ack just after in server callback.
1200 * 2 : don't call servername callback, no ack in server hello
1201 */
1202 int servername_done;
1203 /* certificate status request info */
1204 /* Status type or -1 if no status type */
1205 int tlsext_status_type;
1206 /* Expect OCSP CertificateStatus message */
1207 int tlsext_status_expected;
1208 /* OCSP status request only */
1209 STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids;
1210 X509_EXTENSIONS *tlsext_ocsp_exts;
1211 /* OCSP response received or to be sent */
1212 unsigned char *tlsext_ocsp_resp;
1213 int tlsext_ocsp_resplen;
1214 /* RFC4507 session ticket expected to be received or sent */
1215 int tlsext_ticket_expected;
e481f9b9 1216# ifndef OPENSSL_NO_EC
b6ba4014
MC
1217 size_t tlsext_ecpointformatlist_length;
1218 /* our list */
1219 unsigned char *tlsext_ecpointformatlist;
1220 size_t tlsext_ellipticcurvelist_length;
1221 /* our list */
1222 unsigned char *tlsext_ellipticcurvelist;
e481f9b9 1223# endif /* OPENSSL_NO_EC */
b6ba4014
MC
1224 /* TLS Session Ticket extension override */
1225 TLS_SESSION_TICKET_EXT *tlsext_session_ticket;
1226 /* TLS Session Ticket extension callback */
1227 tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb;
1228 void *tls_session_ticket_ext_cb_arg;
1229 /* TLS pre-shared secret session resumption */
1230 tls_session_secret_cb_fn tls_session_secret_cb;
1231 void *tls_session_secret_cb_arg;
1232 SSL_CTX *initial_ctx; /* initial ctx, used to store sessions */
e481f9b9 1233# ifndef OPENSSL_NO_NEXTPROTONEG
b6ba4014
MC
1234 /*
1235 * Next protocol negotiation. For the client, this is the protocol that
1236 * we sent in NextProtocol and is set when handling ServerHello
1237 * extensions. For a server, this is the client's selected_protocol from
1238 * NextProtocol and is set when handling the NextProtocol message, before
1239 * the Finished message.
1240 */
1241 unsigned char *next_proto_negotiated;
1242 unsigned char next_proto_negotiated_len;
e481f9b9
MC
1243# endif
1244# define session_ctx initial_ctx
b6ba4014
MC
1245 /* What we'll do */
1246 STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;
1247 /* What's been chosen */
1248 SRTP_PROTECTION_PROFILE *srtp_profile;
1249 /*-
1250 * Is use of the Heartbeat extension negotiated?
1251 * 0: disabled
1252 * 1: enabled
1253 * 2: enabled, but not allowed to send Requests
1254 */
1255 unsigned int tlsext_heartbeat;
1256 /* Indicates if a HeartbeatRequest is in flight */
1257 unsigned int tlsext_hb_pending;
1258 /* HeartbeatRequest sequence number */
1259 unsigned int tlsext_hb_seq;
1260 /*
1261 * For a client, this contains the list of supported protocols in wire
1262 * format.
1263 */
1264 unsigned char *alpn_client_proto_list;
1265 unsigned alpn_client_proto_list_len;
e481f9b9 1266
b6ba4014
MC
1267 /*-
1268 * 1 if we are renegotiating.
1269 * 2 if we are a server and are inside a handshake
1270 * (i.e. not just sending a HelloRequest)
1271 */
1272 int renegotiate;
1273# ifndef OPENSSL_NO_SRP
1274 /* ctx for SRP authentication */
1275 SRP_CTX srp_ctx;
1276# endif
1277 /*
1278 * Callback for disabling session caching and ticket support on a session
1279 * basis, depending on the chosen cipher.
1280 */
1281 int (*not_resumable_session_cb) (SSL *ssl, int is_forward_secure);
28d59af8
MC
1282
1283 RECORD_LAYER rlayer;
b6ba4014
MC
1284};
1285
b6ba4014 1286
b6ba4014
MC
1287typedef struct ssl3_state_st {
1288 long flags;
b6ba4014
MC
1289 int read_mac_secret_size;
1290 unsigned char read_mac_secret[EVP_MAX_MD_SIZE];
b6ba4014
MC
1291 int write_mac_secret_size;
1292 unsigned char write_mac_secret[EVP_MAX_MD_SIZE];
1293 unsigned char server_random[SSL3_RANDOM_SIZE];
1294 unsigned char client_random[SSL3_RANDOM_SIZE];
1295 /* flags for countermeasure against known-IV weakness */
1296 int need_empty_fragments;
1297 int empty_fragment_done;
1298 /* The value of 'extra' when the buffers were initialized */
1299 int init_extra;
b6ba4014
MC
1300 /* used during startup, digest all incoming/outgoing packets */
1301 BIO *handshake_buffer;
1302 /*
1303 * When set of handshake digests is determined, buffer is hashed and
1304 * freed and MD_CTX-es for all required digests are stored in this array
1305 */
1306 EVP_MD_CTX **handshake_dgst;
1307 /*
1308 * Set whenever an expected ChangeCipherSpec message is processed.
1309 * Unset when the peer's Finished message is received.
1310 * Unexpected ChangeCipherSpec messages trigger a fatal alert.
1311 */
1312 int change_cipher_spec;
1313 int warn_alert;
1314 int fatal_alert;
1315 /*
1316 * we allow one fatal and one warning alert to be outstanding, send close
1317 * alert via the warning alert
1318 */
1319 int alert_dispatch;
1320 unsigned char send_alert[2];
1321 /*
1322 * This flag is set when we should renegotiate ASAP, basically when there
1323 * is no more data in the read or write buffers
1324 */
1325 int renegotiate;
1326 int total_renegotiations;
1327 int num_renegotiations;
1328 int in_read_app_data;
1329 struct {
1330 /* actually only needs to be 16+20 */
1331 unsigned char cert_verify_md[EVP_MAX_MD_SIZE * 2];
1332 /* actually only need to be 16+20 for SSLv3 and 12 for TLS */
1333 unsigned char finish_md[EVP_MAX_MD_SIZE * 2];
1334 int finish_md_len;
1335 unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2];
1336 int peer_finish_md_len;
1337 unsigned long message_size;
1338 int message_type;
1339 /* used to hold the new cipher we are going to use */
1340 const SSL_CIPHER *new_cipher;
1341# ifndef OPENSSL_NO_DH
1342 DH *dh;
1343# endif
10bf4fc2 1344# ifndef OPENSSL_NO_EC
b6ba4014
MC
1345 EC_KEY *ecdh; /* holds short lived ECDH key */
1346# endif
1347 /* used when SSL_ST_FLUSH_DATA is entered */
1348 int next_state;
b6ba4014
MC
1349 /* used for certificate requests */
1350 int cert_req;
1351 int ctype_num;
1352 char ctype[SSL3_CT_NUMBER];
1353 STACK_OF(X509_NAME) *ca_names;
1354 int use_rsa_tmp;
1355 int key_block_length;
1356 unsigned char *key_block;
1357 const EVP_CIPHER *new_sym_enc;
1358 const EVP_MD *new_hash;
1359 int new_mac_pkey_type;
1360 int new_mac_secret_size;
1361# ifndef OPENSSL_NO_COMP
1362 const SSL_COMP *new_compression;
1363# else
1364 char *new_compression;
1365# endif
1366 int cert_request;
76106e60
DSH
1367 /* Raw values of the cipher list from a client */
1368 unsigned char *ciphers_raw;
1369 size_t ciphers_rawlen;
1370 /* Temporary storage for premaster secret */
1371 unsigned char *pms;
1372 size_t pmslen;
85269210 1373#ifndef OPENSSL_NO_PSK
64651d39
DSH
1374 /* Temporary storage for PSK key */
1375 unsigned char *psk;
1376 size_t psklen;
85269210 1377#endif
76106e60
DSH
1378 /*
1379 * signature algorithms peer reports: e.g. supported signature
1380 * algorithms extension for server or as part of a certificate
1381 * request for client.
1382 */
1383 unsigned char *peer_sigalgs;
1384 /* Size of above array */
1385 size_t peer_sigalgslen;
d376e57d
DSH
1386 /* Digest peer uses for signing */
1387 const EVP_MD *peer_md;
1388 /* Array of digests used for signing */
1389 const EVP_MD *md[SSL_PKEY_NUM];
6383d316
DSH
1390 /*
1391 * Set if corresponding CERT_PKEY can be used with current
1392 * SSL session: e.g. appropriate curve, signature algorithms etc.
1393 * If zero it can't be used at all.
1394 */
f7d53487 1395 uint32_t valid_flags[SSL_PKEY_NUM];
4d69f9e6
DSH
1396 /*
1397 * For servers the following masks are for the key and auth algorithms
1398 * that are supported by the certs below. For clients they are masks of
1399 * *disabled* algorithms based on the current session.
1400 */
1401 unsigned long mask_k;
1402 unsigned long mask_a;
1403 unsigned long export_mask_k;
1404 unsigned long export_mask_a;
1405 /* Client only */
1406 unsigned long mask_ssl;
b6ba4014
MC
1407 } tmp;
1408
1409 /* Connection binding to prevent renegotiation attacks */
1410 unsigned char previous_client_finished[EVP_MAX_MD_SIZE];
1411 unsigned char previous_client_finished_len;
1412 unsigned char previous_server_finished[EVP_MAX_MD_SIZE];
1413 unsigned char previous_server_finished_len;
1414 int send_connection_binding; /* TODOEKR */
1415
1416# ifndef OPENSSL_NO_NEXTPROTONEG
1417 /*
1418 * Set if we saw the Next Protocol Negotiation extension from our peer.
1419 */
1420 int next_proto_neg_seen;
1421# endif
1422
b6ba4014
MC
1423 /*
1424 * ALPN information (we are in the process of transitioning from NPN to
1425 * ALPN.)
1426 */
1427
1428 /*
1429 * In a server these point to the selected ALPN protocol after the
1430 * ClientHello has been processed. In a client these contain the protocol
1431 * that the server selected once the ServerHello has been processed.
1432 */
1433 unsigned char *alpn_selected;
1434 unsigned alpn_selected_len;
1435
1436# ifndef OPENSSL_NO_EC
1437 /*
1438 * This is set to true if we believe that this is a version of Safari
1439 * running on OS X 10.6 or newer. We wish to know this because Safari on
1440 * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support.
1441 */
1442 char is_probably_safari;
1443# endif /* !OPENSSL_NO_EC */
8d92c1f8
DSH
1444
1445 /* For clients: peer temporary key */
1446# ifndef OPENSSL_NO_RSA
1447 RSA *peer_rsa_tmp;
1448# endif
1449# ifndef OPENSSL_NO_DH
1450 DH *peer_dh_tmp;
1451# endif
1452# ifndef OPENSSL_NO_EC
1453 EC_KEY *peer_ecdh_tmp;
1454# endif
1455
b6ba4014
MC
1456} SSL3_STATE;
1457
1458
1459/* DTLS structures */
1460
1461# ifndef OPENSSL_NO_SCTP
1462# define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP"
1463# endif
1464
1465/* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */
1466# define DTLS1_MAX_MTU_OVERHEAD 48
1467
e3d0dae7
MC
1468/*
1469 * Flag used in message reuse to indicate the buffer contains the record
1470 * header as well as the the handshake message header.
1471 */
1472# define DTLS1_SKIP_RECORD_HEADER 2
1473
b6ba4014
MC
1474struct dtls1_retransmit_state {
1475 EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
1476 EVP_MD_CTX *write_hash; /* used for mac generation */
b6ba4014 1477 COMP_CTX *compress; /* compression */
b6ba4014
MC
1478 SSL_SESSION *session;
1479 unsigned short epoch;
1480};
1481
1482struct hm_header_st {
1483 unsigned char type;
1484 unsigned long msg_len;
1485 unsigned short seq;
1486 unsigned long frag_off;
1487 unsigned long frag_len;
1488 unsigned int is_ccs;
1489 struct dtls1_retransmit_state saved_retransmit_state;
1490};
1491
b6ba4014
MC
1492struct dtls1_timeout_st {
1493 /* Number of read timeouts so far */
1494 unsigned int read_timeouts;
1495 /* Number of write timeouts so far */
1496 unsigned int write_timeouts;
1497 /* Number of alerts received so far */
1498 unsigned int num_alerts;
1499};
1500
b6ba4014
MC
1501typedef struct hm_fragment_st {
1502 struct hm_header_st msg_header;
1503 unsigned char *fragment;
1504 unsigned char *reassembly;
1505} hm_fragment;
1506
1507typedef struct dtls1_state_st {
b6ba4014 1508 unsigned char cookie[DTLS1_COOKIE_LENGTH];
b6ba4014 1509 unsigned int cookie_len;
e27f234a 1510 unsigned int cookie_verified;
78a39fe7 1511
b6ba4014
MC
1512 /* handshake message numbers */
1513 unsigned short handshake_write_seq;
1514 unsigned short next_handshake_write_seq;
1515 unsigned short handshake_read_seq;
3bb8f87d 1516
b6ba4014
MC
1517 /* Buffered handshake messages */
1518 pqueue buffered_messages;
1519 /* Buffered (sent) handshake records */
1520 pqueue sent_messages;
24a1e2f2 1521
b6ba4014
MC
1522 unsigned int link_mtu; /* max on-the-wire DTLS packet size */
1523 unsigned int mtu; /* max DTLS packet size */
1524 struct hm_header_st w_msg_hdr;
1525 struct hm_header_st r_msg_hdr;
1526 struct dtls1_timeout_st timeout;
1527 /*
1528 * Indicates when the last handshake msg or heartbeat sent will timeout
1529 */
1530 struct timeval next_timeout;
1531 /* Timeout duration */
1532 unsigned short timeout_duration;
c661ac16 1533
b6ba4014 1534 unsigned int retransmitting;
b6ba4014
MC
1535# ifndef OPENSSL_NO_SCTP
1536 /* used when SSL_ST_XX_FLUSH is entered */
1537 int next_state;
1538 int shutdown_received;
1539# endif
1540} DTLS1_STATE;
1541
b6ba4014
MC
1542
1543
0f113f3e
MC
1544# ifndef OPENSSL_NO_EC
1545/*
1546 * From ECC-TLS draft, used in encoding the curve type in ECParameters
ea262260 1547 */
0f113f3e
MC
1548# define EXPLICIT_PRIME_CURVE_TYPE 1
1549# define EXPLICIT_CHAR2_CURVE_TYPE 2
1550# define NAMED_CURVE_TYPE 3
1551# endif /* OPENSSL_NO_EC */
1552
1553typedef struct cert_pkey_st {
1554 X509 *x509;
1555 EVP_PKEY *privatekey;
0f113f3e
MC
1556 /* Chain for this certificate */
1557 STACK_OF(X509) *chain;
e481f9b9 1558
50e735f9
MC
1559 /*-
1560 * serverinfo data for this certificate. The data is in TLS Extension
1561 * wire format, specifically it's a series of records like:
1562 * uint16_t extension_type; // (RFC 5246, 7.4.1.4, Extension)
1563 * uint16_t length;
1564 * uint8_t data[length];
1565 */
0f113f3e
MC
1566 unsigned char *serverinfo;
1567 size_t serverinfo_length;
0f113f3e 1568} CERT_PKEY;
2ea80354 1569/* Retrieve Suite B flags */
0f113f3e 1570# define tls1_suiteb(s) (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)
2ea80354 1571/* Uses to check strict mode: suite B modes are always strict */
0f113f3e
MC
1572# define SSL_CERT_FLAGS_CHECK_TLS_STRICT \
1573 (SSL_CERT_FLAG_SUITEB_128_LOS|SSL_CERT_FLAG_TLS_STRICT)
d02b48c6 1574
b83294fe 1575typedef struct {
0f113f3e
MC
1576 unsigned short ext_type;
1577 /*
1578 * Per-connection flags relating to this extension type: not used if
1579 * part of an SSL_CTX structure.
1580 */
f7d53487 1581 uint32_t ext_flags;
0f113f3e
MC
1582 custom_ext_add_cb add_cb;
1583 custom_ext_free_cb free_cb;
1584 void *add_arg;
1585 custom_ext_parse_cb parse_cb;
1586 void *parse_arg;
ecf4d660 1587} custom_ext_method;
b83294fe 1588
28ea0a0c
DSH
1589/* ext_flags values */
1590
0f113f3e
MC
1591/*
1592 * Indicates an extension has been received. Used to check for unsolicited or
1593 * duplicate extensions.
28ea0a0c 1594 */
0f113f3e
MC
1595# define SSL_EXT_FLAG_RECEIVED 0x1
1596/*
1597 * Indicates an extension has been sent: used to enable sending of
1598 * corresponding ServerHello extension.
28ea0a0c 1599 */
0f113f3e 1600# define SSL_EXT_FLAG_SENT 0x2
28ea0a0c 1601
b83294fe 1602typedef struct {
0f113f3e
MC
1603 custom_ext_method *meths;
1604 size_t meths_count;
ecf4d660 1605} custom_ext_methods;
b83294fe 1606
0f113f3e
MC
1607typedef struct cert_st {
1608 /* Current active set */
1609 /*
1610 * ALWAYS points to an element of the pkeys array
1611 * Probably it would make more sense to store
1612 * an index, not a pointer.
1613 */
1614 CERT_PKEY *key;
0f113f3e
MC
1615# ifndef OPENSSL_NO_RSA
1616 RSA *rsa_tmp;
1617 RSA *(*rsa_tmp_cb) (SSL *ssl, int is_export, int keysize);
1618# endif
1619# ifndef OPENSSL_NO_DH
1620 DH *dh_tmp;
1621 DH *(*dh_tmp_cb) (SSL *ssl, int is_export, int keysize);
1622 int dh_tmp_auto;
1623# endif
10bf4fc2 1624# ifndef OPENSSL_NO_EC
0f113f3e
MC
1625 EC_KEY *ecdh_tmp;
1626 /* Callback for generating ephemeral ECDH keys */
1627 EC_KEY *(*ecdh_tmp_cb) (SSL *ssl, int is_export, int keysize);
1628 /* Select ECDH parameters automatically */
1629 int ecdh_tmp_auto;
1630# endif
1631 /* Flags related to certificates */
f7d53487 1632 uint32_t cert_flags;
0f113f3e
MC
1633 CERT_PKEY pkeys[SSL_PKEY_NUM];
1634 /*
1635 * Certificate types (received or sent) in certificate request message.
1636 * On receive this is only set if number of certificate types exceeds
1637 * SSL3_CT_NUMBER.
1638 */
1639 unsigned char *ctypes;
1640 size_t ctype_num;
0f113f3e
MC
1641 /*
1642 * suppported signature algorithms. When set on a client this is sent in
1643 * the client hello as the supported signature algorithms extension. For
1644 * servers it represents the signature algorithms we are willing to use.
1645 */
1646 unsigned char *conf_sigalgs;
1647 /* Size of above array */
1648 size_t conf_sigalgslen;
1649 /*
1650 * Client authentication signature algorithms, if not set then uses
1651 * conf_sigalgs. On servers these will be the signature algorithms sent
1652 * to the client in a cerificate request for TLS 1.2. On a client this
1653 * represents the signature algortithms we are willing to use for client
1654 * authentication.
1655 */
1656 unsigned char *client_sigalgs;
1657 /* Size of above array */
1658 size_t client_sigalgslen;
1659 /*
1660 * Signature algorithms shared by client and server: cached because these
1661 * are used most often.
1662 */
1663 TLS_SIGALGS *shared_sigalgs;
1664 size_t shared_sigalgslen;
1665 /*
1666 * Certificate setup callback: if set is called whenever a certificate
1667 * may be required (client or server). the callback can then examine any
1668 * appropriate parameters and setup any certificates required. This
1669 * allows advanced applications to select certificates on the fly: for
1670 * example based on supported signature algorithms or curves.
1671 */
1672 int (*cert_cb) (SSL *ssl, void *arg);
1673 void *cert_cb_arg;
1674 /*
1675 * Optional X509_STORE for chain building or certificate validation If
1676 * NULL the parent SSL_CTX store is used instead.
1677 */
1678 X509_STORE *chain_store;
1679 X509_STORE *verify_store;
0f113f3e
MC
1680 /* Custom extension methods for server and client */
1681 custom_ext_methods cli_ext;
1682 custom_ext_methods srv_ext;
1683 /* Security callback */
1684 int (*sec_cb) (SSL *s, SSL_CTX *ctx, int op, int bits, int nid,
1685 void *other, void *ex);
1686 /* Security level */
1687 int sec_level;
1688 void *sec_ex;
df6da24b
DSH
1689#ifndef OPENSSL_NO_PSK
1690 /* If not NULL psk identity hint to use for servers */
1691 char *psk_identity_hint;
1692#endif
0f113f3e
MC
1693 int references; /* >1 only if SSL_copy_session_id is used */
1694} CERT;
1695
e7f8ff43 1696/* Structure containing decoded values of signature algorithms extension */
0f113f3e
MC
1697struct tls_sigalgs_st {
1698 /* NID of hash algorithm */
1699 int hash_nid;
1700 /* NID of signature algorithm */
1701 int sign_nid;
1702 /* Combined hash and signature NID */
1703 int signandhash_nid;
1704 /* Raw values used in extension */
1705 unsigned char rsign;
1706 unsigned char rhash;
1707};
1708
1709/*
1710 * #define MAC_DEBUG
1711 */
1712
1713/*
1714 * #define ERR_DEBUG
1715 */
1716/*
1717 * #define ABORT_DEBUG
1718 */
1719/*
1720 * #define PKT_DEBUG 1
1721 */
1722/*
1723 * #define DES_DEBUG
1724 */
1725/*
1726 * #define DES_OFB_DEBUG
1727 */
1728/*
1729 * #define SSL_DEBUG
1730 */
1731/*
1732 * #define RSA_DEBUG
1733 */
1734/*
1735 * #define IDEA_DEBUG
1736 */
1737
1738# define FP_ICC (int (*)(const void *,const void *))
0f113f3e
MC
1739
1740/*
1741 * This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff It is a bit
1742 * of a mess of functions, but hell, think of it as an opaque structure :-)
1743 */
1744typedef struct ssl3_enc_method {
1745 int (*enc) (SSL *, int);
1746 int (*mac) (SSL *, unsigned char *, int);
1747 int (*setup_key_block) (SSL *);
1748 int (*generate_master_secret) (SSL *, unsigned char *, unsigned char *,
1749 int);
1750 int (*change_cipher_state) (SSL *, int);
1751 int (*final_finish_mac) (SSL *, const char *, int, unsigned char *);
1752 int finish_mac_length;
1753 int (*cert_verify_mac) (SSL *, int, unsigned char *);
1754 const char *client_finished_label;
1755 int client_finished_label_len;
1756 const char *server_finished_label;
1757 int server_finished_label_len;
1758 int (*alert_value) (int);
1759 int (*export_keying_material) (SSL *, unsigned char *, size_t,
1760 const char *, size_t,
1761 const unsigned char *, size_t,
1762 int use_context);
1763 /* Various flags indicating protocol version requirements */
f7d53487 1764 uint32_t enc_flags;
0f113f3e
MC
1765 /* Handshake header length */
1766 unsigned int hhlen;
1767 /* Set the handshake header */
77d514c5 1768 int (*set_handshake_header) (SSL *s, int type, unsigned long len);
0f113f3e
MC
1769 /* Write out handshake message */
1770 int (*do_write) (SSL *s);
1771} SSL3_ENC_METHOD;
1772
1773# define SSL_HM_HEADER_LENGTH(s) s->method->ssl3_enc->hhlen
1774# define ssl_handshake_start(s) \
1775 (((unsigned char *)s->init_buf->data) + s->method->ssl3_enc->hhlen)
1776# define ssl_set_handshake_header(s, htype, len) \
1777 s->method->ssl3_enc->set_handshake_header(s, htype, len)
1778# define ssl_do_write(s) s->method->ssl3_enc->do_write(s)
173e72e6
DSH
1779
1780/* Values for enc_flags */
1781
1782/* Uses explicit IV for CBC mode */
0f113f3e 1783# define SSL_ENC_FLAG_EXPLICIT_IV 0x1
173e72e6 1784/* Uses signature algorithms extension */
0f113f3e 1785# define SSL_ENC_FLAG_SIGALGS 0x2
cbd64894 1786/* Uses SHA256 default PRF */
0f113f3e 1787# define SSL_ENC_FLAG_SHA256_PRF 0x4
173e72e6 1788/* Is DTLS */
0f113f3e
MC
1789# define SSL_ENC_FLAG_DTLS 0x8
1790/*
1791 * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may
1792 * apply to others in future.
4221c0dd 1793 */
0f113f3e 1794# define SSL_ENC_FLAG_TLS1_2_CIPHERS 0x10
173e72e6 1795
0f113f3e 1796# ifndef OPENSSL_NO_COMP
651d0aff 1797/* Used for holding the relevant compression methods loaded into SSL_CTX */
0f113f3e
MC
1798typedef struct ssl3_comp_st {
1799 int comp_id; /* The identifier byte for this compression
1800 * type */
1801 char *name; /* Text name used for the compression type */
1802 COMP_METHOD *method; /* The method :-) */
1803} SSL3_COMP;
1804# endif
dfeab068 1805
3ed449e9 1806extern SSL3_ENC_METHOD ssl3_undef_enc_method;
8892ce77 1807OPENSSL_EXTERN const SSL_CIPHER ssl3_ciphers[];
7d7d2cbc 1808
d02b48c6 1809SSL_METHOD *ssl_bad_method(int ver);
d02b48c6 1810
161e0a61
BL
1811extern const SSL3_ENC_METHOD TLSv1_enc_data;
1812extern const SSL3_ENC_METHOD TLSv1_1_enc_data;
1813extern const SSL3_ENC_METHOD TLSv1_2_enc_data;
8892ce77
BL
1814extern const SSL3_ENC_METHOD SSLv3_enc_data;
1815extern const SSL3_ENC_METHOD DTLSv1_enc_data;
1816extern const SSL3_ENC_METHOD DTLSv1_2_enc_data;
f3b656b2 1817
0f113f3e
MC
1818# define IMPLEMENT_tls_meth_func(version, func_name, s_accept, s_connect, \
1819 s_get_meth, enc_data) \
4ebb342f 1820const SSL_METHOD *func_name(void) \
0f113f3e
MC
1821 { \
1822 static const SSL_METHOD func_name##_data= { \
1823 version, \
1824 tls1_new, \
1825 tls1_clear, \
1826 tls1_free, \
1827 s_accept, \
1828 s_connect, \
1829 ssl3_read, \
1830 ssl3_peek, \
1831 ssl3_write, \
1832 ssl3_shutdown, \
1833 ssl3_renegotiate, \
1834 ssl3_renegotiate_check, \
49ae7423 1835 NULL /*TODO: Fix this */, \
0f113f3e
MC
1836 ssl3_read_bytes, \
1837 ssl3_write_bytes, \
1838 ssl3_dispatch_alert, \
1839 ssl3_ctrl, \
1840 ssl3_ctx_ctrl, \
1841 ssl3_get_cipher_by_char, \
1842 ssl3_put_cipher_by_char, \
1843 ssl3_pending, \
1844 ssl3_num_ciphers, \
1845 ssl3_get_cipher, \
1846 s_get_meth, \
1847 tls1_default_timeout, \
1848 &enc_data, \
1849 ssl_undefined_void_function, \
1850 ssl3_callback_ctrl, \
1851 ssl3_ctx_callback_ctrl, \
1852 }; \
1853 return &func_name##_data; \
1854 }
1855
1856# define IMPLEMENT_ssl3_meth_func(func_name, s_accept, s_connect, s_get_meth) \
4ebb342f 1857const SSL_METHOD *func_name(void) \
0f113f3e
MC
1858 { \
1859 static const SSL_METHOD func_name##_data= { \
1860 SSL3_VERSION, \
1861 ssl3_new, \
1862 ssl3_clear, \
1863 ssl3_free, \
1864 s_accept, \
1865 s_connect, \
1866 ssl3_read, \
1867 ssl3_peek, \
1868 ssl3_write, \
1869 ssl3_shutdown, \
1870 ssl3_renegotiate, \
1871 ssl3_renegotiate_check, \
49ae7423 1872 NULL /*TODO: Fix this */, \
0f113f3e
MC
1873 ssl3_read_bytes, \
1874 ssl3_write_bytes, \
1875 ssl3_dispatch_alert, \
1876 ssl3_ctrl, \
1877 ssl3_ctx_ctrl, \
1878 ssl3_get_cipher_by_char, \
1879 ssl3_put_cipher_by_char, \
1880 ssl3_pending, \
1881 ssl3_num_ciphers, \
1882 ssl3_get_cipher, \
1883 s_get_meth, \
1884 ssl3_default_timeout, \
1885 &SSLv3_enc_data, \
1886 ssl_undefined_void_function, \
1887 ssl3_callback_ctrl, \
1888 ssl3_ctx_callback_ctrl, \
1889 }; \
1890 return &func_name##_data; \
1891 }
1892
0f113f3e
MC
1893# define IMPLEMENT_dtls1_meth_func(version, func_name, s_accept, s_connect, \
1894 s_get_meth, enc_data) \
4ebb342f 1895const SSL_METHOD *func_name(void) \
0f113f3e
MC
1896 { \
1897 static const SSL_METHOD func_name##_data= { \
1898 version, \
1899 dtls1_new, \
1900 dtls1_clear, \
1901 dtls1_free, \
1902 s_accept, \
1903 s_connect, \
1904 ssl3_read, \
1905 ssl3_peek, \
1906 ssl3_write, \
1907 dtls1_shutdown, \
1908 ssl3_renegotiate, \
1909 ssl3_renegotiate_check, \
49ae7423 1910 NULL /*TODO: fix this */, \
0f113f3e
MC
1911 dtls1_read_bytes, \
1912 dtls1_write_app_data_bytes, \
1913 dtls1_dispatch_alert, \
1914 dtls1_ctrl, \
1915 ssl3_ctx_ctrl, \
1916 ssl3_get_cipher_by_char, \
1917 ssl3_put_cipher_by_char, \
1918 ssl3_pending, \
1919 ssl3_num_ciphers, \
1920 dtls1_get_cipher, \
1921 s_get_meth, \
1922 dtls1_default_timeout, \
1923 &enc_data, \
1924 ssl_undefined_void_function, \
1925 ssl3_callback_ctrl, \
1926 ssl3_ctx_callback_ctrl, \
1927 }; \
1928 return &func_name##_data; \
1929 }
1930
1931struct openssl_ssl_test_functions {
1932 int (*p_ssl_init_wbio_buffer) (SSL *s, int push);
1933 int (*p_ssl3_setup_buffers) (SSL *s);
2c60ed04
MC
1934 int (*p_tls1_process_heartbeat) (SSL *s,
1935 unsigned char *p, unsigned int length);
1936 int (*p_dtls1_process_heartbeat) (SSL *s,
1937 unsigned char *p, unsigned int length);
0f113f3e
MC
1938};
1939
1940# ifndef OPENSSL_UNIT_TEST
e0fc7961 1941
d02b48c6
RE
1942void ssl_clear_cipher_ctx(SSL *s);
1943int ssl_clear_bad_session(SSL *s);
4bcdb4a6
MC
1944__owur CERT *ssl_cert_new(void);
1945__owur CERT *ssl_cert_dup(CERT *cert);
a5ee80b9 1946void ssl_cert_clear_certs(CERT *c);
d02b48c6 1947void ssl_cert_free(CERT *c);
4bcdb4a6 1948__owur int ssl_get_new_session(SSL *s, int session);
b3e2272c
EK
1949__owur int ssl_get_prev_session(SSL *s, const PACKET *ext,
1950 const PACKET *session_id);
98ece4ee 1951__owur SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket);
4bcdb4a6 1952__owur int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b);
0f113f3e 1953DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
4bcdb4a6 1954__owur int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
0f113f3e 1955 const SSL_CIPHER *const *bp);
4bcdb4a6 1956__owur STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth,
0f113f3e
MC
1957 STACK_OF(SSL_CIPHER) **pref,
1958 STACK_OF(SSL_CIPHER) **sorted,
1959 const char *rule_str, CERT *c);
d02b48c6 1960void ssl_update_cache(SSL *s, int mode);
4bcdb4a6 1961__owur int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc,
0f113f3e
MC
1962 const EVP_MD **md, int *mac_pkey_type,
1963 int *mac_secret_size, SSL_COMP **comp, int use_etm);
4bcdb4a6
MC
1964__owur int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md);
1965__owur int ssl_cipher_get_cert_index(const SSL_CIPHER *c);
1966__owur const SSL_CIPHER *ssl_get_cipher_by_char(SSL *ssl, const unsigned char *ptr);
1967__owur int ssl_cert_set0_chain(SSL *s, SSL_CTX *ctx, STACK_OF(X509) *chain);
1968__owur int ssl_cert_set1_chain(SSL *s, SSL_CTX *ctx, STACK_OF(X509) *chain);
1969__owur int ssl_cert_add0_chain_cert(SSL *s, SSL_CTX *ctx, X509 *x);
1970__owur int ssl_cert_add1_chain_cert(SSL *s, SSL_CTX *ctx, X509 *x);
1971__owur int ssl_cert_select_current(CERT *c, X509 *x);
1972__owur int ssl_cert_set_current(CERT *c, long arg);
1973__owur X509 *ssl_cert_get0_next_certificate(CERT *c, int first);
0f113f3e
MC
1974void ssl_cert_set_cert_cb(CERT *c, int (*cb) (SSL *ssl, void *arg),
1975 void *arg);
f71c6e52 1976
4bcdb4a6
MC
1977__owur int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk);
1978__owur int ssl_add_cert_chain(SSL *s, CERT_PKEY *cpk, unsigned long *l);
1979__owur int ssl_build_cert_chain(SSL *s, SSL_CTX *ctx, int flags);
1980__owur int ssl_cert_set_cert_store(CERT *c, X509_STORE *store, int chain, int ref);
b362ccab 1981
4bcdb4a6
MC
1982__owur int ssl_security(SSL *s, int op, int bits, int nid, void *other);
1983__owur int ssl_ctx_security(SSL_CTX *ctx, int op, int bits, int nid, void *other);
b362ccab 1984
d02b48c6 1985int ssl_undefined_function(SSL *s);
4bcdb4a6
MC
1986__owur int ssl_undefined_void_function(void);
1987__owur int ssl_undefined_const_function(const SSL *s);
6383d316 1988__owur CERT_PKEY *ssl_get_server_send_pkey(SSL *s);
4bcdb4a6 1989__owur int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
0f113f3e 1990 size_t *serverinfo_length);
4bcdb4a6
MC
1991__owur EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *c, const EVP_MD **pmd);
1992__owur int ssl_cert_type(X509 *x, EVP_PKEY *pkey);
6383d316 1993void ssl_set_masks(SSL *s, const SSL_CIPHER *cipher);
4bcdb4a6
MC
1994__owur STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s);
1995__owur int ssl_verify_alarm_type(long type);
7f3c9036 1996void ssl_load_ciphers(void);
4bcdb4a6 1997__owur int ssl_fill_hello_random(SSL *s, int server, unsigned char *field, int len);
57b272b0
DSH
1998__owur int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
1999 int free_pms);
d02b48c6 2000
4bcdb4a6
MC
2001__owur const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p);
2002__owur int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p);
d02b48c6 2003void ssl3_init_finished_mac(SSL *s);
e27f234a 2004__owur int tls_construct_server_certificate(SSL *s);
e27f234a 2005__owur int tls_construct_new_session_ticket(SSL *s);
b9908bf9
MC
2006__owur int tls_construct_cert_status(SSL *s);
2007__owur enum MSG_PROCESS_RETURN tls_process_change_cipher_spec(SSL *s, long n);
2008__owur enum MSG_PROCESS_RETURN tls_process_finished(SSL *s, unsigned long n);
4bcdb4a6 2009__owur int ssl3_setup_key_block(SSL *s);
b9908bf9 2010__owur int tls_construct_change_cipher_spec(SSL *s);
473483d4 2011__owur int dtls_construct_change_cipher_spec(SSL *s);
4bcdb4a6 2012__owur int ssl3_change_cipher_state(SSL *s, int which);
d02b48c6 2013void ssl3_cleanup_key_block(SSL *s);
4bcdb4a6 2014__owur int ssl3_do_write(SSL *s, int type);
0f113f3e 2015int ssl3_send_alert(SSL *s, int level, int desc);
4bcdb4a6 2016__owur int ssl3_generate_master_secret(SSL *s, unsigned char *out,
0f113f3e 2017 unsigned char *p, int len);
4bcdb4a6
MC
2018__owur int ssl3_get_req_cert_type(SSL *s, unsigned char *p);
2019__owur long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok);
9ab930b2
MC
2020__owur int tls_get_message_header(SSL *s, int *mt);
2021__owur int tls_get_message_body(SSL *s, unsigned long *len);
b9908bf9 2022__owur int tls_construct_finished(SSL *s, const char *sender, int slen);
8723588e 2023__owur enum WORK_STATE tls_finish_handshake(SSL *s, enum WORK_STATE wst);
473483d4 2024__owur enum WORK_STATE dtls_wait_for_dry(SSL *s);
4bcdb4a6
MC
2025__owur int ssl3_num_ciphers(void);
2026__owur const SSL_CIPHER *ssl3_get_cipher(unsigned int u);
0f113f3e
MC
2027int ssl3_renegotiate(SSL *ssl);
2028int ssl3_renegotiate_check(SSL *ssl);
4bcdb4a6 2029__owur int ssl3_dispatch_alert(SSL *s);
4bcdb4a6 2030__owur int ssl3_final_finish_mac(SSL *s, const char *sender, int slen,
0f113f3e 2031 unsigned char *p);
4bcdb4a6 2032__owur int ssl3_cert_verify_mac(SSL *s, int md_nid, unsigned char *p);
e778802f 2033void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len);
81025661 2034void ssl3_free_digest_list(SSL *s);
4bcdb4a6
MC
2035__owur unsigned long ssl3_output_cert_chain(SSL *s, CERT_PKEY *cpk);
2036__owur SSL_CIPHER *ssl3_choose_cipher(SSL *ssl, STACK_OF(SSL_CIPHER) *clnt,
0f113f3e 2037 STACK_OF(SSL_CIPHER) *srvr);
124037fd 2038__owur int ssl3_digest_cached_records(SSL *s, int keep);
4bcdb4a6 2039__owur int ssl3_new(SSL *s);
0f113f3e 2040void ssl3_free(SSL *s);
4bcdb4a6
MC
2041__owur int ssl3_accept(SSL *s);
2042__owur int ssl3_connect(SSL *s);
f8e0a557
MC
2043void statem_clear(SSL *s);
2044void statem_set_renegotiate(SSL *s);
2045void statem_set_error(SSL *s);
49ae7423
MC
2046int statem_in_error(const SSL *s);
2047void statem_set_in_init(SSL *s, int init);
8723588e
MC
2048__owur int statem_app_data_allowed(SSL *s);
2049#ifndef OPENSSL_NO_SCTP
2050void statem_set_sctp_read_sock(SSL *s, int read_sock);
2051__owur int statem_in_sctp_read_sock(SSL *s);
2052#endif
4bcdb4a6
MC
2053__owur int ssl3_read(SSL *s, void *buf, int len);
2054__owur int ssl3_peek(SSL *s, void *buf, int len);
2055__owur int ssl3_write(SSL *s, const void *buf, int len);
2056__owur int ssl3_shutdown(SSL *s);
0f113f3e 2057void ssl3_clear(SSL *s);
4bcdb4a6
MC
2058__owur long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg);
2059__owur long ssl3_ctx_ctrl(SSL_CTX *s, int cmd, long larg, void *parg);
2060__owur long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void));
2061__owur long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp) (void));
d02b48c6 2062
4bcdb4a6
MC
2063__owur int ssl3_do_change_cipher_spec(SSL *ssl);
2064__owur long ssl3_default_timeout(void);
f3b656b2 2065
77d514c5 2066__owur int ssl3_set_handshake_header(SSL *s, int htype, unsigned long len);
4bcdb4a6
MC
2067__owur int ssl3_handshake_write(SSL *s);
2068
4bcdb4a6
MC
2069__owur int ssl_allow_compression(SSL *s);
2070
2071__owur long tls1_default_timeout(void);
2072__owur int dtls1_do_write(SSL *s, int type);
4bcdb4a6
MC
2073void dtls1_set_message_header(SSL *s,
2074 unsigned char *p, unsigned char mt,
2075 unsigned long len,
2076 unsigned long frag_off,
2077 unsigned long frag_len);
2078
2079__owur int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf, int len);
4bcdb4a6 2080
4bcdb4a6
MC
2081__owur int dtls1_read_failed(SSL *s, int code);
2082__owur int dtls1_buffer_message(SSL *s, int ccs);
2083__owur int dtls1_retransmit_message(SSL *s, unsigned short seq,
0f113f3e 2084 unsigned long frag_off, int *found);
4bcdb4a6 2085__owur int dtls1_get_queue_priority(unsigned short seq, int is_ccs);
17dd65e6 2086int dtls1_retransmit_buffered_messages(SSL *s);
480506bd 2087void dtls1_clear_record_buffer(SSL *s);
0f113f3e
MC
2088void dtls1_get_message_header(unsigned char *data,
2089 struct hm_header_st *msg_hdr);
4bcdb4a6
MC
2090__owur long dtls1_default_timeout(void);
2091__owur struct timeval *dtls1_get_timeout(SSL *s, struct timeval *timeleft);
2092__owur int dtls1_check_timeout_num(SSL *s);
2093__owur int dtls1_handle_timeout(SSL *s);
2094__owur const SSL_CIPHER *dtls1_get_cipher(unsigned int u);
9289f21b
DSH
2095void dtls1_start_timer(SSL *s);
2096void dtls1_stop_timer(SSL *s);
4bcdb4a6 2097__owur int dtls1_is_timer_expired(SSL *s);
9289f21b 2098void dtls1_double_timeout(SSL *s);
e3d0dae7
MC
2099__owur unsigned int dtls1_raw_hello_verify_request(unsigned char *buf,
2100 unsigned char *cookie,
2101 unsigned char cookie_len);
4bcdb4a6
MC
2102__owur int dtls1_send_newsession_ticket(SSL *s);
2103__owur unsigned int dtls1_min_mtu(SSL *s);
2104__owur unsigned int dtls1_link_min_mtu(void);
8a35dbb6 2105void dtls1_hm_fragment_free(hm_fragment *frag);
480506bd
BM
2106
2107/* some client-only functions */
b9908bf9 2108__owur int tls_construct_client_hello(SSL *s);
b9908bf9
MC
2109__owur enum MSG_PROCESS_RETURN tls_process_server_hello(SSL *s,
2110 unsigned long n);
2111__owur enum MSG_PROCESS_RETURN tls_process_certificate_request(SSL *s,
2112 unsigned long n);
2113__owur enum MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL *s,
2114 unsigned long n);
2115__owur enum MSG_PROCESS_RETURN tls_process_cert_status(SSL *s, unsigned long n);
2116__owur enum MSG_PROCESS_RETURN tls_process_server_done(SSL *s, unsigned long n);
b9908bf9 2117__owur int tls_construct_client_verify(SSL *s);
b9908bf9
MC
2118__owur enum WORK_STATE tls_prepare_client_certificate(SSL *s,
2119 enum WORK_STATE wst);
2120__owur int tls_construct_client_certificate(SSL *s);
4bcdb4a6 2121__owur int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey);
b9908bf9
MC
2122__owur int tls_construct_client_key_exchange(SSL *s);
2123__owur int tls_client_key_exchange_post_work(SSL *s);
b9908bf9
MC
2124__owur enum MSG_PROCESS_RETURN tls_process_key_exchange(SSL *s,
2125 unsigned long n);
2126__owur enum MSG_PROCESS_RETURN tls_process_server_certificate(SSL *s,
2127 unsigned long n);
4bcdb4a6 2128__owur int ssl3_check_cert_and_algorithm(SSL *s);
e481f9b9 2129# ifndef OPENSSL_NO_NEXTPROTONEG
b9908bf9 2130__owur int tls_construct_next_proto(SSL *s);
0f113f3e 2131# endif
473483d4
MC
2132__owur enum MSG_PROCESS_RETURN dtls_process_hello_verify(SSL *s,
2133 unsigned long n);
beb056b3 2134
480506bd 2135/* some server-only functions */
b9908bf9
MC
2136__owur enum MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, long n);
2137__owur enum WORK_STATE tls_post_process_client_hello(SSL *s,
2138 enum WORK_STATE wst);
2139__owur int tls_construct_server_hello(SSL *s);
e27f234a 2140__owur int tls_construct_hello_request(SSL *s);
c130dd8e 2141__owur int dtls_construct_hello_verify_request(SSL *s);
e27f234a 2142__owur int tls_construct_server_key_exchange(SSL *s);
e27f234a 2143__owur int tls_construct_certificate_request(SSL *s);
e27f234a 2144__owur int tls_construct_server_done(SSL *s);
b9908bf9
MC
2145__owur enum MSG_PROCESS_RETURN tls_process_client_certificate(SSL *s, long n);
2146__owur enum MSG_PROCESS_RETURN tls_process_client_key_exchange(SSL *s, long n);
2147__owur enum WORK_STATE tls_post_process_client_key_exchange(SSL *s,
2148 enum WORK_STATE wst);
2149__owur enum MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, long n);
0f113f3e 2150# ifndef OPENSSL_NO_NEXTPROTONEG
b9908bf9 2151__owur enum MSG_PROCESS_RETURN tls_process_next_proto(SSL *s, long n);
0f113f3e 2152# endif
beb056b3 2153
4bcdb4a6 2154__owur int tls1_new(SSL *s);
58964a49
RE
2155void tls1_free(SSL *s);
2156void tls1_clear(SSL *s);
0f113f3e
MC
2157long tls1_ctrl(SSL *s, int cmd, long larg, void *parg);
2158long tls1_callback_ctrl(SSL *s, int cmd, void (*fp) (void));
58964a49 2159
4bcdb4a6
MC
2160__owur int dtls1_new(SSL *s);
2161__owur int dtls1_accept(SSL *s);
2162__owur int dtls1_connect(SSL *s);
36d16f8e
BL
2163void dtls1_free(SSL *s);
2164void dtls1_clear(SSL *s);
0f113f3e 2165long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg);
4bcdb4a6 2166__owur int dtls1_shutdown(SSL *s);
36d16f8e 2167
76af3037 2168__owur int dtls_get_message(SSL *s, int *mt, unsigned long *len);
4bcdb4a6 2169__owur int dtls1_dispatch_alert(SSL *s);
36d16f8e 2170
4bcdb4a6 2171__owur int ssl_init_wbio_buffer(SSL *s, int push);
413c4f45 2172void ssl_free_wbio_buffer(SSL *s);
58964a49 2173
4bcdb4a6
MC
2174__owur int tls1_change_cipher_state(SSL *s, int which);
2175__owur int tls1_setup_key_block(SSL *s);
4bcdb4a6 2176__owur int tls1_final_finish_mac(SSL *s,
0f113f3e 2177 const char *str, int slen, unsigned char *p);
4bcdb4a6 2178__owur int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *p);
4bcdb4a6 2179__owur int tls1_generate_master_secret(SSL *s, unsigned char *out,
0f113f3e 2180 unsigned char *p, int len);
4bcdb4a6 2181__owur int tls1_export_keying_material(SSL *s, unsigned char *out, size_t olen,
0f113f3e
MC
2182 const char *label, size_t llen,
2183 const unsigned char *p, size_t plen,
2184 int use_context);
4bcdb4a6
MC
2185__owur int tls1_alert_code(int code);
2186__owur int ssl3_alert_code(int code);
2187__owur int ssl_ok(SSL *s);
58964a49 2188
10bf4fc2 2189# ifndef OPENSSL_NO_EC
4bcdb4a6 2190__owur int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s);
0f113f3e 2191# endif
41fdcfa7 2192
f73e07cf 2193SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n);
413c4f45 2194
0f113f3e 2195# ifndef OPENSSL_NO_EC
4bcdb4a6
MC
2196__owur int tls1_ec_curve_id2nid(int curve_id);
2197__owur int tls1_ec_nid2curve_id(int nid);
2198__owur int tls1_check_curve(SSL *s, const unsigned char *p, size_t len);
2199__owur int tls1_shared_curve(SSL *s, int nmatch);
2200__owur int tls1_set_curves(unsigned char **pext, size_t *pextlen,
0f113f3e 2201 int *curves, size_t ncurves);
4bcdb4a6 2202__owur int tls1_set_curves_list(unsigned char **pext, size_t *pextlen,
0f113f3e 2203 const char *str);
4bcdb4a6 2204__owur int tls1_check_ec_tmp_key(SSL *s, unsigned long id);
0f113f3e 2205# endif /* OPENSSL_NO_EC */
33273721 2206
4bcdb4a6 2207__owur int tls1_shared_list(SSL *s,
0f113f3e
MC
2208 const unsigned char *l1, size_t l1len,
2209 const unsigned char *l2, size_t l2len, int nmatch);
4bcdb4a6 2210__owur unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
0f113f3e 2211 unsigned char *limit, int *al);
4bcdb4a6 2212__owur unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
0f113f3e 2213 unsigned char *limit, int *al);
9ceb2426 2214__owur int ssl_parse_clienthello_tlsext(SSL *s, PACKET *pkt);
4bcdb4a6
MC
2215__owur int tls1_set_server_sigalgs(SSL *s);
2216__owur int ssl_check_clienthello_tlsext_late(SSL *s);
50932c4a 2217__owur int ssl_parse_serverhello_tlsext(SSL *s, PACKET *pkt);
4bcdb4a6
MC
2218__owur int ssl_prepare_clienthello_tlsext(SSL *s);
2219__owur int ssl_prepare_serverhello_tlsext(SSL *s);
49968440 2220
e481f9b9 2221# ifndef OPENSSL_NO_HEARTBEATS
4bcdb4a6
MC
2222__owur int tls1_heartbeat(SSL *s);
2223__owur int dtls1_heartbeat(SSL *s);
2c60ed04
MC
2224__owur int tls1_process_heartbeat(SSL *s, unsigned char *p, unsigned int length);
2225__owur int dtls1_process_heartbeat(SSL *s, unsigned char *p, unsigned int length);
e481f9b9 2226# endif
4817504d 2227
b3e2272c
EK
2228__owur int tls1_process_ticket(SSL *s, const PACKET *ext,
2229 const PACKET *session_id, SSL_SESSION **ret);
a2f9200f 2230
4bcdb4a6 2231__owur int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk,
0f113f3e 2232 const EVP_MD *md);
4bcdb4a6
MC
2233__owur int tls12_get_sigid(const EVP_PKEY *pk);
2234__owur const EVP_MD *tls12_get_hash(unsigned char hash_alg);
b362ccab 2235void ssl_set_sig_mask(unsigned long *pmask_a, SSL *s, int op);
a2f9200f 2236
4bcdb4a6
MC
2237__owur int tls1_set_sigalgs_list(CERT *c, const char *str, int client);
2238__owur int tls1_set_sigalgs(CERT *c, const int *salg, size_t salglen, int client);
17dd65e6 2239int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
0f113f3e 2240 int idx);
d61ff83b 2241void tls1_set_cert_validity(SSL *s);
0f229cce 2242
0f113f3e 2243# ifndef OPENSSL_NO_DH
4bcdb4a6 2244__owur DH *ssl_get_auto_dh(SSL *s);
0f113f3e 2245# endif
b362ccab 2246
4bcdb4a6
MC
2247__owur int ssl_security_cert(SSL *s, SSL_CTX *ctx, X509 *x, int vfy, int is_ee);
2248__owur int ssl_security_cert_chain(SSL *s, STACK_OF(X509) *sk, X509 *ex, int vfy);
b362ccab 2249
4bcdb4a6 2250__owur EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md);
b948e2c5 2251void ssl_clear_hash_ctx(EVP_MD_CTX **hash);
4bcdb4a6 2252__owur int ssl_add_serverhello_renegotiate_ext(SSL *s, unsigned char *p, int *len,
0f113f3e 2253 int maxlen);
50932c4a 2254__owur int ssl_parse_serverhello_renegotiate_ext(SSL *s, PACKET *pkt,
0f113f3e 2255 int *al);
4bcdb4a6 2256__owur int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, int *len,
0f113f3e 2257 int maxlen);
9ceb2426 2258__owur int ssl_parse_clienthello_renegotiate_ext(SSL *s, PACKET *pkt, int *al);
4bcdb4a6
MC
2259__owur long ssl_get_algorithm2(SSL *s);
2260__owur size_t tls12_copy_sigalgs(SSL *s, unsigned char *out,
0f113f3e 2261 const unsigned char *psig, size_t psiglen);
4bcdb4a6
MC
2262__owur int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize);
2263__owur int tls1_process_sigalgs(SSL *s);
2264__owur size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs);
2265__owur int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s,
0f113f3e 2266 const unsigned char *sig, EVP_PKEY *pkey);
b7bfe69b 2267void ssl_set_client_disabled(SSL *s);
4bcdb4a6 2268__owur int ssl_cipher_disabled(SSL *s, const SSL_CIPHER *c, int op);
1c78c43b 2269
4bcdb4a6 2270__owur int ssl_add_clienthello_use_srtp_ext(SSL *s, unsigned char *p, int *len,
0f113f3e 2271 int maxlen);
9ceb2426 2272__owur int ssl_parse_clienthello_use_srtp_ext(SSL *s, PACKET *pkt, int *al);
4bcdb4a6 2273__owur int ssl_add_serverhello_use_srtp_ext(SSL *s, unsigned char *p, int *len,
0f113f3e 2274 int maxlen);
50932c4a 2275__owur int ssl_parse_serverhello_use_srtp_ext(SSL *s, PACKET *pkt, int *al);
1c78c43b 2276
4bcdb4a6 2277__owur int ssl_handshake_hash(SSL *s, unsigned char *out, int outlen);
48fbcbac 2278
2acc020b 2279/* s3_cbc.c */
4bcdb4a6 2280__owur char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx);
0f113f3e
MC
2281void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx,
2282 unsigned char *md_out,
2283 size_t *md_out_size,
2284 const unsigned char header[13],
2285 const unsigned char *data,
2286 size_t data_plus_mac_size,
2287 size_t data_plus_mac_plus_padding_size,
2288 const unsigned char *mac_secret,
2289 unsigned mac_secret_length, char is_sslv3);
2290
2291void tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx,
2292 EVP_MD_CTX *mac_ctx, const unsigned char *data,
2293 size_t data_len, size_t orig_len);
0989790b 2294
57b272b0
DSH
2295__owur int srp_generate_server_master_secret(SSL *s);
2296__owur int srp_generate_client_master_secret(SSL *s);
4bcdb4a6 2297__owur int srp_verify_server_param(SSL *s, int *al);
0989790b 2298
ecf4d660
DSH
2299/* t1_ext.c */
2300
28ea0a0c
DSH
2301void custom_ext_init(custom_ext_methods *meths);
2302
4bcdb4a6 2303__owur int custom_ext_parse(SSL *s, int server,
0f113f3e
MC
2304 unsigned int ext_type,
2305 const unsigned char *ext_data, size_t ext_size, int *al);
4bcdb4a6 2306__owur int custom_ext_add(SSL *s, int server,
0f113f3e 2307 unsigned char **pret, unsigned char *limit, int *al);
ecf4d660 2308
4bcdb4a6 2309__owur int custom_exts_copy(custom_ext_methods *dst, const custom_ext_methods *src);
ecf4d660
DSH
2310void custom_exts_free(custom_ext_methods *exts);
2311
0f113f3e 2312# else
e0fc7961 2313
0f113f3e
MC
2314# define ssl_init_wbio_buffer SSL_test_functions()->p_ssl_init_wbio_buffer
2315# define ssl3_setup_buffers SSL_test_functions()->p_ssl3_setup_buffers
2316# define tls1_process_heartbeat SSL_test_functions()->p_tls1_process_heartbeat
2317# define dtls1_process_heartbeat SSL_test_functions()->p_dtls1_process_heartbeat
c4e6fb15 2318
0f113f3e 2319# endif
e0fc7961 2320#endif