securityanddataprivacytools/securitytools/openssllib/import/inc/openssl/ssl3.h
branchRCL_1
changeset 54 de7f90723dab
equal deleted inserted replaced
36:2d7679d6a290 54:de7f90723dab
       
     1 /* ssl/ssl3.h */
       
     2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
       
     3  * All rights reserved.
       
     4  *
       
     5  * This package is an SSL implementation written
       
     6  * by Eric Young (eay@cryptsoft.com).
       
     7  * The implementation was written so as to conform with Netscapes SSL.
       
     8  * 
       
     9  * This library is free for commercial and non-commercial use as long as
       
    10  * the following conditions are aheared to.  The following conditions
       
    11  * apply to all code found in this distribution, be it the RC4, RSA,
       
    12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
       
    13  * included with this distribution is covered by the same copyright terms
       
    14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
       
    15  * 
       
    16  * Copyright remains Eric Young's, and as such any Copyright notices in
       
    17  * the code are not to be removed.
       
    18  * If this package is used in a product, Eric Young should be given attribution
       
    19  * as the author of the parts of the library used.
       
    20  * This can be in the form of a textual message at program startup or
       
    21  * in documentation (online or textual) provided with the package.
       
    22  * 
       
    23  * Redistribution and use in source and binary forms, with or without
       
    24  * modification, are permitted provided that the following conditions
       
    25  * are met:
       
    26  * 1. Redistributions of source code must retain the copyright
       
    27  *    notice, this list of conditions and the following disclaimer.
       
    28  * 2. Redistributions in binary form must reproduce the above copyright
       
    29  *    notice, this list of conditions and the following disclaimer in the
       
    30  *    documentation and/or other materials provided with the distribution.
       
    31  * 3. All advertising materials mentioning features or use of this software
       
    32  *    must display the following acknowledgement:
       
    33  *    "This product includes cryptographic software written by
       
    34  *     Eric Young (eay@cryptsoft.com)"
       
    35  *    The word 'cryptographic' can be left out if the rouines from the library
       
    36  *    being used are not cryptographic related :-).
       
    37  * 4. If you include any Windows specific code (or a derivative thereof) from 
       
    38  *    the apps directory (application code) you must include an acknowledgement:
       
    39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
       
    40  * 
       
    41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
       
    42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
       
    43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
       
    44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
       
    45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
       
    46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
       
    47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
       
    48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
       
    49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
       
    50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
       
    51  * SUCH DAMAGE.
       
    52  * 
       
    53  * The licence and distribution terms for any publically available version or
       
    54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
       
    55  * copied and put under another distribution licence
       
    56  * [including the GNU Public Licence.]
       
    57  */
       
    58 /* ====================================================================
       
    59  * Copyright (c) 1998-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@openssl.org.
       
    82  *
       
    83  * 5. Products derived from this software may not be called "OpenSSL"
       
    84  *    nor may "OpenSSL" appear in their names without prior written
       
    85  *    permission of the OpenSSL Project.
       
    86  *
       
    87  * 6. Redistributions of any form whatsoever must retain the following
       
    88  *    acknowledgment:
       
    89  *    "This product includes software developed by the OpenSSL Project
       
    90  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
       
    91  *
       
    92  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
       
    93  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
       
    94  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       
    95  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
       
    96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       
    97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
       
    98  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
       
    99  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
       
   100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
       
   101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
       
   102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
       
   103  * OF THE POSSIBILITY OF SUCH DAMAGE.
       
   104  * ====================================================================
       
   105  *
       
   106  * This product includes cryptographic software written by Eric Young
       
   107  * (eay@cryptsoft.com).  This product includes software written by Tim
       
   108  * Hudson (tjh@cryptsoft.com).
       
   109  *
       
   110  */
       
   111 
       
   112 #ifndef HEADER_SSL3_H 
       
   113 #define HEADER_SSL3_H 
       
   114 
       
   115 #ifndef OPENSSL_NO_COMP
       
   116 #include <openssl/comp.h>
       
   117 #endif
       
   118 #include <openssl/buffer.h>
       
   119 #include <openssl/evp.h>
       
   120 #include <openssl/ssl.h>
       
   121 
       
   122 #ifdef  __cplusplus
       
   123 extern "C" {
       
   124 #endif
       
   125 
       
   126 #define SSL3_CK_RSA_NULL_MD5			0x03000001
       
   127 #define SSL3_CK_RSA_NULL_SHA			0x03000002
       
   128 #define SSL3_CK_RSA_RC4_40_MD5 			0x03000003
       
   129 #define SSL3_CK_RSA_RC4_128_MD5			0x03000004
       
   130 #define SSL3_CK_RSA_RC4_128_SHA			0x03000005
       
   131 #define SSL3_CK_RSA_RC2_40_MD5			0x03000006
       
   132 #define SSL3_CK_RSA_IDEA_128_SHA		0x03000007
       
   133 #define SSL3_CK_RSA_DES_40_CBC_SHA		0x03000008
       
   134 #define SSL3_CK_RSA_DES_64_CBC_SHA		0x03000009
       
   135 #define SSL3_CK_RSA_DES_192_CBC3_SHA		0x0300000A
       
   136 
       
   137 #define SSL3_CK_DH_DSS_DES_40_CBC_SHA		0x0300000B
       
   138 #define SSL3_CK_DH_DSS_DES_64_CBC_SHA		0x0300000C
       
   139 #define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 	0x0300000D
       
   140 #define SSL3_CK_DH_RSA_DES_40_CBC_SHA		0x0300000E
       
   141 #define SSL3_CK_DH_RSA_DES_64_CBC_SHA		0x0300000F
       
   142 #define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 	0x03000010
       
   143 
       
   144 #define SSL3_CK_EDH_DSS_DES_40_CBC_SHA		0x03000011
       
   145 #define SSL3_CK_EDH_DSS_DES_64_CBC_SHA		0x03000012
       
   146 #define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA	0x03000013
       
   147 #define SSL3_CK_EDH_RSA_DES_40_CBC_SHA		0x03000014
       
   148 #define SSL3_CK_EDH_RSA_DES_64_CBC_SHA		0x03000015
       
   149 #define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA	0x03000016
       
   150 
       
   151 #define SSL3_CK_ADH_RC4_40_MD5			0x03000017
       
   152 #define SSL3_CK_ADH_RC4_128_MD5			0x03000018
       
   153 #define SSL3_CK_ADH_DES_40_CBC_SHA		0x03000019
       
   154 #define SSL3_CK_ADH_DES_64_CBC_SHA		0x0300001A
       
   155 #define SSL3_CK_ADH_DES_192_CBC_SHA		0x0300001B
       
   156 
       
   157 #define SSL3_CK_FZA_DMS_NULL_SHA		0x0300001C
       
   158 #define SSL3_CK_FZA_DMS_FZA_SHA			0x0300001D
       
   159 #if 0 /* Because it clashes with KRB5, is never used any more, and is safe
       
   160 	 to remove according to David Hopwood <david.hopwood@zetnet.co.uk>
       
   161 	 of the ietf-tls list */
       
   162 #define SSL3_CK_FZA_DMS_RC4_SHA			0x0300001E
       
   163 #endif
       
   164 
       
   165 /*    VRS Additional Kerberos5 entries
       
   166  */
       
   167 #define SSL3_CK_KRB5_DES_64_CBC_SHA		0x0300001E
       
   168 #define SSL3_CK_KRB5_DES_192_CBC3_SHA		0x0300001F
       
   169 #define SSL3_CK_KRB5_RC4_128_SHA		0x03000020
       
   170 #define SSL3_CK_KRB5_IDEA_128_CBC_SHA	       	0x03000021
       
   171 #define SSL3_CK_KRB5_DES_64_CBC_MD5       	0x03000022
       
   172 #define SSL3_CK_KRB5_DES_192_CBC3_MD5       	0x03000023
       
   173 #define SSL3_CK_KRB5_RC4_128_MD5	       	0x03000024
       
   174 #define SSL3_CK_KRB5_IDEA_128_CBC_MD5 		0x03000025
       
   175 
       
   176 #define SSL3_CK_KRB5_DES_40_CBC_SHA 		0x03000026
       
   177 #define SSL3_CK_KRB5_RC2_40_CBC_SHA 		0x03000027
       
   178 #define SSL3_CK_KRB5_RC4_40_SHA	 		0x03000028
       
   179 #define SSL3_CK_KRB5_DES_40_CBC_MD5 		0x03000029
       
   180 #define SSL3_CK_KRB5_RC2_40_CBC_MD5 		0x0300002A
       
   181 #define SSL3_CK_KRB5_RC4_40_MD5	 		0x0300002B
       
   182 
       
   183 #define SSL3_TXT_RSA_NULL_MD5			"NULL-MD5"
       
   184 #define SSL3_TXT_RSA_NULL_SHA			"NULL-SHA"
       
   185 #define SSL3_TXT_RSA_RC4_40_MD5 		"EXP-RC4-MD5"
       
   186 #define SSL3_TXT_RSA_RC4_128_MD5		"RC4-MD5"
       
   187 #define SSL3_TXT_RSA_RC4_128_SHA		"RC4-SHA"
       
   188 #define SSL3_TXT_RSA_RC2_40_MD5			"EXP-RC2-CBC-MD5"
       
   189 #define SSL3_TXT_RSA_IDEA_128_SHA		"IDEA-CBC-SHA"
       
   190 #define SSL3_TXT_RSA_DES_40_CBC_SHA		"EXP-DES-CBC-SHA"
       
   191 #define SSL3_TXT_RSA_DES_64_CBC_SHA		"DES-CBC-SHA"
       
   192 #define SSL3_TXT_RSA_DES_192_CBC3_SHA		"DES-CBC3-SHA"
       
   193 
       
   194 #define SSL3_TXT_DH_DSS_DES_40_CBC_SHA		"EXP-DH-DSS-DES-CBC-SHA"
       
   195 #define SSL3_TXT_DH_DSS_DES_64_CBC_SHA		"DH-DSS-DES-CBC-SHA"
       
   196 #define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA 	"DH-DSS-DES-CBC3-SHA"
       
   197 #define SSL3_TXT_DH_RSA_DES_40_CBC_SHA		"EXP-DH-RSA-DES-CBC-SHA"
       
   198 #define SSL3_TXT_DH_RSA_DES_64_CBC_SHA		"DH-RSA-DES-CBC-SHA"
       
   199 #define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA 	"DH-RSA-DES-CBC3-SHA"
       
   200 
       
   201 #define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA		"EXP-EDH-DSS-DES-CBC-SHA"
       
   202 #define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA		"EDH-DSS-DES-CBC-SHA"
       
   203 #define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA	"EDH-DSS-DES-CBC3-SHA"
       
   204 #define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA		"EXP-EDH-RSA-DES-CBC-SHA"
       
   205 #define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA		"EDH-RSA-DES-CBC-SHA"
       
   206 #define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA	"EDH-RSA-DES-CBC3-SHA"
       
   207 
       
   208 #define SSL3_TXT_ADH_RC4_40_MD5			"EXP-ADH-RC4-MD5"
       
   209 #define SSL3_TXT_ADH_RC4_128_MD5		"ADH-RC4-MD5"
       
   210 #define SSL3_TXT_ADH_DES_40_CBC_SHA		"EXP-ADH-DES-CBC-SHA"
       
   211 #define SSL3_TXT_ADH_DES_64_CBC_SHA		"ADH-DES-CBC-SHA"
       
   212 #define SSL3_TXT_ADH_DES_192_CBC_SHA		"ADH-DES-CBC3-SHA"
       
   213 
       
   214 #define SSL3_TXT_FZA_DMS_NULL_SHA		"FZA-NULL-SHA"
       
   215 #define SSL3_TXT_FZA_DMS_FZA_SHA		"FZA-FZA-CBC-SHA"
       
   216 #define SSL3_TXT_FZA_DMS_RC4_SHA		"FZA-RC4-SHA"
       
   217 
       
   218 #define SSL3_TXT_KRB5_DES_64_CBC_SHA		"KRB5-DES-CBC-SHA"
       
   219 #define SSL3_TXT_KRB5_DES_192_CBC3_SHA		"KRB5-DES-CBC3-SHA"
       
   220 #define SSL3_TXT_KRB5_RC4_128_SHA		"KRB5-RC4-SHA"
       
   221 #define SSL3_TXT_KRB5_IDEA_128_CBC_SHA	       	"KRB5-IDEA-CBC-SHA"
       
   222 #define SSL3_TXT_KRB5_DES_64_CBC_MD5       	"KRB5-DES-CBC-MD5"
       
   223 #define SSL3_TXT_KRB5_DES_192_CBC3_MD5       	"KRB5-DES-CBC3-MD5"
       
   224 #define SSL3_TXT_KRB5_RC4_128_MD5		"KRB5-RC4-MD5"
       
   225 #define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 		"KRB5-IDEA-CBC-MD5"
       
   226 
       
   227 #define SSL3_TXT_KRB5_DES_40_CBC_SHA 		"EXP-KRB5-DES-CBC-SHA"
       
   228 #define SSL3_TXT_KRB5_RC2_40_CBC_SHA 		"EXP-KRB5-RC2-CBC-SHA"
       
   229 #define SSL3_TXT_KRB5_RC4_40_SHA	 	"EXP-KRB5-RC4-SHA"
       
   230 #define SSL3_TXT_KRB5_DES_40_CBC_MD5 		"EXP-KRB5-DES-CBC-MD5"
       
   231 #define SSL3_TXT_KRB5_RC2_40_CBC_MD5 		"EXP-KRB5-RC2-CBC-MD5"
       
   232 #define SSL3_TXT_KRB5_RC4_40_MD5	 	"EXP-KRB5-RC4-MD5"
       
   233 
       
   234 #define SSL3_SSL_SESSION_ID_LENGTH		32
       
   235 #define SSL3_MAX_SSL_SESSION_ID_LENGTH		32
       
   236 
       
   237 #define SSL3_MASTER_SECRET_SIZE			48
       
   238 #define SSL3_RANDOM_SIZE			32
       
   239 #define SSL3_SESSION_ID_SIZE			32
       
   240 #define SSL3_RT_HEADER_LENGTH			5
       
   241 
       
   242 /* Due to MS stuffing up, this can change.... */
       
   243 #if defined(OPENSSL_SYS_WIN16) || \
       
   244 	(defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32))
       
   245 #define SSL3_RT_MAX_EXTRA			(14000)
       
   246 #else
       
   247 #define SSL3_RT_MAX_EXTRA			(16384)
       
   248 #endif
       
   249 
       
   250 #define SSL3_RT_MAX_PLAIN_LENGTH		16384
       
   251 #define SSL3_RT_MAX_COMPRESSED_LENGTH	(1024+SSL3_RT_MAX_PLAIN_LENGTH)
       
   252 #define SSL3_RT_MAX_ENCRYPTED_LENGTH	(1024+SSL3_RT_MAX_COMPRESSED_LENGTH)
       
   253 #define SSL3_RT_MAX_PACKET_SIZE		(SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)
       
   254 #define SSL3_RT_MAX_DATA_SIZE			(1024*1024)
       
   255 
       
   256 #define SSL3_MD_CLIENT_FINISHED_CONST	"\x43\x4C\x4E\x54"
       
   257 #define SSL3_MD_SERVER_FINISHED_CONST	"\x53\x52\x56\x52"
       
   258 
       
   259 #define SSL3_VERSION			0x0300
       
   260 #define SSL3_VERSION_MAJOR		0x03
       
   261 #define SSL3_VERSION_MINOR		0x00
       
   262 
       
   263 #define SSL3_RT_CHANGE_CIPHER_SPEC	20
       
   264 #define SSL3_RT_ALERT			21
       
   265 #define SSL3_RT_HANDSHAKE		22
       
   266 #define SSL3_RT_APPLICATION_DATA	23
       
   267 
       
   268 #define SSL3_AL_WARNING			1
       
   269 #define SSL3_AL_FATAL			2
       
   270 
       
   271 #define SSL3_AD_CLOSE_NOTIFY		 0
       
   272 #define SSL3_AD_UNEXPECTED_MESSAGE	10	/* fatal */
       
   273 #define SSL3_AD_BAD_RECORD_MAC		20	/* fatal */
       
   274 #define SSL3_AD_DECOMPRESSION_FAILURE	30	/* fatal */
       
   275 #define SSL3_AD_HANDSHAKE_FAILURE	40	/* fatal */
       
   276 #define SSL3_AD_NO_CERTIFICATE		41
       
   277 #define SSL3_AD_BAD_CERTIFICATE		42
       
   278 #define SSL3_AD_UNSUPPORTED_CERTIFICATE	43
       
   279 #define SSL3_AD_CERTIFICATE_REVOKED	44
       
   280 #define SSL3_AD_CERTIFICATE_EXPIRED	45
       
   281 #define SSL3_AD_CERTIFICATE_UNKNOWN	46
       
   282 #define SSL3_AD_ILLEGAL_PARAMETER	47	/* fatal */
       
   283 
       
   284 typedef struct ssl3_record_st
       
   285 	{
       
   286 /*r */	int type;               /* type of record */
       
   287 /*rw*/	unsigned int length;    /* How many bytes available */
       
   288 /*r */	unsigned int off;       /* read/write offset into 'buf' */
       
   289 /*rw*/	unsigned char *data;    /* pointer to the record data */
       
   290 /*rw*/	unsigned char *input;   /* where the decode bytes are */
       
   291 /*r */	unsigned char *comp;    /* only used with decompression - malloc()ed */
       
   292 	} SSL3_RECORD;
       
   293 
       
   294 typedef struct ssl3_buffer_st
       
   295 	{
       
   296 	unsigned char *buf;     /* at least SSL3_RT_MAX_PACKET_SIZE bytes,
       
   297 	                         * see ssl3_setup_buffers() */
       
   298 	size_t len;             /* buffer size */
       
   299 	int offset;             /* where to 'copy from' */
       
   300 	int left;               /* how many bytes left */
       
   301 	} SSL3_BUFFER;
       
   302 
       
   303 #define SSL3_CT_RSA_SIGN			1
       
   304 #define SSL3_CT_DSS_SIGN			2
       
   305 #define SSL3_CT_RSA_FIXED_DH			3
       
   306 #define SSL3_CT_DSS_FIXED_DH			4
       
   307 #define SSL3_CT_RSA_EPHEMERAL_DH		5
       
   308 #define SSL3_CT_DSS_EPHEMERAL_DH		6
       
   309 #define SSL3_CT_FORTEZZA_DMS			20
       
   310 #define SSL3_CT_NUMBER				7
       
   311 
       
   312 #define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS	0x0001
       
   313 #define SSL3_FLAGS_DELAY_CLIENT_FINISHED	0x0002
       
   314 #define SSL3_FLAGS_POP_BUFFER			0x0004
       
   315 #define TLS1_FLAGS_TLS_PADDING_BUG		0x0008
       
   316 
       
   317 typedef struct ssl3_state_st
       
   318 	{
       
   319 	long flags;
       
   320 	int delay_buf_pop_ret;
       
   321 
       
   322 	unsigned char read_sequence[8];
       
   323 	unsigned char read_mac_secret[EVP_MAX_MD_SIZE];
       
   324 	unsigned char write_sequence[8];
       
   325 	unsigned char write_mac_secret[EVP_MAX_MD_SIZE];
       
   326 
       
   327 	unsigned char server_random[SSL3_RANDOM_SIZE];
       
   328 	unsigned char client_random[SSL3_RANDOM_SIZE];
       
   329 
       
   330 	/* flags for countermeasure against known-IV weakness */
       
   331 	int need_empty_fragments;
       
   332 	int empty_fragment_done;
       
   333 
       
   334 	SSL3_BUFFER rbuf;	/* read IO goes into here */
       
   335 	SSL3_BUFFER wbuf;	/* write IO goes into here */
       
   336 
       
   337 	SSL3_RECORD rrec;	/* each decoded record goes in here */
       
   338 	SSL3_RECORD wrec;	/* goes out from here */
       
   339 
       
   340 	/* storage for Alert/Handshake protocol data received but not
       
   341 	 * yet processed by ssl3_read_bytes: */
       
   342 	unsigned char alert_fragment[2];
       
   343 	unsigned int alert_fragment_len;
       
   344 	unsigned char handshake_fragment[4];
       
   345 	unsigned int handshake_fragment_len;
       
   346 
       
   347 	/* partial write - check the numbers match */
       
   348 	unsigned int wnum;	/* number of bytes sent so far */
       
   349 	int wpend_tot;		/* number bytes written */
       
   350 	int wpend_type;
       
   351 	int wpend_ret;		/* number of bytes submitted */
       
   352 	const unsigned char *wpend_buf;
       
   353 
       
   354 	/* used during startup, digest all incoming/outgoing packets */
       
   355 	EVP_MD_CTX finish_dgst1;
       
   356 	EVP_MD_CTX finish_dgst2;
       
   357 
       
   358 	/* this is set whenerver we see a change_cipher_spec message
       
   359 	 * come in when we are not looking for one */
       
   360 	int change_cipher_spec;
       
   361 
       
   362 	int warn_alert;
       
   363 	int fatal_alert;
       
   364 	/* we allow one fatal and one warning alert to be outstanding,
       
   365 	 * send close alert via the warning alert */
       
   366 	int alert_dispatch;
       
   367 	unsigned char send_alert[2];
       
   368 
       
   369 	/* This flag is set when we should renegotiate ASAP, basically when
       
   370 	 * there is no more data in the read or write buffers */
       
   371 	int renegotiate;
       
   372 	int total_renegotiations;
       
   373 	int num_renegotiations;
       
   374 
       
   375 	int in_read_app_data;
       
   376 
       
   377 	struct	{
       
   378 		/* actually only needs to be 16+20 */
       
   379 		unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
       
   380 
       
   381 		/* actually only need to be 16+20 for SSLv3 and 12 for TLS */
       
   382 		unsigned char finish_md[EVP_MAX_MD_SIZE*2];
       
   383 		int finish_md_len;
       
   384 		unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2];
       
   385 		int peer_finish_md_len;
       
   386 		
       
   387 		unsigned long message_size;
       
   388 		int message_type;
       
   389 
       
   390 		/* used to hold the new cipher we are going to use */
       
   391 		SSL_CIPHER *new_cipher;
       
   392 #ifndef OPENSSL_NO_DH
       
   393 		DH *dh;
       
   394 #endif
       
   395 		/* used when SSL_ST_FLUSH_DATA is entered */
       
   396 		int next_state;			
       
   397 
       
   398 		int reuse_message;
       
   399 
       
   400 		/* used for certificate requests */
       
   401 		int cert_req;
       
   402 		int ctype_num;
       
   403 		char ctype[SSL3_CT_NUMBER];
       
   404 		STACK_OF(X509_NAME) *ca_names;
       
   405 
       
   406 		int use_rsa_tmp;
       
   407 
       
   408 		int key_block_length;
       
   409 		unsigned char *key_block;
       
   410 
       
   411 		const EVP_CIPHER *new_sym_enc;
       
   412 		const EVP_MD *new_hash;
       
   413 #ifndef OPENSSL_NO_COMP
       
   414 		const SSL_COMP *new_compression;
       
   415 #else
       
   416 		char *new_compression;
       
   417 #endif
       
   418 		int cert_request;
       
   419 		} tmp;
       
   420 
       
   421 	} SSL3_STATE;
       
   422 
       
   423 /* SSLv3 */
       
   424 /*client */
       
   425 /* extra state */
       
   426 #define SSL3_ST_CW_FLUSH		(0x100|SSL_ST_CONNECT)
       
   427 /* write to server */
       
   428 #define SSL3_ST_CW_CLNT_HELLO_A		(0x110|SSL_ST_CONNECT)
       
   429 #define SSL3_ST_CW_CLNT_HELLO_B		(0x111|SSL_ST_CONNECT)
       
   430 /* read from server */
       
   431 #define SSL3_ST_CR_SRVR_HELLO_A		(0x120|SSL_ST_CONNECT)
       
   432 #define SSL3_ST_CR_SRVR_HELLO_B		(0x121|SSL_ST_CONNECT)
       
   433 #define SSL3_ST_CR_CERT_A		(0x130|SSL_ST_CONNECT)
       
   434 #define SSL3_ST_CR_CERT_B		(0x131|SSL_ST_CONNECT)
       
   435 #define SSL3_ST_CR_KEY_EXCH_A		(0x140|SSL_ST_CONNECT)
       
   436 #define SSL3_ST_CR_KEY_EXCH_B		(0x141|SSL_ST_CONNECT)
       
   437 #define SSL3_ST_CR_CERT_REQ_A		(0x150|SSL_ST_CONNECT)
       
   438 #define SSL3_ST_CR_CERT_REQ_B		(0x151|SSL_ST_CONNECT)
       
   439 #define SSL3_ST_CR_SRVR_DONE_A		(0x160|SSL_ST_CONNECT)
       
   440 #define SSL3_ST_CR_SRVR_DONE_B		(0x161|SSL_ST_CONNECT)
       
   441 /* write to server */
       
   442 #define SSL3_ST_CW_CERT_A		(0x170|SSL_ST_CONNECT)
       
   443 #define SSL3_ST_CW_CERT_B		(0x171|SSL_ST_CONNECT)
       
   444 #define SSL3_ST_CW_CERT_C		(0x172|SSL_ST_CONNECT)
       
   445 #define SSL3_ST_CW_CERT_D		(0x173|SSL_ST_CONNECT)
       
   446 #define SSL3_ST_CW_KEY_EXCH_A		(0x180|SSL_ST_CONNECT)
       
   447 #define SSL3_ST_CW_KEY_EXCH_B		(0x181|SSL_ST_CONNECT)
       
   448 #define SSL3_ST_CW_CERT_VRFY_A		(0x190|SSL_ST_CONNECT)
       
   449 #define SSL3_ST_CW_CERT_VRFY_B		(0x191|SSL_ST_CONNECT)
       
   450 #define SSL3_ST_CW_CHANGE_A		(0x1A0|SSL_ST_CONNECT)
       
   451 #define SSL3_ST_CW_CHANGE_B		(0x1A1|SSL_ST_CONNECT)
       
   452 #define SSL3_ST_CW_FINISHED_A		(0x1B0|SSL_ST_CONNECT)
       
   453 #define SSL3_ST_CW_FINISHED_B		(0x1B1|SSL_ST_CONNECT)
       
   454 /* read from server */
       
   455 #define SSL3_ST_CR_CHANGE_A		(0x1C0|SSL_ST_CONNECT)
       
   456 #define SSL3_ST_CR_CHANGE_B		(0x1C1|SSL_ST_CONNECT)
       
   457 #define SSL3_ST_CR_FINISHED_A		(0x1D0|SSL_ST_CONNECT)
       
   458 #define SSL3_ST_CR_FINISHED_B		(0x1D1|SSL_ST_CONNECT)
       
   459 
       
   460 /* server */
       
   461 /* extra state */
       
   462 #define SSL3_ST_SW_FLUSH		(0x100|SSL_ST_ACCEPT)
       
   463 /* read from client */
       
   464 /* Do not change the number values, they do matter */
       
   465 #define SSL3_ST_SR_CLNT_HELLO_A		(0x110|SSL_ST_ACCEPT)
       
   466 #define SSL3_ST_SR_CLNT_HELLO_B		(0x111|SSL_ST_ACCEPT)
       
   467 #define SSL3_ST_SR_CLNT_HELLO_C		(0x112|SSL_ST_ACCEPT)
       
   468 /* write to client */
       
   469 #define SSL3_ST_SW_HELLO_REQ_A		(0x120|SSL_ST_ACCEPT)
       
   470 #define SSL3_ST_SW_HELLO_REQ_B		(0x121|SSL_ST_ACCEPT)
       
   471 #define SSL3_ST_SW_HELLO_REQ_C		(0x122|SSL_ST_ACCEPT)
       
   472 #define SSL3_ST_SW_SRVR_HELLO_A		(0x130|SSL_ST_ACCEPT)
       
   473 #define SSL3_ST_SW_SRVR_HELLO_B		(0x131|SSL_ST_ACCEPT)
       
   474 #define SSL3_ST_SW_CERT_A		(0x140|SSL_ST_ACCEPT)
       
   475 #define SSL3_ST_SW_CERT_B		(0x141|SSL_ST_ACCEPT)
       
   476 #define SSL3_ST_SW_KEY_EXCH_A		(0x150|SSL_ST_ACCEPT)
       
   477 #define SSL3_ST_SW_KEY_EXCH_B		(0x151|SSL_ST_ACCEPT)
       
   478 #define SSL3_ST_SW_CERT_REQ_A		(0x160|SSL_ST_ACCEPT)
       
   479 #define SSL3_ST_SW_CERT_REQ_B		(0x161|SSL_ST_ACCEPT)
       
   480 #define SSL3_ST_SW_SRVR_DONE_A		(0x170|SSL_ST_ACCEPT)
       
   481 #define SSL3_ST_SW_SRVR_DONE_B		(0x171|SSL_ST_ACCEPT)
       
   482 /* read from client */
       
   483 #define SSL3_ST_SR_CERT_A		(0x180|SSL_ST_ACCEPT)
       
   484 #define SSL3_ST_SR_CERT_B		(0x181|SSL_ST_ACCEPT)
       
   485 #define SSL3_ST_SR_KEY_EXCH_A		(0x190|SSL_ST_ACCEPT)
       
   486 #define SSL3_ST_SR_KEY_EXCH_B		(0x191|SSL_ST_ACCEPT)
       
   487 #define SSL3_ST_SR_CERT_VRFY_A		(0x1A0|SSL_ST_ACCEPT)
       
   488 #define SSL3_ST_SR_CERT_VRFY_B		(0x1A1|SSL_ST_ACCEPT)
       
   489 #define SSL3_ST_SR_CHANGE_A		(0x1B0|SSL_ST_ACCEPT)
       
   490 #define SSL3_ST_SR_CHANGE_B		(0x1B1|SSL_ST_ACCEPT)
       
   491 #define SSL3_ST_SR_FINISHED_A		(0x1C0|SSL_ST_ACCEPT)
       
   492 #define SSL3_ST_SR_FINISHED_B		(0x1C1|SSL_ST_ACCEPT)
       
   493 /* write to client */
       
   494 #define SSL3_ST_SW_CHANGE_A		(0x1D0|SSL_ST_ACCEPT)
       
   495 #define SSL3_ST_SW_CHANGE_B		(0x1D1|SSL_ST_ACCEPT)
       
   496 #define SSL3_ST_SW_FINISHED_A		(0x1E0|SSL_ST_ACCEPT)
       
   497 #define SSL3_ST_SW_FINISHED_B		(0x1E1|SSL_ST_ACCEPT)
       
   498 
       
   499 #define SSL3_MT_HELLO_REQUEST			0
       
   500 #define SSL3_MT_CLIENT_HELLO			1
       
   501 #define SSL3_MT_SERVER_HELLO			2
       
   502 #define SSL3_MT_CERTIFICATE			11
       
   503 #define SSL3_MT_SERVER_KEY_EXCHANGE		12
       
   504 #define SSL3_MT_CERTIFICATE_REQUEST		13
       
   505 #define SSL3_MT_SERVER_DONE			14
       
   506 #define SSL3_MT_CERTIFICATE_VERIFY		15
       
   507 #define SSL3_MT_CLIENT_KEY_EXCHANGE		16
       
   508 #define SSL3_MT_FINISHED			20
       
   509 
       
   510 #define SSL3_MT_CCS				1
       
   511 
       
   512 /* These are used when changing over to a new cipher */
       
   513 #define SSL3_CC_READ		0x01
       
   514 #define SSL3_CC_WRITE		0x02
       
   515 #define SSL3_CC_CLIENT		0x10
       
   516 #define SSL3_CC_SERVER		0x20
       
   517 #define SSL3_CHANGE_CIPHER_CLIENT_WRITE	(SSL3_CC_CLIENT|SSL3_CC_WRITE)	
       
   518 #define SSL3_CHANGE_CIPHER_SERVER_READ	(SSL3_CC_SERVER|SSL3_CC_READ)
       
   519 #define SSL3_CHANGE_CIPHER_CLIENT_READ	(SSL3_CC_CLIENT|SSL3_CC_READ)
       
   520 #define SSL3_CHANGE_CIPHER_SERVER_WRITE	(SSL3_CC_SERVER|SSL3_CC_WRITE)
       
   521 
       
   522 #ifdef  __cplusplus
       
   523 }
       
   524 #endif
       
   525 #endif
       
   526 
       
   527