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 /* Default buffer length used for writen records.  Thus a generated record
    284  * will contain plaintext no larger than this value. */
    285 #define SSL3_RT_DEFAULT_PLAIN_LENGTH	2048
    286 /* Maximum plaintext length: defined by SSL/TLS standards */
    287 #define SSL3_RT_MAX_PLAIN_LENGTH		16384
    288 /* Maximum compression overhead: defined by SSL/TLS standards */
    289 #define SSL3_RT_MAX_COMPRESSED_OVERHEAD		1024
    290 
    291 /* The standards give a maximum encryption overhead of 1024 bytes.
    292  * In practice the value is lower than this. The overhead is the maximum
    293  * number of padding bytes (256) plus the mac size.
    294  */
    295 #define SSL3_RT_MAX_ENCRYPTED_OVERHEAD	(256 + SSL3_RT_MAX_MD_SIZE)
    296 
    297 /* OpenSSL currently only uses a padding length of at most one block so
    298  * the send overhead is smaller.
    299  */
    300 
    301 #define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \
    302 			(SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
    303 
    304 /* If compression isn't used don't include the compression overhead */
    305 
    306 #ifdef OPENSSL_NO_COMP
    307 #define SSL3_RT_MAX_COMPRESSED_LENGTH		SSL3_RT_MAX_PLAIN_LENGTH
    308 #else
    309 #define SSL3_RT_MAX_COMPRESSED_LENGTH	\
    310 		(SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD)
    311 #endif
    312 #define SSL3_RT_MAX_ENCRYPTED_LENGTH	\
    313 		(SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH)
    314 #define SSL3_RT_MAX_PACKET_SIZE		\
    315 		(SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)
    316 
    317 /* Extra space for empty fragment, headers, MAC, and padding. */
    318 #define SSL3_RT_DEFAULT_WRITE_OVERHEAD  256
    319 #define SSL3_RT_DEFAULT_PACKET_SIZE     4096 - SSL3_RT_DEFAULT_WRITE_OVERHEAD
    320 #if SSL3_RT_DEFAULT_PLAIN_LENGTH + SSL3_RT_DEFAULT_WRITE_OVERHEAD > SSL3_RT_DEFAULT_PACKET_SIZE
    321 #error "Insufficient space allocated for write buffers."
    322 #endif
    323 
    324 #define SSL3_MD_CLIENT_FINISHED_CONST	"\x43\x4C\x4E\x54"
    325 #define SSL3_MD_SERVER_FINISHED_CONST	"\x53\x52\x56\x52"
    326 
    327 #define SSL3_VERSION			0x0300
    328 #define SSL3_VERSION_MAJOR		0x03
    329 #define SSL3_VERSION_MINOR		0x00
    330 
    331 #define SSL3_RT_CHANGE_CIPHER_SPEC	20
    332 #define SSL3_RT_ALERT			21
    333 #define SSL3_RT_HANDSHAKE		22
    334 #define SSL3_RT_APPLICATION_DATA	23
    335 #define TLS1_RT_HEARTBEAT		24
    336 
    337 #define SSL3_AL_WARNING			1
    338 #define SSL3_AL_FATAL			2
    339 
    340 #define SSL3_AD_CLOSE_NOTIFY		 0
    341 #define SSL3_AD_UNEXPECTED_MESSAGE	10	/* fatal */
    342 #define SSL3_AD_BAD_RECORD_MAC		20	/* fatal */
    343 #define SSL3_AD_DECOMPRESSION_FAILURE	30	/* fatal */
    344 #define SSL3_AD_HANDSHAKE_FAILURE	40	/* fatal */
    345 #define SSL3_AD_NO_CERTIFICATE		41
    346 #define SSL3_AD_BAD_CERTIFICATE		42
    347 #define SSL3_AD_UNSUPPORTED_CERTIFICATE	43
    348 #define SSL3_AD_CERTIFICATE_REVOKED	44
    349 #define SSL3_AD_CERTIFICATE_EXPIRED	45
    350 #define SSL3_AD_CERTIFICATE_UNKNOWN	46
    351 #define SSL3_AD_ILLEGAL_PARAMETER	47	/* fatal */
    352 
    353 #define TLS1_HB_REQUEST		1
    354 #define TLS1_HB_RESPONSE	2
    355 
    356 #ifndef OPENSSL_NO_SSL_INTERN
    357 
    358 typedef struct ssl3_record_st
    359 	{
    360 /*r */	int type;               /* type of record */
    361 /*rw*/	unsigned int length;    /* How many bytes available */
    362 /*r */	unsigned int off;       /* read/write offset into 'buf' */
    363 /*rw*/	unsigned char *data;    /* pointer to the record data */
    364 /*rw*/	unsigned char *input;   /* where the decode bytes are */
    365 /*r */	unsigned char *comp;    /* only used with decompression - malloc()ed */
    366 /*r */  unsigned long epoch;    /* epoch number, needed by DTLS1 */
    367 /*r */  unsigned char seq_num[8]; /* sequence number, needed by DTLS1 */
    368 	} SSL3_RECORD;
    369 
    370 typedef struct ssl3_buffer_st
    371 	{
    372 	unsigned char *buf;     /* at least SSL3_RT_MAX_PACKET_SIZE bytes,
    373 	                         * see ssl3_setup_buffers() */
    374 	size_t len;             /* buffer size */
    375 	int offset;             /* where to 'copy from' */
    376 	int left;               /* how many bytes left */
    377 	} SSL3_BUFFER;
    378 
    379 #endif
    380 
    381 #define SSL3_CT_RSA_SIGN			1
    382 #define SSL3_CT_DSS_SIGN			2
    383 #define SSL3_CT_RSA_FIXED_DH			3
    384 #define SSL3_CT_DSS_FIXED_DH			4
    385 #define SSL3_CT_RSA_EPHEMERAL_DH		5
    386 #define SSL3_CT_DSS_EPHEMERAL_DH		6
    387 #define SSL3_CT_FORTEZZA_DMS			20
    388 /* SSL3_CT_NUMBER is used to size arrays and it must be large
    389  * enough to contain all of the cert types defined either for
    390  * SSLv3 and TLSv1.
    391  */
    392 #define SSL3_CT_NUMBER			9
    393 
    394 
    395 #define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS	0x0001
    396 #define SSL3_FLAGS_DELAY_CLIENT_FINISHED	0x0002
    397 #define SSL3_FLAGS_POP_BUFFER			0x0004
    398 #define TLS1_FLAGS_TLS_PADDING_BUG		0x0008
    399 #define TLS1_FLAGS_SKIP_CERT_VERIFY		0x0010
    400 #define TLS1_FLAGS_KEEP_HANDSHAKE		0x0020
    401 
    402 /* SSL3_FLAGS_SGC_RESTART_DONE is set when we
    403  * restart a handshake because of MS SGC and so prevents us
    404  * from restarting the handshake in a loop. It's reset on a
    405  * renegotiation, so effectively limits the client to one restart
    406  * per negotiation. This limits the possibility of a DDoS
    407  * attack where the client handshakes in a loop using SGC to
    408  * restart. Servers which permit renegotiation can still be
    409  * effected, but we can't prevent that.
    410  */
    411 #define SSL3_FLAGS_SGC_RESTART_DONE		0x0040
    412 
    413 #ifndef OPENSSL_NO_SSL_INTERN
    414 
    415 typedef struct ssl3_state_st
    416 	{
    417 	long flags;
    418 	int delay_buf_pop_ret;
    419 
    420 	unsigned char read_sequence[8];
    421 	int read_mac_secret_size;
    422 	unsigned char read_mac_secret[EVP_MAX_MD_SIZE];
    423 	unsigned char write_sequence[8];
    424 	int write_mac_secret_size;
    425 	unsigned char write_mac_secret[EVP_MAX_MD_SIZE];
    426 
    427 	unsigned char server_random[SSL3_RANDOM_SIZE];
    428 	unsigned char client_random[SSL3_RANDOM_SIZE];
    429 
    430 	/* flags for countermeasure against known-IV weakness */
    431 	int need_empty_fragments;
    432 	int empty_fragment_done;
    433 
    434 	/* The value of 'extra' when the buffers were initialized */
    435 	int init_extra;
    436 
    437 	SSL3_BUFFER rbuf;	/* read IO goes into here */
    438 	SSL3_BUFFER wbuf;	/* write IO goes into here */
    439 
    440 	SSL3_RECORD rrec;	/* each decoded record goes in here */
    441 	SSL3_RECORD wrec;	/* goes out from here */
    442 
    443 	/* storage for Alert/Handshake protocol data received but not
    444 	 * yet processed by ssl3_read_bytes: */
    445 	unsigned char alert_fragment[2];
    446 	unsigned int alert_fragment_len;
    447 	unsigned char handshake_fragment[4];
    448 	unsigned int handshake_fragment_len;
    449 
    450 	/* partial write - check the numbers match */
    451 	unsigned int wnum;	/* number of bytes sent so far */
    452 	int wpend_tot;		/* number bytes written */
    453 	int wpend_type;
    454 	int wpend_ret;		/* number of bytes submitted */
    455 	const unsigned char *wpend_buf;
    456 
    457 	/* used during startup, digest all incoming/outgoing packets */
    458 	BIO *handshake_buffer;
    459 	/* When set of handshake digests is determined, buffer is hashed
    460 	 * and freed and MD_CTX-es for all required digests are stored in
    461 	 * this array */
    462 	EVP_MD_CTX **handshake_dgst;
    463 	/* this is set whenerver we see a change_cipher_spec message
    464 	 * come in when we are not looking for one */
    465 	int change_cipher_spec;
    466 
    467 	int warn_alert;
    468 	int fatal_alert;
    469 	/* we allow one fatal and one warning alert to be outstanding,
    470 	 * send close alert via the warning alert */
    471 	int alert_dispatch;
    472 	unsigned char send_alert[2];
    473 
    474 	/* This flag is set when we should renegotiate ASAP, basically when
    475 	 * there is no more data in the read or write buffers */
    476 	int renegotiate;
    477 	int total_renegotiations;
    478 	int num_renegotiations;
    479 
    480 	int in_read_app_data;
    481 
    482 	/* Opaque PRF input as used for the current handshake.
    483 	 * These fields are used only if TLSEXT_TYPE_opaque_prf_input is defined
    484 	 * (otherwise, they are merely present to improve binary compatibility) */
    485 	void *client_opaque_prf_input;
    486 	size_t client_opaque_prf_input_len;
    487 	void *server_opaque_prf_input;
    488 	size_t server_opaque_prf_input_len;
    489 
    490 	struct	{
    491 		/* actually only needs to be 16+20 */
    492 		unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
    493 
    494 		/* actually only need to be 16+20 for SSLv3 and 12 for TLS */
    495 		unsigned char finish_md[EVP_MAX_MD_SIZE*2];
    496 		int finish_md_len;
    497 		unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2];
    498 		int peer_finish_md_len;
    499 
    500 		unsigned long message_size;
    501 		int message_type;
    502 
    503 		/* used to hold the new cipher we are going to use */
    504 		const SSL_CIPHER *new_cipher;
    505 #ifndef OPENSSL_NO_DH
    506 		DH *dh;
    507 #endif
    508 
    509 #ifndef OPENSSL_NO_ECDH
    510 		EC_KEY *ecdh; /* holds short lived ECDH key */
    511 #endif
    512 
    513 		/* used when SSL_ST_FLUSH_DATA is entered */
    514 		int next_state;
    515 
    516 		int reuse_message;
    517 
    518 		/* used for certificate requests */
    519 		int cert_req;
    520 		int ctype_num;
    521 		char ctype[SSL3_CT_NUMBER];
    522 		STACK_OF(X509_NAME) *ca_names;
    523 
    524 		int use_rsa_tmp;
    525 
    526 		int key_block_length;
    527 		unsigned char *key_block;
    528 
    529 		const EVP_CIPHER *new_sym_enc;
    530 		const EVP_MD *new_hash;
    531 		int new_mac_pkey_type;
    532 		int new_mac_secret_size;
    533 #ifndef OPENSSL_NO_COMP
    534 		const SSL_COMP *new_compression;
    535 #else
    536 		char *new_compression;
    537 #endif
    538 		int cert_request;
    539 		} tmp;
    540 
    541         /* Connection binding to prevent renegotiation attacks */
    542         unsigned char previous_client_finished[EVP_MAX_MD_SIZE];
    543         unsigned char previous_client_finished_len;
    544         unsigned char previous_server_finished[EVP_MAX_MD_SIZE];
    545         unsigned char previous_server_finished_len;
    546         int send_connection_binding; /* TODOEKR */
    547 
    548 #ifndef OPENSSL_NO_NEXTPROTONEG
    549 	/* Set if we saw the Next Protocol Negotiation extension from our peer. */
    550 	int next_proto_neg_seen;
    551 #endif
    552 	} SSL3_STATE;
    553 
    554 #endif
    555 
    556 /* SSLv3 */
    557 /*client */
    558 /* extra state */
    559 #define SSL3_ST_CW_FLUSH		(0x100|SSL_ST_CONNECT)
    560 #define SSL3_ST_CUTTHROUGH_COMPLETE	(0x101|SSL_ST_CONNECT)
    561 #ifndef OPENSSL_NO_SCTP
    562 #define DTLS1_SCTP_ST_CW_WRITE_SOCK			(0x310|SSL_ST_CONNECT)
    563 #define DTLS1_SCTP_ST_CR_READ_SOCK			(0x320|SSL_ST_CONNECT)
    564 #endif
    565 /* write to server */
    566 #define SSL3_ST_CW_CLNT_HELLO_A		(0x110|SSL_ST_CONNECT)
    567 #define SSL3_ST_CW_CLNT_HELLO_B		(0x111|SSL_ST_CONNECT)
    568 /* read from server */
    569 #define SSL3_ST_CR_SRVR_HELLO_A		(0x120|SSL_ST_CONNECT)
    570 #define SSL3_ST_CR_SRVR_HELLO_B		(0x121|SSL_ST_CONNECT)
    571 #define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT)
    572 #define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT)
    573 #define SSL3_ST_CR_CERT_A		(0x130|SSL_ST_CONNECT)
    574 #define SSL3_ST_CR_CERT_B		(0x131|SSL_ST_CONNECT)
    575 #define SSL3_ST_CR_KEY_EXCH_A		(0x140|SSL_ST_CONNECT)
    576 #define SSL3_ST_CR_KEY_EXCH_B		(0x141|SSL_ST_CONNECT)
    577 #define SSL3_ST_CR_CERT_REQ_A		(0x150|SSL_ST_CONNECT)
    578 #define SSL3_ST_CR_CERT_REQ_B		(0x151|SSL_ST_CONNECT)
    579 #define SSL3_ST_CR_SRVR_DONE_A		(0x160|SSL_ST_CONNECT)
    580 #define SSL3_ST_CR_SRVR_DONE_B		(0x161|SSL_ST_CONNECT)
    581 /* write to server */
    582 #define SSL3_ST_CW_CERT_A		(0x170|SSL_ST_CONNECT)
    583 #define SSL3_ST_CW_CERT_B		(0x171|SSL_ST_CONNECT)
    584 #define SSL3_ST_CW_CERT_C		(0x172|SSL_ST_CONNECT)
    585 #define SSL3_ST_CW_CERT_D		(0x173|SSL_ST_CONNECT)
    586 #define SSL3_ST_CW_KEY_EXCH_A		(0x180|SSL_ST_CONNECT)
    587 #define SSL3_ST_CW_KEY_EXCH_B		(0x181|SSL_ST_CONNECT)
    588 #define SSL3_ST_CW_CERT_VRFY_A		(0x190|SSL_ST_CONNECT)
    589 #define SSL3_ST_CW_CERT_VRFY_B		(0x191|SSL_ST_CONNECT)
    590 #define SSL3_ST_CW_CHANGE_A		(0x1A0|SSL_ST_CONNECT)
    591 #define SSL3_ST_CW_CHANGE_B		(0x1A1|SSL_ST_CONNECT)
    592 #define SSL3_ST_CW_NEXT_PROTO_A		(0x200|SSL_ST_CONNECT)
    593 #define SSL3_ST_CW_NEXT_PROTO_B		(0x201|SSL_ST_CONNECT)
    594 #define SSL3_ST_CW_FINISHED_A		(0x1B0|SSL_ST_CONNECT)
    595 #define SSL3_ST_CW_FINISHED_B		(0x1B1|SSL_ST_CONNECT)
    596 /* read from server */
    597 #define SSL3_ST_CR_CHANGE_A		(0x1C0|SSL_ST_CONNECT)
    598 #define SSL3_ST_CR_CHANGE_B		(0x1C1|SSL_ST_CONNECT)
    599 #define SSL3_ST_CR_FINISHED_A		(0x1D0|SSL_ST_CONNECT)
    600 #define SSL3_ST_CR_FINISHED_B		(0x1D1|SSL_ST_CONNECT)
    601 #define SSL3_ST_CR_SESSION_TICKET_A	(0x1E0|SSL_ST_CONNECT)
    602 #define SSL3_ST_CR_SESSION_TICKET_B	(0x1E1|SSL_ST_CONNECT)
    603 #define SSL3_ST_CR_CERT_STATUS_A	(0x1F0|SSL_ST_CONNECT)
    604 #define SSL3_ST_CR_CERT_STATUS_B	(0x1F1|SSL_ST_CONNECT)
    605 
    606 /* server */
    607 /* extra state */
    608 #define SSL3_ST_SW_FLUSH		(0x100|SSL_ST_ACCEPT)
    609 #ifndef OPENSSL_NO_SCTP
    610 #define DTLS1_SCTP_ST_SW_WRITE_SOCK			(0x310|SSL_ST_ACCEPT)
    611 #define DTLS1_SCTP_ST_SR_READ_SOCK			(0x320|SSL_ST_ACCEPT)
    612 #endif
    613 /* read from client */
    614 /* Do not change the number values, they do matter */
    615 #define SSL3_ST_SR_CLNT_HELLO_A		(0x110|SSL_ST_ACCEPT)
    616 #define SSL3_ST_SR_CLNT_HELLO_B		(0x111|SSL_ST_ACCEPT)
    617 #define SSL3_ST_SR_CLNT_HELLO_C		(0x112|SSL_ST_ACCEPT)
    618 /* write to client */
    619 #define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT)
    620 #define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT)
    621 #define SSL3_ST_SW_HELLO_REQ_A		(0x120|SSL_ST_ACCEPT)
    622 #define SSL3_ST_SW_HELLO_REQ_B		(0x121|SSL_ST_ACCEPT)
    623 #define SSL3_ST_SW_HELLO_REQ_C		(0x122|SSL_ST_ACCEPT)
    624 #define SSL3_ST_SW_SRVR_HELLO_A		(0x130|SSL_ST_ACCEPT)
    625 #define SSL3_ST_SW_SRVR_HELLO_B		(0x131|SSL_ST_ACCEPT)
    626 #define SSL3_ST_SW_CERT_A		(0x140|SSL_ST_ACCEPT)
    627 #define SSL3_ST_SW_CERT_B		(0x141|SSL_ST_ACCEPT)
    628 #define SSL3_ST_SW_KEY_EXCH_A		(0x150|SSL_ST_ACCEPT)
    629 #define SSL3_ST_SW_KEY_EXCH_B		(0x151|SSL_ST_ACCEPT)
    630 #define SSL3_ST_SW_CERT_REQ_A		(0x160|SSL_ST_ACCEPT)
    631 #define SSL3_ST_SW_CERT_REQ_B		(0x161|SSL_ST_ACCEPT)
    632 #define SSL3_ST_SW_SRVR_DONE_A		(0x170|SSL_ST_ACCEPT)
    633 #define SSL3_ST_SW_SRVR_DONE_B		(0x171|SSL_ST_ACCEPT)
    634 /* read from client */
    635 #define SSL3_ST_SR_CERT_A		(0x180|SSL_ST_ACCEPT)
    636 #define SSL3_ST_SR_CERT_B		(0x181|SSL_ST_ACCEPT)
    637 #define SSL3_ST_SR_KEY_EXCH_A		(0x190|SSL_ST_ACCEPT)
    638 #define SSL3_ST_SR_KEY_EXCH_B		(0x191|SSL_ST_ACCEPT)
    639 #define SSL3_ST_SR_CERT_VRFY_A		(0x1A0|SSL_ST_ACCEPT)
    640 #define SSL3_ST_SR_CERT_VRFY_B		(0x1A1|SSL_ST_ACCEPT)
    641 #define SSL3_ST_SR_CHANGE_A		(0x1B0|SSL_ST_ACCEPT)
    642 #define SSL3_ST_SR_CHANGE_B		(0x1B1|SSL_ST_ACCEPT)
    643 #define SSL3_ST_SR_NEXT_PROTO_A		(0x210|SSL_ST_ACCEPT)
    644 #define SSL3_ST_SR_NEXT_PROTO_B		(0x211|SSL_ST_ACCEPT)
    645 #define SSL3_ST_SR_FINISHED_A		(0x1C0|SSL_ST_ACCEPT)
    646 #define SSL3_ST_SR_FINISHED_B		(0x1C1|SSL_ST_ACCEPT)
    647 /* write to client */
    648 #define SSL3_ST_SW_CHANGE_A		(0x1D0|SSL_ST_ACCEPT)
    649 #define SSL3_ST_SW_CHANGE_B		(0x1D1|SSL_ST_ACCEPT)
    650 #define SSL3_ST_SW_FINISHED_A		(0x1E0|SSL_ST_ACCEPT)
    651 #define SSL3_ST_SW_FINISHED_B		(0x1E1|SSL_ST_ACCEPT)
    652 #define SSL3_ST_SW_SESSION_TICKET_A	(0x1F0|SSL_ST_ACCEPT)
    653 #define SSL3_ST_SW_SESSION_TICKET_B	(0x1F1|SSL_ST_ACCEPT)
    654 #define SSL3_ST_SW_CERT_STATUS_A	(0x200|SSL_ST_ACCEPT)
    655 #define SSL3_ST_SW_CERT_STATUS_B	(0x201|SSL_ST_ACCEPT)
    656 
    657 #define SSL3_MT_HELLO_REQUEST			0
    658 #define SSL3_MT_CLIENT_HELLO			1
    659 #define SSL3_MT_SERVER_HELLO			2
    660 #define	SSL3_MT_NEWSESSION_TICKET		4
    661 #define SSL3_MT_CERTIFICATE			11
    662 #define SSL3_MT_SERVER_KEY_EXCHANGE		12
    663 #define SSL3_MT_CERTIFICATE_REQUEST		13
    664 #define SSL3_MT_SERVER_DONE			14
    665 #define SSL3_MT_CERTIFICATE_VERIFY		15
    666 #define SSL3_MT_CLIENT_KEY_EXCHANGE		16
    667 #define SSL3_MT_FINISHED			20
    668 #define SSL3_MT_CERTIFICATE_STATUS		22
    669 #define SSL3_MT_NEXT_PROTO			67
    670 #define DTLS1_MT_HELLO_VERIFY_REQUEST    3
    671 
    672 
    673 #define SSL3_MT_CCS				1
    674 
    675 /* These are used when changing over to a new cipher */
    676 #define SSL3_CC_READ		0x01
    677 #define SSL3_CC_WRITE		0x02
    678 #define SSL3_CC_CLIENT		0x10
    679 #define SSL3_CC_SERVER		0x20
    680 #define SSL3_CHANGE_CIPHER_CLIENT_WRITE	(SSL3_CC_CLIENT|SSL3_CC_WRITE)
    681 #define SSL3_CHANGE_CIPHER_SERVER_READ	(SSL3_CC_SERVER|SSL3_CC_READ)
    682 #define SSL3_CHANGE_CIPHER_CLIENT_READ	(SSL3_CC_CLIENT|SSL3_CC_READ)
    683 #define SSL3_CHANGE_CIPHER_SERVER_WRITE	(SSL3_CC_SERVER|SSL3_CC_WRITE)
    684 
    685 #ifdef  __cplusplus
    686 }
    687 #endif
    688 #endif
    689