Home | History | Annotate | Download | only in ssl
      1 /* ssl/ssl3.h */
      2 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
      3  * All rights reserved.
      4  *
      5  * This package is an SSL implementation written
      6  * by Eric Young (eay (at) cryptsoft.com).
      7  * The implementation was written so as to conform with Netscapes SSL.
      8  *
      9  * This library is free for commercial and non-commercial use as long as
     10  * the following conditions are aheared to.  The following conditions
     11  * apply to all code found in this distribution, be it the RC4, RSA,
     12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
     13  * included with this distribution is covered by the same copyright terms
     14  * except that the holder is Tim Hudson (tjh (at) cryptsoft.com).
     15  *
     16  * Copyright remains Eric Young's, and as such any Copyright notices in
     17  * the code are not to be removed.
     18  * If this package is used in a product, Eric Young should be given attribution
     19  * as the author of the parts of the library used.
     20  * This can be in the form of a textual message at program startup or
     21  * in documentation (online or textual) provided with the package.
     22  *
     23  * Redistribution and use in source and binary forms, with or without
     24  * modification, are permitted provided that the following conditions
     25  * are met:
     26  * 1. Redistributions of source code must retain the copyright
     27  *    notice, this list of conditions and the following disclaimer.
     28  * 2. Redistributions in binary form must reproduce the above copyright
     29  *    notice, this list of conditions and the following disclaimer in the
     30  *    documentation and/or other materials provided with the distribution.
     31  * 3. All advertising materials mentioning features or use of this software
     32  *    must display the following acknowledgement:
     33  *    "This product includes cryptographic software written by
     34  *     Eric Young (eay (at) cryptsoft.com)"
     35  *    The word 'cryptographic' can be left out if the rouines from the library
     36  *    being used are not cryptographic related :-).
     37  * 4. If you include any Windows specific code (or a derivative thereof) from
     38  *    the apps directory (application code) you must include an acknowledgement:
     39  *    "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)"
     40  *
     41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
     42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     51  * SUCH DAMAGE.
     52  *
     53  * The licence and distribution terms for any publically available version or
     54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
     55  * copied and put under another distribution licence
     56  * [including the GNU Public Licence.]
     57  */
     58 /* ====================================================================
     59  * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
     60  *
     61  * Redistribution and use in source and binary forms, with or without
     62  * modification, are permitted provided that the following conditions
     63  * are met:
     64  *
     65  * 1. Redistributions of source code must retain the above copyright
     66  *    notice, this list of conditions and the following disclaimer.
     67  *
     68  * 2. Redistributions in binary form must reproduce the above copyright
     69  *    notice, this list of conditions and the following disclaimer in
     70  *    the documentation and/or other materials provided with the
     71  *    distribution.
     72  *
     73  * 3. All advertising materials mentioning features or use of this
     74  *    software must display the following acknowledgment:
     75  *    "This product includes software developed by the OpenSSL Project
     76  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
     77  *
     78  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     79  *    endorse or promote products derived from this software without
     80  *    prior written permission. For written permission, please contact
     81  *    openssl-core (at) 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 (at) cryptsoft.com).  This product includes software written by Tim
    108  * Hudson (tjh (at) cryptsoft.com).
    109  *
    110  */
    111 /* ====================================================================
    112  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
    113  * ECC cipher suite support in OpenSSL originally developed by
    114  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
    115  */
    116 
    117 #ifndef HEADER_SSL3_H
    118 #define HEADER_SSL3_H
    119 
    120 #ifndef OPENSSL_NO_COMP
    121 #include <openssl/comp.h>
    122 #endif
    123 #include <openssl/buffer.h>
    124 #include <openssl/evp.h>
    125 #include <openssl/ssl.h>
    126 
    127 #ifdef  __cplusplus
    128 extern "C" {
    129 #endif
    130 
    131 /* Signalling cipher suite value: from draft-ietf-tls-renegotiation-03.txt */
    132 #define SSL3_CK_SCSV				0x030000FF
    133 
    134 #define SSL3_CK_RSA_NULL_MD5			0x03000001
    135 #define SSL3_CK_RSA_NULL_SHA			0x03000002
    136 #define SSL3_CK_RSA_RC4_40_MD5 			0x03000003
    137 #define SSL3_CK_RSA_RC4_128_MD5			0x03000004
    138 #define SSL3_CK_RSA_RC4_128_SHA			0x03000005
    139 #define SSL3_CK_RSA_RC2_40_MD5			0x03000006
    140 #define SSL3_CK_RSA_IDEA_128_SHA		0x03000007
    141 #define SSL3_CK_RSA_DES_40_CBC_SHA		0x03000008
    142 #define SSL3_CK_RSA_DES_64_CBC_SHA		0x03000009
    143 #define SSL3_CK_RSA_DES_192_CBC3_SHA		0x0300000A
    144 
    145 #define SSL3_CK_DH_DSS_DES_40_CBC_SHA		0x0300000B
    146 #define SSL3_CK_DH_DSS_DES_64_CBC_SHA		0x0300000C
    147 #define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 	0x0300000D
    148 #define SSL3_CK_DH_RSA_DES_40_CBC_SHA		0x0300000E
    149 #define SSL3_CK_DH_RSA_DES_64_CBC_SHA		0x0300000F
    150 #define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 	0x03000010
    151 
    152 #define SSL3_CK_EDH_DSS_DES_40_CBC_SHA		0x03000011
    153 #define SSL3_CK_EDH_DSS_DES_64_CBC_SHA		0x03000012
    154 #define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA	0x03000013
    155 #define SSL3_CK_EDH_RSA_DES_40_CBC_SHA		0x03000014
    156 #define SSL3_CK_EDH_RSA_DES_64_CBC_SHA		0x03000015
    157 #define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA	0x03000016
    158 
    159 #define SSL3_CK_ADH_RC4_40_MD5			0x03000017
    160 #define SSL3_CK_ADH_RC4_128_MD5			0x03000018
    161 #define SSL3_CK_ADH_DES_40_CBC_SHA		0x03000019
    162 #define SSL3_CK_ADH_DES_64_CBC_SHA		0x0300001A
    163 #define SSL3_CK_ADH_DES_192_CBC_SHA		0x0300001B
    164 
    165 #if 0
    166 	#define SSL3_CK_FZA_DMS_NULL_SHA		0x0300001C
    167 	#define SSL3_CK_FZA_DMS_FZA_SHA			0x0300001D
    168 	#if 0 /* Because it clashes with KRB5, is never used any more, and is safe
    169 		 to remove according to David Hopwood <david.hopwood (at) zetnet.co.uk>
    170 		 of the ietf-tls list */
    171 	#define SSL3_CK_FZA_DMS_RC4_SHA			0x0300001E
    172 	#endif
    173 #endif
    174 
    175 /*    VRS Additional Kerberos5 entries
    176  */
    177 #define SSL3_CK_KRB5_DES_64_CBC_SHA		0x0300001E
    178 #define SSL3_CK_KRB5_DES_192_CBC3_SHA		0x0300001F
    179 #define SSL3_CK_KRB5_RC4_128_SHA		0x03000020
    180 #define SSL3_CK_KRB5_IDEA_128_CBC_SHA	       	0x03000021
    181 #define SSL3_CK_KRB5_DES_64_CBC_MD5       	0x03000022
    182 #define SSL3_CK_KRB5_DES_192_CBC3_MD5       	0x03000023
    183 #define SSL3_CK_KRB5_RC4_128_MD5	       	0x03000024
    184 #define SSL3_CK_KRB5_IDEA_128_CBC_MD5 		0x03000025
    185 
    186 #define SSL3_CK_KRB5_DES_40_CBC_SHA 		0x03000026
    187 #define SSL3_CK_KRB5_RC2_40_CBC_SHA 		0x03000027
    188 #define SSL3_CK_KRB5_RC4_40_SHA	 		0x03000028
    189 #define SSL3_CK_KRB5_DES_40_CBC_MD5 		0x03000029
    190 #define SSL3_CK_KRB5_RC2_40_CBC_MD5 		0x0300002A
    191 #define SSL3_CK_KRB5_RC4_40_MD5	 		0x0300002B
    192 
    193 #define SSL3_TXT_RSA_NULL_MD5			"NULL-MD5"
    194 #define SSL3_TXT_RSA_NULL_SHA			"NULL-SHA"
    195 #define SSL3_TXT_RSA_RC4_40_MD5 		"EXP-RC4-MD5"
    196 #define SSL3_TXT_RSA_RC4_128_MD5		"RC4-MD5"
    197 #define SSL3_TXT_RSA_RC4_128_SHA		"RC4-SHA"
    198 #define SSL3_TXT_RSA_RC2_40_MD5			"EXP-RC2-CBC-MD5"
    199 #define SSL3_TXT_RSA_IDEA_128_SHA		"IDEA-CBC-SHA"
    200 #define SSL3_TXT_RSA_DES_40_CBC_SHA		"EXP-DES-CBC-SHA"
    201 #define SSL3_TXT_RSA_DES_64_CBC_SHA		"DES-CBC-SHA"
    202 #define SSL3_TXT_RSA_DES_192_CBC3_SHA		"DES-CBC3-SHA"
    203 
    204 #define SSL3_TXT_DH_DSS_DES_40_CBC_SHA		"EXP-DH-DSS-DES-CBC-SHA"
    205 #define SSL3_TXT_DH_DSS_DES_64_CBC_SHA		"DH-DSS-DES-CBC-SHA"
    206 #define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA 	"DH-DSS-DES-CBC3-SHA"
    207 #define SSL3_TXT_DH_RSA_DES_40_CBC_SHA		"EXP-DH-RSA-DES-CBC-SHA"
    208 #define SSL3_TXT_DH_RSA_DES_64_CBC_SHA		"DH-RSA-DES-CBC-SHA"
    209 #define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA 	"DH-RSA-DES-CBC3-SHA"
    210 
    211 #define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA		"EXP-EDH-DSS-DES-CBC-SHA"
    212 #define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA		"EDH-DSS-DES-CBC-SHA"
    213 #define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA	"EDH-DSS-DES-CBC3-SHA"
    214 #define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA		"EXP-EDH-RSA-DES-CBC-SHA"
    215 #define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA		"EDH-RSA-DES-CBC-SHA"
    216 #define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA	"EDH-RSA-DES-CBC3-SHA"
    217 
    218 #define SSL3_TXT_ADH_RC4_40_MD5			"EXP-ADH-RC4-MD5"
    219 #define SSL3_TXT_ADH_RC4_128_MD5		"ADH-RC4-MD5"
    220 #define SSL3_TXT_ADH_DES_40_CBC_SHA		"EXP-ADH-DES-CBC-SHA"
    221 #define SSL3_TXT_ADH_DES_64_CBC_SHA		"ADH-DES-CBC-SHA"
    222 #define SSL3_TXT_ADH_DES_192_CBC_SHA		"ADH-DES-CBC3-SHA"
    223 
    224 #if 0
    225 	#define SSL3_TXT_FZA_DMS_NULL_SHA		"FZA-NULL-SHA"
    226 	#define SSL3_TXT_FZA_DMS_FZA_SHA		"FZA-FZA-CBC-SHA"
    227 	#define SSL3_TXT_FZA_DMS_RC4_SHA		"FZA-RC4-SHA"
    228 #endif
    229 
    230 #define SSL3_TXT_KRB5_DES_64_CBC_SHA		"KRB5-DES-CBC-SHA"
    231 #define SSL3_TXT_KRB5_DES_192_CBC3_SHA		"KRB5-DES-CBC3-SHA"
    232 #define SSL3_TXT_KRB5_RC4_128_SHA		"KRB5-RC4-SHA"
    233 #define SSL3_TXT_KRB5_IDEA_128_CBC_SHA	       	"KRB5-IDEA-CBC-SHA"
    234 #define SSL3_TXT_KRB5_DES_64_CBC_MD5       	"KRB5-DES-CBC-MD5"
    235 #define SSL3_TXT_KRB5_DES_192_CBC3_MD5       	"KRB5-DES-CBC3-MD5"
    236 #define SSL3_TXT_KRB5_RC4_128_MD5		"KRB5-RC4-MD5"
    237 #define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 		"KRB5-IDEA-CBC-MD5"
    238 
    239 #define SSL3_TXT_KRB5_DES_40_CBC_SHA 		"EXP-KRB5-DES-CBC-SHA"
    240 #define SSL3_TXT_KRB5_RC2_40_CBC_SHA 		"EXP-KRB5-RC2-CBC-SHA"
    241 #define SSL3_TXT_KRB5_RC4_40_SHA	 	"EXP-KRB5-RC4-SHA"
    242 #define SSL3_TXT_KRB5_DES_40_CBC_MD5 		"EXP-KRB5-DES-CBC-MD5"
    243 #define SSL3_TXT_KRB5_RC2_40_CBC_MD5 		"EXP-KRB5-RC2-CBC-MD5"
    244 #define SSL3_TXT_KRB5_RC4_40_MD5	 	"EXP-KRB5-RC4-MD5"
    245 
    246 #define SSL3_SSL_SESSION_ID_LENGTH		32
    247 #define SSL3_MAX_SSL_SESSION_ID_LENGTH		32
    248 
    249 #define SSL3_MASTER_SECRET_SIZE			48
    250 #define SSL3_RANDOM_SIZE			32
    251 #define SSL3_SESSION_ID_SIZE			32
    252 #define SSL3_RT_HEADER_LENGTH			5
    253 
    254 #ifndef SSL3_ALIGN_PAYLOAD
    255  /* Some will argue that this increases memory footprint, but it's
    256   * not actually true. Point is that malloc has to return at least
    257   * 64-bit aligned pointers, meaning that allocating 5 bytes wastes
    258   * 3 bytes in either case. Suggested pre-gaping simply moves these
    259   * wasted bytes from the end of allocated region to its front,
    260   * but makes data payload aligned, which improves performance:-) */
    261 # define SSL3_ALIGN_PAYLOAD			8
    262 #else
    263 # if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0
    264 #  error "insane SSL3_ALIGN_PAYLOAD"
    265 #  undef SSL3_ALIGN_PAYLOAD
    266 # endif
    267 #endif
    268 
    269 /* This is the maximum MAC (digest) size used by the SSL library.
    270  * Currently maximum of 20 is used by SHA1, but we reserve for
    271  * future extension for 512-bit hashes.
    272  */
    273 
    274 #define SSL3_RT_MAX_MD_SIZE			64
    275 
    276 /* Maximum block size used in all ciphersuites. Currently 16 for AES.
    277  */
    278 
    279 #define	SSL_RT_MAX_CIPHER_BLOCK_SIZE		16
    280 
    281 #define SSL3_RT_MAX_EXTRA			(16384)
    282 
    283 /* Maximum plaintext length: defined by SSL/TLS standards */
    284 #define SSL3_RT_MAX_PLAIN_LENGTH		16384
    285 /* Maximum compression overhead: defined by SSL/TLS standards */
    286 #define SSL3_RT_MAX_COMPRESSED_OVERHEAD		1024
    287 
    288 /* The standards give a maximum encryption overhead of 1024 bytes.
    289  * In practice the value is lower than this. The overhead is the maximum
    290  * number of padding bytes (256) plus the mac size.
    291  */
    292 #define SSL3_RT_MAX_ENCRYPTED_OVERHEAD	(256 + SSL3_RT_MAX_MD_SIZE)
    293 
    294 /* OpenSSL currently only uses a padding length of at most one block so
    295  * the send overhead is smaller.
    296  */
    297 
    298 #define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \
    299 			(SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
    300 
    301 /* If compression isn't used don't include the compression overhead */
    302 
    303 #ifdef OPENSSL_NO_COMP
    304 #define SSL3_RT_MAX_COMPRESSED_LENGTH		SSL3_RT_MAX_PLAIN_LENGTH
    305 #else
    306 #define SSL3_RT_MAX_COMPRESSED_LENGTH	\
    307 		(SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD)
    308 #endif
    309 #define SSL3_RT_MAX_ENCRYPTED_LENGTH	\
    310 		(SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH)
    311 #define SSL3_RT_MAX_PACKET_SIZE		\
    312 		(SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)
    313 
    314 #define SSL3_MD_CLIENT_FINISHED_CONST	"\x43\x4C\x4E\x54"
    315 #define SSL3_MD_SERVER_FINISHED_CONST	"\x53\x52\x56\x52"
    316 
    317 #define SSL3_VERSION			0x0300
    318 #define SSL3_VERSION_MAJOR		0x03
    319 #define SSL3_VERSION_MINOR		0x00
    320 
    321 #define SSL3_RT_CHANGE_CIPHER_SPEC	20
    322 #define SSL3_RT_ALERT			21
    323 #define SSL3_RT_HANDSHAKE		22
    324 #define SSL3_RT_APPLICATION_DATA	23
    325 #define TLS1_RT_HEARTBEAT		24
    326 
    327 #define SSL3_AL_WARNING			1
    328 #define SSL3_AL_FATAL			2
    329 
    330 #define SSL3_AD_CLOSE_NOTIFY		 0
    331 #define SSL3_AD_UNEXPECTED_MESSAGE	10	/* fatal */
    332 #define SSL3_AD_BAD_RECORD_MAC		20	/* fatal */
    333 #define SSL3_AD_DECOMPRESSION_FAILURE	30	/* fatal */
    334 #define SSL3_AD_HANDSHAKE_FAILURE	40	/* fatal */
    335 #define SSL3_AD_NO_CERTIFICATE		41
    336 #define SSL3_AD_BAD_CERTIFICATE		42
    337 #define SSL3_AD_UNSUPPORTED_CERTIFICATE	43
    338 #define SSL3_AD_CERTIFICATE_REVOKED	44
    339 #define SSL3_AD_CERTIFICATE_EXPIRED	45
    340 #define SSL3_AD_CERTIFICATE_UNKNOWN	46
    341 #define SSL3_AD_ILLEGAL_PARAMETER	47	/* fatal */
    342 
    343 #define TLS1_HB_REQUEST		1
    344 #define TLS1_HB_RESPONSE	2
    345 
    346 #ifndef OPENSSL_NO_SSL_INTERN
    347 
    348 typedef struct ssl3_record_st
    349 	{
    350 /*r */	int type;               /* type of record */
    351 /*rw*/	unsigned int length;    /* How many bytes available */
    352 /*r */	unsigned int off;       /* read/write offset into 'buf' */
    353 /*rw*/	unsigned char *data;    /* pointer to the record data */
    354 /*rw*/	unsigned char *input;   /* where the decode bytes are */
    355 /*r */	unsigned char *comp;    /* only used with decompression - malloc()ed */
    356 /*r */  unsigned long epoch;    /* epoch number, needed by DTLS1 */
    357 /*r */  unsigned char seq_num[8]; /* sequence number, needed by DTLS1 */
    358 	} SSL3_RECORD;
    359 
    360 typedef struct ssl3_buffer_st
    361 	{
    362 	unsigned char *buf;     /* at least SSL3_RT_MAX_PACKET_SIZE bytes,
    363 	                         * see ssl3_setup_buffers() */
    364 	size_t len;             /* buffer size */
    365 	int offset;             /* where to 'copy from' */
    366 	int left;               /* how many bytes left */
    367 	} SSL3_BUFFER;
    368 
    369 #endif
    370 
    371 #define SSL3_CT_RSA_SIGN			1
    372 #define SSL3_CT_DSS_SIGN			2
    373 #define SSL3_CT_RSA_FIXED_DH			3
    374 #define SSL3_CT_DSS_FIXED_DH			4
    375 #define SSL3_CT_RSA_EPHEMERAL_DH		5
    376 #define SSL3_CT_DSS_EPHEMERAL_DH		6
    377 #define SSL3_CT_FORTEZZA_DMS			20
    378 /* SSL3_CT_NUMBER is used to size arrays and it must be large
    379  * enough to contain all of the cert types defined either for
    380  * SSLv3 and TLSv1.
    381  */
    382 #define SSL3_CT_NUMBER			9
    383 
    384 
    385 #define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS	0x0001
    386 #define SSL3_FLAGS_DELAY_CLIENT_FINISHED	0x0002
    387 #define SSL3_FLAGS_POP_BUFFER			0x0004
    388 #define TLS1_FLAGS_TLS_PADDING_BUG		0x0008
    389 #define TLS1_FLAGS_SKIP_CERT_VERIFY		0x0010
    390 #define TLS1_FLAGS_KEEP_HANDSHAKE		0x0020
    391 
    392 /* SSL3_FLAGS_SGC_RESTART_DONE is set when we
    393  * restart a handshake because of MS SGC and so prevents us
    394  * from restarting the handshake in a loop. It's reset on a
    395  * renegotiation, so effectively limits the client to one restart
    396  * per negotiation. This limits the possibility of a DDoS
    397  * attack where the client handshakes in a loop using SGC to
    398  * restart. Servers which permit renegotiation can still be
    399  * effected, but we can't prevent that.
    400  */
    401 #define SSL3_FLAGS_SGC_RESTART_DONE		0x0040
    402 
    403 #ifndef OPENSSL_NO_SSL_INTERN
    404 
    405 typedef struct ssl3_state_st
    406 	{
    407 	long flags;
    408 	int delay_buf_pop_ret;
    409 
    410 	unsigned char read_sequence[8];
    411 	int read_mac_secret_size;
    412 	unsigned char read_mac_secret[EVP_MAX_MD_SIZE];
    413 	unsigned char write_sequence[8];
    414 	int write_mac_secret_size;
    415 	unsigned char write_mac_secret[EVP_MAX_MD_SIZE];
    416 
    417 	unsigned char server_random[SSL3_RANDOM_SIZE];
    418 	unsigned char client_random[SSL3_RANDOM_SIZE];
    419 
    420 	/* flags for countermeasure against known-IV weakness */
    421 	int need_empty_fragments;
    422 	int empty_fragment_done;
    423 
    424 	/* The value of 'extra' when the buffers were initialized */
    425 	int init_extra;
    426 
    427 	SSL3_BUFFER rbuf;	/* read IO goes into here */
    428 	SSL3_BUFFER wbuf;	/* write IO goes into here */
    429 
    430 	SSL3_RECORD rrec;	/* each decoded record goes in here */
    431 	SSL3_RECORD wrec;	/* goes out from here */
    432 
    433 	/* storage for Alert/Handshake protocol data received but not
    434 	 * yet processed by ssl3_read_bytes: */
    435 	unsigned char alert_fragment[2];
    436 	unsigned int alert_fragment_len;
    437 	unsigned char handshake_fragment[4];
    438 	unsigned int handshake_fragment_len;
    439 
    440 	/* partial write - check the numbers match */
    441 	unsigned int wnum;	/* number of bytes sent so far */
    442 	int wpend_tot;		/* number bytes written */
    443 	int wpend_type;
    444 	int wpend_ret;		/* number of bytes submitted */
    445 	const unsigned char *wpend_buf;
    446 
    447 	/* used during startup, digest all incoming/outgoing packets */
    448 	BIO *handshake_buffer;
    449 	/* When set of handshake digests is determined, buffer is hashed
    450 	 * and freed and MD_CTX-es for all required digests are stored in
    451 	 * this array */
    452 	EVP_MD_CTX **handshake_dgst;
    453 	/* this is set whenerver we see a change_cipher_spec message
    454 	 * come in when we are not looking for one */
    455 	int change_cipher_spec;
    456 
    457 	int warn_alert;
    458 	int fatal_alert;
    459 	/* we allow one fatal and one warning alert to be outstanding,
    460 	 * send close alert via the warning alert */
    461 	int alert_dispatch;
    462 	unsigned char send_alert[2];
    463 
    464 	/* This flag is set when we should renegotiate ASAP, basically when
    465 	 * there is no more data in the read or write buffers */
    466 	int renegotiate;
    467 	int total_renegotiations;
    468 	int num_renegotiations;
    469 
    470 	int in_read_app_data;
    471 
    472 	/* Opaque PRF input as used for the current handshake.
    473 	 * These fields are used only if TLSEXT_TYPE_opaque_prf_input is defined
    474 	 * (otherwise, they are merely present to improve binary compatibility) */
    475 	void *client_opaque_prf_input;
    476 	size_t client_opaque_prf_input_len;
    477 	void *server_opaque_prf_input;
    478 	size_t server_opaque_prf_input_len;
    479 
    480 	struct	{
    481 		/* actually only needs to be 16+20 */
    482 		unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
    483 
    484 		/* actually only need to be 16+20 for SSLv3 and 12 for TLS */
    485 		unsigned char finish_md[EVP_MAX_MD_SIZE*2];
    486 		int finish_md_len;
    487 		unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2];
    488 		int peer_finish_md_len;
    489 
    490 		unsigned long message_size;
    491 		int message_type;
    492 
    493 		/* used to hold the new cipher we are going to use */
    494 		const SSL_CIPHER *new_cipher;
    495 #ifndef OPENSSL_NO_DH
    496 		DH *dh;
    497 #endif
    498 
    499 #ifndef OPENSSL_NO_ECDH
    500 		EC_KEY *ecdh; /* holds short lived ECDH key */
    501 #endif
    502 
    503 		/* used when SSL_ST_FLUSH_DATA is entered */
    504 		int next_state;
    505 
    506 		int reuse_message;
    507 
    508 		/* used for certificate requests */
    509 		int cert_req;
    510 		int ctype_num;
    511 		char ctype[SSL3_CT_NUMBER];
    512 		STACK_OF(X509_NAME) *ca_names;
    513 
    514 		int use_rsa_tmp;
    515 
    516 		int key_block_length;
    517 		unsigned char *key_block;
    518 
    519 		const EVP_CIPHER *new_sym_enc;
    520 		const EVP_MD *new_hash;
    521 		int new_mac_pkey_type;
    522 		int new_mac_secret_size;
    523 #ifndef OPENSSL_NO_COMP
    524 		const SSL_COMP *new_compression;
    525 #else
    526 		char *new_compression;
    527 #endif
    528 		int cert_request;
    529 		} tmp;
    530 
    531         /* Connection binding to prevent renegotiation attacks */
    532         unsigned char previous_client_finished[EVP_MAX_MD_SIZE];
    533         unsigned char previous_client_finished_len;
    534         unsigned char previous_server_finished[EVP_MAX_MD_SIZE];
    535         unsigned char previous_server_finished_len;
    536         int send_connection_binding; /* TODOEKR */
    537 
    538 #ifndef OPENSSL_NO_NEXTPROTONEG
    539 	/* Set if we saw the Next Protocol Negotiation extension from our peer. */
    540 	int next_proto_neg_seen;
    541 #endif
    542 
    543 	/* In a client, this means that the server supported Channel ID and that
    544 	 * a Channel ID was sent. In a server it means that we echoed support
    545 	 * for Channel IDs and that tlsext_channel_id will be valid after the
    546 	 * handshake. */
    547 	char tlsext_channel_id_valid;
    548 	/* For a server:
    549 	 *     If |tlsext_channel_id_valid| is true, then this contains the
    550 	 *     verified Channel ID from the client: a P256 point, (x,y), where
    551 	 *     each are big-endian values. */
    552 	unsigned char tlsext_channel_id[64];
    553 
    554 	/* ALPN information
    555 	 * (we are in the process of transitioning from NPN to ALPN.) */
    556 
    557 	/* In a server these point to the selected ALPN protocol after the
    558 	 * ClientHello has been processed. In a client these contain the
    559 	 * protocol that the server selected once the ServerHello has been
    560 	 * processed. */
    561 	unsigned char *alpn_selected;
    562 	unsigned alpn_selected_len;
    563 
    564 	/* These point to the digest function to use for signatures made with
    565 	 * each type of public key. A NULL value indicates that the default
    566 	 * digest should be used, which is SHA1 as of TLS 1.2.
    567 	 *
    568 	 * (These should be in the tmp member, but we have to put them here to
    569 	 * ensure binary compatibility with earlier OpenSSL 1.0.* releases.) */
    570 	const EVP_MD *digest_rsa;
    571 	const EVP_MD *digest_dsa;
    572 	const EVP_MD *digest_ecdsa;
    573 	} SSL3_STATE;
    574 
    575 #endif
    576 
    577 /* SSLv3 */
    578 /*client */
    579 /* extra state */
    580 #define SSL3_ST_CW_FLUSH		(0x100|SSL_ST_CONNECT)
    581 #define SSL3_ST_CUTTHROUGH_COMPLETE	(0x101|SSL_ST_CONNECT)
    582 #ifndef OPENSSL_NO_SCTP
    583 #define DTLS1_SCTP_ST_CW_WRITE_SOCK			(0x310|SSL_ST_CONNECT)
    584 #define DTLS1_SCTP_ST_CR_READ_SOCK			(0x320|SSL_ST_CONNECT)
    585 #endif
    586 /* write to server */
    587 #define SSL3_ST_CW_CLNT_HELLO_A		(0x110|SSL_ST_CONNECT)
    588 #define SSL3_ST_CW_CLNT_HELLO_B		(0x111|SSL_ST_CONNECT)
    589 /* read from server */
    590 #define SSL3_ST_CR_SRVR_HELLO_A		(0x120|SSL_ST_CONNECT)
    591 #define SSL3_ST_CR_SRVR_HELLO_B		(0x121|SSL_ST_CONNECT)
    592 #define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT)
    593 #define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT)
    594 #define SSL3_ST_CR_CERT_A		(0x130|SSL_ST_CONNECT)
    595 #define SSL3_ST_CR_CERT_B		(0x131|SSL_ST_CONNECT)
    596 #define SSL3_ST_CR_KEY_EXCH_A		(0x140|SSL_ST_CONNECT)
    597 #define SSL3_ST_CR_KEY_EXCH_B		(0x141|SSL_ST_CONNECT)
    598 #define SSL3_ST_CR_CERT_REQ_A		(0x150|SSL_ST_CONNECT)
    599 #define SSL3_ST_CR_CERT_REQ_B		(0x151|SSL_ST_CONNECT)
    600 #define SSL3_ST_CR_SRVR_DONE_A		(0x160|SSL_ST_CONNECT)
    601 #define SSL3_ST_CR_SRVR_DONE_B		(0x161|SSL_ST_CONNECT)
    602 /* write to server */
    603 #define SSL3_ST_CW_CERT_A		(0x170|SSL_ST_CONNECT)
    604 #define SSL3_ST_CW_CERT_B		(0x171|SSL_ST_CONNECT)
    605 #define SSL3_ST_CW_CERT_C		(0x172|SSL_ST_CONNECT)
    606 #define SSL3_ST_CW_CERT_D		(0x173|SSL_ST_CONNECT)
    607 #define SSL3_ST_CW_KEY_EXCH_A		(0x180|SSL_ST_CONNECT)
    608 #define SSL3_ST_CW_KEY_EXCH_B		(0x181|SSL_ST_CONNECT)
    609 #define SSL3_ST_CW_CERT_VRFY_A		(0x190|SSL_ST_CONNECT)
    610 #define SSL3_ST_CW_CERT_VRFY_B		(0x191|SSL_ST_CONNECT)
    611 #define SSL3_ST_CW_CHANGE_A		(0x1A0|SSL_ST_CONNECT)
    612 #define SSL3_ST_CW_CHANGE_B		(0x1A1|SSL_ST_CONNECT)
    613 #ifndef OPENSSL_NO_NEXTPROTONEG
    614 #define SSL3_ST_CW_NEXT_PROTO_A		(0x200|SSL_ST_CONNECT)
    615 #define SSL3_ST_CW_NEXT_PROTO_B		(0x201|SSL_ST_CONNECT)
    616 #endif
    617 #define SSL3_ST_CW_CHANNEL_ID_A		(0x210|SSL_ST_CONNECT)
    618 #define SSL3_ST_CW_CHANNEL_ID_B		(0x211|SSL_ST_CONNECT)
    619 #define SSL3_ST_CW_FINISHED_A		(0x1B0|SSL_ST_CONNECT)
    620 #define SSL3_ST_CW_FINISHED_B		(0x1B1|SSL_ST_CONNECT)
    621 /* read from server */
    622 #define SSL3_ST_CR_CHANGE_A		(0x1C0|SSL_ST_CONNECT)
    623 #define SSL3_ST_CR_CHANGE_B		(0x1C1|SSL_ST_CONNECT)
    624 #define SSL3_ST_CR_FINISHED_A		(0x1D0|SSL_ST_CONNECT)
    625 #define SSL3_ST_CR_FINISHED_B		(0x1D1|SSL_ST_CONNECT)
    626 #define SSL3_ST_CR_SESSION_TICKET_A	(0x1E0|SSL_ST_CONNECT)
    627 #define SSL3_ST_CR_SESSION_TICKET_B	(0x1E1|SSL_ST_CONNECT)
    628 #define SSL3_ST_CR_CERT_STATUS_A	(0x1F0|SSL_ST_CONNECT)
    629 #define SSL3_ST_CR_CERT_STATUS_B	(0x1F1|SSL_ST_CONNECT)
    630 
    631 /* server */
    632 /* extra state */
    633 #define SSL3_ST_SW_FLUSH		(0x100|SSL_ST_ACCEPT)
    634 #ifndef OPENSSL_NO_SCTP
    635 #define DTLS1_SCTP_ST_SW_WRITE_SOCK			(0x310|SSL_ST_ACCEPT)
    636 #define DTLS1_SCTP_ST_SR_READ_SOCK			(0x320|SSL_ST_ACCEPT)
    637 #endif
    638 /* read from client */
    639 /* Do not change the number values, they do matter */
    640 #define SSL3_ST_SR_CLNT_HELLO_A		(0x110|SSL_ST_ACCEPT)
    641 #define SSL3_ST_SR_CLNT_HELLO_B		(0x111|SSL_ST_ACCEPT)
    642 #define SSL3_ST_SR_CLNT_HELLO_C		(0x112|SSL_ST_ACCEPT)
    643 /* write to client */
    644 #define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT)
    645 #define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT)
    646 #define SSL3_ST_SW_HELLO_REQ_A		(0x120|SSL_ST_ACCEPT)
    647 #define SSL3_ST_SW_HELLO_REQ_B		(0x121|SSL_ST_ACCEPT)
    648 #define SSL3_ST_SW_HELLO_REQ_C		(0x122|SSL_ST_ACCEPT)
    649 #define SSL3_ST_SW_SRVR_HELLO_A		(0x130|SSL_ST_ACCEPT)
    650 #define SSL3_ST_SW_SRVR_HELLO_B		(0x131|SSL_ST_ACCEPT)
    651 #define SSL3_ST_SW_CERT_A		(0x140|SSL_ST_ACCEPT)
    652 #define SSL3_ST_SW_CERT_B		(0x141|SSL_ST_ACCEPT)
    653 #define SSL3_ST_SW_KEY_EXCH_A		(0x150|SSL_ST_ACCEPT)
    654 #define SSL3_ST_SW_KEY_EXCH_B		(0x151|SSL_ST_ACCEPT)
    655 #define SSL3_ST_SW_CERT_REQ_A		(0x160|SSL_ST_ACCEPT)
    656 #define SSL3_ST_SW_CERT_REQ_B		(0x161|SSL_ST_ACCEPT)
    657 #define SSL3_ST_SW_SRVR_DONE_A		(0x170|SSL_ST_ACCEPT)
    658 #define SSL3_ST_SW_SRVR_DONE_B		(0x171|SSL_ST_ACCEPT)
    659 /* read from client */
    660 #define SSL3_ST_SR_CERT_A		(0x180|SSL_ST_ACCEPT)
    661 #define SSL3_ST_SR_CERT_B		(0x181|SSL_ST_ACCEPT)
    662 #define SSL3_ST_SR_KEY_EXCH_A		(0x190|SSL_ST_ACCEPT)
    663 #define SSL3_ST_SR_KEY_EXCH_B		(0x191|SSL_ST_ACCEPT)
    664 #define SSL3_ST_SR_CERT_VRFY_A		(0x1A0|SSL_ST_ACCEPT)
    665 #define SSL3_ST_SR_CERT_VRFY_B		(0x1A1|SSL_ST_ACCEPT)
    666 #define SSL3_ST_SR_CHANGE_A		(0x1B0|SSL_ST_ACCEPT)
    667 #define SSL3_ST_SR_CHANGE_B		(0x1B1|SSL_ST_ACCEPT)
    668 #define SSL3_ST_SR_POST_CLIENT_CERT	(0x1BF|SSL_ST_ACCEPT)
    669 #ifndef OPENSSL_NO_NEXTPROTONEG
    670 #define SSL3_ST_SR_NEXT_PROTO_A		(0x210|SSL_ST_ACCEPT)
    671 #define SSL3_ST_SR_NEXT_PROTO_B		(0x211|SSL_ST_ACCEPT)
    672 #endif
    673 #define SSL3_ST_SR_CHANNEL_ID_A		(0x220|SSL_ST_ACCEPT)
    674 #define SSL3_ST_SR_CHANNEL_ID_B		(0x221|SSL_ST_ACCEPT)
    675 #define SSL3_ST_SR_FINISHED_A		(0x1C0|SSL_ST_ACCEPT)
    676 #define SSL3_ST_SR_FINISHED_B		(0x1C1|SSL_ST_ACCEPT)
    677 /* write to client */
    678 #define SSL3_ST_SW_CHANGE_A		(0x1D0|SSL_ST_ACCEPT)
    679 #define SSL3_ST_SW_CHANGE_B		(0x1D1|SSL_ST_ACCEPT)
    680 #define SSL3_ST_SW_FINISHED_A		(0x1E0|SSL_ST_ACCEPT)
    681 #define SSL3_ST_SW_FINISHED_B		(0x1E1|SSL_ST_ACCEPT)
    682 #define SSL3_ST_SW_SESSION_TICKET_A	(0x1F0|SSL_ST_ACCEPT)
    683 #define SSL3_ST_SW_SESSION_TICKET_B	(0x1F1|SSL_ST_ACCEPT)
    684 #define SSL3_ST_SW_CERT_STATUS_A	(0x200|SSL_ST_ACCEPT)
    685 #define SSL3_ST_SW_CERT_STATUS_B	(0x201|SSL_ST_ACCEPT)
    686 
    687 #define SSL3_MT_HELLO_REQUEST			0
    688 #define SSL3_MT_CLIENT_HELLO			1
    689 #define SSL3_MT_SERVER_HELLO			2
    690 #define	SSL3_MT_NEWSESSION_TICKET		4
    691 #define SSL3_MT_CERTIFICATE			11
    692 #define SSL3_MT_SERVER_KEY_EXCHANGE		12
    693 #define SSL3_MT_CERTIFICATE_REQUEST		13
    694 #define SSL3_MT_SERVER_DONE			14
    695 #define SSL3_MT_CERTIFICATE_VERIFY		15
    696 #define SSL3_MT_CLIENT_KEY_EXCHANGE		16
    697 #define SSL3_MT_FINISHED			20
    698 #define SSL3_MT_CERTIFICATE_STATUS		22
    699 #ifndef OPENSSL_NO_NEXTPROTONEG
    700 #define SSL3_MT_NEXT_PROTO			67
    701 #endif
    702 #define SSL3_MT_ENCRYPTED_EXTENSIONS		203
    703 #define DTLS1_MT_HELLO_VERIFY_REQUEST    3
    704 
    705 
    706 #define SSL3_MT_CCS				1
    707 
    708 /* These are used when changing over to a new cipher */
    709 #define SSL3_CC_READ		0x01
    710 #define SSL3_CC_WRITE		0x02
    711 #define SSL3_CC_CLIENT		0x10
    712 #define SSL3_CC_SERVER		0x20
    713 #define SSL3_CHANGE_CIPHER_CLIENT_WRITE	(SSL3_CC_CLIENT|SSL3_CC_WRITE)
    714 #define SSL3_CHANGE_CIPHER_SERVER_READ	(SSL3_CC_SERVER|SSL3_CC_READ)
    715 #define SSL3_CHANGE_CIPHER_CLIENT_READ	(SSL3_CC_CLIENT|SSL3_CC_READ)
    716 #define SSL3_CHANGE_CIPHER_SERVER_WRITE	(SSL3_CC_SERVER|SSL3_CC_WRITE)
    717 
    718 #ifdef  __cplusplus
    719 }
    720 #endif
    721 #endif
    722