Home | History | Annotate | Line # | Download | only in ssl
s3_lib.c revision 1.7.2.1.4.7
      1 /* ssl/s3_lib.c */
      2 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
      3  * All rights reserved.
      4  *
      5  * This package is an SSL implementation written
      6  * by Eric Young (eay (at) cryptsoft.com).
      7  * The implementation was written so as to conform with Netscapes SSL.
      8  *
      9  * This library is free for commercial and non-commercial use as long as
     10  * the following conditions are aheared to.  The following conditions
     11  * apply to all code found in this distribution, be it the RC4, RSA,
     12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
     13  * included with this distribution is covered by the same copyright terms
     14  * except that the holder is Tim Hudson (tjh (at) cryptsoft.com).
     15  *
     16  * Copyright remains Eric Young's, and as such any Copyright notices in
     17  * the code are not to be removed.
     18  * If this package is used in a product, Eric Young should be given attribution
     19  * as the author of the parts of the library used.
     20  * This can be in the form of a textual message at program startup or
     21  * in documentation (online or textual) provided with the package.
     22  *
     23  * Redistribution and use in source and binary forms, with or without
     24  * modification, are permitted provided that the following conditions
     25  * are met:
     26  * 1. Redistributions of source code must retain the copyright
     27  *    notice, this list of conditions and the following disclaimer.
     28  * 2. Redistributions in binary form must reproduce the above copyright
     29  *    notice, this list of conditions and the following disclaimer in the
     30  *    documentation and/or other materials provided with the distribution.
     31  * 3. All advertising materials mentioning features or use of this software
     32  *    must display the following acknowledgement:
     33  *    "This product includes cryptographic software written by
     34  *     Eric Young (eay (at) cryptsoft.com)"
     35  *    The word 'cryptographic' can be left out if the rouines from the library
     36  *    being used are not cryptographic related :-).
     37  * 4. If you include any Windows specific code (or a derivative thereof) from
     38  *    the apps directory (application code) you must include an acknowledgement:
     39  *    "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)"
     40  *
     41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
     42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     51  * SUCH DAMAGE.
     52  *
     53  * The licence and distribution terms for any publically available version or
     54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
     55  * copied and put under another distribution licence
     56  * [including the GNU Public Licence.]
     57  */
     58 /* ====================================================================
     59  * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
     60  *
     61  * Redistribution and use in source and binary forms, with or without
     62  * modification, are permitted provided that the following conditions
     63  * are met:
     64  *
     65  * 1. Redistributions of source code must retain the above copyright
     66  *    notice, this list of conditions and the following disclaimer.
     67  *
     68  * 2. Redistributions in binary form must reproduce the above copyright
     69  *    notice, this list of conditions and the following disclaimer in
     70  *    the documentation and/or other materials provided with the
     71  *    distribution.
     72  *
     73  * 3. All advertising materials mentioning features or use of this
     74  *    software must display the following acknowledgment:
     75  *    "This product includes software developed by the OpenSSL Project
     76  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
     77  *
     78  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     79  *    endorse or promote products derived from this software without
     80  *    prior written permission. For written permission, please contact
     81  *    openssl-core (at) openssl.org.
     82  *
     83  * 5. Products derived from this software may not be called "OpenSSL"
     84  *    nor may "OpenSSL" appear in their names without prior written
     85  *    permission of the OpenSSL Project.
     86  *
     87  * 6. Redistributions of any form whatsoever must retain the following
     88  *    acknowledgment:
     89  *    "This product includes software developed by the OpenSSL Project
     90  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
     91  *
     92  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     93  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     94  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     95  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     98  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     99  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    103  * OF THE POSSIBILITY OF SUCH DAMAGE.
    104  * ====================================================================
    105  *
    106  * This product includes cryptographic software written by Eric Young
    107  * (eay (at) cryptsoft.com).  This product includes software written by Tim
    108  * Hudson (tjh (at) cryptsoft.com).
    109  *
    110  */
    111 /* ====================================================================
    112  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
    113  *
    114  * Portions of the attached software ("Contribution") are developed by
    115  * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
    116  *
    117  * The Contribution is licensed pursuant to the OpenSSL open source
    118  * license provided above.
    119  *
    120  * ECC cipher suite support in OpenSSL originally written by
    121  * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
    122  *
    123  */
    124 /* ====================================================================
    125  * Copyright 2005 Nokia. All rights reserved.
    126  *
    127  * The portions of the attached software ("Contribution") is developed by
    128  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
    129  * license.
    130  *
    131  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
    132  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
    133  * support (see RFC 4279) to OpenSSL.
    134  *
    135  * No patent licenses or other rights except those expressly stated in
    136  * the OpenSSL open source license shall be deemed granted or received
    137  * expressly, by implication, estoppel, or otherwise.
    138  *
    139  * No assurances are provided by Nokia that the Contribution does not
    140  * infringe the patent or other intellectual property rights of any third
    141  * party or that the license provides you with all the necessary rights
    142  * to make use of the Contribution.
    143  *
    144  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
    145  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
    146  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
    147  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
    148  * OTHERWISE.
    149  */
    150 
    151 #include <stdio.h>
    152 #include <openssl/objects.h>
    153 #include "ssl_locl.h"
    154 #include "kssl_lcl.h"
    155 #ifndef OPENSSL_NO_TLSEXT
    156 # ifndef OPENSSL_NO_EC
    157 #  include "../crypto/ec/ec_lcl.h"
    158 # endif                         /* OPENSSL_NO_EC */
    159 #endif                          /* OPENSSL_NO_TLSEXT */
    160 #include <openssl/md5.h>
    161 #ifndef OPENSSL_NO_DH
    162 # include <openssl/dh.h>
    163 #endif
    164 
    165 const char ssl3_version_str[] = "SSLv3" OPENSSL_VERSION_PTEXT;
    166 
    167 #define SSL3_NUM_CIPHERS        (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
    168 
    169 /* list of available SSLv3 ciphers (sorted by id) */
    170 OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
    171 
    172 /* The RSA ciphers */
    173 /* Cipher 01 */
    174     {
    175      1,
    176      SSL3_TXT_RSA_NULL_MD5,
    177      SSL3_CK_RSA_NULL_MD5,
    178      SSL_kRSA,
    179      SSL_aRSA,
    180      SSL_eNULL,
    181      SSL_MD5,
    182      SSL_SSLV3,
    183      SSL_NOT_EXP | SSL_STRONG_NONE,
    184      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    185      0,
    186      0,
    187      },
    188 
    189 /* Cipher 02 */
    190     {
    191      1,
    192      SSL3_TXT_RSA_NULL_SHA,
    193      SSL3_CK_RSA_NULL_SHA,
    194      SSL_kRSA,
    195      SSL_aRSA,
    196      SSL_eNULL,
    197      SSL_SHA1,
    198      SSL_SSLV3,
    199      SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
    200      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    201      0,
    202      0,
    203      },
    204 
    205 /* Cipher 03 */
    206 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    207     {
    208      1,
    209      SSL3_TXT_RSA_RC4_40_MD5,
    210      SSL3_CK_RSA_RC4_40_MD5,
    211      SSL_kRSA,
    212      SSL_aRSA,
    213      SSL_RC4,
    214      SSL_MD5,
    215      SSL_SSLV3,
    216      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    217      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    218      40,
    219      128,
    220      },
    221 #endif
    222 
    223 /* Cipher 04 */
    224     {
    225      1,
    226      SSL3_TXT_RSA_RC4_128_MD5,
    227      SSL3_CK_RSA_RC4_128_MD5,
    228      SSL_kRSA,
    229      SSL_aRSA,
    230      SSL_RC4,
    231      SSL_MD5,
    232      SSL_SSLV3,
    233      SSL_NOT_EXP | SSL_MEDIUM,
    234      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    235      128,
    236      128,
    237      },
    238 
    239 /* Cipher 05 */
    240     {
    241      1,
    242      SSL3_TXT_RSA_RC4_128_SHA,
    243      SSL3_CK_RSA_RC4_128_SHA,
    244      SSL_kRSA,
    245      SSL_aRSA,
    246      SSL_RC4,
    247      SSL_SHA1,
    248      SSL_SSLV3,
    249      SSL_NOT_EXP | SSL_MEDIUM,
    250      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    251      128,
    252      128,
    253      },
    254 
    255 /* Cipher 06 */
    256 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    257     {
    258      1,
    259      SSL3_TXT_RSA_RC2_40_MD5,
    260      SSL3_CK_RSA_RC2_40_MD5,
    261      SSL_kRSA,
    262      SSL_aRSA,
    263      SSL_RC2,
    264      SSL_MD5,
    265      SSL_SSLV3,
    266      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    267      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    268      40,
    269      128,
    270      },
    271 #endif
    272 
    273 /* Cipher 07 */
    274 #ifndef OPENSSL_NO_IDEA
    275     {
    276      1,
    277      SSL3_TXT_RSA_IDEA_128_SHA,
    278      SSL3_CK_RSA_IDEA_128_SHA,
    279      SSL_kRSA,
    280      SSL_aRSA,
    281      SSL_IDEA,
    282      SSL_SHA1,
    283      SSL_SSLV3,
    284      SSL_NOT_EXP | SSL_MEDIUM,
    285      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    286      128,
    287      128,
    288      },
    289 #endif
    290 
    291 /* Cipher 08 */
    292 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    293     {
    294      1,
    295      SSL3_TXT_RSA_DES_40_CBC_SHA,
    296      SSL3_CK_RSA_DES_40_CBC_SHA,
    297      SSL_kRSA,
    298      SSL_aRSA,
    299      SSL_DES,
    300      SSL_SHA1,
    301      SSL_SSLV3,
    302      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    303      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    304      40,
    305      56,
    306      },
    307 #endif
    308 
    309 /* Cipher 09 */
    310 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    311     {
    312      1,
    313      SSL3_TXT_RSA_DES_64_CBC_SHA,
    314      SSL3_CK_RSA_DES_64_CBC_SHA,
    315      SSL_kRSA,
    316      SSL_aRSA,
    317      SSL_DES,
    318      SSL_SHA1,
    319      SSL_SSLV3,
    320      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
    321      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    322      56,
    323      56,
    324      },
    325 #endif
    326 
    327 /* Cipher 0A */
    328     {
    329      1,
    330      SSL3_TXT_RSA_DES_192_CBC3_SHA,
    331      SSL3_CK_RSA_DES_192_CBC3_SHA,
    332      SSL_kRSA,
    333      SSL_aRSA,
    334      SSL_3DES,
    335      SSL_SHA1,
    336      SSL_SSLV3,
    337      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    338      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    339      112,
    340      168,
    341      },
    342 
    343 /* The DH ciphers */
    344 /* Cipher 0B */
    345 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    346     {
    347      0,
    348      SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
    349      SSL3_CK_DH_DSS_DES_40_CBC_SHA,
    350      SSL_kDHd,
    351      SSL_aDH,
    352      SSL_DES,
    353      SSL_SHA1,
    354      SSL_SSLV3,
    355      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    356      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    357      40,
    358      56,
    359      },
    360 #endif
    361 
    362 /* Cipher 0C */
    363 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    364     {
    365      0,                         /* not implemented (non-ephemeral DH) */
    366      SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
    367      SSL3_CK_DH_DSS_DES_64_CBC_SHA,
    368      SSL_kDHd,
    369      SSL_aDH,
    370      SSL_DES,
    371      SSL_SHA1,
    372      SSL_SSLV3,
    373      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
    374      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    375      56,
    376      56,
    377      },
    378 #endif
    379 
    380 /* Cipher 0D */
    381     {
    382      0,                         /* not implemented (non-ephemeral DH) */
    383      SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
    384      SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
    385      SSL_kDHd,
    386      SSL_aDH,
    387      SSL_3DES,
    388      SSL_SHA1,
    389      SSL_SSLV3,
    390      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    391      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    392      112,
    393      168,
    394      },
    395 
    396 /* Cipher 0E */
    397 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    398     {
    399      0,                         /* not implemented (non-ephemeral DH) */
    400      SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
    401      SSL3_CK_DH_RSA_DES_40_CBC_SHA,
    402      SSL_kDHr,
    403      SSL_aDH,
    404      SSL_DES,
    405      SSL_SHA1,
    406      SSL_SSLV3,
    407      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    408      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    409      40,
    410      56,
    411      },
    412 #endif
    413 
    414 /* Cipher 0F */
    415 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    416     {
    417      0,                         /* not implemented (non-ephemeral DH) */
    418      SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
    419      SSL3_CK_DH_RSA_DES_64_CBC_SHA,
    420      SSL_kDHr,
    421      SSL_aDH,
    422      SSL_DES,
    423      SSL_SHA1,
    424      SSL_SSLV3,
    425      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
    426      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    427      56,
    428      56,
    429      },
    430 #endif
    431 
    432 /* Cipher 10 */
    433     {
    434      0,                         /* not implemented (non-ephemeral DH) */
    435      SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
    436      SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
    437      SSL_kDHr,
    438      SSL_aDH,
    439      SSL_3DES,
    440      SSL_SHA1,
    441      SSL_SSLV3,
    442      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    443      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    444      112,
    445      168,
    446      },
    447 
    448 /* The Ephemeral DH ciphers */
    449 /* Cipher 11 */
    450 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    451     {
    452      1,
    453      SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
    454      SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
    455      SSL_kEDH,
    456      SSL_aDSS,
    457      SSL_DES,
    458      SSL_SHA1,
    459      SSL_SSLV3,
    460      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    461      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    462      40,
    463      56,
    464      },
    465 #endif
    466 
    467 /* Cipher 12 */
    468 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    469     {
    470      1,
    471      SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
    472      SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
    473      SSL_kEDH,
    474      SSL_aDSS,
    475      SSL_DES,
    476      SSL_SHA1,
    477      SSL_SSLV3,
    478      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
    479      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    480      56,
    481      56,
    482      },
    483 #endif
    484 
    485 /* Cipher 13 */
    486     {
    487      1,
    488      SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
    489      SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
    490      SSL_kEDH,
    491      SSL_aDSS,
    492      SSL_3DES,
    493      SSL_SHA1,
    494      SSL_SSLV3,
    495      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    496      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    497      112,
    498      168,
    499      },
    500 
    501 /* Cipher 14 */
    502 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    503     {
    504      1,
    505      SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
    506      SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
    507      SSL_kEDH,
    508      SSL_aRSA,
    509      SSL_DES,
    510      SSL_SHA1,
    511      SSL_SSLV3,
    512      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    513      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    514      40,
    515      56,
    516      },
    517 #endif
    518 
    519 /* Cipher 15 */
    520 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    521     {
    522      1,
    523      SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
    524      SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
    525      SSL_kEDH,
    526      SSL_aRSA,
    527      SSL_DES,
    528      SSL_SHA1,
    529      SSL_SSLV3,
    530      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
    531      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    532      56,
    533      56,
    534      },
    535 #endif
    536 
    537 /* Cipher 16 */
    538     {
    539      1,
    540      SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
    541      SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
    542      SSL_kEDH,
    543      SSL_aRSA,
    544      SSL_3DES,
    545      SSL_SHA1,
    546      SSL_SSLV3,
    547      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    548      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    549      112,
    550      168,
    551      },
    552 
    553 /* Cipher 17 */
    554 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    555     {
    556      1,
    557      SSL3_TXT_ADH_RC4_40_MD5,
    558      SSL3_CK_ADH_RC4_40_MD5,
    559      SSL_kEDH,
    560      SSL_aNULL,
    561      SSL_RC4,
    562      SSL_MD5,
    563      SSL_SSLV3,
    564      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    565      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    566      40,
    567      128,
    568      },
    569 #endif
    570 
    571 /* Cipher 18 */
    572     {
    573      1,
    574      SSL3_TXT_ADH_RC4_128_MD5,
    575      SSL3_CK_ADH_RC4_128_MD5,
    576      SSL_kEDH,
    577      SSL_aNULL,
    578      SSL_RC4,
    579      SSL_MD5,
    580      SSL_SSLV3,
    581      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM,
    582      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    583      128,
    584      128,
    585      },
    586 
    587 /* Cipher 19 */
    588 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    589     {
    590      1,
    591      SSL3_TXT_ADH_DES_40_CBC_SHA,
    592      SSL3_CK_ADH_DES_40_CBC_SHA,
    593      SSL_kEDH,
    594      SSL_aNULL,
    595      SSL_DES,
    596      SSL_SHA1,
    597      SSL_SSLV3,
    598      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    599      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    600      40,
    601      128,
    602      },
    603 #endif
    604 
    605 /* Cipher 1A */
    606 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    607     {
    608      1,
    609      SSL3_TXT_ADH_DES_64_CBC_SHA,
    610      SSL3_CK_ADH_DES_64_CBC_SHA,
    611      SSL_kEDH,
    612      SSL_aNULL,
    613      SSL_DES,
    614      SSL_SHA1,
    615      SSL_SSLV3,
    616      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
    617      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    618      56,
    619      56,
    620      },
    621 #endif
    622 
    623 /* Cipher 1B */
    624     {
    625      1,
    626      SSL3_TXT_ADH_DES_192_CBC_SHA,
    627      SSL3_CK_ADH_DES_192_CBC_SHA,
    628      SSL_kEDH,
    629      SSL_aNULL,
    630      SSL_3DES,
    631      SSL_SHA1,
    632      SSL_SSLV3,
    633      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    634      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    635      112,
    636      168,
    637      },
    638 
    639 /* Fortezza ciphersuite from SSL 3.0 spec */
    640 #if 0
    641 /* Cipher 1C */
    642     {
    643      0,
    644      SSL3_TXT_FZA_DMS_NULL_SHA,
    645      SSL3_CK_FZA_DMS_NULL_SHA,
    646      SSL_kFZA,
    647      SSL_aFZA,
    648      SSL_eNULL,
    649      SSL_SHA1,
    650      SSL_SSLV3,
    651      SSL_NOT_EXP | SSL_STRONG_NONE,
    652      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    653      0,
    654      0,
    655      },
    656 
    657 /* Cipher 1D */
    658     {
    659      0,
    660      SSL3_TXT_FZA_DMS_FZA_SHA,
    661      SSL3_CK_FZA_DMS_FZA_SHA,
    662      SSL_kFZA,
    663      SSL_aFZA,
    664      SSL_eFZA,
    665      SSL_SHA1,
    666      SSL_SSLV3,
    667      SSL_NOT_EXP | SSL_STRONG_NONE,
    668      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    669      0,
    670      0,
    671      },
    672 
    673 /* Cipher 1E */
    674     {
    675      0,
    676      SSL3_TXT_FZA_DMS_RC4_SHA,
    677      SSL3_CK_FZA_DMS_RC4_SHA,
    678      SSL_kFZA,
    679      SSL_aFZA,
    680      SSL_RC4,
    681      SSL_SHA1,
    682      SSL_SSLV3,
    683      SSL_NOT_EXP | SSL_MEDIUM,
    684      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    685      128,
    686      128,
    687      },
    688 #endif
    689 
    690 #ifndef OPENSSL_NO_KRB5
    691 /* The Kerberos ciphers*/
    692 /* Cipher 1E */
    693 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    694     {
    695      1,
    696      SSL3_TXT_KRB5_DES_64_CBC_SHA,
    697      SSL3_CK_KRB5_DES_64_CBC_SHA,
    698      SSL_kKRB5,
    699      SSL_aKRB5,
    700      SSL_DES,
    701      SSL_SHA1,
    702      SSL_SSLV3,
    703      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
    704      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    705      56,
    706      56,
    707      },
    708 # endif
    709 
    710 /* Cipher 1F */
    711     {
    712      1,
    713      SSL3_TXT_KRB5_DES_192_CBC3_SHA,
    714      SSL3_CK_KRB5_DES_192_CBC3_SHA,
    715      SSL_kKRB5,
    716      SSL_aKRB5,
    717      SSL_3DES,
    718      SSL_SHA1,
    719      SSL_SSLV3,
    720      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    721      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    722      112,
    723      168,
    724      },
    725 
    726 /* Cipher 20 */
    727     {
    728      1,
    729      SSL3_TXT_KRB5_RC4_128_SHA,
    730      SSL3_CK_KRB5_RC4_128_SHA,
    731      SSL_kKRB5,
    732      SSL_aKRB5,
    733      SSL_RC4,
    734      SSL_SHA1,
    735      SSL_SSLV3,
    736      SSL_NOT_EXP | SSL_MEDIUM,
    737      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    738      128,
    739      128,
    740      },
    741 
    742 /* Cipher 21 */
    743     {
    744      1,
    745      SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
    746      SSL3_CK_KRB5_IDEA_128_CBC_SHA,
    747      SSL_kKRB5,
    748      SSL_aKRB5,
    749      SSL_IDEA,
    750      SSL_SHA1,
    751      SSL_SSLV3,
    752      SSL_NOT_EXP | SSL_MEDIUM,
    753      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    754      128,
    755      128,
    756      },
    757 
    758 /* Cipher 22 */
    759 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    760     {
    761      1,
    762      SSL3_TXT_KRB5_DES_64_CBC_MD5,
    763      SSL3_CK_KRB5_DES_64_CBC_MD5,
    764      SSL_kKRB5,
    765      SSL_aKRB5,
    766      SSL_DES,
    767      SSL_MD5,
    768      SSL_SSLV3,
    769      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
    770      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    771      56,
    772      56,
    773      },
    774 # endif
    775 
    776 /* Cipher 23 */
    777     {
    778      1,
    779      SSL3_TXT_KRB5_DES_192_CBC3_MD5,
    780      SSL3_CK_KRB5_DES_192_CBC3_MD5,
    781      SSL_kKRB5,
    782      SSL_aKRB5,
    783      SSL_3DES,
    784      SSL_MD5,
    785      SSL_SSLV3,
    786      SSL_NOT_EXP | SSL_HIGH,
    787      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    788      112,
    789      168,
    790      },
    791 
    792 /* Cipher 24 */
    793     {
    794      1,
    795      SSL3_TXT_KRB5_RC4_128_MD5,
    796      SSL3_CK_KRB5_RC4_128_MD5,
    797      SSL_kKRB5,
    798      SSL_aKRB5,
    799      SSL_RC4,
    800      SSL_MD5,
    801      SSL_SSLV3,
    802      SSL_NOT_EXP | SSL_MEDIUM,
    803      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    804      128,
    805      128,
    806      },
    807 
    808 /* Cipher 25 */
    809     {
    810      1,
    811      SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
    812      SSL3_CK_KRB5_IDEA_128_CBC_MD5,
    813      SSL_kKRB5,
    814      SSL_aKRB5,
    815      SSL_IDEA,
    816      SSL_MD5,
    817      SSL_SSLV3,
    818      SSL_NOT_EXP | SSL_MEDIUM,
    819      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    820      128,
    821      128,
    822      },
    823 
    824 /* Cipher 26 */
    825 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    826     {
    827      1,
    828      SSL3_TXT_KRB5_DES_40_CBC_SHA,
    829      SSL3_CK_KRB5_DES_40_CBC_SHA,
    830      SSL_kKRB5,
    831      SSL_aKRB5,
    832      SSL_DES,
    833      SSL_SHA1,
    834      SSL_SSLV3,
    835      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    836      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    837      40,
    838      56,
    839      },
    840 # endif
    841 
    842 /* Cipher 27 */
    843 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    844     {
    845      1,
    846      SSL3_TXT_KRB5_RC2_40_CBC_SHA,
    847      SSL3_CK_KRB5_RC2_40_CBC_SHA,
    848      SSL_kKRB5,
    849      SSL_aKRB5,
    850      SSL_RC2,
    851      SSL_SHA1,
    852      SSL_SSLV3,
    853      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    854      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    855      40,
    856      128,
    857      },
    858 # endif
    859 
    860 /* Cipher 28 */
    861 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    862     {
    863      1,
    864      SSL3_TXT_KRB5_RC4_40_SHA,
    865      SSL3_CK_KRB5_RC4_40_SHA,
    866      SSL_kKRB5,
    867      SSL_aKRB5,
    868      SSL_RC4,
    869      SSL_SHA1,
    870      SSL_SSLV3,
    871      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    872      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    873      40,
    874      128,
    875      },
    876 # endif
    877 
    878 /* Cipher 29 */
    879 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    880     {
    881      1,
    882      SSL3_TXT_KRB5_DES_40_CBC_MD5,
    883      SSL3_CK_KRB5_DES_40_CBC_MD5,
    884      SSL_kKRB5,
    885      SSL_aKRB5,
    886      SSL_DES,
    887      SSL_MD5,
    888      SSL_SSLV3,
    889      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    890      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    891      40,
    892      56,
    893      },
    894 # endif
    895 
    896 /* Cipher 2A */
    897 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    898     {
    899      1,
    900      SSL3_TXT_KRB5_RC2_40_CBC_MD5,
    901      SSL3_CK_KRB5_RC2_40_CBC_MD5,
    902      SSL_kKRB5,
    903      SSL_aKRB5,
    904      SSL_RC2,
    905      SSL_MD5,
    906      SSL_SSLV3,
    907      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    908      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    909      40,
    910      128,
    911      },
    912 # endif
    913 
    914 /* Cipher 2B */
    915 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    916     {
    917      1,
    918      SSL3_TXT_KRB5_RC4_40_MD5,
    919      SSL3_CK_KRB5_RC4_40_MD5,
    920      SSL_kKRB5,
    921      SSL_aKRB5,
    922      SSL_RC4,
    923      SSL_MD5,
    924      SSL_SSLV3,
    925      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
    926      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    927      40,
    928      128,
    929      },
    930 # endif
    931 #endif                          /* OPENSSL_NO_KRB5 */
    932 
    933 /* New AES ciphersuites */
    934 /* Cipher 2F */
    935     {
    936      1,
    937      TLS1_TXT_RSA_WITH_AES_128_SHA,
    938      TLS1_CK_RSA_WITH_AES_128_SHA,
    939      SSL_kRSA,
    940      SSL_aRSA,
    941      SSL_AES128,
    942      SSL_SHA1,
    943      SSL_TLSV1,
    944      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    945      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    946      128,
    947      128,
    948      },
    949 /* Cipher 30 */
    950     {
    951      0,
    952      TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
    953      TLS1_CK_DH_DSS_WITH_AES_128_SHA,
    954      SSL_kDHd,
    955      SSL_aDH,
    956      SSL_AES128,
    957      SSL_SHA1,
    958      SSL_TLSV1,
    959      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    960      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    961      128,
    962      128,
    963      },
    964 /* Cipher 31 */
    965     {
    966      0,
    967      TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
    968      TLS1_CK_DH_RSA_WITH_AES_128_SHA,
    969      SSL_kDHr,
    970      SSL_aDH,
    971      SSL_AES128,
    972      SSL_SHA1,
    973      SSL_TLSV1,
    974      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    975      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    976      128,
    977      128,
    978      },
    979 /* Cipher 32 */
    980     {
    981      1,
    982      TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
    983      TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
    984      SSL_kEDH,
    985      SSL_aDSS,
    986      SSL_AES128,
    987      SSL_SHA1,
    988      SSL_TLSV1,
    989      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
    990      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
    991      128,
    992      128,
    993      },
    994 /* Cipher 33 */
    995     {
    996      1,
    997      TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
    998      TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
    999      SSL_kEDH,
   1000      SSL_aRSA,
   1001      SSL_AES128,
   1002      SSL_SHA1,
   1003      SSL_TLSV1,
   1004      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1005      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1006      128,
   1007      128,
   1008      },
   1009 /* Cipher 34 */
   1010     {
   1011      1,
   1012      TLS1_TXT_ADH_WITH_AES_128_SHA,
   1013      TLS1_CK_ADH_WITH_AES_128_SHA,
   1014      SSL_kEDH,
   1015      SSL_aNULL,
   1016      SSL_AES128,
   1017      SSL_SHA1,
   1018      SSL_TLSV1,
   1019      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1020      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1021      128,
   1022      128,
   1023      },
   1024 
   1025 /* Cipher 35 */
   1026     {
   1027      1,
   1028      TLS1_TXT_RSA_WITH_AES_256_SHA,
   1029      TLS1_CK_RSA_WITH_AES_256_SHA,
   1030      SSL_kRSA,
   1031      SSL_aRSA,
   1032      SSL_AES256,
   1033      SSL_SHA1,
   1034      SSL_TLSV1,
   1035      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1036      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1037      256,
   1038      256,
   1039      },
   1040 /* Cipher 36 */
   1041     {
   1042      0,
   1043      TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
   1044      TLS1_CK_DH_DSS_WITH_AES_256_SHA,
   1045      SSL_kDHd,
   1046      SSL_aDH,
   1047      SSL_AES256,
   1048      SSL_SHA1,
   1049      SSL_TLSV1,
   1050      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1051      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1052      256,
   1053      256,
   1054      },
   1055 
   1056 /* Cipher 37 */
   1057     {
   1058      0,                         /* not implemented (non-ephemeral DH) */
   1059      TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
   1060      TLS1_CK_DH_RSA_WITH_AES_256_SHA,
   1061      SSL_kDHr,
   1062      SSL_aDH,
   1063      SSL_AES256,
   1064      SSL_SHA1,
   1065      SSL_TLSV1,
   1066      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1067      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1068      256,
   1069      256,
   1070      },
   1071 
   1072 /* Cipher 38 */
   1073     {
   1074      1,
   1075      TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
   1076      TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
   1077      SSL_kEDH,
   1078      SSL_aDSS,
   1079      SSL_AES256,
   1080      SSL_SHA1,
   1081      SSL_TLSV1,
   1082      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1083      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1084      256,
   1085      256,
   1086      },
   1087 
   1088 /* Cipher 39 */
   1089     {
   1090      1,
   1091      TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
   1092      TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
   1093      SSL_kEDH,
   1094      SSL_aRSA,
   1095      SSL_AES256,
   1096      SSL_SHA1,
   1097      SSL_TLSV1,
   1098      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1099      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1100      256,
   1101      256,
   1102      },
   1103 
   1104     /* Cipher 3A */
   1105     {
   1106      1,
   1107      TLS1_TXT_ADH_WITH_AES_256_SHA,
   1108      TLS1_CK_ADH_WITH_AES_256_SHA,
   1109      SSL_kEDH,
   1110      SSL_aNULL,
   1111      SSL_AES256,
   1112      SSL_SHA1,
   1113      SSL_TLSV1,
   1114      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1115      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1116      256,
   1117      256,
   1118      },
   1119 
   1120     /* TLS v1.2 ciphersuites */
   1121     /* Cipher 3B */
   1122     {
   1123      1,
   1124      TLS1_TXT_RSA_WITH_NULL_SHA256,
   1125      TLS1_CK_RSA_WITH_NULL_SHA256,
   1126      SSL_kRSA,
   1127      SSL_aRSA,
   1128      SSL_eNULL,
   1129      SSL_SHA256,
   1130      SSL_TLSV1_2,
   1131      SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
   1132      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1133      0,
   1134      0,
   1135      },
   1136 
   1137     /* Cipher 3C */
   1138     {
   1139      1,
   1140      TLS1_TXT_RSA_WITH_AES_128_SHA256,
   1141      TLS1_CK_RSA_WITH_AES_128_SHA256,
   1142      SSL_kRSA,
   1143      SSL_aRSA,
   1144      SSL_AES128,
   1145      SSL_SHA256,
   1146      SSL_TLSV1_2,
   1147      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1148      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1149      128,
   1150      128,
   1151      },
   1152 
   1153     /* Cipher 3D */
   1154     {
   1155      1,
   1156      TLS1_TXT_RSA_WITH_AES_256_SHA256,
   1157      TLS1_CK_RSA_WITH_AES_256_SHA256,
   1158      SSL_kRSA,
   1159      SSL_aRSA,
   1160      SSL_AES256,
   1161      SSL_SHA256,
   1162      SSL_TLSV1_2,
   1163      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1164      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1165      256,
   1166      256,
   1167      },
   1168 
   1169     /* Cipher 3E */
   1170     {
   1171      0,                         /* not implemented (non-ephemeral DH) */
   1172      TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
   1173      TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
   1174      SSL_kDHd,
   1175      SSL_aDH,
   1176      SSL_AES128,
   1177      SSL_SHA256,
   1178      SSL_TLSV1_2,
   1179      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1180      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1181      128,
   1182      128,
   1183      },
   1184 
   1185     /* Cipher 3F */
   1186     {
   1187      0,                         /* not implemented (non-ephemeral DH) */
   1188      TLS1_TXT_DH_RSA_WITH_AES_128_SHA256,
   1189      TLS1_CK_DH_RSA_WITH_AES_128_SHA256,
   1190      SSL_kDHr,
   1191      SSL_aDH,
   1192      SSL_AES128,
   1193      SSL_SHA256,
   1194      SSL_TLSV1_2,
   1195      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1196      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1197      128,
   1198      128,
   1199      },
   1200 
   1201     /* Cipher 40 */
   1202     {
   1203      1,
   1204      TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
   1205      TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
   1206      SSL_kEDH,
   1207      SSL_aDSS,
   1208      SSL_AES128,
   1209      SSL_SHA256,
   1210      SSL_TLSV1_2,
   1211      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1212      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1213      128,
   1214      128,
   1215      },
   1216 
   1217 #ifndef OPENSSL_NO_CAMELLIA
   1218     /* Camellia ciphersuites from RFC4132 (128-bit portion) */
   1219 
   1220     /* Cipher 41 */
   1221     {
   1222      1,
   1223      TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
   1224      TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
   1225      SSL_kRSA,
   1226      SSL_aRSA,
   1227      SSL_CAMELLIA128,
   1228      SSL_SHA1,
   1229      SSL_TLSV1,
   1230      SSL_NOT_EXP | SSL_HIGH,
   1231      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1232      128,
   1233      128,
   1234      },
   1235 
   1236     /* Cipher 42 */
   1237     {
   1238      0,                         /* not implemented (non-ephemeral DH) */
   1239      TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
   1240      TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
   1241      SSL_kDHd,
   1242      SSL_aDH,
   1243      SSL_CAMELLIA128,
   1244      SSL_SHA1,
   1245      SSL_TLSV1,
   1246      SSL_NOT_EXP | SSL_HIGH,
   1247      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1248      128,
   1249      128,
   1250      },
   1251 
   1252     /* Cipher 43 */
   1253     {
   1254      0,                         /* not implemented (non-ephemeral DH) */
   1255      TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
   1256      TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
   1257      SSL_kDHr,
   1258      SSL_aDH,
   1259      SSL_CAMELLIA128,
   1260      SSL_SHA1,
   1261      SSL_TLSV1,
   1262      SSL_NOT_EXP | SSL_HIGH,
   1263      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1264      128,
   1265      128,
   1266      },
   1267 
   1268     /* Cipher 44 */
   1269     {
   1270      1,
   1271      TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
   1272      TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
   1273      SSL_kEDH,
   1274      SSL_aDSS,
   1275      SSL_CAMELLIA128,
   1276      SSL_SHA1,
   1277      SSL_TLSV1,
   1278      SSL_NOT_EXP | SSL_HIGH,
   1279      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1280      128,
   1281      128,
   1282      },
   1283 
   1284     /* Cipher 45 */
   1285     {
   1286      1,
   1287      TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
   1288      TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
   1289      SSL_kEDH,
   1290      SSL_aRSA,
   1291      SSL_CAMELLIA128,
   1292      SSL_SHA1,
   1293      SSL_TLSV1,
   1294      SSL_NOT_EXP | SSL_HIGH,
   1295      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1296      128,
   1297      128,
   1298      },
   1299 
   1300     /* Cipher 46 */
   1301     {
   1302      1,
   1303      TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
   1304      TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
   1305      SSL_kEDH,
   1306      SSL_aNULL,
   1307      SSL_CAMELLIA128,
   1308      SSL_SHA1,
   1309      SSL_TLSV1,
   1310      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH,
   1311      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1312      128,
   1313      128,
   1314      },
   1315 #endif                          /* OPENSSL_NO_CAMELLIA */
   1316 
   1317 #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
   1318     /* New TLS Export CipherSuites from expired ID */
   1319 # if 0
   1320     /* Cipher 60 */
   1321     {
   1322      1,
   1323      TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
   1324      TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
   1325      SSL_kRSA,
   1326      SSL_aRSA,
   1327      SSL_RC4,
   1328      SSL_MD5,
   1329      SSL_TLSV1,
   1330      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
   1331      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1332      56,
   1333      128,
   1334      },
   1335 
   1336     /* Cipher 61 */
   1337     {
   1338      1,
   1339      TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
   1340      TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
   1341      SSL_kRSA,
   1342      SSL_aRSA,
   1343      SSL_RC2,
   1344      SSL_MD5,
   1345      SSL_TLSV1,
   1346      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
   1347      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1348      56,
   1349      128,
   1350      },
   1351 # endif
   1352 
   1353     /* Cipher 62 */
   1354 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
   1355     {
   1356      1,
   1357      TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
   1358      TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
   1359      SSL_kRSA,
   1360      SSL_aRSA,
   1361      SSL_DES,
   1362      SSL_SHA1,
   1363      SSL_TLSV1,
   1364      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
   1365      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1366      56,
   1367      56,
   1368      },
   1369 # endif
   1370 
   1371     /* Cipher 63 */
   1372 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
   1373     {
   1374      1,
   1375      TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
   1376      TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
   1377      SSL_kEDH,
   1378      SSL_aDSS,
   1379      SSL_DES,
   1380      SSL_SHA1,
   1381      SSL_TLSV1,
   1382      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
   1383      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1384      56,
   1385      56,
   1386      },
   1387 # endif
   1388 
   1389     /* Cipher 64 */
   1390 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
   1391     {
   1392      1,
   1393      TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
   1394      TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
   1395      SSL_kRSA,
   1396      SSL_aRSA,
   1397      SSL_RC4,
   1398      SSL_SHA1,
   1399      SSL_TLSV1,
   1400      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
   1401      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1402      56,
   1403      128,
   1404      },
   1405 # endif
   1406 
   1407     /* Cipher 65 */
   1408 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
   1409     {
   1410      1,
   1411      TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
   1412      TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
   1413      SSL_kEDH,
   1414      SSL_aDSS,
   1415      SSL_RC4,
   1416      SSL_SHA1,
   1417      SSL_TLSV1,
   1418      SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
   1419      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1420      56,
   1421      128,
   1422      },
   1423 # endif
   1424 
   1425     /* Cipher 66 */
   1426     {
   1427      1,
   1428      TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
   1429      TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
   1430      SSL_kEDH,
   1431      SSL_aDSS,
   1432      SSL_RC4,
   1433      SSL_SHA1,
   1434      SSL_TLSV1,
   1435      SSL_NOT_EXP | SSL_MEDIUM,
   1436      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1437      128,
   1438      128,
   1439      },
   1440 #endif
   1441 
   1442     /* TLS v1.2 ciphersuites */
   1443     /* Cipher 67 */
   1444     {
   1445      1,
   1446      TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
   1447      TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
   1448      SSL_kEDH,
   1449      SSL_aRSA,
   1450      SSL_AES128,
   1451      SSL_SHA256,
   1452      SSL_TLSV1_2,
   1453      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1454      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1455      128,
   1456      128,
   1457      },
   1458 
   1459     /* Cipher 68 */
   1460     {
   1461      0,                         /* not implemented (non-ephemeral DH) */
   1462      TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
   1463      TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
   1464      SSL_kDHd,
   1465      SSL_aDH,
   1466      SSL_AES256,
   1467      SSL_SHA256,
   1468      SSL_TLSV1_2,
   1469      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1470      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1471      256,
   1472      256,
   1473      },
   1474 
   1475     /* Cipher 69 */
   1476     {
   1477      0,                         /* not implemented (non-ephemeral DH) */
   1478      TLS1_TXT_DH_RSA_WITH_AES_256_SHA256,
   1479      TLS1_CK_DH_RSA_WITH_AES_256_SHA256,
   1480      SSL_kDHr,
   1481      SSL_aDH,
   1482      SSL_AES256,
   1483      SSL_SHA256,
   1484      SSL_TLSV1_2,
   1485      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1486      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1487      256,
   1488      256,
   1489      },
   1490 
   1491     /* Cipher 6A */
   1492     {
   1493      1,
   1494      TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
   1495      TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
   1496      SSL_kEDH,
   1497      SSL_aDSS,
   1498      SSL_AES256,
   1499      SSL_SHA256,
   1500      SSL_TLSV1_2,
   1501      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1502      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1503      256,
   1504      256,
   1505      },
   1506 
   1507     /* Cipher 6B */
   1508     {
   1509      1,
   1510      TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
   1511      TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
   1512      SSL_kEDH,
   1513      SSL_aRSA,
   1514      SSL_AES256,
   1515      SSL_SHA256,
   1516      SSL_TLSV1_2,
   1517      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1518      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1519      256,
   1520      256,
   1521      },
   1522 
   1523     /* Cipher 6C */
   1524     {
   1525      1,
   1526      TLS1_TXT_ADH_WITH_AES_128_SHA256,
   1527      TLS1_CK_ADH_WITH_AES_128_SHA256,
   1528      SSL_kEDH,
   1529      SSL_aNULL,
   1530      SSL_AES128,
   1531      SSL_SHA256,
   1532      SSL_TLSV1_2,
   1533      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1534      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1535      128,
   1536      128,
   1537      },
   1538 
   1539     /* Cipher 6D */
   1540     {
   1541      1,
   1542      TLS1_TXT_ADH_WITH_AES_256_SHA256,
   1543      TLS1_CK_ADH_WITH_AES_256_SHA256,
   1544      SSL_kEDH,
   1545      SSL_aNULL,
   1546      SSL_AES256,
   1547      SSL_SHA256,
   1548      SSL_TLSV1_2,
   1549      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1550      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1551      256,
   1552      256,
   1553      },
   1554 
   1555     /* GOST Ciphersuites */
   1556 
   1557     {
   1558      1,
   1559      "GOST94-GOST89-GOST89",
   1560      0x3000080,
   1561      SSL_kGOST,
   1562      SSL_aGOST94,
   1563      SSL_eGOST2814789CNT,
   1564      SSL_GOST89MAC,
   1565      SSL_TLSV1,
   1566      SSL_NOT_EXP | SSL_HIGH,
   1567      SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC,
   1568      256,
   1569      256},
   1570     {
   1571      1,
   1572      "GOST2001-GOST89-GOST89",
   1573      0x3000081,
   1574      SSL_kGOST,
   1575      SSL_aGOST01,
   1576      SSL_eGOST2814789CNT,
   1577      SSL_GOST89MAC,
   1578      SSL_TLSV1,
   1579      SSL_NOT_EXP | SSL_HIGH,
   1580      SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC,
   1581      256,
   1582      256},
   1583     {
   1584      1,
   1585      "GOST94-NULL-GOST94",
   1586      0x3000082,
   1587      SSL_kGOST,
   1588      SSL_aGOST94,
   1589      SSL_eNULL,
   1590      SSL_GOST94,
   1591      SSL_TLSV1,
   1592      SSL_NOT_EXP | SSL_STRONG_NONE,
   1593      SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94,
   1594      0,
   1595      0},
   1596     {
   1597      1,
   1598      "GOST2001-NULL-GOST94",
   1599      0x3000083,
   1600      SSL_kGOST,
   1601      SSL_aGOST01,
   1602      SSL_eNULL,
   1603      SSL_GOST94,
   1604      SSL_TLSV1,
   1605      SSL_NOT_EXP | SSL_STRONG_NONE,
   1606      SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94,
   1607      0,
   1608      0},
   1609 
   1610 #ifndef OPENSSL_NO_CAMELLIA
   1611     /* Camellia ciphersuites from RFC4132 (256-bit portion) */
   1612 
   1613     /* Cipher 84 */
   1614     {
   1615      1,
   1616      TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1617      TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1618      SSL_kRSA,
   1619      SSL_aRSA,
   1620      SSL_CAMELLIA256,
   1621      SSL_SHA1,
   1622      SSL_TLSV1,
   1623      SSL_NOT_EXP | SSL_HIGH,
   1624      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1625      256,
   1626      256,
   1627      },
   1628     /* Cipher 85 */
   1629     {
   1630      0,                         /* not implemented (non-ephemeral DH) */
   1631      TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
   1632      TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
   1633      SSL_kDHd,
   1634      SSL_aDH,
   1635      SSL_CAMELLIA256,
   1636      SSL_SHA1,
   1637      SSL_TLSV1,
   1638      SSL_NOT_EXP | SSL_HIGH,
   1639      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1640      256,
   1641      256,
   1642      },
   1643 
   1644     /* Cipher 86 */
   1645     {
   1646      0,                         /* not implemented (non-ephemeral DH) */
   1647      TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1648      TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1649      SSL_kDHr,
   1650      SSL_aDH,
   1651      SSL_CAMELLIA256,
   1652      SSL_SHA1,
   1653      SSL_TLSV1,
   1654      SSL_NOT_EXP | SSL_HIGH,
   1655      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1656      256,
   1657      256,
   1658      },
   1659 
   1660     /* Cipher 87 */
   1661     {
   1662      1,
   1663      TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
   1664      TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
   1665      SSL_kEDH,
   1666      SSL_aDSS,
   1667      SSL_CAMELLIA256,
   1668      SSL_SHA1,
   1669      SSL_TLSV1,
   1670      SSL_NOT_EXP | SSL_HIGH,
   1671      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1672      256,
   1673      256,
   1674      },
   1675 
   1676     /* Cipher 88 */
   1677     {
   1678      1,
   1679      TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1680      TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1681      SSL_kEDH,
   1682      SSL_aRSA,
   1683      SSL_CAMELLIA256,
   1684      SSL_SHA1,
   1685      SSL_TLSV1,
   1686      SSL_NOT_EXP | SSL_HIGH,
   1687      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1688      256,
   1689      256,
   1690      },
   1691 
   1692     /* Cipher 89 */
   1693     {
   1694      1,
   1695      TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
   1696      TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
   1697      SSL_kEDH,
   1698      SSL_aNULL,
   1699      SSL_CAMELLIA256,
   1700      SSL_SHA1,
   1701      SSL_TLSV1,
   1702      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH,
   1703      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1704      256,
   1705      256,
   1706      },
   1707 #endif                          /* OPENSSL_NO_CAMELLIA */
   1708 
   1709 #ifndef OPENSSL_NO_PSK
   1710     /* Cipher 8A */
   1711     {
   1712      1,
   1713      TLS1_TXT_PSK_WITH_RC4_128_SHA,
   1714      TLS1_CK_PSK_WITH_RC4_128_SHA,
   1715      SSL_kPSK,
   1716      SSL_aPSK,
   1717      SSL_RC4,
   1718      SSL_SHA1,
   1719      SSL_TLSV1,
   1720      SSL_NOT_EXP | SSL_MEDIUM,
   1721      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1722      128,
   1723      128,
   1724      },
   1725 
   1726     /* Cipher 8B */
   1727     {
   1728      1,
   1729      TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
   1730      TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
   1731      SSL_kPSK,
   1732      SSL_aPSK,
   1733      SSL_3DES,
   1734      SSL_SHA1,
   1735      SSL_TLSV1,
   1736      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1737      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1738      112,
   1739      168,
   1740      },
   1741 
   1742     /* Cipher 8C */
   1743     {
   1744      1,
   1745      TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
   1746      TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
   1747      SSL_kPSK,
   1748      SSL_aPSK,
   1749      SSL_AES128,
   1750      SSL_SHA1,
   1751      SSL_TLSV1,
   1752      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1753      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1754      128,
   1755      128,
   1756      },
   1757 
   1758     /* Cipher 8D */
   1759     {
   1760      1,
   1761      TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
   1762      TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
   1763      SSL_kPSK,
   1764      SSL_aPSK,
   1765      SSL_AES256,
   1766      SSL_SHA1,
   1767      SSL_TLSV1,
   1768      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1769      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1770      256,
   1771      256,
   1772      },
   1773 #endif                          /* OPENSSL_NO_PSK */
   1774 
   1775 #ifndef OPENSSL_NO_SEED
   1776     /* SEED ciphersuites from RFC4162 */
   1777 
   1778     /* Cipher 96 */
   1779     {
   1780      1,
   1781      TLS1_TXT_RSA_WITH_SEED_SHA,
   1782      TLS1_CK_RSA_WITH_SEED_SHA,
   1783      SSL_kRSA,
   1784      SSL_aRSA,
   1785      SSL_SEED,
   1786      SSL_SHA1,
   1787      SSL_TLSV1,
   1788      SSL_NOT_EXP | SSL_MEDIUM,
   1789      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1790      128,
   1791      128,
   1792      },
   1793 
   1794     /* Cipher 97 */
   1795     {
   1796      0,                         /* not implemented (non-ephemeral DH) */
   1797      TLS1_TXT_DH_DSS_WITH_SEED_SHA,
   1798      TLS1_CK_DH_DSS_WITH_SEED_SHA,
   1799      SSL_kDHd,
   1800      SSL_aDH,
   1801      SSL_SEED,
   1802      SSL_SHA1,
   1803      SSL_TLSV1,
   1804      SSL_NOT_EXP | SSL_MEDIUM,
   1805      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1806      128,
   1807      128,
   1808      },
   1809 
   1810     /* Cipher 98 */
   1811     {
   1812      0,                         /* not implemented (non-ephemeral DH) */
   1813      TLS1_TXT_DH_RSA_WITH_SEED_SHA,
   1814      TLS1_CK_DH_RSA_WITH_SEED_SHA,
   1815      SSL_kDHr,
   1816      SSL_aDH,
   1817      SSL_SEED,
   1818      SSL_SHA1,
   1819      SSL_TLSV1,
   1820      SSL_NOT_EXP | SSL_MEDIUM,
   1821      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1822      128,
   1823      128,
   1824      },
   1825 
   1826     /* Cipher 99 */
   1827     {
   1828      1,
   1829      TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
   1830      TLS1_CK_DHE_DSS_WITH_SEED_SHA,
   1831      SSL_kEDH,
   1832      SSL_aDSS,
   1833      SSL_SEED,
   1834      SSL_SHA1,
   1835      SSL_TLSV1,
   1836      SSL_NOT_EXP | SSL_MEDIUM,
   1837      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1838      128,
   1839      128,
   1840      },
   1841 
   1842     /* Cipher 9A */
   1843     {
   1844      1,
   1845      TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
   1846      TLS1_CK_DHE_RSA_WITH_SEED_SHA,
   1847      SSL_kEDH,
   1848      SSL_aRSA,
   1849      SSL_SEED,
   1850      SSL_SHA1,
   1851      SSL_TLSV1,
   1852      SSL_NOT_EXP | SSL_MEDIUM,
   1853      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1854      128,
   1855      128,
   1856      },
   1857 
   1858     /* Cipher 9B */
   1859     {
   1860      1,
   1861      TLS1_TXT_ADH_WITH_SEED_SHA,
   1862      TLS1_CK_ADH_WITH_SEED_SHA,
   1863      SSL_kEDH,
   1864      SSL_aNULL,
   1865      SSL_SEED,
   1866      SSL_SHA1,
   1867      SSL_TLSV1,
   1868      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM,
   1869      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   1870      128,
   1871      128,
   1872      },
   1873 
   1874 #endif                          /* OPENSSL_NO_SEED */
   1875 
   1876     /* GCM ciphersuites from RFC5288 */
   1877 
   1878     /* Cipher 9C */
   1879     {
   1880      1,
   1881      TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
   1882      TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
   1883      SSL_kRSA,
   1884      SSL_aRSA,
   1885      SSL_AES128GCM,
   1886      SSL_AEAD,
   1887      SSL_TLSV1_2,
   1888      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1889      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   1890      128,
   1891      128,
   1892      },
   1893 
   1894     /* Cipher 9D */
   1895     {
   1896      1,
   1897      TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
   1898      TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
   1899      SSL_kRSA,
   1900      SSL_aRSA,
   1901      SSL_AES256GCM,
   1902      SSL_AEAD,
   1903      SSL_TLSV1_2,
   1904      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1905      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   1906      256,
   1907      256,
   1908      },
   1909 
   1910     /* Cipher 9E */
   1911     {
   1912      1,
   1913      TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
   1914      TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
   1915      SSL_kEDH,
   1916      SSL_aRSA,
   1917      SSL_AES128GCM,
   1918      SSL_AEAD,
   1919      SSL_TLSV1_2,
   1920      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1921      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   1922      128,
   1923      128,
   1924      },
   1925 
   1926     /* Cipher 9F */
   1927     {
   1928      1,
   1929      TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
   1930      TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
   1931      SSL_kEDH,
   1932      SSL_aRSA,
   1933      SSL_AES256GCM,
   1934      SSL_AEAD,
   1935      SSL_TLSV1_2,
   1936      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1937      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   1938      256,
   1939      256,
   1940      },
   1941 
   1942     /* Cipher A0 */
   1943     {
   1944      0,
   1945      TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256,
   1946      TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256,
   1947      SSL_kDHr,
   1948      SSL_aDH,
   1949      SSL_AES128GCM,
   1950      SSL_AEAD,
   1951      SSL_TLSV1_2,
   1952      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1953      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   1954      128,
   1955      128,
   1956      },
   1957 
   1958     /* Cipher A1 */
   1959     {
   1960      0,
   1961      TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384,
   1962      TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384,
   1963      SSL_kDHr,
   1964      SSL_aDH,
   1965      SSL_AES256GCM,
   1966      SSL_AEAD,
   1967      SSL_TLSV1_2,
   1968      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1969      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   1970      256,
   1971      256,
   1972      },
   1973 
   1974     /* Cipher A2 */
   1975     {
   1976      1,
   1977      TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
   1978      TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
   1979      SSL_kEDH,
   1980      SSL_aDSS,
   1981      SSL_AES128GCM,
   1982      SSL_AEAD,
   1983      SSL_TLSV1_2,
   1984      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   1985      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   1986      128,
   1987      128,
   1988      },
   1989 
   1990     /* Cipher A3 */
   1991     {
   1992      1,
   1993      TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
   1994      TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
   1995      SSL_kEDH,
   1996      SSL_aDSS,
   1997      SSL_AES256GCM,
   1998      SSL_AEAD,
   1999      SSL_TLSV1_2,
   2000      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2001      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2002      256,
   2003      256,
   2004      },
   2005 
   2006     /* Cipher A4 */
   2007     {
   2008      0,
   2009      TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
   2010      TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
   2011      SSL_kDHd,
   2012      SSL_aDH,
   2013      SSL_AES128GCM,
   2014      SSL_AEAD,
   2015      SSL_TLSV1_2,
   2016      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2017      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2018      128,
   2019      128,
   2020      },
   2021 
   2022     /* Cipher A5 */
   2023     {
   2024      0,
   2025      TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
   2026      TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
   2027      SSL_kDHd,
   2028      SSL_aDH,
   2029      SSL_AES256GCM,
   2030      SSL_AEAD,
   2031      SSL_TLSV1_2,
   2032      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2033      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2034      256,
   2035      256,
   2036      },
   2037 
   2038     /* Cipher A6 */
   2039     {
   2040      1,
   2041      TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
   2042      TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
   2043      SSL_kEDH,
   2044      SSL_aNULL,
   2045      SSL_AES128GCM,
   2046      SSL_AEAD,
   2047      SSL_TLSV1_2,
   2048      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2049      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2050      128,
   2051      128,
   2052      },
   2053 
   2054     /* Cipher A7 */
   2055     {
   2056      1,
   2057      TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
   2058      TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
   2059      SSL_kEDH,
   2060      SSL_aNULL,
   2061      SSL_AES256GCM,
   2062      SSL_AEAD,
   2063      SSL_TLSV1_2,
   2064      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2065      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2066      256,
   2067      256,
   2068      },
   2069 
   2070 #ifndef OPENSSL_NO_ECDH
   2071     /* Cipher C001 */
   2072     {
   2073      1,
   2074      TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
   2075      TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
   2076      SSL_kECDHe,
   2077      SSL_aECDH,
   2078      SSL_eNULL,
   2079      SSL_SHA1,
   2080      SSL_TLSV1,
   2081      SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
   2082      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2083      0,
   2084      0,
   2085      },
   2086 
   2087     /* Cipher C002 */
   2088     {
   2089      1,
   2090      TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
   2091      TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
   2092      SSL_kECDHe,
   2093      SSL_aECDH,
   2094      SSL_RC4,
   2095      SSL_SHA1,
   2096      SSL_TLSV1,
   2097      SSL_NOT_EXP | SSL_MEDIUM,
   2098      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2099      128,
   2100      128,
   2101      },
   2102 
   2103     /* Cipher C003 */
   2104     {
   2105      1,
   2106      TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
   2107      TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
   2108      SSL_kECDHe,
   2109      SSL_aECDH,
   2110      SSL_3DES,
   2111      SSL_SHA1,
   2112      SSL_TLSV1,
   2113      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2114      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2115      112,
   2116      168,
   2117      },
   2118 
   2119     /* Cipher C004 */
   2120     {
   2121      1,
   2122      TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
   2123      TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
   2124      SSL_kECDHe,
   2125      SSL_aECDH,
   2126      SSL_AES128,
   2127      SSL_SHA1,
   2128      SSL_TLSV1,
   2129      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2130      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2131      128,
   2132      128,
   2133      },
   2134 
   2135     /* Cipher C005 */
   2136     {
   2137      1,
   2138      TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
   2139      TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
   2140      SSL_kECDHe,
   2141      SSL_aECDH,
   2142      SSL_AES256,
   2143      SSL_SHA1,
   2144      SSL_TLSV1,
   2145      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2146      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2147      256,
   2148      256,
   2149      },
   2150 
   2151     /* Cipher C006 */
   2152     {
   2153      1,
   2154      TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
   2155      TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
   2156      SSL_kEECDH,
   2157      SSL_aECDSA,
   2158      SSL_eNULL,
   2159      SSL_SHA1,
   2160      SSL_TLSV1,
   2161      SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
   2162      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2163      0,
   2164      0,
   2165      },
   2166 
   2167     /* Cipher C007 */
   2168     {
   2169      1,
   2170      TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
   2171      TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
   2172      SSL_kEECDH,
   2173      SSL_aECDSA,
   2174      SSL_RC4,
   2175      SSL_SHA1,
   2176      SSL_TLSV1,
   2177      SSL_NOT_EXP | SSL_MEDIUM,
   2178      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2179      128,
   2180      128,
   2181      },
   2182 
   2183     /* Cipher C008 */
   2184     {
   2185      1,
   2186      TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
   2187      TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
   2188      SSL_kEECDH,
   2189      SSL_aECDSA,
   2190      SSL_3DES,
   2191      SSL_SHA1,
   2192      SSL_TLSV1,
   2193      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2194      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2195      112,
   2196      168,
   2197      },
   2198 
   2199     /* Cipher C009 */
   2200     {
   2201      1,
   2202      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
   2203      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
   2204      SSL_kEECDH,
   2205      SSL_aECDSA,
   2206      SSL_AES128,
   2207      SSL_SHA1,
   2208      SSL_TLSV1,
   2209      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2210      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2211      128,
   2212      128,
   2213      },
   2214 
   2215     /* Cipher C00A */
   2216     {
   2217      1,
   2218      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
   2219      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
   2220      SSL_kEECDH,
   2221      SSL_aECDSA,
   2222      SSL_AES256,
   2223      SSL_SHA1,
   2224      SSL_TLSV1,
   2225      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2226      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2227      256,
   2228      256,
   2229      },
   2230 
   2231     /* Cipher C00B */
   2232     {
   2233      1,
   2234      TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
   2235      TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
   2236      SSL_kECDHr,
   2237      SSL_aECDH,
   2238      SSL_eNULL,
   2239      SSL_SHA1,
   2240      SSL_TLSV1,
   2241      SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
   2242      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2243      0,
   2244      0,
   2245      },
   2246 
   2247     /* Cipher C00C */
   2248     {
   2249      1,
   2250      TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
   2251      TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
   2252      SSL_kECDHr,
   2253      SSL_aECDH,
   2254      SSL_RC4,
   2255      SSL_SHA1,
   2256      SSL_TLSV1,
   2257      SSL_NOT_EXP | SSL_MEDIUM,
   2258      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2259      128,
   2260      128,
   2261      },
   2262 
   2263     /* Cipher C00D */
   2264     {
   2265      1,
   2266      TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
   2267      TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
   2268      SSL_kECDHr,
   2269      SSL_aECDH,
   2270      SSL_3DES,
   2271      SSL_SHA1,
   2272      SSL_TLSV1,
   2273      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2274      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2275      112,
   2276      168,
   2277      },
   2278 
   2279     /* Cipher C00E */
   2280     {
   2281      1,
   2282      TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
   2283      TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
   2284      SSL_kECDHr,
   2285      SSL_aECDH,
   2286      SSL_AES128,
   2287      SSL_SHA1,
   2288      SSL_TLSV1,
   2289      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2290      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2291      128,
   2292      128,
   2293      },
   2294 
   2295     /* Cipher C00F */
   2296     {
   2297      1,
   2298      TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
   2299      TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
   2300      SSL_kECDHr,
   2301      SSL_aECDH,
   2302      SSL_AES256,
   2303      SSL_SHA1,
   2304      SSL_TLSV1,
   2305      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2306      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2307      256,
   2308      256,
   2309      },
   2310 
   2311     /* Cipher C010 */
   2312     {
   2313      1,
   2314      TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
   2315      TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
   2316      SSL_kEECDH,
   2317      SSL_aRSA,
   2318      SSL_eNULL,
   2319      SSL_SHA1,
   2320      SSL_TLSV1,
   2321      SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
   2322      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2323      0,
   2324      0,
   2325      },
   2326 
   2327     /* Cipher C011 */
   2328     {
   2329      1,
   2330      TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
   2331      TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
   2332      SSL_kEECDH,
   2333      SSL_aRSA,
   2334      SSL_RC4,
   2335      SSL_SHA1,
   2336      SSL_TLSV1,
   2337      SSL_NOT_EXP | SSL_MEDIUM,
   2338      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2339      128,
   2340      128,
   2341      },
   2342 
   2343     /* Cipher C012 */
   2344     {
   2345      1,
   2346      TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
   2347      TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
   2348      SSL_kEECDH,
   2349      SSL_aRSA,
   2350      SSL_3DES,
   2351      SSL_SHA1,
   2352      SSL_TLSV1,
   2353      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2354      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2355      112,
   2356      168,
   2357      },
   2358 
   2359     /* Cipher C013 */
   2360     {
   2361      1,
   2362      TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
   2363      TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
   2364      SSL_kEECDH,
   2365      SSL_aRSA,
   2366      SSL_AES128,
   2367      SSL_SHA1,
   2368      SSL_TLSV1,
   2369      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2370      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2371      128,
   2372      128,
   2373      },
   2374 
   2375     /* Cipher C014 */
   2376     {
   2377      1,
   2378      TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
   2379      TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
   2380      SSL_kEECDH,
   2381      SSL_aRSA,
   2382      SSL_AES256,
   2383      SSL_SHA1,
   2384      SSL_TLSV1,
   2385      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2386      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2387      256,
   2388      256,
   2389      },
   2390 
   2391     /* Cipher C015 */
   2392     {
   2393      1,
   2394      TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
   2395      TLS1_CK_ECDH_anon_WITH_NULL_SHA,
   2396      SSL_kEECDH,
   2397      SSL_aNULL,
   2398      SSL_eNULL,
   2399      SSL_SHA1,
   2400      SSL_TLSV1,
   2401      SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
   2402      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2403      0,
   2404      0,
   2405      },
   2406 
   2407     /* Cipher C016 */
   2408     {
   2409      1,
   2410      TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
   2411      TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
   2412      SSL_kEECDH,
   2413      SSL_aNULL,
   2414      SSL_RC4,
   2415      SSL_SHA1,
   2416      SSL_TLSV1,
   2417      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM,
   2418      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2419      128,
   2420      128,
   2421      },
   2422 
   2423     /* Cipher C017 */
   2424     {
   2425      1,
   2426      TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
   2427      TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
   2428      SSL_kEECDH,
   2429      SSL_aNULL,
   2430      SSL_3DES,
   2431      SSL_SHA1,
   2432      SSL_TLSV1,
   2433      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2434      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2435      112,
   2436      168,
   2437      },
   2438 
   2439     /* Cipher C018 */
   2440     {
   2441      1,
   2442      TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
   2443      TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
   2444      SSL_kEECDH,
   2445      SSL_aNULL,
   2446      SSL_AES128,
   2447      SSL_SHA1,
   2448      SSL_TLSV1,
   2449      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2450      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2451      128,
   2452      128,
   2453      },
   2454 
   2455     /* Cipher C019 */
   2456     {
   2457      1,
   2458      TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
   2459      TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
   2460      SSL_kEECDH,
   2461      SSL_aNULL,
   2462      SSL_AES256,
   2463      SSL_SHA1,
   2464      SSL_TLSV1,
   2465      SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2466      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2467      256,
   2468      256,
   2469      },
   2470 #endif                          /* OPENSSL_NO_ECDH */
   2471 
   2472 #ifndef OPENSSL_NO_SRP
   2473     /* Cipher C01A */
   2474     {
   2475      1,
   2476      TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
   2477      TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
   2478      SSL_kSRP,
   2479      SSL_aSRP,
   2480      SSL_3DES,
   2481      SSL_SHA1,
   2482      SSL_TLSV1,
   2483      SSL_NOT_EXP | SSL_HIGH,
   2484      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2485      112,
   2486      168,
   2487      },
   2488 
   2489     /* Cipher C01B */
   2490     {
   2491      1,
   2492      TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
   2493      TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
   2494      SSL_kSRP,
   2495      SSL_aRSA,
   2496      SSL_3DES,
   2497      SSL_SHA1,
   2498      SSL_TLSV1,
   2499      SSL_NOT_EXP | SSL_HIGH,
   2500      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2501      112,
   2502      168,
   2503      },
   2504 
   2505     /* Cipher C01C */
   2506     {
   2507      1,
   2508      TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
   2509      TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
   2510      SSL_kSRP,
   2511      SSL_aDSS,
   2512      SSL_3DES,
   2513      SSL_SHA1,
   2514      SSL_TLSV1,
   2515      SSL_NOT_EXP | SSL_HIGH,
   2516      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2517      112,
   2518      168,
   2519      },
   2520 
   2521     /* Cipher C01D */
   2522     {
   2523      1,
   2524      TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA,
   2525      TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA,
   2526      SSL_kSRP,
   2527      SSL_aSRP,
   2528      SSL_AES128,
   2529      SSL_SHA1,
   2530      SSL_TLSV1,
   2531      SSL_NOT_EXP | SSL_HIGH,
   2532      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2533      128,
   2534      128,
   2535      },
   2536 
   2537     /* Cipher C01E */
   2538     {
   2539      1,
   2540      TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
   2541      TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
   2542      SSL_kSRP,
   2543      SSL_aRSA,
   2544      SSL_AES128,
   2545      SSL_SHA1,
   2546      SSL_TLSV1,
   2547      SSL_NOT_EXP | SSL_HIGH,
   2548      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2549      128,
   2550      128,
   2551      },
   2552 
   2553     /* Cipher C01F */
   2554     {
   2555      1,
   2556      TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
   2557      TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
   2558      SSL_kSRP,
   2559      SSL_aDSS,
   2560      SSL_AES128,
   2561      SSL_SHA1,
   2562      SSL_TLSV1,
   2563      SSL_NOT_EXP | SSL_HIGH,
   2564      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2565      128,
   2566      128,
   2567      },
   2568 
   2569     /* Cipher C020 */
   2570     {
   2571      1,
   2572      TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA,
   2573      TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA,
   2574      SSL_kSRP,
   2575      SSL_aSRP,
   2576      SSL_AES256,
   2577      SSL_SHA1,
   2578      SSL_TLSV1,
   2579      SSL_NOT_EXP | SSL_HIGH,
   2580      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2581      256,
   2582      256,
   2583      },
   2584 
   2585     /* Cipher C021 */
   2586     {
   2587      1,
   2588      TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
   2589      TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
   2590      SSL_kSRP,
   2591      SSL_aRSA,
   2592      SSL_AES256,
   2593      SSL_SHA1,
   2594      SSL_TLSV1,
   2595      SSL_NOT_EXP | SSL_HIGH,
   2596      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2597      256,
   2598      256,
   2599      },
   2600 
   2601     /* Cipher C022 */
   2602     {
   2603      1,
   2604      TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
   2605      TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
   2606      SSL_kSRP,
   2607      SSL_aDSS,
   2608      SSL_AES256,
   2609      SSL_SHA1,
   2610      SSL_TLSV1,
   2611      SSL_NOT_EXP | SSL_HIGH,
   2612      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2613      256,
   2614      256,
   2615      },
   2616 #endif                          /* OPENSSL_NO_SRP */
   2617 #ifndef OPENSSL_NO_ECDH
   2618 
   2619     /* HMAC based TLS v1.2 ciphersuites from RFC5289 */
   2620 
   2621     /* Cipher C023 */
   2622     {
   2623      1,
   2624      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
   2625      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
   2626      SSL_kEECDH,
   2627      SSL_aECDSA,
   2628      SSL_AES128,
   2629      SSL_SHA256,
   2630      SSL_TLSV1_2,
   2631      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2632      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2633      128,
   2634      128,
   2635      },
   2636 
   2637     /* Cipher C024 */
   2638     {
   2639      1,
   2640      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
   2641      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
   2642      SSL_kEECDH,
   2643      SSL_aECDSA,
   2644      SSL_AES256,
   2645      SSL_SHA384,
   2646      SSL_TLSV1_2,
   2647      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2648      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2649      256,
   2650      256,
   2651      },
   2652 
   2653     /* Cipher C025 */
   2654     {
   2655      1,
   2656      TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256,
   2657      TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256,
   2658      SSL_kECDHe,
   2659      SSL_aECDH,
   2660      SSL_AES128,
   2661      SSL_SHA256,
   2662      SSL_TLSV1_2,
   2663      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2664      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2665      128,
   2666      128,
   2667      },
   2668 
   2669     /* Cipher C026 */
   2670     {
   2671      1,
   2672      TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384,
   2673      TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384,
   2674      SSL_kECDHe,
   2675      SSL_aECDH,
   2676      SSL_AES256,
   2677      SSL_SHA384,
   2678      SSL_TLSV1_2,
   2679      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2680      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2681      256,
   2682      256,
   2683      },
   2684 
   2685     /* Cipher C027 */
   2686     {
   2687      1,
   2688      TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
   2689      TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
   2690      SSL_kEECDH,
   2691      SSL_aRSA,
   2692      SSL_AES128,
   2693      SSL_SHA256,
   2694      SSL_TLSV1_2,
   2695      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2696      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2697      128,
   2698      128,
   2699      },
   2700 
   2701     /* Cipher C028 */
   2702     {
   2703      1,
   2704      TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
   2705      TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
   2706      SSL_kEECDH,
   2707      SSL_aRSA,
   2708      SSL_AES256,
   2709      SSL_SHA384,
   2710      SSL_TLSV1_2,
   2711      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2712      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2713      256,
   2714      256,
   2715      },
   2716 
   2717     /* Cipher C029 */
   2718     {
   2719      1,
   2720      TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
   2721      TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
   2722      SSL_kECDHr,
   2723      SSL_aECDH,
   2724      SSL_AES128,
   2725      SSL_SHA256,
   2726      SSL_TLSV1_2,
   2727      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2728      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2729      128,
   2730      128,
   2731      },
   2732 
   2733     /* Cipher C02A */
   2734     {
   2735      1,
   2736      TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
   2737      TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
   2738      SSL_kECDHr,
   2739      SSL_aECDH,
   2740      SSL_AES256,
   2741      SSL_SHA384,
   2742      SSL_TLSV1_2,
   2743      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2744      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2745      256,
   2746      256,
   2747      },
   2748 
   2749     /* GCM based TLS v1.2 ciphersuites from RFC5289 */
   2750 
   2751     /* Cipher C02B */
   2752     {
   2753      1,
   2754      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
   2755      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
   2756      SSL_kEECDH,
   2757      SSL_aECDSA,
   2758      SSL_AES128GCM,
   2759      SSL_AEAD,
   2760      SSL_TLSV1_2,
   2761      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2762      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2763      128,
   2764      128,
   2765      },
   2766 
   2767     /* Cipher C02C */
   2768     {
   2769      1,
   2770      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
   2771      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
   2772      SSL_kEECDH,
   2773      SSL_aECDSA,
   2774      SSL_AES256GCM,
   2775      SSL_AEAD,
   2776      SSL_TLSV1_2,
   2777      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2778      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2779      256,
   2780      256,
   2781      },
   2782 
   2783     /* Cipher C02D */
   2784     {
   2785      1,
   2786      TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
   2787      TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
   2788      SSL_kECDHe,
   2789      SSL_aECDH,
   2790      SSL_AES128GCM,
   2791      SSL_AEAD,
   2792      SSL_TLSV1_2,
   2793      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2794      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2795      128,
   2796      128,
   2797      },
   2798 
   2799     /* Cipher C02E */
   2800     {
   2801      1,
   2802      TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
   2803      TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
   2804      SSL_kECDHe,
   2805      SSL_aECDH,
   2806      SSL_AES256GCM,
   2807      SSL_AEAD,
   2808      SSL_TLSV1_2,
   2809      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2810      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2811      256,
   2812      256,
   2813      },
   2814 
   2815     /* Cipher C02F */
   2816     {
   2817      1,
   2818      TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
   2819      TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
   2820      SSL_kEECDH,
   2821      SSL_aRSA,
   2822      SSL_AES128GCM,
   2823      SSL_AEAD,
   2824      SSL_TLSV1_2,
   2825      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2826      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2827      128,
   2828      128,
   2829      },
   2830 
   2831     /* Cipher C030 */
   2832     {
   2833      1,
   2834      TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
   2835      TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
   2836      SSL_kEECDH,
   2837      SSL_aRSA,
   2838      SSL_AES256GCM,
   2839      SSL_AEAD,
   2840      SSL_TLSV1_2,
   2841      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2842      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2843      256,
   2844      256,
   2845      },
   2846 
   2847     /* Cipher C031 */
   2848     {
   2849      1,
   2850      TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256,
   2851      TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256,
   2852      SSL_kECDHr,
   2853      SSL_aECDH,
   2854      SSL_AES128GCM,
   2855      SSL_AEAD,
   2856      SSL_TLSV1_2,
   2857      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2858      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
   2859      128,
   2860      128,
   2861      },
   2862 
   2863     /* Cipher C032 */
   2864     {
   2865      1,
   2866      TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384,
   2867      TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384,
   2868      SSL_kECDHr,
   2869      SSL_aECDH,
   2870      SSL_AES256GCM,
   2871      SSL_AEAD,
   2872      SSL_TLSV1_2,
   2873      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
   2874      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
   2875      256,
   2876      256,
   2877      },
   2878 
   2879 #endif                          /* OPENSSL_NO_ECDH */
   2880 
   2881 #ifdef TEMP_GOST_TLS
   2882 /* Cipher FF00 */
   2883     {
   2884      1,
   2885      "GOST-MD5",
   2886      0x0300ff00,
   2887      SSL_kRSA,
   2888      SSL_aRSA,
   2889      SSL_eGOST2814789CNT,
   2890      SSL_MD5,
   2891      SSL_TLSV1,
   2892      SSL_NOT_EXP | SSL_HIGH,
   2893      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2894      256,
   2895      256,
   2896      },
   2897     {
   2898      1,
   2899      "GOST-GOST94",
   2900      0x0300ff01,
   2901      SSL_kRSA,
   2902      SSL_aRSA,
   2903      SSL_eGOST2814789CNT,
   2904      SSL_GOST94,
   2905      SSL_TLSV1,
   2906      SSL_NOT_EXP | SSL_HIGH,
   2907      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2908      256,
   2909      256},
   2910     {
   2911      1,
   2912      "GOST-GOST89MAC",
   2913      0x0300ff02,
   2914      SSL_kRSA,
   2915      SSL_aRSA,
   2916      SSL_eGOST2814789CNT,
   2917      SSL_GOST89MAC,
   2918      SSL_TLSV1,
   2919      SSL_NOT_EXP | SSL_HIGH,
   2920      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
   2921      256,
   2922      256},
   2923     {
   2924      1,
   2925      "GOST-GOST89STREAM",
   2926      0x0300ff03,
   2927      SSL_kRSA,
   2928      SSL_aRSA,
   2929      SSL_eGOST2814789CNT,
   2930      SSL_GOST89MAC,
   2931      SSL_TLSV1,
   2932      SSL_NOT_EXP | SSL_HIGH,
   2933      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF | TLS1_STREAM_MAC,
   2934      256,
   2935      256},
   2936 #endif
   2937 
   2938 /* end of list */
   2939 };
   2940 
   2941 SSL3_ENC_METHOD SSLv3_enc_data = {
   2942     ssl3_enc,
   2943     n_ssl3_mac,
   2944     ssl3_setup_key_block,
   2945     ssl3_generate_master_secret,
   2946     ssl3_change_cipher_state,
   2947     ssl3_final_finish_mac,
   2948     MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH,
   2949     ssl3_cert_verify_mac,
   2950     SSL3_MD_CLIENT_FINISHED_CONST, 4,
   2951     SSL3_MD_SERVER_FINISHED_CONST, 4,
   2952     ssl3_alert_code,
   2953     (int (*)(SSL *, unsigned char *, size_t, const char *,
   2954              size_t, const unsigned char *, size_t,
   2955              int use_context))ssl_undefined_function,
   2956 };
   2957 
   2958 long ssl3_default_timeout(void)
   2959 {
   2960     /*
   2961      * 2 hours, the 24 hours mentioned in the SSLv3 spec is way too long for
   2962      * http, the cache would over fill
   2963      */
   2964     return (60 * 60 * 2);
   2965 }
   2966 
   2967 int ssl3_num_ciphers(void)
   2968 {
   2969     return (SSL3_NUM_CIPHERS);
   2970 }
   2971 
   2972 const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
   2973 {
   2974     if (u < SSL3_NUM_CIPHERS)
   2975         return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]));
   2976     else
   2977         return (NULL);
   2978 }
   2979 
   2980 int ssl3_pending(const SSL *s)
   2981 {
   2982     if (s->rstate == SSL_ST_READ_BODY)
   2983         return 0;
   2984 
   2985     return (s->s3->rrec.type ==
   2986             SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
   2987 }
   2988 
   2989 int ssl3_new(SSL *s)
   2990 {
   2991     SSL3_STATE *s3;
   2992 
   2993     if ((s3 = OPENSSL_malloc(sizeof *s3)) == NULL)
   2994         goto err;
   2995     memset(s3, 0, sizeof *s3);
   2996     memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num));
   2997     memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num));
   2998 
   2999     s->s3 = s3;
   3000 
   3001 #ifndef OPENSSL_NO_SRP
   3002     SSL_SRP_CTX_init(s);
   3003 #endif
   3004     s->method->ssl_clear(s);
   3005     return (1);
   3006  err:
   3007     return (0);
   3008 }
   3009 
   3010 void ssl3_free(SSL *s)
   3011 {
   3012     if (s == NULL || s->s3 == NULL)
   3013         return;
   3014 
   3015 #ifdef TLSEXT_TYPE_opaque_prf_input
   3016     if (s->s3->client_opaque_prf_input != NULL)
   3017         OPENSSL_free(s->s3->client_opaque_prf_input);
   3018     if (s->s3->server_opaque_prf_input != NULL)
   3019         OPENSSL_free(s->s3->server_opaque_prf_input);
   3020 #endif
   3021 
   3022     ssl3_cleanup_key_block(s);
   3023     if (s->s3->rbuf.buf != NULL)
   3024         ssl3_release_read_buffer(s);
   3025     if (s->s3->wbuf.buf != NULL)
   3026         ssl3_release_write_buffer(s);
   3027     if (s->s3->rrec.comp != NULL)
   3028         OPENSSL_free(s->s3->rrec.comp);
   3029 #ifndef OPENSSL_NO_DH
   3030     if (s->s3->tmp.dh != NULL)
   3031         DH_free(s->s3->tmp.dh);
   3032 #endif
   3033 #ifndef OPENSSL_NO_ECDH
   3034     if (s->s3->tmp.ecdh != NULL)
   3035         EC_KEY_free(s->s3->tmp.ecdh);
   3036 #endif
   3037 
   3038     if (s->s3->tmp.ca_names != NULL)
   3039         sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free);
   3040     if (s->s3->handshake_buffer) {
   3041         BIO_free(s->s3->handshake_buffer);
   3042     }
   3043     if (s->s3->handshake_dgst)
   3044         ssl3_free_digest_list(s);
   3045 #ifndef OPENSSL_NO_SRP
   3046     SSL_SRP_CTX_free(s);
   3047 #endif
   3048     OPENSSL_cleanse(s->s3, sizeof *s->s3);
   3049     OPENSSL_free(s->s3);
   3050     s->s3 = NULL;
   3051 }
   3052 
   3053 void ssl3_clear(SSL *s)
   3054 {
   3055     unsigned char *rp, *wp;
   3056     size_t rlen, wlen;
   3057     int init_extra;
   3058 
   3059 #ifdef TLSEXT_TYPE_opaque_prf_input
   3060     if (s->s3->client_opaque_prf_input != NULL)
   3061         OPENSSL_free(s->s3->client_opaque_prf_input);
   3062     s->s3->client_opaque_prf_input = NULL;
   3063     if (s->s3->server_opaque_prf_input != NULL)
   3064         OPENSSL_free(s->s3->server_opaque_prf_input);
   3065     s->s3->server_opaque_prf_input = NULL;
   3066 #endif
   3067 
   3068     ssl3_cleanup_key_block(s);
   3069     if (s->s3->tmp.ca_names != NULL)
   3070         sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free);
   3071 
   3072     if (s->s3->rrec.comp != NULL) {
   3073         OPENSSL_free(s->s3->rrec.comp);
   3074         s->s3->rrec.comp = NULL;
   3075     }
   3076 #ifndef OPENSSL_NO_DH
   3077     if (s->s3->tmp.dh != NULL) {
   3078         DH_free(s->s3->tmp.dh);
   3079         s->s3->tmp.dh = NULL;
   3080     }
   3081 #endif
   3082 #ifndef OPENSSL_NO_ECDH
   3083     if (s->s3->tmp.ecdh != NULL) {
   3084         EC_KEY_free(s->s3->tmp.ecdh);
   3085         s->s3->tmp.ecdh = NULL;
   3086     }
   3087 #endif
   3088 #ifndef OPENSSL_NO_TLSEXT
   3089 # ifndef OPENSSL_NO_EC
   3090     s->s3->is_probably_safari = 0;
   3091 # endif                         /* !OPENSSL_NO_EC */
   3092 #endif                          /* !OPENSSL_NO_TLSEXT */
   3093 
   3094     rp = s->s3->rbuf.buf;
   3095     wp = s->s3->wbuf.buf;
   3096     rlen = s->s3->rbuf.len;
   3097     wlen = s->s3->wbuf.len;
   3098     init_extra = s->s3->init_extra;
   3099     if (s->s3->handshake_buffer) {
   3100         BIO_free(s->s3->handshake_buffer);
   3101         s->s3->handshake_buffer = NULL;
   3102     }
   3103     if (s->s3->handshake_dgst) {
   3104         ssl3_free_digest_list(s);
   3105     }
   3106     memset(s->s3, 0, sizeof *s->s3);
   3107     s->s3->rbuf.buf = rp;
   3108     s->s3->wbuf.buf = wp;
   3109     s->s3->rbuf.len = rlen;
   3110     s->s3->wbuf.len = wlen;
   3111     s->s3->init_extra = init_extra;
   3112 
   3113     ssl_free_wbio_buffer(s);
   3114 
   3115     s->packet_length = 0;
   3116     s->s3->renegotiate = 0;
   3117     s->s3->total_renegotiations = 0;
   3118     s->s3->num_renegotiations = 0;
   3119     s->s3->in_read_app_data = 0;
   3120     s->version = SSL3_VERSION;
   3121 
   3122 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
   3123     if (s->next_proto_negotiated) {
   3124         OPENSSL_free(s->next_proto_negotiated);
   3125         s->next_proto_negotiated = NULL;
   3126         s->next_proto_negotiated_len = 0;
   3127     }
   3128 #endif
   3129 }
   3130 
   3131 #ifndef OPENSSL_NO_SRP
   3132 static char *MS_CALLBACK srp_password_from_info_cb(SSL *s, void *arg)
   3133 {
   3134     return BUF_strdup(s->srp_ctx.info);
   3135 }
   3136 #endif
   3137 
   3138 long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
   3139 {
   3140     int ret = 0;
   3141 
   3142 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
   3143     if (
   3144 # ifndef OPENSSL_NO_RSA
   3145            cmd == SSL_CTRL_SET_TMP_RSA || cmd == SSL_CTRL_SET_TMP_RSA_CB ||
   3146 # endif
   3147 # ifndef OPENSSL_NO_DSA
   3148            cmd == SSL_CTRL_SET_TMP_DH || cmd == SSL_CTRL_SET_TMP_DH_CB ||
   3149 # endif
   3150            0) {
   3151         if (!ssl_cert_inst(&s->cert)) {
   3152             SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
   3153             return (0);
   3154         }
   3155     }
   3156 #endif
   3157 
   3158     switch (cmd) {
   3159     case SSL_CTRL_GET_SESSION_REUSED:
   3160         ret = s->hit;
   3161         break;
   3162     case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
   3163         break;
   3164     case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
   3165         ret = s->s3->num_renegotiations;
   3166         break;
   3167     case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
   3168         ret = s->s3->num_renegotiations;
   3169         s->s3->num_renegotiations = 0;
   3170         break;
   3171     case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
   3172         ret = s->s3->total_renegotiations;
   3173         break;
   3174     case SSL_CTRL_GET_FLAGS:
   3175         ret = (int)(s->s3->flags);
   3176         break;
   3177 #ifndef OPENSSL_NO_RSA
   3178     case SSL_CTRL_NEED_TMP_RSA:
   3179         if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
   3180             ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
   3181              (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) >
   3182               (512 / 8))))
   3183             ret = 1;
   3184         break;
   3185     case SSL_CTRL_SET_TMP_RSA:
   3186         {
   3187             RSA *rsa = (RSA *)parg;
   3188             if (rsa == NULL) {
   3189                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
   3190                 return (ret);
   3191             }
   3192             if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) {
   3193                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
   3194                 return (ret);
   3195             }
   3196             if (s->cert->rsa_tmp != NULL)
   3197                 RSA_free(s->cert->rsa_tmp);
   3198             s->cert->rsa_tmp = rsa;
   3199             ret = 1;
   3200         }
   3201         break;
   3202     case SSL_CTRL_SET_TMP_RSA_CB:
   3203         {
   3204             SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3205             return (ret);
   3206         }
   3207         break;
   3208 #endif
   3209 #ifndef OPENSSL_NO_DH
   3210     case SSL_CTRL_SET_TMP_DH:
   3211         {
   3212             DH *dh = (DH *)parg;
   3213             if (dh == NULL) {
   3214                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
   3215                 return (ret);
   3216             }
   3217             if ((dh = DHparams_dup(dh)) == NULL) {
   3218                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
   3219                 return (ret);
   3220             }
   3221             if (s->cert->dh_tmp != NULL)
   3222                 DH_free(s->cert->dh_tmp);
   3223             s->cert->dh_tmp = dh;
   3224             ret = 1;
   3225         }
   3226         break;
   3227     case SSL_CTRL_SET_TMP_DH_CB:
   3228         {
   3229             SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3230             return (ret);
   3231         }
   3232         break;
   3233 #endif
   3234 #ifndef OPENSSL_NO_ECDH
   3235     case SSL_CTRL_SET_TMP_ECDH:
   3236         {
   3237             EC_KEY *ecdh = NULL;
   3238 
   3239             if (parg == NULL) {
   3240                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
   3241                 return (ret);
   3242             }
   3243             if (!EC_KEY_up_ref((EC_KEY *)parg)) {
   3244                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB);
   3245                 return (ret);
   3246             }
   3247             ecdh = (EC_KEY *)parg;
   3248             if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) {
   3249                 if (!EC_KEY_generate_key(ecdh)) {
   3250                     EC_KEY_free(ecdh);
   3251                     SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB);
   3252                     return (ret);
   3253                 }
   3254             }
   3255             if (s->cert->ecdh_tmp != NULL)
   3256                 EC_KEY_free(s->cert->ecdh_tmp);
   3257             s->cert->ecdh_tmp = ecdh;
   3258             ret = 1;
   3259         }
   3260         break;
   3261     case SSL_CTRL_SET_TMP_ECDH_CB:
   3262         {
   3263             SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3264             return (ret);
   3265         }
   3266         break;
   3267 #endif                          /* !OPENSSL_NO_ECDH */
   3268 #ifndef OPENSSL_NO_TLSEXT
   3269     case SSL_CTRL_SET_TLSEXT_HOSTNAME:
   3270         if (larg == TLSEXT_NAMETYPE_host_name) {
   3271             size_t len;
   3272 
   3273             if (s->tlsext_hostname != NULL)
   3274                 OPENSSL_free(s->tlsext_hostname);
   3275             s->tlsext_hostname = NULL;
   3276 
   3277             ret = 1;
   3278             if (parg == NULL)
   3279                 break;
   3280             len = strlen((char *)parg);
   3281             if (len == 0 || len > TLSEXT_MAXLEN_host_name) {
   3282                 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
   3283                 return 0;
   3284             }
   3285             if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) {
   3286                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
   3287                 return 0;
   3288             }
   3289         } else {
   3290             SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
   3291             return 0;
   3292         }
   3293         break;
   3294     case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
   3295         s->tlsext_debug_arg = parg;
   3296         ret = 1;
   3297         break;
   3298 
   3299 # ifdef TLSEXT_TYPE_opaque_prf_input
   3300     case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT:
   3301         if (larg > 12288) {     /* actual internal limit is 2^16 for the
   3302                                  * complete hello message * (including the
   3303                                  * cert chain and everything) */
   3304             SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG);
   3305             break;
   3306         }
   3307         if (s->tlsext_opaque_prf_input != NULL)
   3308             OPENSSL_free(s->tlsext_opaque_prf_input);
   3309         if ((size_t)larg == 0)
   3310             s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte
   3311                                                              * just to get
   3312                                                              * non-NULL */
   3313         else
   3314             s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg);
   3315         if (s->tlsext_opaque_prf_input != NULL) {
   3316             s->tlsext_opaque_prf_input_len = (size_t)larg;
   3317             ret = 1;
   3318         } else
   3319             s->tlsext_opaque_prf_input_len = 0;
   3320         break;
   3321 # endif
   3322 
   3323     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
   3324         s->tlsext_status_type = larg;
   3325         ret = 1;
   3326         break;
   3327 
   3328     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
   3329         *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
   3330         ret = 1;
   3331         break;
   3332 
   3333     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
   3334         s->tlsext_ocsp_exts = parg;
   3335         ret = 1;
   3336         break;
   3337 
   3338     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
   3339         *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
   3340         ret = 1;
   3341         break;
   3342 
   3343     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
   3344         s->tlsext_ocsp_ids = parg;
   3345         ret = 1;
   3346         break;
   3347 
   3348     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
   3349         *(unsigned char **)parg = s->tlsext_ocsp_resp;
   3350         return s->tlsext_ocsp_resplen;
   3351 
   3352     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
   3353         if (s->tlsext_ocsp_resp)
   3354             OPENSSL_free(s->tlsext_ocsp_resp);
   3355         s->tlsext_ocsp_resp = parg;
   3356         s->tlsext_ocsp_resplen = larg;
   3357         ret = 1;
   3358         break;
   3359 
   3360 # ifndef OPENSSL_NO_HEARTBEATS
   3361     case SSL_CTRL_TLS_EXT_SEND_HEARTBEAT:
   3362         if (SSL_version(s) == DTLS1_VERSION
   3363             || SSL_version(s) == DTLS1_BAD_VER)
   3364             ret = dtls1_heartbeat(s);
   3365         else
   3366             ret = tls1_heartbeat(s);
   3367         break;
   3368 
   3369     case SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING:
   3370         ret = s->tlsext_hb_pending;
   3371         break;
   3372 
   3373     case SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS:
   3374         if (larg)
   3375             s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
   3376         else
   3377             s->tlsext_heartbeat &= ~SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
   3378         ret = 1;
   3379         break;
   3380 # endif
   3381 
   3382 #endif                          /* !OPENSSL_NO_TLSEXT */
   3383 
   3384     case SSL_CTRL_CHECK_PROTO_VERSION:
   3385         /*
   3386          * For library-internal use; checks that the current protocol is the
   3387          * highest enabled version (according to s->ctx->method, as version
   3388          * negotiation may have changed s->method).
   3389          */
   3390         if (s->version == s->ctx->method->version)
   3391             return 1;
   3392         /*
   3393          * Apparently we're using a version-flexible SSL_METHOD (not at its
   3394          * highest protocol version).
   3395          */
   3396         if (s->ctx->method->version == SSLv23_method()->version) {
   3397 #if TLS_MAX_VERSION != TLS1_2_VERSION
   3398 # error Code needs update for SSLv23_method() support beyond TLS1_2_VERSION.
   3399 #endif
   3400             if (!(s->options & SSL_OP_NO_TLSv1_2))
   3401                 return s->version == TLS1_2_VERSION;
   3402             if (!(s->options & SSL_OP_NO_TLSv1_1))
   3403                 return s->version == TLS1_1_VERSION;
   3404             if (!(s->options & SSL_OP_NO_TLSv1))
   3405                 return s->version == TLS1_VERSION;
   3406             if (!(s->options & SSL_OP_NO_SSLv3))
   3407                 return s->version == SSL3_VERSION;
   3408             if (!(s->options & SSL_OP_NO_SSLv2))
   3409                 return s->version == SSL2_VERSION;
   3410         }
   3411         return 0;               /* Unexpected state; fail closed. */
   3412 
   3413     default:
   3414         break;
   3415     }
   3416     return (ret);
   3417 }
   3418 
   3419 long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
   3420 {
   3421     int ret = 0;
   3422 
   3423 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
   3424     if (
   3425 # ifndef OPENSSL_NO_RSA
   3426            cmd == SSL_CTRL_SET_TMP_RSA_CB ||
   3427 # endif
   3428 # ifndef OPENSSL_NO_DSA
   3429            cmd == SSL_CTRL_SET_TMP_DH_CB ||
   3430 # endif
   3431            0) {
   3432         if (!ssl_cert_inst(&s->cert)) {
   3433             SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
   3434             return (0);
   3435         }
   3436     }
   3437 #endif
   3438 
   3439     switch (cmd) {
   3440 #ifndef OPENSSL_NO_RSA
   3441     case SSL_CTRL_SET_TMP_RSA_CB:
   3442         {
   3443             s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
   3444         }
   3445         break;
   3446 #endif
   3447 #ifndef OPENSSL_NO_DH
   3448     case SSL_CTRL_SET_TMP_DH_CB:
   3449         {
   3450             s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
   3451         }
   3452         break;
   3453 #endif
   3454 #ifndef OPENSSL_NO_ECDH
   3455     case SSL_CTRL_SET_TMP_ECDH_CB:
   3456         {
   3457             s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
   3458         }
   3459         break;
   3460 #endif
   3461 #ifndef OPENSSL_NO_TLSEXT
   3462     case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
   3463         s->tlsext_debug_cb = (void (*)(SSL *, int, int,
   3464                                        unsigned char *, int, void *))fp;
   3465         break;
   3466 #endif
   3467     default:
   3468         break;
   3469     }
   3470     return (ret);
   3471 }
   3472 
   3473 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
   3474 {
   3475     CERT *cert;
   3476 
   3477     cert = ctx->cert;
   3478 
   3479     switch (cmd) {
   3480 #ifndef OPENSSL_NO_RSA
   3481     case SSL_CTRL_NEED_TMP_RSA:
   3482         if ((cert->rsa_tmp == NULL) &&
   3483             ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
   3484              (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) >
   3485               (512 / 8)))
   3486             )
   3487             return (1);
   3488         else
   3489             return (0);
   3490         /* break; */
   3491     case SSL_CTRL_SET_TMP_RSA:
   3492         {
   3493             RSA *rsa;
   3494             int i;
   3495 
   3496             rsa = (RSA *)parg;
   3497             i = 1;
   3498             if (rsa == NULL)
   3499                 i = 0;
   3500             else {
   3501                 if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
   3502                     i = 0;
   3503             }
   3504             if (!i) {
   3505                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_RSA_LIB);
   3506                 return (0);
   3507             } else {
   3508                 if (cert->rsa_tmp != NULL)
   3509                     RSA_free(cert->rsa_tmp);
   3510                 cert->rsa_tmp = rsa;
   3511                 return (1);
   3512             }
   3513         }
   3514         /* break; */
   3515     case SSL_CTRL_SET_TMP_RSA_CB:
   3516         {
   3517             SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3518             return (0);
   3519         }
   3520         break;
   3521 #endif
   3522 #ifndef OPENSSL_NO_DH
   3523     case SSL_CTRL_SET_TMP_DH:
   3524         {
   3525             DH *new = NULL, *dh;
   3526 
   3527             dh = (DH *)parg;
   3528             if ((new = DHparams_dup(dh)) == NULL) {
   3529                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB);
   3530                 return 0;
   3531             }
   3532             if (cert->dh_tmp != NULL)
   3533                 DH_free(cert->dh_tmp);
   3534             cert->dh_tmp = new;
   3535             return 1;
   3536         }
   3537         /*
   3538          * break;
   3539          */
   3540     case SSL_CTRL_SET_TMP_DH_CB:
   3541         {
   3542             SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3543             return (0);
   3544         }
   3545         break;
   3546 #endif
   3547 #ifndef OPENSSL_NO_ECDH
   3548     case SSL_CTRL_SET_TMP_ECDH:
   3549         {
   3550             EC_KEY *ecdh = NULL;
   3551 
   3552             if (parg == NULL) {
   3553                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB);
   3554                 return 0;
   3555             }
   3556             ecdh = EC_KEY_dup((EC_KEY *)parg);
   3557             if (ecdh == NULL) {
   3558                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_EC_LIB);
   3559                 return 0;
   3560             }
   3561             if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) {
   3562                 if (!EC_KEY_generate_key(ecdh)) {
   3563                     EC_KEY_free(ecdh);
   3564                     SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB);
   3565                     return 0;
   3566                 }
   3567             }
   3568 
   3569             if (cert->ecdh_tmp != NULL) {
   3570                 EC_KEY_free(cert->ecdh_tmp);
   3571             }
   3572             cert->ecdh_tmp = ecdh;
   3573             return 1;
   3574         }
   3575         /* break; */
   3576     case SSL_CTRL_SET_TMP_ECDH_CB:
   3577         {
   3578             SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3579             return (0);
   3580         }
   3581         break;
   3582 #endif                          /* !OPENSSL_NO_ECDH */
   3583 #ifndef OPENSSL_NO_TLSEXT
   3584     case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
   3585         ctx->tlsext_servername_arg = parg;
   3586         break;
   3587     case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
   3588     case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
   3589         {
   3590             unsigned char *keys = parg;
   3591             if (!keys)
   3592                 return 48;
   3593             if (larg != 48) {
   3594                 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
   3595                 return 0;
   3596             }
   3597             if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) {
   3598                 memcpy(ctx->tlsext_tick_key_name, keys, 16);
   3599                 memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
   3600                 memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
   3601             } else {
   3602                 memcpy(keys, ctx->tlsext_tick_key_name, 16);
   3603                 memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
   3604                 memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
   3605             }
   3606             return 1;
   3607         }
   3608 
   3609 # ifdef TLSEXT_TYPE_opaque_prf_input
   3610     case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG:
   3611         ctx->tlsext_opaque_prf_input_callback_arg = parg;
   3612         return 1;
   3613 # endif
   3614 
   3615     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
   3616         ctx->tlsext_status_arg = parg;
   3617         return 1;
   3618         break;
   3619 
   3620 # ifndef OPENSSL_NO_SRP
   3621     case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME:
   3622         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
   3623         if (ctx->srp_ctx.login != NULL)
   3624             OPENSSL_free(ctx->srp_ctx.login);
   3625         ctx->srp_ctx.login = NULL;
   3626         if (parg == NULL)
   3627             break;
   3628         if (strlen((const char *)parg) > 255
   3629             || strlen((const char *)parg) < 1) {
   3630             SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME);
   3631             return 0;
   3632         }
   3633         if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) {
   3634             SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
   3635             return 0;
   3636         }
   3637         break;
   3638     case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD:
   3639         ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
   3640             srp_password_from_info_cb;
   3641         ctx->srp_ctx.info = parg;
   3642         break;
   3643     case SSL_CTRL_SET_SRP_ARG:
   3644         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
   3645         ctx->srp_ctx.SRP_cb_arg = parg;
   3646         break;
   3647 
   3648     case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH:
   3649         ctx->srp_ctx.strength = larg;
   3650         break;
   3651 # endif
   3652 #endif                          /* !OPENSSL_NO_TLSEXT */
   3653 
   3654         /* A Thawte special :-) */
   3655     case SSL_CTRL_EXTRA_CHAIN_CERT:
   3656         if (ctx->extra_certs == NULL) {
   3657             if ((ctx->extra_certs = sk_X509_new_null()) == NULL)
   3658                 return (0);
   3659         }
   3660         sk_X509_push(ctx->extra_certs, (X509 *)parg);
   3661         break;
   3662 
   3663     case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
   3664         *(STACK_OF(X509) **)parg = ctx->extra_certs;
   3665         break;
   3666 
   3667     case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
   3668         if (ctx->extra_certs) {
   3669             sk_X509_pop_free(ctx->extra_certs, X509_free);
   3670             ctx->extra_certs = NULL;
   3671         }
   3672         break;
   3673 
   3674     default:
   3675         return (0);
   3676     }
   3677     return (1);
   3678 }
   3679 
   3680 long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
   3681 {
   3682     CERT *cert;
   3683 
   3684     cert = ctx->cert;
   3685 
   3686     switch (cmd) {
   3687 #ifndef OPENSSL_NO_RSA
   3688     case SSL_CTRL_SET_TMP_RSA_CB:
   3689         {
   3690             cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
   3691         }
   3692         break;
   3693 #endif
   3694 #ifndef OPENSSL_NO_DH
   3695     case SSL_CTRL_SET_TMP_DH_CB:
   3696         {
   3697             cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
   3698         }
   3699         break;
   3700 #endif
   3701 #ifndef OPENSSL_NO_ECDH
   3702     case SSL_CTRL_SET_TMP_ECDH_CB:
   3703         {
   3704             cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
   3705         }
   3706         break;
   3707 #endif
   3708 #ifndef OPENSSL_NO_TLSEXT
   3709     case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
   3710         ctx->tlsext_servername_callback = (int (*)(SSL *, int *, void *))fp;
   3711         break;
   3712 
   3713 # ifdef TLSEXT_TYPE_opaque_prf_input
   3714     case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB:
   3715         ctx->tlsext_opaque_prf_input_callback =
   3716             (int (*)(SSL *, void *, size_t, void *))fp;
   3717         break;
   3718 # endif
   3719 
   3720     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
   3721         ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp;
   3722         break;
   3723 
   3724     case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
   3725         ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *,
   3726                                              unsigned char *,
   3727                                              EVP_CIPHER_CTX *,
   3728                                              HMAC_CTX *, int))fp;
   3729         break;
   3730 
   3731 # ifndef OPENSSL_NO_SRP
   3732     case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB:
   3733         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
   3734         ctx->srp_ctx.SRP_verify_param_callback = (int (*)(SSL *, void *))fp;
   3735         break;
   3736     case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB:
   3737         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
   3738         ctx->srp_ctx.TLS_ext_srp_username_callback =
   3739             (int (*)(SSL *, int *, void *))fp;
   3740         break;
   3741     case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB:
   3742         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
   3743         ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
   3744             (char *(*)(SSL *, void *))fp;
   3745         break;
   3746 # endif
   3747 #endif
   3748 
   3749     default:
   3750         return (0);
   3751     }
   3752     return (1);
   3753 }
   3754 
   3755 /*
   3756  * This function needs to check if the ciphers required are actually
   3757  * available
   3758  */
   3759 const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
   3760 {
   3761     SSL_CIPHER c;
   3762     const SSL_CIPHER *cp;
   3763     unsigned long id;
   3764 
   3765     id = 0x03000000L | ((unsigned long)p[0] << 8L) | (unsigned long)p[1];
   3766     c.id = id;
   3767     cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
   3768 #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES
   3769     if (cp == NULL)
   3770         fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]);
   3771 #endif
   3772     if (cp == NULL || cp->valid == 0)
   3773         return NULL;
   3774     else
   3775         return cp;
   3776 }
   3777 
   3778 int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
   3779 {
   3780     long l;
   3781 
   3782     if (p != NULL) {
   3783         l = c->id;
   3784         if ((l & 0xff000000) != 0x03000000)
   3785             return (0);
   3786         p[0] = ((unsigned char)(l >> 8L)) & 0xFF;
   3787         p[1] = ((unsigned char)(l)) & 0xFF;
   3788     }
   3789     return (2);
   3790 }
   3791 
   3792 SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
   3793                                STACK_OF(SSL_CIPHER) *srvr)
   3794 {
   3795     SSL_CIPHER *c, *ret = NULL;
   3796     STACK_OF(SSL_CIPHER) *prio, *allow;
   3797     int i, ii, ok;
   3798 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC)
   3799     unsigned int j;
   3800     int ec_ok, ec_nid;
   3801     unsigned char ec_search1 = 0, ec_search2 = 0;
   3802 #endif
   3803     CERT *cert;
   3804     unsigned long alg_k, alg_a, mask_k, mask_a, emask_k, emask_a;
   3805 
   3806     /* Let's see which ciphers we can support */
   3807     cert = s->cert;
   3808 
   3809 #if 0
   3810     /*
   3811      * Do not set the compare functions, because this may lead to a
   3812      * reordering by "id". We want to keep the original ordering. We may pay
   3813      * a price in performance during sk_SSL_CIPHER_find(), but would have to
   3814      * pay with the price of sk_SSL_CIPHER_dup().
   3815      */
   3816     sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
   3817     sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
   3818 #endif
   3819 
   3820 #ifdef CIPHER_DEBUG
   3821     fprintf(stderr, "Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr),
   3822             (void *)srvr);
   3823     for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) {
   3824         c = sk_SSL_CIPHER_value(srvr, i);
   3825         fprintf(stderr, "%p:%s\n", (void *)c, c->name);
   3826     }
   3827     fprintf(stderr, "Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt),
   3828             (void *)clnt);
   3829     for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) {
   3830         c = sk_SSL_CIPHER_value(clnt, i);
   3831         fprintf(stderr, "%p:%s\n", (void *)c, c->name);
   3832     }
   3833 #endif
   3834 
   3835     if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
   3836         prio = srvr;
   3837         allow = clnt;
   3838     } else {
   3839         prio = clnt;
   3840         allow = srvr;
   3841     }
   3842 
   3843     for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
   3844         c = sk_SSL_CIPHER_value(prio, i);
   3845 
   3846         /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */
   3847         if ((c->algorithm_ssl & SSL_TLSV1_2) &&
   3848             (TLS1_get_version(s) < TLS1_2_VERSION))
   3849             continue;
   3850 
   3851         ssl_set_cert_masks(cert, c);
   3852         mask_k = cert->mask_k;
   3853         mask_a = cert->mask_a;
   3854         emask_k = cert->export_mask_k;
   3855         emask_a = cert->export_mask_a;
   3856 #ifndef OPENSSL_NO_SRP
   3857         if (s->srp_ctx.srp_Mask & SSL_kSRP) {
   3858             mask_k |= SSL_kSRP;
   3859             emask_k |= SSL_kSRP;
   3860             mask_a |= SSL_aSRP;
   3861             emask_a |= SSL_aSRP;
   3862         }
   3863 #endif
   3864 
   3865 #ifdef KSSL_DEBUG
   3866         /*
   3867          * fprintf(stderr,"ssl3_choose_cipher %d alg= %lx\n",
   3868          * i,c->algorithms);
   3869          */
   3870 #endif                          /* KSSL_DEBUG */
   3871 
   3872         alg_k = c->algorithm_mkey;
   3873         alg_a = c->algorithm_auth;
   3874 
   3875 #ifndef OPENSSL_NO_KRB5
   3876         if (alg_k & SSL_kKRB5) {
   3877             if (!kssl_keytab_is_available(s->kssl_ctx))
   3878                 continue;
   3879         }
   3880 #endif                          /* OPENSSL_NO_KRB5 */
   3881 #ifndef OPENSSL_NO_PSK
   3882         /* with PSK there must be server callback set */
   3883         if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)
   3884             continue;
   3885 #endif                          /* OPENSSL_NO_PSK */
   3886 
   3887         if (SSL_C_IS_EXPORT(c)) {
   3888             ok = (alg_k & emask_k) && (alg_a & emask_a);
   3889 #ifdef CIPHER_DEBUG
   3890             fprintf(stderr, "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",
   3891                     ok, alg_k, alg_a, emask_k, emask_a, (void *)c, c->name);
   3892 #endif
   3893         } else {
   3894             ok = (alg_k & mask_k) && (alg_a & mask_a);
   3895 #ifdef CIPHER_DEBUG
   3896             fprintf(stderr, "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n", ok, alg_k,
   3897                     alg_a, mask_k, mask_a, (void *)c, c->name);
   3898 #endif
   3899         }
   3900 
   3901 #ifndef OPENSSL_NO_TLSEXT
   3902 # ifndef OPENSSL_NO_EC
   3903         if (
   3904                /*
   3905                 * if we are considering an ECC cipher suite that uses our
   3906                 * certificate
   3907                 */
   3908                (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
   3909                /* and we have an ECC certificate */
   3910                && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
   3911                /*
   3912                 * and the client specified a Supported Point Formats
   3913                 * extension
   3914                 */
   3915                && ((s->session->tlsext_ecpointformatlist_length > 0)
   3916                    && (s->session->tlsext_ecpointformatlist != NULL))
   3917                /* and our certificate's point is compressed */
   3918                && ((s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL)
   3919                    && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key !=
   3920                        NULL)
   3921                    && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->
   3922                        key->public_key != NULL)
   3923                    && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->
   3924                        key->public_key->data != NULL)
   3925                    &&
   3926                    ((*
   3927                      (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->
   3928                       key->public_key->data) == POINT_CONVERSION_COMPRESSED)
   3929                     ||
   3930                     (*
   3931                      (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->
   3932                       key->public_key->data) ==
   3933                      POINT_CONVERSION_COMPRESSED + 1)
   3934                    )
   3935                )
   3936             ) {
   3937             ec_ok = 0;
   3938             /*
   3939              * if our certificate's curve is over a field type that the
   3940              * client does not support then do not allow this cipher suite to
   3941              * be negotiated
   3942              */
   3943             if ((s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)
   3944                 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group !=
   3945                     NULL)
   3946                 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->
   3947                     group->meth != NULL)
   3948                 &&
   3949                 (EC_METHOD_get_field_type
   3950                  (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->
   3951                   group->meth) == NID_X9_62_prime_field)
   3952                 ) {
   3953                 for (j = 0; j < s->session->tlsext_ecpointformatlist_length;
   3954                      j++) {
   3955                     if (s->session->tlsext_ecpointformatlist[j] ==
   3956                         TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) {
   3957                         ec_ok = 1;
   3958                         break;
   3959                     }
   3960                 }
   3961             } else
   3962                 if (EC_METHOD_get_field_type
   3963                     (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->
   3964                      group->meth) == NID_X9_62_characteristic_two_field) {
   3965                 for (j = 0; j < s->session->tlsext_ecpointformatlist_length;
   3966                      j++) {
   3967                     if (s->session->tlsext_ecpointformatlist[j] ==
   3968                         TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) {
   3969                         ec_ok = 1;
   3970                         break;
   3971                     }
   3972                 }
   3973             }
   3974             ok = ok && ec_ok;
   3975         }
   3976         if (
   3977                /*
   3978                 * if we are considering an ECC cipher suite that uses our
   3979                 * certificate
   3980                 */
   3981                (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
   3982                /* and we have an ECC certificate */
   3983                && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
   3984                /*
   3985                 * and the client specified an EllipticCurves extension
   3986                 */
   3987                && ((s->session->tlsext_ellipticcurvelist_length > 0)
   3988                    && (s->session->tlsext_ellipticcurvelist != NULL))
   3989             ) {
   3990             ec_ok = 0;
   3991             if ((s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)
   3992                 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group !=
   3993                     NULL)
   3994                 ) {
   3995                 ec_nid =
   3996                     EC_GROUP_get_curve_name(s->cert->
   3997                                             pkeys[SSL_PKEY_ECC].privatekey->
   3998                                             pkey.ec->group);
   3999                 if ((ec_nid == 0)
   4000                     && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.
   4001                         ec->group->meth != NULL)
   4002                     ) {
   4003                     if (EC_METHOD_get_field_type
   4004                         (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.
   4005                          ec->group->meth) == NID_X9_62_prime_field) {
   4006                         ec_search1 = 0xFF;
   4007                         ec_search2 = 0x01;
   4008                     } else
   4009                         if (EC_METHOD_get_field_type
   4010                             (s->cert->pkeys[SSL_PKEY_ECC].privatekey->
   4011                              pkey.ec->group->meth) ==
   4012                             NID_X9_62_characteristic_two_field) {
   4013                         ec_search1 = 0xFF;
   4014                         ec_search2 = 0x02;
   4015                     }
   4016                 } else {
   4017                     ec_search1 = 0x00;
   4018                     ec_search2 = tls1_ec_nid2curve_id(ec_nid);
   4019                 }
   4020                 if ((ec_search1 != 0) || (ec_search2 != 0)) {
   4021                     for (j = 0;
   4022                          j < s->session->tlsext_ellipticcurvelist_length / 2;
   4023                          j++) {
   4024                         if ((s->session->tlsext_ellipticcurvelist[2 * j] ==
   4025                              ec_search1)
   4026                             && (s->session->tlsext_ellipticcurvelist[2 * j +
   4027                                                                      1] ==
   4028                                 ec_search2)) {
   4029                             ec_ok = 1;
   4030                             break;
   4031                         }
   4032                     }
   4033                 }
   4034             }
   4035             ok = ok && ec_ok;
   4036         }
   4037 #  ifndef OPENSSL_NO_ECDH
   4038         if (
   4039                /*
   4040                 * if we are considering an ECC cipher suite that uses an
   4041                 * ephemeral EC key
   4042                 */
   4043                (alg_k & SSL_kEECDH)
   4044                /* and we have an ephemeral EC key */
   4045                && (s->cert->ecdh_tmp != NULL)
   4046                /*
   4047                 * and the client specified an EllipticCurves extension
   4048                 */
   4049                && ((s->session->tlsext_ellipticcurvelist_length > 0)
   4050                    && (s->session->tlsext_ellipticcurvelist != NULL))
   4051             ) {
   4052             ec_ok = 0;
   4053             if (s->cert->ecdh_tmp->group != NULL) {
   4054                 ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group);
   4055                 if ((ec_nid == 0)
   4056                     && (s->cert->ecdh_tmp->group->meth != NULL)
   4057                     ) {
   4058                     if (EC_METHOD_get_field_type
   4059                         (s->cert->ecdh_tmp->group->meth) ==
   4060                         NID_X9_62_prime_field) {
   4061                         ec_search1 = 0xFF;
   4062                         ec_search2 = 0x01;
   4063                     } else
   4064                         if (EC_METHOD_get_field_type
   4065                             (s->cert->ecdh_tmp->group->meth) ==
   4066                             NID_X9_62_characteristic_two_field) {
   4067                         ec_search1 = 0xFF;
   4068                         ec_search2 = 0x02;
   4069                     }
   4070                 } else {
   4071                     ec_search1 = 0x00;
   4072                     ec_search2 = tls1_ec_nid2curve_id(ec_nid);
   4073                 }
   4074                 if ((ec_search1 != 0) || (ec_search2 != 0)) {
   4075                     for (j = 0;
   4076                          j < s->session->tlsext_ellipticcurvelist_length / 2;
   4077                          j++) {
   4078                         if ((s->session->tlsext_ellipticcurvelist[2 * j] ==
   4079                              ec_search1)
   4080                             && (s->session->tlsext_ellipticcurvelist[2 * j +
   4081                                                                      1] ==
   4082                                 ec_search2)) {
   4083                             ec_ok = 1;
   4084                             break;
   4085                         }
   4086                     }
   4087                 }
   4088             }
   4089             ok = ok && ec_ok;
   4090         }
   4091 #  endif                        /* OPENSSL_NO_ECDH */
   4092 # endif                         /* OPENSSL_NO_EC */
   4093 #endif                          /* OPENSSL_NO_TLSEXT */
   4094 
   4095         if (!ok)
   4096             continue;
   4097         ii = sk_SSL_CIPHER_find(allow, c);
   4098         if (ii >= 0) {
   4099 #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT)
   4100             if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA)
   4101                 && s->s3->is_probably_safari) {
   4102                 if (!ret)
   4103                     ret = sk_SSL_CIPHER_value(allow, ii);
   4104                 continue;
   4105             }
   4106 #endif
   4107             ret = sk_SSL_CIPHER_value(allow, ii);
   4108             break;
   4109         }
   4110     }
   4111     return (ret);
   4112 }
   4113 
   4114 int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
   4115 {
   4116     int ret = 0;
   4117     unsigned long alg_k;
   4118 
   4119     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
   4120 
   4121 #ifndef OPENSSL_NO_GOST
   4122     if (s->version >= TLS1_VERSION) {
   4123         if (alg_k & SSL_kGOST) {
   4124             p[ret++] = TLS_CT_GOST94_SIGN;
   4125             p[ret++] = TLS_CT_GOST01_SIGN;
   4126             return (ret);
   4127         }
   4128     }
   4129 #endif
   4130 
   4131 #ifndef OPENSSL_NO_DH
   4132     if (alg_k & (SSL_kDHr | SSL_kEDH)) {
   4133 # ifndef OPENSSL_NO_RSA
   4134         p[ret++] = SSL3_CT_RSA_FIXED_DH;
   4135 # endif
   4136 # ifndef OPENSSL_NO_DSA
   4137         p[ret++] = SSL3_CT_DSS_FIXED_DH;
   4138 # endif
   4139     }
   4140     if ((s->version == SSL3_VERSION) &&
   4141         (alg_k & (SSL_kEDH | SSL_kDHd | SSL_kDHr))) {
   4142 # ifndef OPENSSL_NO_RSA
   4143         p[ret++] = SSL3_CT_RSA_EPHEMERAL_DH;
   4144 # endif
   4145 # ifndef OPENSSL_NO_DSA
   4146         p[ret++] = SSL3_CT_DSS_EPHEMERAL_DH;
   4147 # endif
   4148     }
   4149 #endif                          /* !OPENSSL_NO_DH */
   4150 #ifndef OPENSSL_NO_RSA
   4151     p[ret++] = SSL3_CT_RSA_SIGN;
   4152 #endif
   4153 #ifndef OPENSSL_NO_DSA
   4154     p[ret++] = SSL3_CT_DSS_SIGN;
   4155 #endif
   4156 #ifndef OPENSSL_NO_ECDH
   4157     if ((alg_k & (SSL_kECDHr | SSL_kECDHe)) && (s->version >= TLS1_VERSION)) {
   4158         p[ret++] = TLS_CT_RSA_FIXED_ECDH;
   4159         p[ret++] = TLS_CT_ECDSA_FIXED_ECDH;
   4160     }
   4161 #endif
   4162 
   4163 #ifndef OPENSSL_NO_ECDSA
   4164     /*
   4165      * ECDSA certs can be used with RSA cipher suites as well so we don't
   4166      * need to check for SSL_kECDH or SSL_kEECDH
   4167      */
   4168     if (s->version >= TLS1_VERSION) {
   4169         p[ret++] = TLS_CT_ECDSA_SIGN;
   4170     }
   4171 #endif
   4172     return (ret);
   4173 }
   4174 
   4175 int ssl3_shutdown(SSL *s)
   4176 {
   4177     int ret;
   4178 
   4179     /*
   4180      * Don't do anything much if we have not done the handshake or we don't
   4181      * want to send messages :-)
   4182      */
   4183     if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) {
   4184         s->shutdown = (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
   4185         return (1);
   4186     }
   4187 
   4188     if (!(s->shutdown & SSL_SENT_SHUTDOWN)) {
   4189         s->shutdown |= SSL_SENT_SHUTDOWN;
   4190 #if 1
   4191         ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
   4192 #endif
   4193         /*
   4194          * our shutdown alert has been sent now, and if it still needs to be
   4195          * written, s->s3->alert_dispatch will be true
   4196          */
   4197         if (s->s3->alert_dispatch)
   4198             return (-1);        /* return WANT_WRITE */
   4199     } else if (s->s3->alert_dispatch) {
   4200         /* resend it if not sent */
   4201 #if 1
   4202         ret = s->method->ssl_dispatch_alert(s);
   4203         if (ret == -1) {
   4204             /*
   4205              * we only get to return -1 here the 2nd/Nth invocation, we must
   4206              * have already signalled return 0 upon a previous invoation,
   4207              * return WANT_WRITE
   4208              */
   4209             return (ret);
   4210         }
   4211 #endif
   4212     } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
   4213         /*
   4214          * If we are waiting for a close from our peer, we are closed
   4215          */
   4216         s->method->ssl_read_bytes(s, 0, NULL, 0, 0);
   4217         if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
   4218             return (-1);        /* return WANT_READ */
   4219         }
   4220     }
   4221 
   4222     if ((s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN)) &&
   4223         !s->s3->alert_dispatch)
   4224         return (1);
   4225     else
   4226         return (0);
   4227 }
   4228 
   4229 int ssl3_write(SSL *s, const void *buf, int len)
   4230 {
   4231     int ret, n;
   4232 
   4233 #if 0
   4234     if (s->shutdown & SSL_SEND_SHUTDOWN) {
   4235         s->rwstate = SSL_NOTHING;
   4236         return (0);
   4237     }
   4238 #endif
   4239     clear_sys_error();
   4240     if (s->s3->renegotiate)
   4241         ssl3_renegotiate_check(s);
   4242 
   4243     /*
   4244      * This is an experimental flag that sends the last handshake message in
   4245      * the same packet as the first use data - used to see if it helps the
   4246      * TCP protocol during session-id reuse
   4247      */
   4248     /* The second test is because the buffer may have been removed */
   4249     if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) {
   4250         /* First time through, we write into the buffer */
   4251         if (s->s3->delay_buf_pop_ret == 0) {
   4252             ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len);
   4253             if (ret <= 0)
   4254                 return (ret);
   4255 
   4256             s->s3->delay_buf_pop_ret = ret;
   4257         }
   4258 
   4259         s->rwstate = SSL_WRITING;
   4260         n = BIO_flush(s->wbio);
   4261         if (n <= 0)
   4262             return (n);
   4263         s->rwstate = SSL_NOTHING;
   4264 
   4265         /* We have flushed the buffer, so remove it */
   4266         ssl_free_wbio_buffer(s);
   4267         s->s3->flags &= ~SSL3_FLAGS_POP_BUFFER;
   4268 
   4269         ret = s->s3->delay_buf_pop_ret;
   4270         s->s3->delay_buf_pop_ret = 0;
   4271     } else {
   4272         ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA,
   4273                                          buf, len);
   4274         if (ret <= 0)
   4275             return (ret);
   4276     }
   4277 
   4278     return (ret);
   4279 }
   4280 
   4281 static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
   4282 {
   4283     int ret;
   4284 
   4285     clear_sys_error();
   4286     if (s->s3->renegotiate)
   4287         ssl3_renegotiate_check(s);
   4288     s->s3->in_read_app_data = 1;
   4289     ret =
   4290         s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
   4291                                   peek);
   4292     if ((ret == -1) && (s->s3->in_read_app_data == 2)) {
   4293         /*
   4294          * ssl3_read_bytes decided to call s->handshake_func, which called
   4295          * ssl3_read_bytes to read handshake data. However, ssl3_read_bytes
   4296          * actually found application data and thinks that application data
   4297          * makes sense here; so disable handshake processing and try to read
   4298          * application data again.
   4299          */
   4300         s->in_handshake++;
   4301         ret =
   4302             s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
   4303                                       peek);
   4304         s->in_handshake--;
   4305     } else
   4306         s->s3->in_read_app_data = 0;
   4307 
   4308     return (ret);
   4309 }
   4310 
   4311 int ssl3_read(SSL *s, void *buf, int len)
   4312 {
   4313     return ssl3_read_internal(s, buf, len, 0);
   4314 }
   4315 
   4316 int ssl3_peek(SSL *s, void *buf, int len)
   4317 {
   4318     return ssl3_read_internal(s, buf, len, 1);
   4319 }
   4320 
   4321 int ssl3_renegotiate(SSL *s)
   4322 {
   4323     if (s->handshake_func == NULL)
   4324         return (1);
   4325 
   4326     if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
   4327         return (0);
   4328 
   4329     s->s3->renegotiate = 1;
   4330     return (1);
   4331 }
   4332 
   4333 int ssl3_renegotiate_check(SSL *s)
   4334 {
   4335     int ret = 0;
   4336 
   4337     if (s->s3->renegotiate) {
   4338         if ((s->s3->rbuf.left == 0) &&
   4339             (s->s3->wbuf.left == 0) && !SSL_in_init(s)) {
   4340             /*
   4341              * if we are the server, and we have sent a 'RENEGOTIATE'
   4342              * message, we need to go to SSL_ST_ACCEPT.
   4343              */
   4344             /* SSL_ST_ACCEPT */
   4345             s->state = SSL_ST_RENEGOTIATE;
   4346             s->s3->renegotiate = 0;
   4347             s->s3->num_renegotiations++;
   4348             s->s3->total_renegotiations++;
   4349             ret = 1;
   4350         }
   4351     }
   4352     return (ret);
   4353 }
   4354 
   4355 /*
   4356  * If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch
   4357  * to new SHA256 PRF and handshake macs
   4358  */
   4359 long ssl_get_algorithm2(SSL *s)
   4360 {
   4361     long alg2 = s->s3->tmp.new_cipher->algorithm2;
   4362     if (s->method->version == TLS1_2_VERSION &&
   4363         alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF))
   4364         return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
   4365     return alg2;
   4366 }
   4367