* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Mayaqua / openssl / ssl3.h
diff --git a/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/openssl/ssl3.h b/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/openssl/ssl3.h
new file mode 100644 (file)
index 0000000..f2ddcb2
--- /dev/null
@@ -0,0 +1,551 @@
+/* ssl/ssl3.h */\r
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\r
+ * All rights reserved.\r
+ *\r
+ * This package is an SSL implementation written\r
+ * by Eric Young (eay@cryptsoft.com).\r
+ * The implementation was written so as to conform with Netscapes SSL.\r
+ * \r
+ * This library is free for commercial and non-commercial use as long as\r
+ * the following conditions are aheared to.  The following conditions\r
+ * apply to all code found in this distribution, be it the RC4, RSA,\r
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\r
+ * included with this distribution is covered by the same copyright terms\r
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).\r
+ * \r
+ * Copyright remains Eric Young's, and as such any Copyright notices in\r
+ * the code are not to be removed.\r
+ * If this package is used in a product, Eric Young should be given attribution\r
+ * as the author of the parts of the library used.\r
+ * This can be in the form of a textual message at program startup or\r
+ * in documentation (online or textual) provided with the package.\r
+ * \r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. All advertising materials mentioning features or use of this software\r
+ *    must display the following acknowledgement:\r
+ *    "This product includes cryptographic software written by\r
+ *     Eric Young (eay@cryptsoft.com)"\r
+ *    The word 'cryptographic' can be left out if the rouines from the library\r
+ *    being used are not cryptographic related :-).\r
+ * 4. If you include any Windows specific code (or a derivative thereof) from \r
+ *    the apps directory (application code) you must include an acknowledgement:\r
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"\r
+ * \r
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ * \r
+ * The licence and distribution terms for any publically available version or\r
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be\r
+ * copied and put under another distribution licence\r
+ * [including the GNU Public Licence.]\r
+ */\r
+/* ====================================================================\r
+ * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer. \r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in\r
+ *    the documentation and/or other materials provided with the\r
+ *    distribution.\r
+ *\r
+ * 3. All advertising materials mentioning features or use of this\r
+ *    software must display the following acknowledgment:\r
+ *    "This product includes software developed by the OpenSSL Project\r
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"\r
+ *\r
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to\r
+ *    endorse or promote products derived from this software without\r
+ *    prior written permission. For written permission, please contact\r
+ *    openssl-core@openssl.org.\r
+ *\r
+ * 5. Products derived from this software may not be called "OpenSSL"\r
+ *    nor may "OpenSSL" appear in their names without prior written\r
+ *    permission of the OpenSSL Project.\r
+ *\r
+ * 6. Redistributions of any form whatsoever must retain the following\r
+ *    acknowledgment:\r
+ *    "This product includes software developed by the OpenSSL Project\r
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\r
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\r
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
+ * OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ====================================================================\r
+ *\r
+ * This product includes cryptographic software written by Eric Young\r
+ * (eay@cryptsoft.com).  This product includes software written by Tim\r
+ * Hudson (tjh@cryptsoft.com).\r
+ *\r
+ */\r
+/* ====================================================================\r
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\r
+ * ECC cipher suite support in OpenSSL originally developed by \r
+ * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\r
+ */\r
+\r
+#ifndef HEADER_SSL3_H \r
+#define HEADER_SSL3_H \r
+\r
+#ifndef OPENSSL_NO_COMP\r
+#include <openssl/comp.h>\r
+#endif\r
+#include <openssl/buffer.h>\r
+#include <openssl/evp.h>\r
+#include <openssl/ssl.h>\r
+#include <openssl/pq_compat.h>\r
+\r
+#ifdef  __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#define SSL3_CK_RSA_NULL_MD5                   0x03000001\r
+#define SSL3_CK_RSA_NULL_SHA                   0x03000002\r
+#define SSL3_CK_RSA_RC4_40_MD5                         0x03000003\r
+#define SSL3_CK_RSA_RC4_128_MD5                        0x03000004\r
+#define SSL3_CK_RSA_RC4_128_SHA                        0x03000005\r
+#define SSL3_CK_RSA_RC2_40_MD5                 0x03000006\r
+#define SSL3_CK_RSA_IDEA_128_SHA               0x03000007\r
+#define SSL3_CK_RSA_DES_40_CBC_SHA             0x03000008\r
+#define SSL3_CK_RSA_DES_64_CBC_SHA             0x03000009\r
+#define SSL3_CK_RSA_DES_192_CBC3_SHA           0x0300000A\r
+\r
+#define SSL3_CK_DH_DSS_DES_40_CBC_SHA          0x0300000B\r
+#define SSL3_CK_DH_DSS_DES_64_CBC_SHA          0x0300000C\r
+#define SSL3_CK_DH_DSS_DES_192_CBC3_SHA        0x0300000D\r
+#define SSL3_CK_DH_RSA_DES_40_CBC_SHA          0x0300000E\r
+#define SSL3_CK_DH_RSA_DES_64_CBC_SHA          0x0300000F\r
+#define SSL3_CK_DH_RSA_DES_192_CBC3_SHA        0x03000010\r
+\r
+#define SSL3_CK_EDH_DSS_DES_40_CBC_SHA         0x03000011\r
+#define SSL3_CK_EDH_DSS_DES_64_CBC_SHA         0x03000012\r
+#define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA       0x03000013\r
+#define SSL3_CK_EDH_RSA_DES_40_CBC_SHA         0x03000014\r
+#define SSL3_CK_EDH_RSA_DES_64_CBC_SHA         0x03000015\r
+#define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA       0x03000016\r
+\r
+#define SSL3_CK_ADH_RC4_40_MD5                 0x03000017\r
+#define SSL3_CK_ADH_RC4_128_MD5                        0x03000018\r
+#define SSL3_CK_ADH_DES_40_CBC_SHA             0x03000019\r
+#define SSL3_CK_ADH_DES_64_CBC_SHA             0x0300001A\r
+#define SSL3_CK_ADH_DES_192_CBC_SHA            0x0300001B\r
+\r
+#define SSL3_CK_FZA_DMS_NULL_SHA               0x0300001C\r
+#define SSL3_CK_FZA_DMS_FZA_SHA                        0x0300001D\r
+#if 0 /* Because it clashes with KRB5, is never used any more, and is safe\r
+        to remove according to David Hopwood <david.hopwood@zetnet.co.uk>\r
+        of the ietf-tls list */\r
+#define SSL3_CK_FZA_DMS_RC4_SHA                        0x0300001E\r
+#endif\r
+\r
+/*    VRS Additional Kerberos5 entries\r
+ */\r
+#define SSL3_CK_KRB5_DES_64_CBC_SHA            0x0300001E\r
+#define SSL3_CK_KRB5_DES_192_CBC3_SHA          0x0300001F\r
+#define SSL3_CK_KRB5_RC4_128_SHA               0x03000020\r
+#define SSL3_CK_KRB5_IDEA_128_CBC_SHA          0x03000021\r
+#define SSL3_CK_KRB5_DES_64_CBC_MD5            0x03000022\r
+#define SSL3_CK_KRB5_DES_192_CBC3_MD5          0x03000023\r
+#define SSL3_CK_KRB5_RC4_128_MD5               0x03000024\r
+#define SSL3_CK_KRB5_IDEA_128_CBC_MD5          0x03000025\r
+\r
+#define SSL3_CK_KRB5_DES_40_CBC_SHA            0x03000026\r
+#define SSL3_CK_KRB5_RC2_40_CBC_SHA            0x03000027\r
+#define SSL3_CK_KRB5_RC4_40_SHA                        0x03000028\r
+#define SSL3_CK_KRB5_DES_40_CBC_MD5            0x03000029\r
+#define SSL3_CK_KRB5_RC2_40_CBC_MD5            0x0300002A\r
+#define SSL3_CK_KRB5_RC4_40_MD5                        0x0300002B\r
+\r
+#define SSL3_TXT_RSA_NULL_MD5                  "NULL-MD5"\r
+#define SSL3_TXT_RSA_NULL_SHA                  "NULL-SHA"\r
+#define SSL3_TXT_RSA_RC4_40_MD5                "EXP-RC4-MD5"\r
+#define SSL3_TXT_RSA_RC4_128_MD5               "RC4-MD5"\r
+#define SSL3_TXT_RSA_RC4_128_SHA               "RC4-SHA"\r
+#define SSL3_TXT_RSA_RC2_40_MD5                        "EXP-RC2-CBC-MD5"\r
+#define SSL3_TXT_RSA_IDEA_128_SHA              "IDEA-CBC-SHA"\r
+#define SSL3_TXT_RSA_DES_40_CBC_SHA            "EXP-DES-CBC-SHA"\r
+#define SSL3_TXT_RSA_DES_64_CBC_SHA            "DES-CBC-SHA"\r
+#define SSL3_TXT_RSA_DES_192_CBC3_SHA          "DES-CBC3-SHA"\r
+\r
+#define SSL3_TXT_DH_DSS_DES_40_CBC_SHA         "EXP-DH-DSS-DES-CBC-SHA"\r
+#define SSL3_TXT_DH_DSS_DES_64_CBC_SHA         "DH-DSS-DES-CBC-SHA"\r
+#define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA       "DH-DSS-DES-CBC3-SHA"\r
+#define SSL3_TXT_DH_RSA_DES_40_CBC_SHA         "EXP-DH-RSA-DES-CBC-SHA"\r
+#define SSL3_TXT_DH_RSA_DES_64_CBC_SHA         "DH-RSA-DES-CBC-SHA"\r
+#define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA       "DH-RSA-DES-CBC3-SHA"\r
+\r
+#define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA                "EXP-EDH-DSS-DES-CBC-SHA"\r
+#define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA                "EDH-DSS-DES-CBC-SHA"\r
+#define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA      "EDH-DSS-DES-CBC3-SHA"\r
+#define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA                "EXP-EDH-RSA-DES-CBC-SHA"\r
+#define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA                "EDH-RSA-DES-CBC-SHA"\r
+#define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA      "EDH-RSA-DES-CBC3-SHA"\r
+\r
+#define SSL3_TXT_ADH_RC4_40_MD5                        "EXP-ADH-RC4-MD5"\r
+#define SSL3_TXT_ADH_RC4_128_MD5               "ADH-RC4-MD5"\r
+#define SSL3_TXT_ADH_DES_40_CBC_SHA            "EXP-ADH-DES-CBC-SHA"\r
+#define SSL3_TXT_ADH_DES_64_CBC_SHA            "ADH-DES-CBC-SHA"\r
+#define SSL3_TXT_ADH_DES_192_CBC_SHA           "ADH-DES-CBC3-SHA"\r
+\r
+#define SSL3_TXT_FZA_DMS_NULL_SHA              "FZA-NULL-SHA"\r
+#define SSL3_TXT_FZA_DMS_FZA_SHA               "FZA-FZA-CBC-SHA"\r
+#define SSL3_TXT_FZA_DMS_RC4_SHA               "FZA-RC4-SHA"\r
+\r
+#define SSL3_TXT_KRB5_DES_64_CBC_SHA           "KRB5-DES-CBC-SHA"\r
+#define SSL3_TXT_KRB5_DES_192_CBC3_SHA         "KRB5-DES-CBC3-SHA"\r
+#define SSL3_TXT_KRB5_RC4_128_SHA              "KRB5-RC4-SHA"\r
+#define SSL3_TXT_KRB5_IDEA_128_CBC_SHA         "KRB5-IDEA-CBC-SHA"\r
+#define SSL3_TXT_KRB5_DES_64_CBC_MD5           "KRB5-DES-CBC-MD5"\r
+#define SSL3_TXT_KRB5_DES_192_CBC3_MD5         "KRB5-DES-CBC3-MD5"\r
+#define SSL3_TXT_KRB5_RC4_128_MD5              "KRB5-RC4-MD5"\r
+#define SSL3_TXT_KRB5_IDEA_128_CBC_MD5                 "KRB5-IDEA-CBC-MD5"\r
+\r
+#define SSL3_TXT_KRB5_DES_40_CBC_SHA           "EXP-KRB5-DES-CBC-SHA"\r
+#define SSL3_TXT_KRB5_RC2_40_CBC_SHA           "EXP-KRB5-RC2-CBC-SHA"\r
+#define SSL3_TXT_KRB5_RC4_40_SHA               "EXP-KRB5-RC4-SHA"\r
+#define SSL3_TXT_KRB5_DES_40_CBC_MD5           "EXP-KRB5-DES-CBC-MD5"\r
+#define SSL3_TXT_KRB5_RC2_40_CBC_MD5           "EXP-KRB5-RC2-CBC-MD5"\r
+#define SSL3_TXT_KRB5_RC4_40_MD5               "EXP-KRB5-RC4-MD5"\r
+\r
+#define SSL3_SSL_SESSION_ID_LENGTH             32\r
+#define SSL3_MAX_SSL_SESSION_ID_LENGTH         32\r
+\r
+#define SSL3_MASTER_SECRET_SIZE                        48\r
+#define SSL3_RANDOM_SIZE                       32\r
+#define SSL3_SESSION_ID_SIZE                   32\r
+#define SSL3_RT_HEADER_LENGTH                  5\r
+\r
+/* Due to MS stuffing up, this can change.... */\r
+#if defined(OPENSSL_SYS_WIN16) || \\r
+       (defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32))\r
+#define SSL3_RT_MAX_EXTRA                      (14000)\r
+#else\r
+#define SSL3_RT_MAX_EXTRA                      (16384)\r
+#endif\r
+\r
+#define SSL3_RT_MAX_PLAIN_LENGTH               16384\r
+#define SSL3_RT_MAX_COMPRESSED_LENGTH  (1024+SSL3_RT_MAX_PLAIN_LENGTH)\r
+#define SSL3_RT_MAX_ENCRYPTED_LENGTH   (1024+SSL3_RT_MAX_COMPRESSED_LENGTH)\r
+#define SSL3_RT_MAX_PACKET_SIZE                (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)\r
+#define SSL3_RT_MAX_DATA_SIZE                  (1024*1024)\r
+\r
+#define SSL3_MD_CLIENT_FINISHED_CONST  "\x43\x4C\x4E\x54"\r
+#define SSL3_MD_SERVER_FINISHED_CONST  "\x53\x52\x56\x52"\r
+\r
+#define SSL3_VERSION                   0x0300\r
+#define SSL3_VERSION_MAJOR             0x03\r
+#define SSL3_VERSION_MINOR             0x00\r
+\r
+#define SSL3_RT_CHANGE_CIPHER_SPEC     20\r
+#define SSL3_RT_ALERT                  21\r
+#define SSL3_RT_HANDSHAKE              22\r
+#define SSL3_RT_APPLICATION_DATA       23\r
+\r
+#define SSL3_AL_WARNING                        1\r
+#define SSL3_AL_FATAL                  2\r
+\r
+#define SSL3_AD_CLOSE_NOTIFY            0\r
+#define SSL3_AD_UNEXPECTED_MESSAGE     10      /* fatal */\r
+#define SSL3_AD_BAD_RECORD_MAC         20      /* fatal */\r
+#define SSL3_AD_DECOMPRESSION_FAILURE  30      /* fatal */\r
+#define SSL3_AD_HANDSHAKE_FAILURE      40      /* fatal */\r
+#define SSL3_AD_NO_CERTIFICATE         41\r
+#define SSL3_AD_BAD_CERTIFICATE                42\r
+#define SSL3_AD_UNSUPPORTED_CERTIFICATE        43\r
+#define SSL3_AD_CERTIFICATE_REVOKED    44\r
+#define SSL3_AD_CERTIFICATE_EXPIRED    45\r
+#define SSL3_AD_CERTIFICATE_UNKNOWN    46\r
+#define SSL3_AD_ILLEGAL_PARAMETER      47      /* fatal */\r
+\r
+typedef struct ssl3_record_st\r
+       {\r
+/*r */ int type;               /* type of record */\r
+/*rw*/ unsigned int length;    /* How many bytes available */\r
+/*r */ unsigned int off;       /* read/write offset into 'buf' */\r
+/*rw*/ unsigned char *data;    /* pointer to the record data */\r
+/*rw*/ unsigned char *input;   /* where the decode bytes are */\r
+/*r */ unsigned char *comp;    /* only used with decompression - malloc()ed */\r
+/*r */  unsigned long epoch;    /* epoch number, needed by DTLS1 */\r
+/*r */  PQ_64BIT seq_num;       /* sequence number, needed by DTLS1 */\r
+       } SSL3_RECORD;\r
+\r
+typedef struct ssl3_buffer_st\r
+       {\r
+       unsigned char *buf;     /* at least SSL3_RT_MAX_PACKET_SIZE bytes,\r
+                                * see ssl3_setup_buffers() */\r
+       size_t len;             /* buffer size */\r
+       int offset;             /* where to 'copy from' */\r
+       int left;               /* how many bytes left */\r
+       } SSL3_BUFFER;\r
+\r
+#define SSL3_CT_RSA_SIGN                       1\r
+#define SSL3_CT_DSS_SIGN                       2\r
+#define SSL3_CT_RSA_FIXED_DH                   3\r
+#define SSL3_CT_DSS_FIXED_DH                   4\r
+#define SSL3_CT_RSA_EPHEMERAL_DH               5\r
+#define SSL3_CT_DSS_EPHEMERAL_DH               6\r
+#define SSL3_CT_FORTEZZA_DMS                   20\r
+/* SSL3_CT_NUMBER is used to size arrays and it must be large\r
+ * enough to contain all of the cert types defined either for\r
+ * SSLv3 and TLSv1.\r
+ */\r
+#define SSL3_CT_NUMBER                 7\r
+\r
+\r
+#define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS      0x0001\r
+#define SSL3_FLAGS_DELAY_CLIENT_FINISHED       0x0002\r
+#define SSL3_FLAGS_POP_BUFFER                  0x0004\r
+#define TLS1_FLAGS_TLS_PADDING_BUG             0x0008\r
+\r
+typedef struct ssl3_state_st\r
+       {\r
+       long flags;\r
+       int delay_buf_pop_ret;\r
+\r
+       unsigned char read_sequence[8];\r
+       unsigned char read_mac_secret[EVP_MAX_MD_SIZE];\r
+       unsigned char write_sequence[8];\r
+       unsigned char write_mac_secret[EVP_MAX_MD_SIZE];\r
+\r
+       unsigned char server_random[SSL3_RANDOM_SIZE];\r
+       unsigned char client_random[SSL3_RANDOM_SIZE];\r
+\r
+       /* flags for countermeasure against known-IV weakness */\r
+       int need_empty_fragments;\r
+       int empty_fragment_done;\r
+\r
+       SSL3_BUFFER rbuf;       /* read IO goes into here */\r
+       SSL3_BUFFER wbuf;       /* write IO goes into here */\r
+\r
+       SSL3_RECORD rrec;       /* each decoded record goes in here */\r
+       SSL3_RECORD wrec;       /* goes out from here */\r
+\r
+       /* storage for Alert/Handshake protocol data received but not\r
+        * yet processed by ssl3_read_bytes: */\r
+       unsigned char alert_fragment[2];\r
+       unsigned int alert_fragment_len;\r
+       unsigned char handshake_fragment[4];\r
+       unsigned int handshake_fragment_len;\r
+\r
+       /* partial write - check the numbers match */\r
+       unsigned int wnum;      /* number of bytes sent so far */\r
+       int wpend_tot;          /* number bytes written */\r
+       int wpend_type;\r
+       int wpend_ret;          /* number of bytes submitted */\r
+       const unsigned char *wpend_buf;\r
+\r
+       /* used during startup, digest all incoming/outgoing packets */\r
+       EVP_MD_CTX finish_dgst1;\r
+       EVP_MD_CTX finish_dgst2;\r
+\r
+       /* this is set whenerver we see a change_cipher_spec message\r
+        * come in when we are not looking for one */\r
+       int change_cipher_spec;\r
+\r
+       int warn_alert;\r
+       int fatal_alert;\r
+       /* we allow one fatal and one warning alert to be outstanding,\r
+        * send close alert via the warning alert */\r
+       int alert_dispatch;\r
+       unsigned char send_alert[2];\r
+\r
+       /* This flag is set when we should renegotiate ASAP, basically when\r
+        * there is no more data in the read or write buffers */\r
+       int renegotiate;\r
+       int total_renegotiations;\r
+       int num_renegotiations;\r
+\r
+       int in_read_app_data;\r
+\r
+       struct  {\r
+               /* actually only needs to be 16+20 */\r
+               unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];\r
+\r
+               /* actually only need to be 16+20 for SSLv3 and 12 for TLS */\r
+               unsigned char finish_md[EVP_MAX_MD_SIZE*2];\r
+               int finish_md_len;\r
+               unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2];\r
+               int peer_finish_md_len;\r
+               \r
+               unsigned long message_size;\r
+               int message_type;\r
+\r
+               /* used to hold the new cipher we are going to use */\r
+               SSL_CIPHER *new_cipher;\r
+#ifndef OPENSSL_NO_DH\r
+               DH *dh;\r
+#endif\r
+\r
+#ifndef OPENSSL_NO_ECDH\r
+               EC_KEY *ecdh; /* holds short lived ECDH key */\r
+#endif\r
+\r
+               /* used when SSL_ST_FLUSH_DATA is entered */\r
+               int next_state;                 \r
+\r
+               int reuse_message;\r
+\r
+               /* used for certificate requests */\r
+               int cert_req;\r
+               int ctype_num;\r
+               char ctype[SSL3_CT_NUMBER];\r
+               STACK_OF(X509_NAME) *ca_names;\r
+\r
+               int use_rsa_tmp;\r
+\r
+               int key_block_length;\r
+               unsigned char *key_block;\r
+\r
+               const EVP_CIPHER *new_sym_enc;\r
+               const EVP_MD *new_hash;\r
+#ifndef OPENSSL_NO_COMP\r
+               const SSL_COMP *new_compression;\r
+#else\r
+               char *new_compression;\r
+#endif\r
+               int cert_request;\r
+               } tmp;\r
+\r
+       } SSL3_STATE;\r
+\r
+\r
+/* SSLv3 */\r
+/*client */\r
+/* extra state */\r
+#define SSL3_ST_CW_FLUSH               (0x100|SSL_ST_CONNECT)\r
+/* write to server */\r
+#define SSL3_ST_CW_CLNT_HELLO_A                (0x110|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_CLNT_HELLO_B                (0x111|SSL_ST_CONNECT)\r
+/* read from server */\r
+#define SSL3_ST_CR_SRVR_HELLO_A                (0x120|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_SRVR_HELLO_B                (0x121|SSL_ST_CONNECT)\r
+#define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT)\r
+#define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_CERT_A              (0x130|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_CERT_B              (0x131|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_KEY_EXCH_A          (0x140|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_KEY_EXCH_B          (0x141|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_CERT_REQ_A          (0x150|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_CERT_REQ_B          (0x151|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_SRVR_DONE_A         (0x160|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_SRVR_DONE_B         (0x161|SSL_ST_CONNECT)\r
+/* write to server */\r
+#define SSL3_ST_CW_CERT_A              (0x170|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_CERT_B              (0x171|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_CERT_C              (0x172|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_CERT_D              (0x173|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_KEY_EXCH_A          (0x180|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_KEY_EXCH_B          (0x181|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_CERT_VRFY_A         (0x190|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_CERT_VRFY_B         (0x191|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_CHANGE_A            (0x1A0|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_CHANGE_B            (0x1A1|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_FINISHED_A          (0x1B0|SSL_ST_CONNECT)\r
+#define SSL3_ST_CW_FINISHED_B          (0x1B1|SSL_ST_CONNECT)\r
+/* read from server */\r
+#define SSL3_ST_CR_CHANGE_A            (0x1C0|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_CHANGE_B            (0x1C1|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_FINISHED_A          (0x1D0|SSL_ST_CONNECT)\r
+#define SSL3_ST_CR_FINISHED_B          (0x1D1|SSL_ST_CONNECT)\r
+\r
+/* server */\r
+/* extra state */\r
+#define SSL3_ST_SW_FLUSH               (0x100|SSL_ST_ACCEPT)\r
+/* read from client */\r
+/* Do not change the number values, they do matter */\r
+#define SSL3_ST_SR_CLNT_HELLO_A                (0x110|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_CLNT_HELLO_B                (0x111|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_CLNT_HELLO_C                (0x112|SSL_ST_ACCEPT)\r
+/* write to client */\r
+#define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT)\r
+#define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_HELLO_REQ_A         (0x120|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_HELLO_REQ_B         (0x121|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_HELLO_REQ_C         (0x122|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_SRVR_HELLO_A                (0x130|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_SRVR_HELLO_B                (0x131|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_CERT_A              (0x140|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_CERT_B              (0x141|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_KEY_EXCH_A          (0x150|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_KEY_EXCH_B          (0x151|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_CERT_REQ_A          (0x160|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_CERT_REQ_B          (0x161|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_SRVR_DONE_A         (0x170|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_SRVR_DONE_B         (0x171|SSL_ST_ACCEPT)\r
+/* read from client */\r
+#define SSL3_ST_SR_CERT_A              (0x180|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_CERT_B              (0x181|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_KEY_EXCH_A          (0x190|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_KEY_EXCH_B          (0x191|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_CERT_VRFY_A         (0x1A0|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_CERT_VRFY_B         (0x1A1|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_CHANGE_A            (0x1B0|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_CHANGE_B            (0x1B1|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_FINISHED_A          (0x1C0|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SR_FINISHED_B          (0x1C1|SSL_ST_ACCEPT)\r
+/* write to client */\r
+#define SSL3_ST_SW_CHANGE_A            (0x1D0|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_CHANGE_B            (0x1D1|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_FINISHED_A          (0x1E0|SSL_ST_ACCEPT)\r
+#define SSL3_ST_SW_FINISHED_B          (0x1E1|SSL_ST_ACCEPT)\r
+\r
+#define SSL3_MT_HELLO_REQUEST                  0\r
+#define SSL3_MT_CLIENT_HELLO                   1\r
+#define SSL3_MT_SERVER_HELLO                   2\r
+#define SSL3_MT_CERTIFICATE                    11\r
+#define SSL3_MT_SERVER_KEY_EXCHANGE            12\r
+#define SSL3_MT_CERTIFICATE_REQUEST            13\r
+#define SSL3_MT_SERVER_DONE                    14\r
+#define SSL3_MT_CERTIFICATE_VERIFY             15\r
+#define SSL3_MT_CLIENT_KEY_EXCHANGE            16\r
+#define SSL3_MT_FINISHED                       20\r
+#define DTLS1_MT_HELLO_VERIFY_REQUEST    3\r
+\r
+\r
+#define SSL3_MT_CCS                            1\r
+\r
+/* These are used when changing over to a new cipher */\r
+#define SSL3_CC_READ           0x01\r
+#define SSL3_CC_WRITE          0x02\r
+#define SSL3_CC_CLIENT         0x10\r
+#define SSL3_CC_SERVER         0x20\r
+#define SSL3_CHANGE_CIPHER_CLIENT_WRITE        (SSL3_CC_CLIENT|SSL3_CC_WRITE)  \r
+#define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ)\r
+#define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ)\r
+#define SSL3_CHANGE_CIPHER_SERVER_WRITE        (SSL3_CC_SERVER|SSL3_CC_WRITE)\r
+\r
+#ifdef  __cplusplus\r
+}\r
+#endif\r
+#endif\r
+\r