epoc32/include/stdapis/openssl/ssl3.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
equal deleted inserted replaced
1:666f914201fb 2:2fe1408b6811
     1 ssl3.h
     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  * 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 #include <openssl/pq_compat.h>
       
   127 
       
   128 #ifdef  __cplusplus
       
   129 extern "C" {
       
   130 #endif
       
   131 
       
   132 #define SSL3_CK_RSA_NULL_MD5			0x03000001
       
   133 #define SSL3_CK_RSA_NULL_SHA			0x03000002
       
   134 #define SSL3_CK_RSA_RC4_40_MD5 			0x03000003
       
   135 #define SSL3_CK_RSA_RC4_128_MD5			0x03000004
       
   136 #define SSL3_CK_RSA_RC4_128_SHA			0x03000005
       
   137 #define SSL3_CK_RSA_RC2_40_MD5			0x03000006
       
   138 #define SSL3_CK_RSA_IDEA_128_SHA		0x03000007
       
   139 #define SSL3_CK_RSA_DES_40_CBC_SHA		0x03000008
       
   140 #define SSL3_CK_RSA_DES_64_CBC_SHA		0x03000009
       
   141 #define SSL3_CK_RSA_DES_192_CBC3_SHA		0x0300000A
       
   142 
       
   143 #define SSL3_CK_DH_DSS_DES_40_CBC_SHA		0x0300000B
       
   144 #define SSL3_CK_DH_DSS_DES_64_CBC_SHA		0x0300000C
       
   145 #define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 	0x0300000D
       
   146 #define SSL3_CK_DH_RSA_DES_40_CBC_SHA		0x0300000E
       
   147 #define SSL3_CK_DH_RSA_DES_64_CBC_SHA		0x0300000F
       
   148 #define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 	0x03000010
       
   149 
       
   150 #define SSL3_CK_EDH_DSS_DES_40_CBC_SHA		0x03000011
       
   151 #define SSL3_CK_EDH_DSS_DES_64_CBC_SHA		0x03000012
       
   152 #define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA	0x03000013
       
   153 #define SSL3_CK_EDH_RSA_DES_40_CBC_SHA		0x03000014
       
   154 #define SSL3_CK_EDH_RSA_DES_64_CBC_SHA		0x03000015
       
   155 #define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA	0x03000016
       
   156 
       
   157 #define SSL3_CK_ADH_RC4_40_MD5			0x03000017
       
   158 #define SSL3_CK_ADH_RC4_128_MD5			0x03000018
       
   159 #define SSL3_CK_ADH_DES_40_CBC_SHA		0x03000019
       
   160 #define SSL3_CK_ADH_DES_64_CBC_SHA		0x0300001A
       
   161 #define SSL3_CK_ADH_DES_192_CBC_SHA		0x0300001B
       
   162 
       
   163 #define SSL3_CK_FZA_DMS_NULL_SHA		0x0300001C
       
   164 #define SSL3_CK_FZA_DMS_FZA_SHA			0x0300001D
       
   165 #if 0 /* Because it clashes with KRB5, is never used any more, and is safe
       
   166 	 to remove according to David Hopwood <david.hopwood@zetnet.co.uk>
       
   167 	 of the ietf-tls list */
       
   168 #define SSL3_CK_FZA_DMS_RC4_SHA			0x0300001E
       
   169 #endif
       
   170 
       
   171 /*    VRS Additional Kerberos5 entries
       
   172  */
       
   173 #define SSL3_CK_KRB5_DES_64_CBC_SHA		0x0300001E
       
   174 #define SSL3_CK_KRB5_DES_192_CBC3_SHA		0x0300001F
       
   175 #define SSL3_CK_KRB5_RC4_128_SHA		0x03000020
       
   176 #define SSL3_CK_KRB5_IDEA_128_CBC_SHA	       	0x03000021
       
   177 #define SSL3_CK_KRB5_DES_64_CBC_MD5       	0x03000022
       
   178 #define SSL3_CK_KRB5_DES_192_CBC3_MD5       	0x03000023
       
   179 #define SSL3_CK_KRB5_RC4_128_MD5	       	0x03000024
       
   180 #define SSL3_CK_KRB5_IDEA_128_CBC_MD5 		0x03000025
       
   181 
       
   182 #define SSL3_CK_KRB5_DES_40_CBC_SHA 		0x03000026
       
   183 #define SSL3_CK_KRB5_RC2_40_CBC_SHA 		0x03000027
       
   184 #define SSL3_CK_KRB5_RC4_40_SHA	 		0x03000028
       
   185 #define SSL3_CK_KRB5_DES_40_CBC_MD5 		0x03000029
       
   186 #define SSL3_CK_KRB5_RC2_40_CBC_MD5 		0x0300002A
       
   187 #define SSL3_CK_KRB5_RC4_40_MD5	 		0x0300002B
       
   188 
       
   189 #define SSL3_TXT_RSA_NULL_MD5			"NULL-MD5"
       
   190 #define SSL3_TXT_RSA_NULL_SHA			"NULL-SHA"
       
   191 #define SSL3_TXT_RSA_RC4_40_MD5 		"EXP-RC4-MD5"
       
   192 #define SSL3_TXT_RSA_RC4_128_MD5		"RC4-MD5"
       
   193 #define SSL3_TXT_RSA_RC4_128_SHA		"RC4-SHA"
       
   194 #define SSL3_TXT_RSA_RC2_40_MD5			"EXP-RC2-CBC-MD5"
       
   195 #define SSL3_TXT_RSA_IDEA_128_SHA		"IDEA-CBC-SHA"
       
   196 #define SSL3_TXT_RSA_DES_40_CBC_SHA		"EXP-DES-CBC-SHA"
       
   197 #define SSL3_TXT_RSA_DES_64_CBC_SHA		"DES-CBC-SHA"
       
   198 #define SSL3_TXT_RSA_DES_192_CBC3_SHA		"DES-CBC3-SHA"
       
   199 
       
   200 #define SSL3_TXT_DH_DSS_DES_40_CBC_SHA		"EXP-DH-DSS-DES-CBC-SHA"
       
   201 #define SSL3_TXT_DH_DSS_DES_64_CBC_SHA		"DH-DSS-DES-CBC-SHA"
       
   202 #define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA 	"DH-DSS-DES-CBC3-SHA"
       
   203 #define SSL3_TXT_DH_RSA_DES_40_CBC_SHA		"EXP-DH-RSA-DES-CBC-SHA"
       
   204 #define SSL3_TXT_DH_RSA_DES_64_CBC_SHA		"DH-RSA-DES-CBC-SHA"
       
   205 #define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA 	"DH-RSA-DES-CBC3-SHA"
       
   206 
       
   207 #define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA		"EXP-EDH-DSS-DES-CBC-SHA"
       
   208 #define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA		"EDH-DSS-DES-CBC-SHA"
       
   209 #define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA	"EDH-DSS-DES-CBC3-SHA"
       
   210 #define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA		"EXP-EDH-RSA-DES-CBC-SHA"
       
   211 #define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA		"EDH-RSA-DES-CBC-SHA"
       
   212 #define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA	"EDH-RSA-DES-CBC3-SHA"
       
   213 
       
   214 #define SSL3_TXT_ADH_RC4_40_MD5			"EXP-ADH-RC4-MD5"
       
   215 #define SSL3_TXT_ADH_RC4_128_MD5		"ADH-RC4-MD5"
       
   216 #define SSL3_TXT_ADH_DES_40_CBC_SHA		"EXP-ADH-DES-CBC-SHA"
       
   217 #define SSL3_TXT_ADH_DES_64_CBC_SHA		"ADH-DES-CBC-SHA"
       
   218 #define SSL3_TXT_ADH_DES_192_CBC_SHA		"ADH-DES-CBC3-SHA"
       
   219 
       
   220 #define SSL3_TXT_FZA_DMS_NULL_SHA		"FZA-NULL-SHA"
       
   221 #define SSL3_TXT_FZA_DMS_FZA_SHA		"FZA-FZA-CBC-SHA"
       
   222 #define SSL3_TXT_FZA_DMS_RC4_SHA		"FZA-RC4-SHA"
       
   223 
       
   224 #define SSL3_TXT_KRB5_DES_64_CBC_SHA		"KRB5-DES-CBC-SHA"
       
   225 #define SSL3_TXT_KRB5_DES_192_CBC3_SHA		"KRB5-DES-CBC3-SHA"
       
   226 #define SSL3_TXT_KRB5_RC4_128_SHA		"KRB5-RC4-SHA"
       
   227 #define SSL3_TXT_KRB5_IDEA_128_CBC_SHA	       	"KRB5-IDEA-CBC-SHA"
       
   228 #define SSL3_TXT_KRB5_DES_64_CBC_MD5       	"KRB5-DES-CBC-MD5"
       
   229 #define SSL3_TXT_KRB5_DES_192_CBC3_MD5       	"KRB5-DES-CBC3-MD5"
       
   230 #define SSL3_TXT_KRB5_RC4_128_MD5		"KRB5-RC4-MD5"
       
   231 #define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 		"KRB5-IDEA-CBC-MD5"
       
   232 
       
   233 #define SSL3_TXT_KRB5_DES_40_CBC_SHA 		"EXP-KRB5-DES-CBC-SHA"
       
   234 #define SSL3_TXT_KRB5_RC2_40_CBC_SHA 		"EXP-KRB5-RC2-CBC-SHA"
       
   235 #define SSL3_TXT_KRB5_RC4_40_SHA	 	"EXP-KRB5-RC4-SHA"
       
   236 #define SSL3_TXT_KRB5_DES_40_CBC_MD5 		"EXP-KRB5-DES-CBC-MD5"
       
   237 #define SSL3_TXT_KRB5_RC2_40_CBC_MD5 		"EXP-KRB5-RC2-CBC-MD5"
       
   238 #define SSL3_TXT_KRB5_RC4_40_MD5	 	"EXP-KRB5-RC4-MD5"
       
   239 
       
   240 #define SSL3_SSL_SESSION_ID_LENGTH		32
       
   241 #define SSL3_MAX_SSL_SESSION_ID_LENGTH		32
       
   242 
       
   243 #define SSL3_MASTER_SECRET_SIZE			48
       
   244 #define SSL3_RANDOM_SIZE			32
       
   245 #define SSL3_SESSION_ID_SIZE			32
       
   246 #define SSL3_RT_HEADER_LENGTH			5
       
   247 
       
   248 /* Due to MS stuffing up, this can change.... */
       
   249 #if defined(OPENSSL_SYS_WIN16) || \
       
   250 	(defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32))
       
   251 #define SSL3_RT_MAX_EXTRA			(14000)
       
   252 #else
       
   253 #define SSL3_RT_MAX_EXTRA			(16384)
       
   254 #endif
       
   255 
       
   256 #define SSL3_RT_MAX_PLAIN_LENGTH		16384
       
   257 #ifdef OPENSSL_NO_COMP
       
   258 #define SSL3_RT_MAX_COMPRESSED_LENGTH	SSL3_RT_MAX_PLAIN_LENGTH
       
   259 #else
       
   260 #define SSL3_RT_MAX_COMPRESSED_LENGTH	(1024+SSL3_RT_MAX_PLAIN_LENGTH)
       
   261 #endif
       
   262 #define SSL3_RT_MAX_ENCRYPTED_LENGTH	(1024+SSL3_RT_MAX_COMPRESSED_LENGTH)
       
   263 #define SSL3_RT_MAX_PACKET_SIZE		(SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)
       
   264 #define SSL3_RT_MAX_DATA_SIZE			(1024*1024)
       
   265 
       
   266 #define SSL3_MD_CLIENT_FINISHED_CONST	"\x43\x4C\x4E\x54"
       
   267 #define SSL3_MD_SERVER_FINISHED_CONST	"\x53\x52\x56\x52"
       
   268 
       
   269 #define SSL3_VERSION			0x0300
       
   270 #define SSL3_VERSION_MAJOR		0x03
       
   271 #define SSL3_VERSION_MINOR		0x00
       
   272 
       
   273 #define SSL3_RT_CHANGE_CIPHER_SPEC	20
       
   274 #define SSL3_RT_ALERT			21
       
   275 #define SSL3_RT_HANDSHAKE		22
       
   276 #define SSL3_RT_APPLICATION_DATA	23
       
   277 
       
   278 #define SSL3_AL_WARNING			1
       
   279 #define SSL3_AL_FATAL			2
       
   280 
       
   281 #define SSL3_AD_CLOSE_NOTIFY		 0
       
   282 #define SSL3_AD_UNEXPECTED_MESSAGE	10	/* fatal */
       
   283 #define SSL3_AD_BAD_RECORD_MAC		20	/* fatal */
       
   284 #define SSL3_AD_DECOMPRESSION_FAILURE	30	/* fatal */
       
   285 #define SSL3_AD_HANDSHAKE_FAILURE	40	/* fatal */
       
   286 #define SSL3_AD_NO_CERTIFICATE		41
       
   287 #define SSL3_AD_BAD_CERTIFICATE		42
       
   288 #define SSL3_AD_UNSUPPORTED_CERTIFICATE	43
       
   289 #define SSL3_AD_CERTIFICATE_REVOKED	44
       
   290 #define SSL3_AD_CERTIFICATE_EXPIRED	45
       
   291 #define SSL3_AD_CERTIFICATE_UNKNOWN	46
       
   292 #define SSL3_AD_ILLEGAL_PARAMETER	47	/* fatal */
       
   293 
       
   294 typedef struct ssl3_record_st
       
   295 	{
       
   296 /*r */	int type;               /* type of record */
       
   297 /*rw*/	unsigned int length;    /* How many bytes available */
       
   298 /*r */	unsigned int off;       /* read/write offset into 'buf' */
       
   299 /*rw*/	unsigned char *data;    /* pointer to the record data */
       
   300 /*rw*/	unsigned char *input;   /* where the decode bytes are */
       
   301 /*r */	unsigned char *comp;    /* only used with decompression - malloc()ed */
       
   302 /*r */  unsigned long epoch;    /* epoch number, needed by DTLS1 */
       
   303 /*r */  PQ_64BIT seq_num;       /* sequence number, needed by DTLS1 */
       
   304 	} SSL3_RECORD;
       
   305 
       
   306 typedef struct ssl3_buffer_st
       
   307 	{
       
   308 	unsigned char *buf;     /* at least SSL3_RT_MAX_PACKET_SIZE bytes,
       
   309 	                         * see ssl3_setup_buffers() */
       
   310 	size_t len;             /* buffer size */
       
   311 	int offset;             /* where to 'copy from' */
       
   312 	int left;               /* how many bytes left */
       
   313 	} SSL3_BUFFER;
       
   314 
       
   315 #define SSL3_CT_RSA_SIGN			1
       
   316 #define SSL3_CT_DSS_SIGN			2
       
   317 #define SSL3_CT_RSA_FIXED_DH			3
       
   318 #define SSL3_CT_DSS_FIXED_DH			4
       
   319 #define SSL3_CT_RSA_EPHEMERAL_DH		5
       
   320 #define SSL3_CT_DSS_EPHEMERAL_DH		6
       
   321 #define SSL3_CT_FORTEZZA_DMS			20
       
   322 /* SSL3_CT_NUMBER is used to size arrays and it must be large
       
   323  * enough to contain all of the cert types defined either for
       
   324  * SSLv3 and TLSv1.
       
   325  */
       
   326 #define SSL3_CT_NUMBER			7
       
   327 
       
   328 
       
   329 #define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS	0x0001
       
   330 #define SSL3_FLAGS_DELAY_CLIENT_FINISHED	0x0002
       
   331 #define SSL3_FLAGS_POP_BUFFER			0x0004
       
   332 #define TLS1_FLAGS_TLS_PADDING_BUG		0x0008
       
   333 
       
   334 typedef struct ssl3_state_st
       
   335 	{
       
   336 	long flags;
       
   337 	int delay_buf_pop_ret;
       
   338 
       
   339 	unsigned char read_sequence[8];
       
   340 	unsigned char read_mac_secret[EVP_MAX_MD_SIZE];
       
   341 	unsigned char write_sequence[8];
       
   342 	unsigned char write_mac_secret[EVP_MAX_MD_SIZE];
       
   343 
       
   344 	unsigned char server_random[SSL3_RANDOM_SIZE];
       
   345 	unsigned char client_random[SSL3_RANDOM_SIZE];
       
   346 
       
   347 	/* flags for countermeasure against known-IV weakness */
       
   348 	int need_empty_fragments;
       
   349 	int empty_fragment_done;
       
   350 
       
   351 	SSL3_BUFFER rbuf;	/* read IO goes into here */
       
   352 	SSL3_BUFFER wbuf;	/* write IO goes into here */
       
   353 
       
   354 	SSL3_RECORD rrec;	/* each decoded record goes in here */
       
   355 	SSL3_RECORD wrec;	/* goes out from here */
       
   356 
       
   357 	/* storage for Alert/Handshake protocol data received but not
       
   358 	 * yet processed by ssl3_read_bytes: */
       
   359 	unsigned char alert_fragment[2];
       
   360 	unsigned int alert_fragment_len;
       
   361 	unsigned char handshake_fragment[4];
       
   362 	unsigned int handshake_fragment_len;
       
   363 
       
   364 	/* partial write - check the numbers match */
       
   365 	unsigned int wnum;	/* number of bytes sent so far */
       
   366 	int wpend_tot;		/* number bytes written */
       
   367 	int wpend_type;
       
   368 	int wpend_ret;		/* number of bytes submitted */
       
   369 	const unsigned char *wpend_buf;
       
   370 
       
   371 	/* used during startup, digest all incoming/outgoing packets */
       
   372 	EVP_MD_CTX finish_dgst1;
       
   373 	EVP_MD_CTX finish_dgst2;
       
   374 
       
   375 	/* this is set whenerver we see a change_cipher_spec message
       
   376 	 * come in when we are not looking for one */
       
   377 	int change_cipher_spec;
       
   378 
       
   379 	int warn_alert;
       
   380 	int fatal_alert;
       
   381 	/* we allow one fatal and one warning alert to be outstanding,
       
   382 	 * send close alert via the warning alert */
       
   383 	int alert_dispatch;
       
   384 	unsigned char send_alert[2];
       
   385 
       
   386 	/* This flag is set when we should renegotiate ASAP, basically when
       
   387 	 * there is no more data in the read or write buffers */
       
   388 	int renegotiate;
       
   389 	int total_renegotiations;
       
   390 	int num_renegotiations;
       
   391 
       
   392 	int in_read_app_data;
       
   393 
       
   394 	struct	{
       
   395 		/* actually only needs to be 16+20 */
       
   396 		unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
       
   397 
       
   398 		/* actually only need to be 16+20 for SSLv3 and 12 for TLS */
       
   399 		unsigned char finish_md[EVP_MAX_MD_SIZE*2];
       
   400 		int finish_md_len;
       
   401 		unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2];
       
   402 		int peer_finish_md_len;
       
   403 		
       
   404 		unsigned long message_size;
       
   405 		int message_type;
       
   406 
       
   407 		/* used to hold the new cipher we are going to use */
       
   408 		SSL_CIPHER *new_cipher;
       
   409 #ifndef OPENSSL_NO_DH
       
   410 		DH *dh;
       
   411 #endif
       
   412 
       
   413 #ifndef OPENSSL_NO_ECDH
       
   414 		EC_KEY *ecdh; /* holds short lived ECDH key */
       
   415 #endif
       
   416 
       
   417 		/* used when SSL_ST_FLUSH_DATA is entered */
       
   418 		int next_state;			
       
   419 
       
   420 		int reuse_message;
       
   421 
       
   422 		/* used for certificate requests */
       
   423 		int cert_req;
       
   424 		int ctype_num;
       
   425 		char ctype[SSL3_CT_NUMBER];
       
   426 		STACK_OF(X509_NAME) *ca_names;
       
   427 
       
   428 		int use_rsa_tmp;
       
   429 
       
   430 		int key_block_length;
       
   431 		unsigned char *key_block;
       
   432 
       
   433 		const EVP_CIPHER *new_sym_enc;
       
   434 		const EVP_MD *new_hash;
       
   435 #ifndef OPENSSL_NO_COMP
       
   436 		const SSL_COMP *new_compression;
       
   437 #else
       
   438 		char *new_compression;
       
   439 #endif
       
   440 		int cert_request;
       
   441 		} tmp;
       
   442 
       
   443 	} SSL3_STATE;
       
   444 
       
   445 
       
   446 /* SSLv3 */
       
   447 /*client */
       
   448 /* extra state */
       
   449 #define SSL3_ST_CW_FLUSH		(0x100|SSL_ST_CONNECT)
       
   450 /* write to server */
       
   451 #define SSL3_ST_CW_CLNT_HELLO_A		(0x110|SSL_ST_CONNECT)
       
   452 #define SSL3_ST_CW_CLNT_HELLO_B		(0x111|SSL_ST_CONNECT)
       
   453 /* read from server */
       
   454 #define SSL3_ST_CR_SRVR_HELLO_A		(0x120|SSL_ST_CONNECT)
       
   455 #define SSL3_ST_CR_SRVR_HELLO_B		(0x121|SSL_ST_CONNECT)
       
   456 #define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT)
       
   457 #define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT)
       
   458 #define SSL3_ST_CR_CERT_A		(0x130|SSL_ST_CONNECT)
       
   459 #define SSL3_ST_CR_CERT_B		(0x131|SSL_ST_CONNECT)
       
   460 #define SSL3_ST_CR_KEY_EXCH_A		(0x140|SSL_ST_CONNECT)
       
   461 #define SSL3_ST_CR_KEY_EXCH_B		(0x141|SSL_ST_CONNECT)
       
   462 #define SSL3_ST_CR_CERT_REQ_A		(0x150|SSL_ST_CONNECT)
       
   463 #define SSL3_ST_CR_CERT_REQ_B		(0x151|SSL_ST_CONNECT)
       
   464 #define SSL3_ST_CR_SRVR_DONE_A		(0x160|SSL_ST_CONNECT)
       
   465 #define SSL3_ST_CR_SRVR_DONE_B		(0x161|SSL_ST_CONNECT)
       
   466 /* write to server */
       
   467 #define SSL3_ST_CW_CERT_A		(0x170|SSL_ST_CONNECT)
       
   468 #define SSL3_ST_CW_CERT_B		(0x171|SSL_ST_CONNECT)
       
   469 #define SSL3_ST_CW_CERT_C		(0x172|SSL_ST_CONNECT)
       
   470 #define SSL3_ST_CW_CERT_D		(0x173|SSL_ST_CONNECT)
       
   471 #define SSL3_ST_CW_KEY_EXCH_A		(0x180|SSL_ST_CONNECT)
       
   472 #define SSL3_ST_CW_KEY_EXCH_B		(0x181|SSL_ST_CONNECT)
       
   473 #define SSL3_ST_CW_CERT_VRFY_A		(0x190|SSL_ST_CONNECT)
       
   474 #define SSL3_ST_CW_CERT_VRFY_B		(0x191|SSL_ST_CONNECT)
       
   475 #define SSL3_ST_CW_CHANGE_A		(0x1A0|SSL_ST_CONNECT)
       
   476 #define SSL3_ST_CW_CHANGE_B		(0x1A1|SSL_ST_CONNECT)
       
   477 #define SSL3_ST_CW_FINISHED_A		(0x1B0|SSL_ST_CONNECT)
       
   478 #define SSL3_ST_CW_FINISHED_B		(0x1B1|SSL_ST_CONNECT)
       
   479 /* read from server */
       
   480 #define SSL3_ST_CR_CHANGE_A		(0x1C0|SSL_ST_CONNECT)
       
   481 #define SSL3_ST_CR_CHANGE_B		(0x1C1|SSL_ST_CONNECT)
       
   482 #define SSL3_ST_CR_FINISHED_A		(0x1D0|SSL_ST_CONNECT)
       
   483 #define SSL3_ST_CR_FINISHED_B		(0x1D1|SSL_ST_CONNECT)
       
   484 #define SSL3_ST_CR_SESSION_TICKET_A	(0x1E0|SSL_ST_CONNECT)
       
   485 #define SSL3_ST_CR_SESSION_TICKET_B	(0x1E1|SSL_ST_CONNECT)
       
   486 
       
   487 /* server */
       
   488 /* extra state */
       
   489 #define SSL3_ST_SW_FLUSH		(0x100|SSL_ST_ACCEPT)
       
   490 /* read from client */
       
   491 /* Do not change the number values, they do matter */
       
   492 #define SSL3_ST_SR_CLNT_HELLO_A		(0x110|SSL_ST_ACCEPT)
       
   493 #define SSL3_ST_SR_CLNT_HELLO_B		(0x111|SSL_ST_ACCEPT)
       
   494 #define SSL3_ST_SR_CLNT_HELLO_C		(0x112|SSL_ST_ACCEPT)
       
   495 /* write to client */
       
   496 #define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT)
       
   497 #define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT)
       
   498 #define SSL3_ST_SW_HELLO_REQ_A		(0x120|SSL_ST_ACCEPT)
       
   499 #define SSL3_ST_SW_HELLO_REQ_B		(0x121|SSL_ST_ACCEPT)
       
   500 #define SSL3_ST_SW_HELLO_REQ_C		(0x122|SSL_ST_ACCEPT)
       
   501 #define SSL3_ST_SW_SRVR_HELLO_A		(0x130|SSL_ST_ACCEPT)
       
   502 #define SSL3_ST_SW_SRVR_HELLO_B		(0x131|SSL_ST_ACCEPT)
       
   503 #define SSL3_ST_SW_CERT_A		(0x140|SSL_ST_ACCEPT)
       
   504 #define SSL3_ST_SW_CERT_B		(0x141|SSL_ST_ACCEPT)
       
   505 #define SSL3_ST_SW_KEY_EXCH_A		(0x150|SSL_ST_ACCEPT)
       
   506 #define SSL3_ST_SW_KEY_EXCH_B		(0x151|SSL_ST_ACCEPT)
       
   507 #define SSL3_ST_SW_CERT_REQ_A		(0x160|SSL_ST_ACCEPT)
       
   508 #define SSL3_ST_SW_CERT_REQ_B		(0x161|SSL_ST_ACCEPT)
       
   509 #define SSL3_ST_SW_SRVR_DONE_A		(0x170|SSL_ST_ACCEPT)
       
   510 #define SSL3_ST_SW_SRVR_DONE_B		(0x171|SSL_ST_ACCEPT)
       
   511 /* read from client */
       
   512 #define SSL3_ST_SR_CERT_A		(0x180|SSL_ST_ACCEPT)
       
   513 #define SSL3_ST_SR_CERT_B		(0x181|SSL_ST_ACCEPT)
       
   514 #define SSL3_ST_SR_KEY_EXCH_A		(0x190|SSL_ST_ACCEPT)
       
   515 #define SSL3_ST_SR_KEY_EXCH_B		(0x191|SSL_ST_ACCEPT)
       
   516 #define SSL3_ST_SR_CERT_VRFY_A		(0x1A0|SSL_ST_ACCEPT)
       
   517 #define SSL3_ST_SR_CERT_VRFY_B		(0x1A1|SSL_ST_ACCEPT)
       
   518 #define SSL3_ST_SR_CHANGE_A		(0x1B0|SSL_ST_ACCEPT)
       
   519 #define SSL3_ST_SR_CHANGE_B		(0x1B1|SSL_ST_ACCEPT)
       
   520 #define SSL3_ST_SR_FINISHED_A		(0x1C0|SSL_ST_ACCEPT)
       
   521 #define SSL3_ST_SR_FINISHED_B		(0x1C1|SSL_ST_ACCEPT)
       
   522 /* write to client */
       
   523 #define SSL3_ST_SW_CHANGE_A		(0x1D0|SSL_ST_ACCEPT)
       
   524 #define SSL3_ST_SW_CHANGE_B		(0x1D1|SSL_ST_ACCEPT)
       
   525 #define SSL3_ST_SW_FINISHED_A		(0x1E0|SSL_ST_ACCEPT)
       
   526 #define SSL3_ST_SW_FINISHED_B		(0x1E1|SSL_ST_ACCEPT)
       
   527 #define SSL3_ST_SW_SESSION_TICKET_A	(0x1F0|SSL_ST_ACCEPT)
       
   528 #define SSL3_ST_SW_SESSION_TICKET_B	(0x1F1|SSL_ST_ACCEPT)
       
   529 
       
   530 #define SSL3_MT_HELLO_REQUEST			0
       
   531 #define SSL3_MT_CLIENT_HELLO			1
       
   532 #define SSL3_MT_SERVER_HELLO			2
       
   533 #define	SSL3_MT_NEWSESSION_TICKET		4
       
   534 #define SSL3_MT_CERTIFICATE			11
       
   535 #define SSL3_MT_SERVER_KEY_EXCHANGE		12
       
   536 #define SSL3_MT_CERTIFICATE_REQUEST		13
       
   537 #define SSL3_MT_SERVER_DONE			14
       
   538 #define SSL3_MT_CERTIFICATE_VERIFY		15
       
   539 #define SSL3_MT_CLIENT_KEY_EXCHANGE		16
       
   540 #define SSL3_MT_FINISHED			20
       
   541 #define DTLS1_MT_HELLO_VERIFY_REQUEST    3
       
   542 
       
   543 
       
   544 #define SSL3_MT_CCS				1
       
   545 
       
   546 /* These are used when changing over to a new cipher */
       
   547 #define SSL3_CC_READ		0x01
       
   548 #define SSL3_CC_WRITE		0x02
       
   549 #define SSL3_CC_CLIENT		0x10
       
   550 #define SSL3_CC_SERVER		0x20
       
   551 #define SSL3_CHANGE_CIPHER_CLIENT_WRITE	(SSL3_CC_CLIENT|SSL3_CC_WRITE)	
       
   552 #define SSL3_CHANGE_CIPHER_SERVER_READ	(SSL3_CC_SERVER|SSL3_CC_READ)
       
   553 #define SSL3_CHANGE_CIPHER_CLIENT_READ	(SSL3_CC_CLIENT|SSL3_CC_READ)
       
   554 #define SSL3_CHANGE_CIPHER_SERVER_WRITE	(SSL3_CC_SERVER|SSL3_CC_WRITE)
       
   555 
       
   556 #ifdef  __cplusplus
       
   557 }
       
   558 #endif
       
   559 #endif
       
   560