(linenum→info "unix/slp.c:2238")

openssl/0.9.8g/ssl/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: