Home | History | Annotate | Download | only in ssl
      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-2006 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 #include <stdio.h>
    126 #include <openssl/objects.h>
    127 #include "ssl_locl.h"
    128 #include "kssl_lcl.h"
    129 #include <openssl/md5.h>
    130 #ifndef OPENSSL_NO_DH
    131 #include <openssl/dh.h>
    132 #endif
    133 #include <openssl/pq_compat.h>
    134 
    135 const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT;
    136 
    137 #define SSL3_NUM_CIPHERS	(sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
    138 
    139 /* list of available SSLv3 ciphers (sorted by id) */
    140 OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
    141 /* The RSA ciphers */
    142 /* Cipher 01 */
    143 	{
    144 	1,
    145 	SSL3_TXT_RSA_NULL_MD5,
    146 	SSL3_CK_RSA_NULL_MD5,
    147 	SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_MD5|SSL_SSLV3,
    148 	SSL_NOT_EXP|SSL_STRONG_NONE,
    149 	0,
    150 	0,
    151 	0,
    152 	SSL_ALL_CIPHERS,
    153 	SSL_ALL_STRENGTHS,
    154 	},
    155 /* Cipher 02 */
    156 	{
    157 	1,
    158 	SSL3_TXT_RSA_NULL_SHA,
    159 	SSL3_CK_RSA_NULL_SHA,
    160 	SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_SHA1|SSL_SSLV3,
    161 	SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
    162 	0,
    163 	0,
    164 	0,
    165 	SSL_ALL_CIPHERS,
    166 	SSL_ALL_STRENGTHS,
    167 	},
    168 /* Cipher 03 */
    169 	{
    170 	1,
    171 	SSL3_TXT_RSA_RC4_40_MD5,
    172 	SSL3_CK_RSA_RC4_40_MD5,
    173 	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
    174 	SSL_EXPORT|SSL_EXP40,
    175 	0,
    176 	40,
    177 	128,
    178 	SSL_ALL_CIPHERS,
    179 	SSL_ALL_STRENGTHS,
    180 	},
    181 /* Cipher 04 */
    182 	{
    183 	1,
    184 	SSL3_TXT_RSA_RC4_128_MD5,
    185 	SSL3_CK_RSA_RC4_128_MD5,
    186 	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5|SSL_SSLV3,
    187 	SSL_NOT_EXP|SSL_MEDIUM,
    188 	0,
    189 	128,
    190 	128,
    191 	SSL_ALL_CIPHERS,
    192 	SSL_ALL_STRENGTHS,
    193 	},
    194 /* Cipher 05 */
    195 	{
    196 	1,
    197 	SSL3_TXT_RSA_RC4_128_SHA,
    198 	SSL3_CK_RSA_RC4_128_SHA,
    199 	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_SHA1|SSL_SSLV3,
    200 	SSL_NOT_EXP|SSL_MEDIUM,
    201 	0,
    202 	128,
    203 	128,
    204 	SSL_ALL_CIPHERS,
    205 	SSL_ALL_STRENGTHS,
    206 	},
    207 /* Cipher 06 */
    208 	{
    209 	1,
    210 	SSL3_TXT_RSA_RC2_40_MD5,
    211 	SSL3_CK_RSA_RC2_40_MD5,
    212 	SSL_kRSA|SSL_aRSA|SSL_RC2  |SSL_MD5 |SSL_SSLV3,
    213 	SSL_EXPORT|SSL_EXP40,
    214 	0,
    215 	40,
    216 	128,
    217 	SSL_ALL_CIPHERS,
    218 	SSL_ALL_STRENGTHS,
    219 	},
    220 /* Cipher 07 */
    221 #ifndef OPENSSL_NO_IDEA
    222 	{
    223 	1,
    224 	SSL3_TXT_RSA_IDEA_128_SHA,
    225 	SSL3_CK_RSA_IDEA_128_SHA,
    226 	SSL_kRSA|SSL_aRSA|SSL_IDEA |SSL_SHA1|SSL_SSLV3,
    227 	SSL_NOT_EXP|SSL_MEDIUM,
    228 	0,
    229 	128,
    230 	128,
    231 	SSL_ALL_CIPHERS,
    232 	SSL_ALL_STRENGTHS,
    233 	},
    234 #endif
    235 /* Cipher 08 */
    236 	{
    237 	1,
    238 	SSL3_TXT_RSA_DES_40_CBC_SHA,
    239 	SSL3_CK_RSA_DES_40_CBC_SHA,
    240 	SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3,
    241 	SSL_EXPORT|SSL_EXP40,
    242 	0,
    243 	40,
    244 	56,
    245 	SSL_ALL_CIPHERS,
    246 	SSL_ALL_STRENGTHS,
    247 	},
    248 /* Cipher 09 */
    249 	{
    250 	1,
    251 	SSL3_TXT_RSA_DES_64_CBC_SHA,
    252 	SSL3_CK_RSA_DES_64_CBC_SHA,
    253 	SSL_kRSA|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_SSLV3,
    254 	SSL_NOT_EXP|SSL_LOW,
    255 	0,
    256 	56,
    257 	56,
    258 	SSL_ALL_CIPHERS,
    259 	SSL_ALL_STRENGTHS,
    260 	},
    261 /* Cipher 0A */
    262 	{
    263 	1,
    264 	SSL3_TXT_RSA_DES_192_CBC3_SHA,
    265 	SSL3_CK_RSA_DES_192_CBC3_SHA,
    266 	SSL_kRSA|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3,
    267 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    268 	0,
    269 	168,
    270 	168,
    271 	SSL_ALL_CIPHERS,
    272 	SSL_ALL_STRENGTHS,
    273 	},
    274 /* The DH ciphers */
    275 /* Cipher 0B */
    276 	{
    277 	0,
    278 	SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
    279 	SSL3_CK_DH_DSS_DES_40_CBC_SHA,
    280 	SSL_kDHd |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3,
    281 	SSL_EXPORT|SSL_EXP40,
    282 	0,
    283 	40,
    284 	56,
    285 	SSL_ALL_CIPHERS,
    286 	SSL_ALL_STRENGTHS,
    287 	},
    288 /* Cipher 0C */
    289 	{
    290 	0,
    291 	SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
    292 	SSL3_CK_DH_DSS_DES_64_CBC_SHA,
    293 	SSL_kDHd |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_SSLV3,
    294 	SSL_NOT_EXP|SSL_LOW,
    295 	0,
    296 	56,
    297 	56,
    298 	SSL_ALL_CIPHERS,
    299 	SSL_ALL_STRENGTHS,
    300 	},
    301 /* Cipher 0D */
    302 	{
    303 	0,
    304 	SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
    305 	SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
    306 	SSL_kDHd |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3,
    307 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    308 	0,
    309 	168,
    310 	168,
    311 	SSL_ALL_CIPHERS,
    312 	SSL_ALL_STRENGTHS,
    313 	},
    314 /* Cipher 0E */
    315 	{
    316 	0,
    317 	SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
    318 	SSL3_CK_DH_RSA_DES_40_CBC_SHA,
    319 	SSL_kDHr |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3,
    320 	SSL_EXPORT|SSL_EXP40,
    321 	0,
    322 	40,
    323 	56,
    324 	SSL_ALL_CIPHERS,
    325 	SSL_ALL_STRENGTHS,
    326 	},
    327 /* Cipher 0F */
    328 	{
    329 	0,
    330 	SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
    331 	SSL3_CK_DH_RSA_DES_64_CBC_SHA,
    332 	SSL_kDHr |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_SSLV3,
    333 	SSL_NOT_EXP|SSL_LOW,
    334 	0,
    335 	56,
    336 	56,
    337 	SSL_ALL_CIPHERS,
    338 	SSL_ALL_STRENGTHS,
    339 	},
    340 /* Cipher 10 */
    341 	{
    342 	0,
    343 	SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
    344 	SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
    345 	SSL_kDHr |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3,
    346 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    347 	0,
    348 	168,
    349 	168,
    350 	SSL_ALL_CIPHERS,
    351 	SSL_ALL_STRENGTHS,
    352 	},
    353 
    354 /* The Ephemeral DH ciphers */
    355 /* Cipher 11 */
    356 	{
    357 	1,
    358 	SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
    359 	SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
    360 	SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA1|SSL_SSLV3,
    361 	SSL_EXPORT|SSL_EXP40,
    362 	0,
    363 	40,
    364 	56,
    365 	SSL_ALL_CIPHERS,
    366 	SSL_ALL_STRENGTHS,
    367 	},
    368 /* Cipher 12 */
    369 	{
    370 	1,
    371 	SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
    372 	SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
    373 	SSL_kEDH|SSL_aDSS|SSL_DES  |SSL_SHA1|SSL_SSLV3,
    374 	SSL_NOT_EXP|SSL_LOW,
    375 	0,
    376 	56,
    377 	56,
    378 	SSL_ALL_CIPHERS,
    379 	SSL_ALL_STRENGTHS,
    380 	},
    381 /* Cipher 13 */
    382 	{
    383 	1,
    384 	SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
    385 	SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
    386 	SSL_kEDH|SSL_aDSS|SSL_3DES |SSL_SHA1|SSL_SSLV3,
    387 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    388 	0,
    389 	168,
    390 	168,
    391 	SSL_ALL_CIPHERS,
    392 	SSL_ALL_STRENGTHS,
    393 	},
    394 /* Cipher 14 */
    395 	{
    396 	1,
    397 	SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
    398 	SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
    399 	SSL_kEDH|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3,
    400 	SSL_EXPORT|SSL_EXP40,
    401 	0,
    402 	40,
    403 	56,
    404 	SSL_ALL_CIPHERS,
    405 	SSL_ALL_STRENGTHS,
    406 	},
    407 /* Cipher 15 */
    408 	{
    409 	1,
    410 	SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
    411 	SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
    412 	SSL_kEDH|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_SSLV3,
    413 	SSL_NOT_EXP|SSL_LOW,
    414 	0,
    415 	56,
    416 	56,
    417 	SSL_ALL_CIPHERS,
    418 	SSL_ALL_STRENGTHS,
    419 	},
    420 /* Cipher 16 */
    421 	{
    422 	1,
    423 	SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
    424 	SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
    425 	SSL_kEDH|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3,
    426 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    427 	0,
    428 	168,
    429 	168,
    430 	SSL_ALL_CIPHERS,
    431 	SSL_ALL_STRENGTHS,
    432 	},
    433 /* Cipher 17 */
    434 	{
    435 	1,
    436 	SSL3_TXT_ADH_RC4_40_MD5,
    437 	SSL3_CK_ADH_RC4_40_MD5,
    438 	SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
    439 	SSL_EXPORT|SSL_EXP40,
    440 	0,
    441 	40,
    442 	128,
    443 	SSL_ALL_CIPHERS,
    444 	SSL_ALL_STRENGTHS,
    445 	},
    446 /* Cipher 18 */
    447 	{
    448 	1,
    449 	SSL3_TXT_ADH_RC4_128_MD5,
    450 	SSL3_CK_ADH_RC4_128_MD5,
    451 	SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
    452 	SSL_NOT_EXP|SSL_MEDIUM,
    453 	0,
    454 	128,
    455 	128,
    456 	SSL_ALL_CIPHERS,
    457 	SSL_ALL_STRENGTHS,
    458 	},
    459 /* Cipher 19 */
    460 	{
    461 	1,
    462 	SSL3_TXT_ADH_DES_40_CBC_SHA,
    463 	SSL3_CK_ADH_DES_40_CBC_SHA,
    464 	SSL_kEDH |SSL_aNULL|SSL_DES|SSL_SHA1|SSL_SSLV3,
    465 	SSL_EXPORT|SSL_EXP40,
    466 	0,
    467 	40,
    468 	128,
    469 	SSL_ALL_CIPHERS,
    470 	SSL_ALL_STRENGTHS,
    471 	},
    472 /* Cipher 1A */
    473 	{
    474 	1,
    475 	SSL3_TXT_ADH_DES_64_CBC_SHA,
    476 	SSL3_CK_ADH_DES_64_CBC_SHA,
    477 	SSL_kEDH |SSL_aNULL|SSL_DES  |SSL_SHA1|SSL_SSLV3,
    478 	SSL_NOT_EXP|SSL_LOW,
    479 	0,
    480 	56,
    481 	56,
    482 	SSL_ALL_CIPHERS,
    483 	SSL_ALL_STRENGTHS,
    484 	},
    485 /* Cipher 1B */
    486 	{
    487 	1,
    488 	SSL3_TXT_ADH_DES_192_CBC_SHA,
    489 	SSL3_CK_ADH_DES_192_CBC_SHA,
    490 	SSL_kEDH |SSL_aNULL|SSL_3DES |SSL_SHA1|SSL_SSLV3,
    491 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    492 	0,
    493 	168,
    494 	168,
    495 	SSL_ALL_CIPHERS,
    496 	SSL_ALL_STRENGTHS,
    497 	},
    498 
    499 /* Fortezza */
    500 /* Cipher 1C */
    501 	{
    502 	0,
    503 	SSL3_TXT_FZA_DMS_NULL_SHA,
    504 	SSL3_CK_FZA_DMS_NULL_SHA,
    505 	SSL_kFZA|SSL_aFZA |SSL_eNULL |SSL_SHA1|SSL_SSLV3,
    506 	SSL_NOT_EXP|SSL_STRONG_NONE,
    507 	0,
    508 	0,
    509 	0,
    510 	SSL_ALL_CIPHERS,
    511 	SSL_ALL_STRENGTHS,
    512 	},
    513 
    514 /* Cipher 1D */
    515 	{
    516 	0,
    517 	SSL3_TXT_FZA_DMS_FZA_SHA,
    518 	SSL3_CK_FZA_DMS_FZA_SHA,
    519 	SSL_kFZA|SSL_aFZA |SSL_eFZA |SSL_SHA1|SSL_SSLV3,
    520 	SSL_NOT_EXP|SSL_STRONG_NONE,
    521 	0,
    522 	0,
    523 	0,
    524 	SSL_ALL_CIPHERS,
    525 	SSL_ALL_STRENGTHS,
    526 	},
    527 
    528 #if 0
    529 /* Cipher 1E */
    530 	{
    531 	0,
    532 	SSL3_TXT_FZA_DMS_RC4_SHA,
    533 	SSL3_CK_FZA_DMS_RC4_SHA,
    534 	SSL_kFZA|SSL_aFZA |SSL_RC4  |SSL_SHA1|SSL_SSLV3,
    535 	SSL_NOT_EXP|SSL_MEDIUM,
    536 	0,
    537 	128,
    538 	128,
    539 	SSL_ALL_CIPHERS,
    540 	SSL_ALL_STRENGTHS,
    541 	},
    542 #endif
    543 
    544 #ifndef OPENSSL_NO_KRB5
    545 /* The Kerberos ciphers */
    546 /* Cipher 1E */
    547 	{
    548 	1,
    549 	SSL3_TXT_KRB5_DES_64_CBC_SHA,
    550 	SSL3_CK_KRB5_DES_64_CBC_SHA,
    551 	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_SHA1   |SSL_SSLV3,
    552 	SSL_NOT_EXP|SSL_LOW,
    553 	0,
    554 	56,
    555 	56,
    556 	SSL_ALL_CIPHERS,
    557 	SSL_ALL_STRENGTHS,
    558 	},
    559 
    560 /* Cipher 1F */
    561 	{
    562 	1,
    563 	SSL3_TXT_KRB5_DES_192_CBC3_SHA,
    564 	SSL3_CK_KRB5_DES_192_CBC3_SHA,
    565 	SSL_kKRB5|SSL_aKRB5|  SSL_3DES|SSL_SHA1  |SSL_SSLV3,
    566 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    567 	0,
    568 	168,
    569 	168,
    570 	SSL_ALL_CIPHERS,
    571 	SSL_ALL_STRENGTHS,
    572 	},
    573 
    574 /* Cipher 20 */
    575 	{
    576 	1,
    577 	SSL3_TXT_KRB5_RC4_128_SHA,
    578 	SSL3_CK_KRB5_RC4_128_SHA,
    579 	SSL_kKRB5|SSL_aKRB5|  SSL_RC4|SSL_SHA1  |SSL_SSLV3,
    580 	SSL_NOT_EXP|SSL_MEDIUM,
    581 	0,
    582 	128,
    583 	128,
    584 	SSL_ALL_CIPHERS,
    585 	SSL_ALL_STRENGTHS,
    586 	},
    587 
    588 /* Cipher 21 */
    589 	{
    590 	1,
    591 	SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
    592 	SSL3_CK_KRB5_IDEA_128_CBC_SHA,
    593 	SSL_kKRB5|SSL_aKRB5|  SSL_IDEA|SSL_SHA1  |SSL_SSLV3,
    594 	SSL_NOT_EXP|SSL_MEDIUM,
    595 	0,
    596 	128,
    597 	128,
    598 	SSL_ALL_CIPHERS,
    599 	SSL_ALL_STRENGTHS,
    600 	},
    601 
    602 /* Cipher 22 */
    603 	{
    604 	1,
    605 	SSL3_TXT_KRB5_DES_64_CBC_MD5,
    606 	SSL3_CK_KRB5_DES_64_CBC_MD5,
    607 	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_MD5    |SSL_SSLV3,
    608 	SSL_NOT_EXP|SSL_LOW,
    609 	0,
    610 	56,
    611 	56,
    612 	SSL_ALL_CIPHERS,
    613 	SSL_ALL_STRENGTHS,
    614 	},
    615 
    616 /* Cipher 23 */
    617 	{
    618 	1,
    619 	SSL3_TXT_KRB5_DES_192_CBC3_MD5,
    620 	SSL3_CK_KRB5_DES_192_CBC3_MD5,
    621 	SSL_kKRB5|SSL_aKRB5|  SSL_3DES|SSL_MD5   |SSL_SSLV3,
    622 	SSL_NOT_EXP|SSL_HIGH,
    623 	0,
    624 	168,
    625 	168,
    626 	SSL_ALL_CIPHERS,
    627 	SSL_ALL_STRENGTHS,
    628 	},
    629 
    630 /* Cipher 24 */
    631 	{
    632 	1,
    633 	SSL3_TXT_KRB5_RC4_128_MD5,
    634 	SSL3_CK_KRB5_RC4_128_MD5,
    635 	SSL_kKRB5|SSL_aKRB5|  SSL_RC4|SSL_MD5  |SSL_SSLV3,
    636 	SSL_NOT_EXP|SSL_MEDIUM,
    637 	0,
    638 	128,
    639 	128,
    640 	SSL_ALL_CIPHERS,
    641 	SSL_ALL_STRENGTHS,
    642 	},
    643 
    644 /* Cipher 25 */
    645 	{
    646 	1,
    647 	SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
    648 	SSL3_CK_KRB5_IDEA_128_CBC_MD5,
    649 	SSL_kKRB5|SSL_aKRB5|  SSL_IDEA|SSL_MD5  |SSL_SSLV3,
    650 	SSL_NOT_EXP|SSL_MEDIUM,
    651 	0,
    652 	128,
    653 	128,
    654 	SSL_ALL_CIPHERS,
    655 	SSL_ALL_STRENGTHS,
    656 	},
    657 
    658 /* Cipher 26 */
    659 	{
    660 	1,
    661 	SSL3_TXT_KRB5_DES_40_CBC_SHA,
    662 	SSL3_CK_KRB5_DES_40_CBC_SHA,
    663 	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_SHA1   |SSL_SSLV3,
    664 	SSL_EXPORT|SSL_EXP40,
    665 	0,
    666 	40,
    667 	56,
    668 	SSL_ALL_CIPHERS,
    669 	SSL_ALL_STRENGTHS,
    670 	},
    671 
    672 /* Cipher 27 */
    673 	{
    674 	1,
    675 	SSL3_TXT_KRB5_RC2_40_CBC_SHA,
    676 	SSL3_CK_KRB5_RC2_40_CBC_SHA,
    677 	SSL_kKRB5|SSL_aKRB5|  SSL_RC2|SSL_SHA1   |SSL_SSLV3,
    678 	SSL_EXPORT|SSL_EXP40,
    679 	0,
    680 	40,
    681 	128,
    682 	SSL_ALL_CIPHERS,
    683 	SSL_ALL_STRENGTHS,
    684 	},
    685 
    686 /* Cipher 28 */
    687 	{
    688 	1,
    689 	SSL3_TXT_KRB5_RC4_40_SHA,
    690 	SSL3_CK_KRB5_RC4_40_SHA,
    691 	SSL_kKRB5|SSL_aKRB5|  SSL_RC4|SSL_SHA1   |SSL_SSLV3,
    692 	SSL_EXPORT|SSL_EXP40,
    693 	0,
    694 	40,
    695 	128,
    696 	SSL_ALL_CIPHERS,
    697 	SSL_ALL_STRENGTHS,
    698 	},
    699 
    700 /* Cipher 29 */
    701 	{
    702 	1,
    703 	SSL3_TXT_KRB5_DES_40_CBC_MD5,
    704 	SSL3_CK_KRB5_DES_40_CBC_MD5,
    705 	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_MD5    |SSL_SSLV3,
    706 	SSL_EXPORT|SSL_EXP40,
    707 	0,
    708 	40,
    709 	56,
    710 	SSL_ALL_CIPHERS,
    711 	SSL_ALL_STRENGTHS,
    712 	},
    713 
    714 /* Cipher 2A */
    715 	{
    716 	1,
    717 	SSL3_TXT_KRB5_RC2_40_CBC_MD5,
    718 	SSL3_CK_KRB5_RC2_40_CBC_MD5,
    719 	SSL_kKRB5|SSL_aKRB5|  SSL_RC2|SSL_MD5    |SSL_SSLV3,
    720 	SSL_EXPORT|SSL_EXP40,
    721 	0,
    722 	40,
    723 	128,
    724 	SSL_ALL_CIPHERS,
    725 	SSL_ALL_STRENGTHS,
    726 	},
    727 
    728 /* Cipher 2B */
    729 	{
    730 	1,
    731 	SSL3_TXT_KRB5_RC4_40_MD5,
    732 	SSL3_CK_KRB5_RC4_40_MD5,
    733 	SSL_kKRB5|SSL_aKRB5|  SSL_RC4|SSL_MD5    |SSL_SSLV3,
    734 	SSL_EXPORT|SSL_EXP40,
    735 	0,
    736 	40,
    737 	128,
    738 	SSL_ALL_CIPHERS,
    739 	SSL_ALL_STRENGTHS,
    740 	},
    741 #endif	/* OPENSSL_NO_KRB5 */
    742 
    743 /* New AES ciphersuites */
    744 /* Cipher 2F */
    745 	{
    746 	1,
    747 	TLS1_TXT_RSA_WITH_AES_128_SHA,
    748 	TLS1_CK_RSA_WITH_AES_128_SHA,
    749 	SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1,
    750 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    751 	0,
    752 	128,
    753 	128,
    754 	SSL_ALL_CIPHERS,
    755 	SSL_ALL_STRENGTHS,
    756 	},
    757 /* Cipher 30 */
    758 	{
    759 	0,
    760 	TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
    761 	TLS1_CK_DH_DSS_WITH_AES_128_SHA,
    762 	SSL_kDHd|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1,
    763 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    764 	0,
    765 	128,
    766 	128,
    767 	SSL_ALL_CIPHERS,
    768 	SSL_ALL_STRENGTHS,
    769 	},
    770 /* Cipher 31 */
    771 	{
    772 	0,
    773 	TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
    774 	TLS1_CK_DH_RSA_WITH_AES_128_SHA,
    775 	SSL_kDHr|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1,
    776 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    777 	0,
    778 	128,
    779 	128,
    780 	SSL_ALL_CIPHERS,
    781 	SSL_ALL_STRENGTHS,
    782 	},
    783 /* Cipher 32 */
    784 	{
    785 	1,
    786 	TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
    787 	TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
    788 	SSL_kEDH|SSL_aDSS|SSL_AES|SSL_SHA|SSL_TLSV1,
    789 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    790 	0,
    791 	128,
    792 	128,
    793 	SSL_ALL_CIPHERS,
    794 	SSL_ALL_STRENGTHS,
    795 	},
    796 /* Cipher 33 */
    797 	{
    798 	1,
    799 	TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
    800 	TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
    801 	SSL_kEDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
    802 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    803 	0,
    804 	128,
    805 	128,
    806 	SSL_ALL_CIPHERS,
    807 	SSL_ALL_STRENGTHS,
    808 	},
    809 /* Cipher 34 */
    810 	{
    811 	1,
    812 	TLS1_TXT_ADH_WITH_AES_128_SHA,
    813 	TLS1_CK_ADH_WITH_AES_128_SHA,
    814 	SSL_kEDH|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1,
    815 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    816 	0,
    817 	128,
    818 	128,
    819 	SSL_ALL_CIPHERS,
    820 	SSL_ALL_STRENGTHS,
    821 	},
    822 
    823 /* Cipher 35 */
    824 	{
    825 	1,
    826 	TLS1_TXT_RSA_WITH_AES_256_SHA,
    827 	TLS1_CK_RSA_WITH_AES_256_SHA,
    828 	SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1,
    829 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    830 	0,
    831 	256,
    832 	256,
    833 	SSL_ALL_CIPHERS,
    834 	SSL_ALL_STRENGTHS,
    835 	},
    836 /* Cipher 36 */
    837 	{
    838 	0,
    839 	TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
    840 	TLS1_CK_DH_DSS_WITH_AES_256_SHA,
    841 	SSL_kDHd|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1,
    842 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    843 	0,
    844 	256,
    845 	256,
    846 	SSL_ALL_CIPHERS,
    847 	SSL_ALL_STRENGTHS,
    848 	},
    849 /* Cipher 37 */
    850 	{
    851 	0,
    852 	TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
    853 	TLS1_CK_DH_RSA_WITH_AES_256_SHA,
    854 	SSL_kDHr|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1,
    855 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    856 	0,
    857 	256,
    858 	256,
    859 	SSL_ALL_CIPHERS,
    860 	SSL_ALL_STRENGTHS,
    861 	},
    862 /* Cipher 38 */
    863 	{
    864 	1,
    865 	TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
    866 	TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
    867 	SSL_kEDH|SSL_aDSS|SSL_AES|SSL_SHA|SSL_TLSV1,
    868 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    869 	0,
    870 	256,
    871 	256,
    872 	SSL_ALL_CIPHERS,
    873 	SSL_ALL_STRENGTHS,
    874 	},
    875 /* Cipher 39 */
    876 	{
    877 	1,
    878 	TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
    879 	TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
    880 	SSL_kEDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
    881 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    882 	0,
    883 	256,
    884 	256,
    885 	SSL_ALL_CIPHERS,
    886 	SSL_ALL_STRENGTHS,
    887 	},
    888 	/* Cipher 3A */
    889 	{
    890 	1,
    891 	TLS1_TXT_ADH_WITH_AES_256_SHA,
    892 	TLS1_CK_ADH_WITH_AES_256_SHA,
    893 	SSL_kEDH|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1,
    894 	SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
    895 	0,
    896 	256,
    897 	256,
    898 	SSL_ALL_CIPHERS,
    899 	SSL_ALL_STRENGTHS,
    900 	},
    901 
    902 #ifndef OPENSSL_NO_CAMELLIA
    903 	/* Camellia ciphersuites from RFC4132 (128-bit portion) */
    904 
    905 	/* Cipher 41 */
    906 	{
    907 	1,
    908 	TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
    909 	TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
    910 	SSL_kRSA|SSL_aRSA|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
    911 	SSL_NOT_EXP|SSL_HIGH,
    912 	0,
    913 	128,
    914 	128,
    915 	SSL_ALL_CIPHERS,
    916 	SSL_ALL_STRENGTHS
    917 	},
    918 	/* Cipher 42 */
    919 	{
    920 	0, /* not implemented (non-ephemeral DH) */
    921 	TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
    922 	TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
    923 	SSL_kDHd|SSL_aDH|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
    924 	SSL_NOT_EXP|SSL_HIGH,
    925 	0,
    926 	128,
    927 	128,
    928 	SSL_ALL_CIPHERS,
    929 	SSL_ALL_STRENGTHS
    930 	},
    931 	/* Cipher 43 */
    932 	{
    933 	0, /* not implemented (non-ephemeral DH) */
    934 	TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
    935 	TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
    936 	SSL_kDHr|SSL_aDH|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
    937 	SSL_NOT_EXP|SSL_HIGH,
    938 	0,
    939 	128,
    940 	128,
    941 	SSL_ALL_CIPHERS,
    942 	SSL_ALL_STRENGTHS
    943 	},
    944 	/* Cipher 44 */
    945 	{
    946 	1,
    947 	TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
    948 	TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
    949 	SSL_kEDH|SSL_aDSS|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
    950 	SSL_NOT_EXP|SSL_HIGH,
    951 	0,
    952 	128,
    953 	128,
    954 	SSL_ALL_CIPHERS,
    955 	SSL_ALL_STRENGTHS
    956 	},
    957 	/* Cipher 45 */
    958 	{
    959 	1,
    960 	TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
    961 	TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
    962 	SSL_kEDH|SSL_aRSA|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
    963 	SSL_NOT_EXP|SSL_HIGH,
    964 	0,
    965 	128,
    966 	128,
    967 	SSL_ALL_CIPHERS,
    968 	SSL_ALL_STRENGTHS
    969 	},
    970 	/* Cipher 46 */
    971 	{
    972 	1,
    973 	TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
    974 	TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
    975 	SSL_kEDH|SSL_aNULL|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
    976 	SSL_NOT_EXP|SSL_HIGH,
    977 	0,
    978 	128,
    979 	128,
    980 	SSL_ALL_CIPHERS,
    981 	SSL_ALL_STRENGTHS
    982 	},
    983 #endif /* OPENSSL_NO_CAMELLIA */
    984 
    985 #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
    986 	/* New TLS Export CipherSuites from expired ID */
    987 #if 0
    988 	/* Cipher 60 */
    989 	    {
    990 	    1,
    991 	    TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
    992 	    TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
    993 	    SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_TLSV1,
    994 	    SSL_EXPORT|SSL_EXP56,
    995 	    0,
    996 	    56,
    997 	    128,
    998 	    SSL_ALL_CIPHERS,
    999 	    SSL_ALL_STRENGTHS,
   1000 	    },
   1001 	/* Cipher 61 */
   1002 	    {
   1003 	    1,
   1004 	    TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
   1005 	    TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
   1006 	    SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_TLSV1,
   1007 	    SSL_EXPORT|SSL_EXP56,
   1008 	    0,
   1009 	    56,
   1010 	    128,
   1011 	    SSL_ALL_CIPHERS,
   1012 	    SSL_ALL_STRENGTHS,
   1013 	    },
   1014 #endif
   1015 	/* Cipher 62 */
   1016 	    {
   1017 	    1,
   1018 	    TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
   1019 	    TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
   1020 	    SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA|SSL_TLSV1,
   1021 	    SSL_EXPORT|SSL_EXP56,
   1022 	    0,
   1023 	    56,
   1024 	    56,
   1025 	    SSL_ALL_CIPHERS,
   1026 	    SSL_ALL_STRENGTHS,
   1027 	    },
   1028 	/* Cipher 63 */
   1029 	    {
   1030 	    1,
   1031 	    TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
   1032 	    TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
   1033 	    SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA|SSL_TLSV1,
   1034 	    SSL_EXPORT|SSL_EXP56,
   1035 	    0,
   1036 	    56,
   1037 	    56,
   1038 	    SSL_ALL_CIPHERS,
   1039 	    SSL_ALL_STRENGTHS,
   1040 	    },
   1041 	/* Cipher 64 */
   1042 	    {
   1043 	    1,
   1044 	    TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
   1045 	    TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
   1046 	    SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
   1047 	    SSL_EXPORT|SSL_EXP56,
   1048 	    0,
   1049 	    56,
   1050 	    128,
   1051 	    SSL_ALL_CIPHERS,
   1052 	    SSL_ALL_STRENGTHS,
   1053 	    },
   1054 	/* Cipher 65 */
   1055 	    {
   1056 	    1,
   1057 	    TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
   1058 	    TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
   1059 	    SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1,
   1060 	    SSL_EXPORT|SSL_EXP56,
   1061 	    0,
   1062 	    56,
   1063 	    128,
   1064 	    SSL_ALL_CIPHERS,
   1065 	    SSL_ALL_STRENGTHS,
   1066 	    },
   1067 	/* Cipher 66 */
   1068 	    {
   1069 	    1,
   1070 	    TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
   1071 	    TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
   1072 	    SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1,
   1073 	    SSL_NOT_EXP|SSL_MEDIUM,
   1074 	    0,
   1075 	    128,
   1076 	    128,
   1077 	    SSL_ALL_CIPHERS,
   1078 	    SSL_ALL_STRENGTHS
   1079 	    },
   1080 #endif
   1081 
   1082 #ifndef OPENSSL_NO_CAMELLIA
   1083 	/* Camellia ciphersuites from RFC4132 (256-bit portion) */
   1084 
   1085 	/* Cipher 84 */
   1086 	{
   1087 	1,
   1088 	TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1089 	TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1090 	SSL_kRSA|SSL_aRSA|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
   1091 	SSL_NOT_EXP|SSL_HIGH,
   1092 	0,
   1093 	256,
   1094 	256,
   1095 	SSL_ALL_CIPHERS,
   1096 	SSL_ALL_STRENGTHS
   1097 	},
   1098 	/* Cipher 85 */
   1099 	{
   1100 	0, /* not implemented (non-ephemeral DH) */
   1101 	TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
   1102 	TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
   1103 	SSL_kDHd|SSL_aDH|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
   1104 	SSL_NOT_EXP|SSL_HIGH,
   1105 	0,
   1106 	256,
   1107 	256,
   1108 	SSL_ALL_CIPHERS,
   1109 	SSL_ALL_STRENGTHS
   1110 	},
   1111 	/* Cipher 86 */
   1112 	{
   1113 	0, /* not implemented (non-ephemeral DH) */
   1114 	TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1115 	TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1116 	SSL_kDHr|SSL_aDH|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
   1117 	SSL_NOT_EXP|SSL_HIGH,
   1118 	0,
   1119 	256,
   1120 	256,
   1121 	SSL_ALL_CIPHERS,
   1122 	SSL_ALL_STRENGTHS
   1123 	},
   1124 	/* Cipher 87 */
   1125 	{
   1126 	1,
   1127 	TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
   1128 	TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
   1129 	SSL_kEDH|SSL_aDSS|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
   1130 	SSL_NOT_EXP|SSL_HIGH,
   1131 	0,
   1132 	256,
   1133 	256,
   1134 	SSL_ALL_CIPHERS,
   1135 	SSL_ALL_STRENGTHS
   1136 	},
   1137 	/* Cipher 88 */
   1138 	{
   1139 	1,
   1140 	TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1141 	TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
   1142 	SSL_kEDH|SSL_aRSA|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
   1143 	SSL_NOT_EXP|SSL_HIGH,
   1144 	0,
   1145 	256,
   1146 	256,
   1147 	SSL_ALL_CIPHERS,
   1148 	SSL_ALL_STRENGTHS
   1149 	},
   1150 	/* Cipher 89 */
   1151 	{
   1152 	1,
   1153 	TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
   1154 	TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
   1155 	SSL_kEDH|SSL_aNULL|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1,
   1156 	SSL_NOT_EXP|SSL_HIGH,
   1157 	0,
   1158 	256,
   1159 	256,
   1160 	SSL_ALL_CIPHERS,
   1161 	SSL_ALL_STRENGTHS
   1162 	},
   1163 #endif /* OPENSSL_NO_CAMELLIA */
   1164 
   1165 #ifndef OPENSSL_NO_SEED
   1166 	/* SEED ciphersuites from RFC4162 */
   1167 
   1168 	/* Cipher 96 */
   1169 	{
   1170 	1,
   1171 	TLS1_TXT_RSA_WITH_SEED_SHA,
   1172 	TLS1_CK_RSA_WITH_SEED_SHA,
   1173 	SSL_kRSA|SSL_aRSA|SSL_SEED|SSL_SHA1|SSL_TLSV1,
   1174 	SSL_NOT_EXP|SSL_MEDIUM,
   1175 	0,
   1176 	128,
   1177 	128,
   1178 	SSL_ALL_CIPHERS,
   1179 	SSL_ALL_STRENGTHS,
   1180 	},
   1181 
   1182 	/* Cipher 97 */
   1183 	{
   1184 	0, /* not implemented (non-ephemeral DH) */
   1185 	TLS1_TXT_DH_DSS_WITH_SEED_SHA,
   1186 	TLS1_CK_DH_DSS_WITH_SEED_SHA,
   1187 	SSL_kDHd|SSL_aDH|SSL_SEED|SSL_SHA1|SSL_TLSV1,
   1188 	SSL_NOT_EXP|SSL_MEDIUM,
   1189 	0,
   1190 	128,
   1191 	128,
   1192 	SSL_ALL_CIPHERS,
   1193 	SSL_ALL_STRENGTHS,
   1194 	},
   1195 
   1196 	/* Cipher 98 */
   1197 	{
   1198 	0, /* not implemented (non-ephemeral DH) */
   1199 	TLS1_TXT_DH_RSA_WITH_SEED_SHA,
   1200 	TLS1_CK_DH_RSA_WITH_SEED_SHA,
   1201 	SSL_kDHr|SSL_aDH|SSL_SEED|SSL_SHA1|SSL_TLSV1,
   1202 	SSL_NOT_EXP|SSL_MEDIUM,
   1203 	0,
   1204 	128,
   1205 	128,
   1206 	SSL_ALL_CIPHERS,
   1207 	SSL_ALL_STRENGTHS,
   1208 	},
   1209 
   1210 	/* Cipher 99 */
   1211 	{
   1212 	1,
   1213 	TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
   1214 	TLS1_CK_DHE_DSS_WITH_SEED_SHA,
   1215 	SSL_kEDH|SSL_aDSS|SSL_SEED|SSL_SHA1|SSL_TLSV1,
   1216 	SSL_NOT_EXP|SSL_MEDIUM,
   1217 	0,
   1218 	128,
   1219 	128,
   1220 	SSL_ALL_CIPHERS,
   1221 	SSL_ALL_STRENGTHS,
   1222 	},
   1223 
   1224 	/* Cipher 9A */
   1225 	{
   1226 	1,
   1227 	TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
   1228 	TLS1_CK_DHE_RSA_WITH_SEED_SHA,
   1229 	SSL_kEDH|SSL_aRSA|SSL_SEED|SSL_SHA1|SSL_TLSV1,
   1230 	SSL_NOT_EXP|SSL_MEDIUM,
   1231 	0,
   1232 	128,
   1233 	128,
   1234 	SSL_ALL_CIPHERS,
   1235 	SSL_ALL_STRENGTHS,
   1236 	},
   1237 
   1238 	/* Cipher 9B */
   1239 	{
   1240 	1,
   1241 	TLS1_TXT_ADH_WITH_SEED_SHA,
   1242 	TLS1_CK_ADH_WITH_SEED_SHA,
   1243 	SSL_kEDH|SSL_aNULL|SSL_SEED|SSL_SHA1|SSL_TLSV1,
   1244 	SSL_NOT_EXP|SSL_MEDIUM,
   1245 	0,
   1246 	128,
   1247 	128,
   1248 	SSL_ALL_CIPHERS,
   1249 	SSL_ALL_STRENGTHS,
   1250 	},
   1251 
   1252 #endif /* OPENSSL_NO_SEED */
   1253 
   1254 #ifndef OPENSSL_NO_ECDH
   1255 	/* Cipher C001 */
   1256 	    {
   1257             1,
   1258             TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
   1259             TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
   1260             SSL_kECDH|SSL_aECDSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
   1261             SSL_NOT_EXP,
   1262             0,
   1263             0,
   1264             0,
   1265             SSL_ALL_CIPHERS,
   1266             SSL_ALL_STRENGTHS,
   1267             },
   1268 
   1269 	/* Cipher C002 */
   1270 	    {
   1271             1,
   1272             TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
   1273             TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
   1274             SSL_kECDH|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
   1275             SSL_NOT_EXP,
   1276             0,
   1277             128,
   1278             128,
   1279             SSL_ALL_CIPHERS,
   1280             SSL_ALL_STRENGTHS,
   1281             },
   1282 
   1283 	/* Cipher C003 */
   1284 	    {
   1285             1,
   1286             TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
   1287             TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
   1288             SSL_kECDH|SSL_aECDSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
   1289             SSL_NOT_EXP|SSL_HIGH,
   1290             0,
   1291             168,
   1292             168,
   1293             SSL_ALL_CIPHERS,
   1294             SSL_ALL_STRENGTHS,
   1295             },
   1296 
   1297 	/* Cipher C004 */
   1298 	    {
   1299             1,
   1300             TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
   1301             TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
   1302             SSL_kECDH|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
   1303             SSL_NOT_EXP|SSL_HIGH,
   1304             0,
   1305             128,
   1306             128,
   1307             SSL_ALL_CIPHERS,
   1308             SSL_ALL_STRENGTHS,
   1309             },
   1310 
   1311 	/* Cipher C005 */
   1312 	    {
   1313             1,
   1314             TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
   1315             TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
   1316             SSL_kECDH|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
   1317             SSL_NOT_EXP|SSL_HIGH,
   1318             0,
   1319             256,
   1320             256,
   1321             SSL_ALL_CIPHERS,
   1322             SSL_ALL_STRENGTHS,
   1323             },
   1324 
   1325 	/* Cipher C006 */
   1326 	    {
   1327             1,
   1328             TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
   1329             TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
   1330             SSL_kECDHE|SSL_aECDSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
   1331             SSL_NOT_EXP,
   1332             0,
   1333             0,
   1334             0,
   1335             SSL_ALL_CIPHERS,
   1336             SSL_ALL_STRENGTHS,
   1337             },
   1338 
   1339 	/* Cipher C007 */
   1340 	    {
   1341             1,
   1342             TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
   1343             TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
   1344             SSL_kECDHE|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
   1345             SSL_NOT_EXP,
   1346             0,
   1347             128,
   1348             128,
   1349             SSL_ALL_CIPHERS,
   1350             SSL_ALL_STRENGTHS,
   1351             },
   1352 
   1353 	/* Cipher C008 */
   1354 	    {
   1355             1,
   1356             TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
   1357             TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
   1358             SSL_kECDHE|SSL_aECDSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
   1359             SSL_NOT_EXP|SSL_HIGH,
   1360             0,
   1361             168,
   1362             168,
   1363             SSL_ALL_CIPHERS,
   1364             SSL_ALL_STRENGTHS,
   1365             },
   1366 
   1367 	/* Cipher C009 */
   1368 	    {
   1369             1,
   1370             TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
   1371             TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
   1372             SSL_kECDHE|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
   1373             SSL_NOT_EXP|SSL_HIGH,
   1374             0,
   1375             128,
   1376             128,
   1377             SSL_ALL_CIPHERS,
   1378             SSL_ALL_STRENGTHS,
   1379             },
   1380 
   1381 	/* Cipher C00A */
   1382 	    {
   1383             1,
   1384             TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
   1385             TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
   1386             SSL_kECDHE|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
   1387             SSL_NOT_EXP|SSL_HIGH,
   1388             0,
   1389             256,
   1390             256,
   1391             SSL_ALL_CIPHERS,
   1392             SSL_ALL_STRENGTHS,
   1393             },
   1394 
   1395 	/* Cipher C00B */
   1396 	    {
   1397             1,
   1398             TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
   1399             TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
   1400             SSL_kECDH|SSL_aRSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
   1401             SSL_NOT_EXP,
   1402             0,
   1403             0,
   1404             0,
   1405             SSL_ALL_CIPHERS,
   1406             SSL_ALL_STRENGTHS,
   1407             },
   1408 
   1409 	/* Cipher C00C */
   1410 	    {
   1411             1,
   1412             TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
   1413             TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
   1414             SSL_kECDH|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
   1415             SSL_NOT_EXP,
   1416             0,
   1417             128,
   1418             128,
   1419             SSL_ALL_CIPHERS,
   1420             SSL_ALL_STRENGTHS,
   1421             },
   1422 
   1423 	/* Cipher C00D */
   1424 	    {
   1425             1,
   1426             TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
   1427             TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
   1428             SSL_kECDH|SSL_aRSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
   1429             SSL_NOT_EXP|SSL_HIGH,
   1430             0,
   1431             168,
   1432             168,
   1433             SSL_ALL_CIPHERS,
   1434             SSL_ALL_STRENGTHS,
   1435             },
   1436 
   1437 	/* Cipher C00E */
   1438 	    {
   1439             1,
   1440             TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
   1441             TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
   1442             SSL_kECDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
   1443             SSL_NOT_EXP|SSL_HIGH,
   1444             0,
   1445             128,
   1446             128,
   1447             SSL_ALL_CIPHERS,
   1448             SSL_ALL_STRENGTHS,
   1449             },
   1450 
   1451 	/* Cipher C00F */
   1452 	    {
   1453             1,
   1454             TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
   1455             TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
   1456             SSL_kECDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
   1457             SSL_NOT_EXP|SSL_HIGH,
   1458             0,
   1459             256,
   1460             256,
   1461             SSL_ALL_CIPHERS,
   1462             SSL_ALL_STRENGTHS,
   1463             },
   1464 
   1465 	/* Cipher C010 */
   1466 	    {
   1467             1,
   1468             TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
   1469             TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
   1470             SSL_kECDHE|SSL_aRSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
   1471             SSL_NOT_EXP,
   1472             0,
   1473             0,
   1474             0,
   1475             SSL_ALL_CIPHERS,
   1476             SSL_ALL_STRENGTHS,
   1477             },
   1478 
   1479 	/* Cipher C011 */
   1480 	    {
   1481             1,
   1482             TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
   1483             TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
   1484             SSL_kECDHE|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
   1485             SSL_NOT_EXP,
   1486             0,
   1487             128,
   1488             128,
   1489             SSL_ALL_CIPHERS,
   1490             SSL_ALL_STRENGTHS,
   1491             },
   1492 
   1493 	/* Cipher C012 */
   1494 	    {
   1495             1,
   1496             TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
   1497             TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
   1498             SSL_kECDHE|SSL_aRSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
   1499             SSL_NOT_EXP|SSL_HIGH,
   1500             0,
   1501             168,
   1502             168,
   1503             SSL_ALL_CIPHERS,
   1504             SSL_ALL_STRENGTHS,
   1505             },
   1506 
   1507 	/* Cipher C013 */
   1508 	    {
   1509             1,
   1510             TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
   1511             TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
   1512             SSL_kECDHE|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
   1513             SSL_NOT_EXP|SSL_HIGH,
   1514             0,
   1515             128,
   1516             128,
   1517             SSL_ALL_CIPHERS,
   1518             SSL_ALL_STRENGTHS,
   1519             },
   1520 
   1521 	/* Cipher C014 */
   1522 	    {
   1523             1,
   1524             TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
   1525             TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
   1526             SSL_kECDHE|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
   1527             SSL_NOT_EXP|SSL_HIGH,
   1528             0,
   1529             256,
   1530             256,
   1531             SSL_ALL_CIPHERS,
   1532             SSL_ALL_STRENGTHS,
   1533             },
   1534 
   1535 	/* Cipher C015 */
   1536             {
   1537             1,
   1538             TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
   1539             TLS1_CK_ECDH_anon_WITH_NULL_SHA,
   1540             SSL_kECDHE|SSL_aNULL|SSL_eNULL|SSL_SHA|SSL_TLSV1,
   1541             SSL_NOT_EXP,
   1542             0,
   1543             0,
   1544             0,
   1545             SSL_ALL_CIPHERS,
   1546             SSL_ALL_STRENGTHS,
   1547 	    },
   1548 
   1549 	/* Cipher C016 */
   1550             {
   1551             1,
   1552             TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
   1553             TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
   1554             SSL_kECDHE|SSL_aNULL|SSL_RC4|SSL_SHA|SSL_TLSV1,
   1555             SSL_NOT_EXP,
   1556             0,
   1557             128,
   1558             128,
   1559             SSL_ALL_CIPHERS,
   1560             SSL_ALL_STRENGTHS,
   1561 	    },
   1562 
   1563 	/* Cipher C017 */
   1564 	    {
   1565             1,
   1566             TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
   1567             TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
   1568             SSL_kECDHE|SSL_aNULL|SSL_3DES|SSL_SHA|SSL_TLSV1,
   1569             SSL_NOT_EXP|SSL_HIGH,
   1570             0,
   1571             168,
   1572             168,
   1573             SSL_ALL_CIPHERS,
   1574             SSL_ALL_STRENGTHS,
   1575             },
   1576 
   1577 	/* Cipher C018 */
   1578 	    {
   1579             1,
   1580             TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
   1581             TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
   1582             SSL_kECDHE|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1,
   1583             SSL_NOT_EXP|SSL_HIGH,
   1584             0,
   1585             128,
   1586             128,
   1587             SSL_ALL_CIPHERS,
   1588             SSL_ALL_STRENGTHS,
   1589             },
   1590 
   1591 	/* Cipher C019 */
   1592 	    {
   1593             1,
   1594             TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
   1595             TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
   1596             SSL_kECDHE|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1,
   1597             SSL_NOT_EXP|SSL_HIGH,
   1598             0,
   1599             256,
   1600             256,
   1601             SSL_ALL_CIPHERS,
   1602             SSL_ALL_STRENGTHS,
   1603             },
   1604 #endif	/* OPENSSL_NO_ECDH */
   1605 
   1606 
   1607 /* end of list */
   1608 	};
   1609 
   1610 SSL3_ENC_METHOD SSLv3_enc_data={
   1611 	ssl3_enc,
   1612 	ssl3_mac,
   1613 	ssl3_setup_key_block,
   1614 	ssl3_generate_master_secret,
   1615 	ssl3_change_cipher_state,
   1616 	ssl3_final_finish_mac,
   1617 	MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
   1618 	ssl3_cert_verify_mac,
   1619 	SSL3_MD_CLIENT_FINISHED_CONST,4,
   1620 	SSL3_MD_SERVER_FINISHED_CONST,4,
   1621 	ssl3_alert_code,
   1622 	};
   1623 
   1624 long ssl3_default_timeout(void)
   1625 	{
   1626 	/* 2 hours, the 24 hours mentioned in the SSLv3 spec
   1627 	 * is way too long for http, the cache would over fill */
   1628 	return(60*60*2);
   1629 	}
   1630 
   1631 IMPLEMENT_ssl3_meth_func(sslv3_base_method,
   1632 			ssl_undefined_function,
   1633 			ssl_undefined_function,
   1634 			ssl_bad_method)
   1635 
   1636 int ssl3_num_ciphers(void)
   1637 	{
   1638 	return(SSL3_NUM_CIPHERS);
   1639 	}
   1640 
   1641 SSL_CIPHER *ssl3_get_cipher(unsigned int u)
   1642 	{
   1643 	if (u < SSL3_NUM_CIPHERS)
   1644 		return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
   1645 	else
   1646 		return(NULL);
   1647 	}
   1648 
   1649 int ssl3_pending(const SSL *s)
   1650 	{
   1651 	if (s->rstate == SSL_ST_READ_BODY)
   1652 		return 0;
   1653 
   1654 	return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
   1655 	}
   1656 
   1657 int ssl3_new(SSL *s)
   1658 	{
   1659 	SSL3_STATE *s3;
   1660 
   1661 	if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
   1662 	memset(s3,0,sizeof *s3);
   1663 	EVP_MD_CTX_init(&s3->finish_dgst1);
   1664 	EVP_MD_CTX_init(&s3->finish_dgst2);
   1665 	pq_64bit_init(&(s3->rrec.seq_num));
   1666 	pq_64bit_init(&(s3->wrec.seq_num));
   1667 
   1668 	s->s3=s3;
   1669 
   1670 	s->method->ssl_clear(s);
   1671 	return(1);
   1672 err:
   1673 	return(0);
   1674 	}
   1675 
   1676 void ssl3_free(SSL *s)
   1677 	{
   1678 	if(s == NULL)
   1679 	    return;
   1680 
   1681 	ssl3_cleanup_key_block(s);
   1682 	if (s->s3->rbuf.buf != NULL)
   1683 		OPENSSL_free(s->s3->rbuf.buf);
   1684 	if (s->s3->wbuf.buf != NULL)
   1685 		OPENSSL_free(s->s3->wbuf.buf);
   1686 	if (s->s3->rrec.comp != NULL)
   1687 		OPENSSL_free(s->s3->rrec.comp);
   1688 #ifndef OPENSSL_NO_DH
   1689 	if (s->s3->tmp.dh != NULL)
   1690 		DH_free(s->s3->tmp.dh);
   1691 #endif
   1692 #ifndef OPENSSL_NO_ECDH
   1693 	if (s->s3->tmp.ecdh != NULL)
   1694 		EC_KEY_free(s->s3->tmp.ecdh);
   1695 #endif
   1696 
   1697 	if (s->s3->tmp.ca_names != NULL)
   1698 		sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
   1699 	EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
   1700 	EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
   1701 	pq_64bit_free(&(s->s3->rrec.seq_num));
   1702 	pq_64bit_free(&(s->s3->wrec.seq_num));
   1703 
   1704 	OPENSSL_cleanse(s->s3,sizeof *s->s3);
   1705 	OPENSSL_free(s->s3);
   1706 	s->s3=NULL;
   1707 	}
   1708 
   1709 void ssl3_clear(SSL *s)
   1710 	{
   1711 	unsigned char *rp,*wp;
   1712 	size_t rlen, wlen;
   1713 
   1714 	ssl3_cleanup_key_block(s);
   1715 	if (s->s3->tmp.ca_names != NULL)
   1716 		sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
   1717 
   1718 	if (s->s3->rrec.comp != NULL)
   1719 		{
   1720 		OPENSSL_free(s->s3->rrec.comp);
   1721 		s->s3->rrec.comp=NULL;
   1722 		}
   1723 #ifndef OPENSSL_NO_DH
   1724 	if (s->s3->tmp.dh != NULL)
   1725 		DH_free(s->s3->tmp.dh);
   1726 #endif
   1727 #ifndef OPENSSL_NO_ECDH
   1728 	if (s->s3->tmp.ecdh != NULL)
   1729 		EC_KEY_free(s->s3->tmp.ecdh);
   1730 #endif
   1731 
   1732 	rp = s->s3->rbuf.buf;
   1733 	wp = s->s3->wbuf.buf;
   1734 	rlen = s->s3->rbuf.len;
   1735  	wlen = s->s3->wbuf.len;
   1736 
   1737 	EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
   1738 	EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
   1739 
   1740 	memset(s->s3,0,sizeof *s->s3);
   1741 	s->s3->rbuf.buf = rp;
   1742 	s->s3->wbuf.buf = wp;
   1743 	s->s3->rbuf.len = rlen;
   1744  	s->s3->wbuf.len = wlen;
   1745 
   1746 	ssl_free_wbio_buffer(s);
   1747 
   1748 	s->packet_length=0;
   1749 	s->s3->renegotiate=0;
   1750 	s->s3->total_renegotiations=0;
   1751 	s->s3->num_renegotiations=0;
   1752 	s->s3->in_read_app_data=0;
   1753 	s->version=SSL3_VERSION;
   1754 	}
   1755 
   1756 long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
   1757 	{
   1758 	int ret=0;
   1759 
   1760 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
   1761 	if (
   1762 #ifndef OPENSSL_NO_RSA
   1763 	    cmd == SSL_CTRL_SET_TMP_RSA ||
   1764 	    cmd == SSL_CTRL_SET_TMP_RSA_CB ||
   1765 #endif
   1766 #ifndef OPENSSL_NO_DSA
   1767 	    cmd == SSL_CTRL_SET_TMP_DH ||
   1768 	    cmd == SSL_CTRL_SET_TMP_DH_CB ||
   1769 #endif
   1770 		0)
   1771 		{
   1772 		if (!ssl_cert_inst(&s->cert))
   1773 		    	{
   1774 			SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
   1775 			return(0);
   1776 			}
   1777 		}
   1778 #endif
   1779 
   1780 	switch (cmd)
   1781 		{
   1782 	case SSL_CTRL_GET_SESSION_REUSED:
   1783 		ret=s->hit;
   1784 		break;
   1785 	case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
   1786 		break;
   1787 	case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
   1788 		ret=s->s3->num_renegotiations;
   1789 		break;
   1790 	case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
   1791 		ret=s->s3->num_renegotiations;
   1792 		s->s3->num_renegotiations=0;
   1793 		break;
   1794 	case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
   1795 		ret=s->s3->total_renegotiations;
   1796 		break;
   1797 	case SSL_CTRL_GET_FLAGS:
   1798 		ret=(int)(s->s3->flags);
   1799 		break;
   1800 #ifndef OPENSSL_NO_RSA
   1801 	case SSL_CTRL_NEED_TMP_RSA:
   1802 		if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
   1803 		    ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
   1804 		     (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))))
   1805 			ret = 1;
   1806 		break;
   1807 	case SSL_CTRL_SET_TMP_RSA:
   1808 		{
   1809 			RSA *rsa = (RSA *)parg;
   1810 			if (rsa == NULL)
   1811 				{
   1812 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
   1813 				return(ret);
   1814 				}
   1815 			if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
   1816 				{
   1817 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
   1818 				return(ret);
   1819 				}
   1820 			if (s->cert->rsa_tmp != NULL)
   1821 				RSA_free(s->cert->rsa_tmp);
   1822 			s->cert->rsa_tmp = rsa;
   1823 			ret = 1;
   1824 		}
   1825 		break;
   1826 	case SSL_CTRL_SET_TMP_RSA_CB:
   1827 		{
   1828 		SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1829 		return(ret);
   1830 		}
   1831 		break;
   1832 #endif
   1833 #ifndef OPENSSL_NO_DH
   1834 	case SSL_CTRL_SET_TMP_DH:
   1835 		{
   1836 			DH *dh = (DH *)parg;
   1837 			if (dh == NULL)
   1838 				{
   1839 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
   1840 				return(ret);
   1841 				}
   1842 			if ((dh = DHparams_dup(dh)) == NULL)
   1843 				{
   1844 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
   1845 				return(ret);
   1846 				}
   1847 			if (!(s->options & SSL_OP_SINGLE_DH_USE))
   1848 				{
   1849 				if (!DH_generate_key(dh))
   1850 					{
   1851 					DH_free(dh);
   1852 					SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
   1853 					return(ret);
   1854 					}
   1855 				}
   1856 			if (s->cert->dh_tmp != NULL)
   1857 				DH_free(s->cert->dh_tmp);
   1858 			s->cert->dh_tmp = dh;
   1859 			ret = 1;
   1860 		}
   1861 		break;
   1862 	case SSL_CTRL_SET_TMP_DH_CB:
   1863 		{
   1864 		SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1865 		return(ret);
   1866 		}
   1867 		break;
   1868 #endif
   1869 #ifndef OPENSSL_NO_ECDH
   1870 	case SSL_CTRL_SET_TMP_ECDH:
   1871 		{
   1872 		EC_KEY *ecdh = NULL;
   1873 
   1874 		if (parg == NULL)
   1875 			{
   1876 			SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
   1877 			return(ret);
   1878 			}
   1879 		if (!EC_KEY_up_ref((EC_KEY *)parg))
   1880 			{
   1881 			SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
   1882 			return(ret);
   1883 			}
   1884 		ecdh = (EC_KEY *)parg;
   1885 		if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
   1886 			{
   1887 			if (!EC_KEY_generate_key(ecdh))
   1888 				{
   1889 				EC_KEY_free(ecdh);
   1890 				SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
   1891 				return(ret);
   1892 				}
   1893 			}
   1894 		if (s->cert->ecdh_tmp != NULL)
   1895 			EC_KEY_free(s->cert->ecdh_tmp);
   1896 		s->cert->ecdh_tmp = ecdh;
   1897 		ret = 1;
   1898 		}
   1899 		break;
   1900 	case SSL_CTRL_SET_TMP_ECDH_CB:
   1901 		{
   1902 		SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1903 		return(ret);
   1904 		}
   1905 		break;
   1906 #endif /* !OPENSSL_NO_ECDH */
   1907 #ifndef OPENSSL_NO_TLSEXT
   1908 	case SSL_CTRL_SET_TLSEXT_HOSTNAME:
   1909  		if (larg == TLSEXT_NAMETYPE_host_name)
   1910 			{
   1911 			if (s->tlsext_hostname != NULL)
   1912 				OPENSSL_free(s->tlsext_hostname);
   1913 			s->tlsext_hostname = NULL;
   1914 
   1915 			ret = 1;
   1916 			if (parg == NULL)
   1917 				break;
   1918 			if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
   1919 				{
   1920 				SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
   1921 				return 0;
   1922 				}
   1923 			if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
   1924 				{
   1925 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
   1926 				return 0;
   1927 				}
   1928 			}
   1929 		else
   1930 			{
   1931 			SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
   1932 			return 0;
   1933 			}
   1934  		break;
   1935 	case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
   1936 		s->tlsext_debug_arg=parg;
   1937 		ret = 1;
   1938 		break;
   1939 
   1940 	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
   1941 		s->tlsext_status_type=larg;
   1942 		ret = 1;
   1943 		break;
   1944 
   1945 	case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
   1946 		*(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
   1947 		ret = 1;
   1948 		break;
   1949 
   1950 	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
   1951 		s->tlsext_ocsp_exts = parg;
   1952 		ret = 1;
   1953 		break;
   1954 
   1955 	case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
   1956 		*(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
   1957 		ret = 1;
   1958 		break;
   1959 
   1960 	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
   1961 		s->tlsext_ocsp_ids = parg;
   1962 		ret = 1;
   1963 		break;
   1964 
   1965 	case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
   1966 		*(unsigned char **)parg = s->tlsext_ocsp_resp;
   1967 		return s->tlsext_ocsp_resplen;
   1968 
   1969 	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
   1970 		if (s->tlsext_ocsp_resp)
   1971 			OPENSSL_free(s->tlsext_ocsp_resp);
   1972 		s->tlsext_ocsp_resp = parg;
   1973 		s->tlsext_ocsp_resplen = larg;
   1974 		ret = 1;
   1975 		break;
   1976 
   1977 #endif /* !OPENSSL_NO_TLSEXT */
   1978 	default:
   1979 		break;
   1980 		}
   1981 	return(ret);
   1982 	}
   1983 
   1984 long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
   1985 	{
   1986 	int ret=0;
   1987 
   1988 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
   1989 	if (
   1990 #ifndef OPENSSL_NO_RSA
   1991 	    cmd == SSL_CTRL_SET_TMP_RSA_CB ||
   1992 #endif
   1993 #ifndef OPENSSL_NO_DSA
   1994 	    cmd == SSL_CTRL_SET_TMP_DH_CB ||
   1995 #endif
   1996 		0)
   1997 		{
   1998 		if (!ssl_cert_inst(&s->cert))
   1999 			{
   2000 			SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
   2001 			return(0);
   2002 			}
   2003 		}
   2004 #endif
   2005 
   2006 	switch (cmd)
   2007 		{
   2008 #ifndef OPENSSL_NO_RSA
   2009 	case SSL_CTRL_SET_TMP_RSA_CB:
   2010 		{
   2011 		s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
   2012 		}
   2013 		break;
   2014 #endif
   2015 #ifndef OPENSSL_NO_DH
   2016 	case SSL_CTRL_SET_TMP_DH_CB:
   2017 		{
   2018 		s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
   2019 		}
   2020 		break;
   2021 #endif
   2022 #ifndef OPENSSL_NO_ECDH
   2023 	case SSL_CTRL_SET_TMP_ECDH_CB:
   2024 		{
   2025 		s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
   2026 		}
   2027 		break;
   2028 #endif
   2029 #ifndef OPENSSL_NO_TLSEXT
   2030 	case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
   2031 		s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
   2032 					unsigned char *, int, void *))fp;
   2033 		break;
   2034 #endif
   2035 	default:
   2036 		break;
   2037 		}
   2038 	return(ret);
   2039 	}
   2040 
   2041 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
   2042 	{
   2043 	CERT *cert;
   2044 
   2045 	cert=ctx->cert;
   2046 
   2047 	switch (cmd)
   2048 		{
   2049 #ifndef OPENSSL_NO_RSA
   2050 	case SSL_CTRL_NEED_TMP_RSA:
   2051 		if (	(cert->rsa_tmp == NULL) &&
   2052 			((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
   2053 			 (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))
   2054 			)
   2055 			return(1);
   2056 		else
   2057 			return(0);
   2058 		/* break; */
   2059 	case SSL_CTRL_SET_TMP_RSA:
   2060 		{
   2061 		RSA *rsa;
   2062 		int i;
   2063 
   2064 		rsa=(RSA *)parg;
   2065 		i=1;
   2066 		if (rsa == NULL)
   2067 			i=0;
   2068 		else
   2069 			{
   2070 			if ((rsa=RSAPrivateKey_dup(rsa)) == NULL)
   2071 				i=0;
   2072 			}
   2073 		if (!i)
   2074 			{
   2075 			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB);
   2076 			return(0);
   2077 			}
   2078 		else
   2079 			{
   2080 			if (cert->rsa_tmp != NULL)
   2081 				RSA_free(cert->rsa_tmp);
   2082 			cert->rsa_tmp=rsa;
   2083 			return(1);
   2084 			}
   2085 		}
   2086 		/* break; */
   2087 	case SSL_CTRL_SET_TMP_RSA_CB:
   2088 		{
   2089 		SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2090 		return(0);
   2091 		}
   2092 		break;
   2093 #endif
   2094 #ifndef OPENSSL_NO_DH
   2095 	case SSL_CTRL_SET_TMP_DH:
   2096 		{
   2097 		DH *new=NULL,*dh;
   2098 
   2099 		dh=(DH *)parg;
   2100 		if ((new=DHparams_dup(dh)) == NULL)
   2101 			{
   2102 			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
   2103 			return 0;
   2104 			}
   2105 		if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
   2106 			{
   2107 			if (!DH_generate_key(new))
   2108 				{
   2109 				SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
   2110 				DH_free(new);
   2111 				return 0;
   2112 				}
   2113 			}
   2114 		if (cert->dh_tmp != NULL)
   2115 			DH_free(cert->dh_tmp);
   2116 		cert->dh_tmp=new;
   2117 		return 1;
   2118 		}
   2119 		/*break; */
   2120 	case SSL_CTRL_SET_TMP_DH_CB:
   2121 		{
   2122 		SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2123 		return(0);
   2124 		}
   2125 		break;
   2126 #endif
   2127 #ifndef OPENSSL_NO_ECDH
   2128 	case SSL_CTRL_SET_TMP_ECDH:
   2129 		{
   2130 		EC_KEY *ecdh = NULL;
   2131 
   2132 		if (parg == NULL)
   2133 			{
   2134 			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
   2135 			return 0;
   2136 			}
   2137 		ecdh = EC_KEY_dup((EC_KEY *)parg);
   2138 		if (ecdh == NULL)
   2139 			{
   2140 			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB);
   2141 			return 0;
   2142 			}
   2143 		if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
   2144 			{
   2145 			if (!EC_KEY_generate_key(ecdh))
   2146 				{
   2147 				EC_KEY_free(ecdh);
   2148 				SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
   2149 				return 0;
   2150 				}
   2151 			}
   2152 
   2153 		if (cert->ecdh_tmp != NULL)
   2154 			{
   2155 			EC_KEY_free(cert->ecdh_tmp);
   2156 			}
   2157 		cert->ecdh_tmp = ecdh;
   2158 		return 1;
   2159 		}
   2160 		/* break; */
   2161 	case SSL_CTRL_SET_TMP_ECDH_CB:
   2162 		{
   2163 		SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2164 		return(0);
   2165 		}
   2166 		break;
   2167 #endif /* !OPENSSL_NO_ECDH */
   2168 #ifndef OPENSSL_NO_TLSEXT
   2169 	case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
   2170 		ctx->tlsext_servername_arg=parg;
   2171 		break;
   2172 	case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
   2173 	case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
   2174 		{
   2175 		unsigned char *keys = parg;
   2176 		if (!keys)
   2177 			return 48;
   2178 		if (larg != 48)
   2179 			{
   2180 			SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
   2181 			return 0;
   2182 			}
   2183 		if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
   2184 			{
   2185 			memcpy(ctx->tlsext_tick_key_name, keys, 16);
   2186 			memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
   2187 			memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
   2188 			}
   2189 		else
   2190 			{
   2191 			memcpy(keys, ctx->tlsext_tick_key_name, 16);
   2192 			memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
   2193 			memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
   2194 			}
   2195 		return 1;
   2196 		}
   2197 
   2198 	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
   2199 		ctx->tlsext_status_arg=parg;
   2200 		return 1;
   2201 		break;
   2202 
   2203 #endif /* !OPENSSL_NO_TLSEXT */
   2204 	/* A Thawte special :-) */
   2205 	case SSL_CTRL_EXTRA_CHAIN_CERT:
   2206 		if (ctx->extra_certs == NULL)
   2207 			{
   2208 			if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
   2209 				return(0);
   2210 			}
   2211 		sk_X509_push(ctx->extra_certs,(X509 *)parg);
   2212 		break;
   2213 
   2214 	default:
   2215 		return(0);
   2216 		}
   2217 	return(1);
   2218 	}
   2219 
   2220 long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
   2221 	{
   2222 	CERT *cert;
   2223 
   2224 	cert=ctx->cert;
   2225 
   2226 	switch (cmd)
   2227 		{
   2228 #ifndef OPENSSL_NO_RSA
   2229 	case SSL_CTRL_SET_TMP_RSA_CB:
   2230 		{
   2231 		cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
   2232 		}
   2233 		break;
   2234 #endif
   2235 #ifndef OPENSSL_NO_DH
   2236 	case SSL_CTRL_SET_TMP_DH_CB:
   2237 		{
   2238 		cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
   2239 		}
   2240 		break;
   2241 #endif
   2242 #ifndef OPENSSL_NO_ECDH
   2243 	case SSL_CTRL_SET_TMP_ECDH_CB:
   2244 		{
   2245 		cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
   2246 		}
   2247 		break;
   2248 #endif
   2249 #ifndef OPENSSL_NO_TLSEXT
   2250 	case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
   2251 		ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
   2252 		break;
   2253 
   2254 	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
   2255 		ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
   2256 		break;
   2257 
   2258 	case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
   2259 		ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char  *,
   2260 						unsigned char *,
   2261 						EVP_CIPHER_CTX *,
   2262 						HMAC_CTX *, int))fp;
   2263 		break;
   2264 
   2265 #endif
   2266 	default:
   2267 		return(0);
   2268 		}
   2269 	return(1);
   2270 	}
   2271 
   2272 /* This function needs to check if the ciphers required are actually
   2273  * available */
   2274 SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
   2275 	{
   2276 	SSL_CIPHER c,*cp;
   2277 	unsigned long id;
   2278 
   2279 	id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
   2280 	c.id=id;
   2281 	cp = (SSL_CIPHER *)OBJ_bsearch((char *)&c,
   2282 		(char *)ssl3_ciphers,
   2283 		SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER),
   2284 		FP_ICC ssl_cipher_id_cmp);
   2285 	if (cp == NULL || cp->valid == 0)
   2286 		return NULL;
   2287 	else
   2288 		return cp;
   2289 	}
   2290 
   2291 int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
   2292 	{
   2293 	long l;
   2294 
   2295 	if (p != NULL)
   2296 		{
   2297 		l=c->id;
   2298 		if ((l & 0xff000000) != 0x03000000) return(0);
   2299 		p[0]=((unsigned char)(l>> 8L))&0xFF;
   2300 		p[1]=((unsigned char)(l     ))&0xFF;
   2301 		}
   2302 	return(2);
   2303 	}
   2304 
   2305 SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
   2306 	     STACK_OF(SSL_CIPHER) *srvr)
   2307 	{
   2308 	SSL_CIPHER *c,*ret=NULL;
   2309 	STACK_OF(SSL_CIPHER) *prio, *allow;
   2310 	int i,j,ok;
   2311 
   2312 	CERT *cert;
   2313 	unsigned long alg,mask,emask;
   2314 
   2315 	/* Let's see which ciphers we can support */
   2316 	cert=s->cert;
   2317 
   2318 #if 0
   2319 	/* Do not set the compare functions, because this may lead to a
   2320 	 * reordering by "id". We want to keep the original ordering.
   2321 	 * We may pay a price in performance during sk_SSL_CIPHER_find(),
   2322 	 * but would have to pay with the price of sk_SSL_CIPHER_dup().
   2323 	 */
   2324 	sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
   2325 	sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
   2326 #endif
   2327 
   2328 #ifdef CIPHER_DEBUG
   2329         printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), srvr);
   2330         for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
   2331 	    {
   2332 	    c=sk_SSL_CIPHER_value(srvr,i);
   2333 	    printf("%p:%s\n",c,c->name);
   2334 	    }
   2335         printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), clnt);
   2336         for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
   2337 	    {
   2338 	    c=sk_SSL_CIPHER_value(clnt,i);
   2339 	    printf("%p:%s\n",c,c->name);
   2340 	    }
   2341 #endif
   2342 
   2343 	if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)
   2344 	    {
   2345 	    prio = srvr;
   2346 	    allow = clnt;
   2347 	    }
   2348 	else
   2349 	    {
   2350 	    prio = clnt;
   2351 	    allow = srvr;
   2352 	    }
   2353 
   2354 	for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
   2355 		{
   2356 		c=sk_SSL_CIPHER_value(prio,i);
   2357 
   2358 		ssl_set_cert_masks(cert,c);
   2359 		mask=cert->mask;
   2360 		emask=cert->export_mask;
   2361 
   2362 #ifdef KSSL_DEBUG
   2363 		printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);
   2364 #endif    /* KSSL_DEBUG */
   2365 
   2366 		alg=c->algorithms&(SSL_MKEY_MASK|SSL_AUTH_MASK);
   2367 #ifndef OPENSSL_NO_KRB5
   2368                 if (alg & SSL_KRB5)
   2369                         {
   2370                         if ( !kssl_keytab_is_available(s->kssl_ctx) )
   2371                             continue;
   2372                         }
   2373 #endif /* OPENSSL_NO_KRB5 */
   2374 		if (SSL_C_IS_EXPORT(c))
   2375 			{
   2376 			ok=((alg & emask) == alg)?1:0;
   2377 #ifdef CIPHER_DEBUG
   2378 			printf("%d:[%08lX:%08lX]%p:%s (export)\n",ok,alg,emask,
   2379 			       c,c->name);
   2380 #endif
   2381 			}
   2382 		else
   2383 			{
   2384 			ok=((alg & mask) == alg)?1:0;
   2385 #ifdef CIPHER_DEBUG
   2386 			printf("%d:[%08lX:%08lX]%p:%s\n",ok,alg,mask,c,
   2387 			       c->name);
   2388 #endif
   2389 			}
   2390 
   2391 		if (!ok) continue;
   2392 		j=sk_SSL_CIPHER_find(allow,c);
   2393 		if (j >= 0)
   2394 			{
   2395 			ret=sk_SSL_CIPHER_value(allow,j);
   2396 			break;
   2397 			}
   2398 		}
   2399 	return(ret);
   2400 	}
   2401 
   2402 int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
   2403 	{
   2404 	int ret=0;
   2405 	unsigned long alg;
   2406 
   2407 	alg=s->s3->tmp.new_cipher->algorithms;
   2408 
   2409 #ifndef OPENSSL_NO_DH
   2410 	if (alg & (SSL_kDHr|SSL_kEDH))
   2411 		{
   2412 #  ifndef OPENSSL_NO_RSA
   2413 		p[ret++]=SSL3_CT_RSA_FIXED_DH;
   2414 #  endif
   2415 #  ifndef OPENSSL_NO_DSA
   2416 		p[ret++]=SSL3_CT_DSS_FIXED_DH;
   2417 #  endif
   2418 		}
   2419 	if ((s->version == SSL3_VERSION) &&
   2420 		(alg & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
   2421 		{
   2422 #  ifndef OPENSSL_NO_RSA
   2423 		p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
   2424 #  endif
   2425 #  ifndef OPENSSL_NO_DSA
   2426 		p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
   2427 #  endif
   2428 		}
   2429 #endif /* !OPENSSL_NO_DH */
   2430 #ifndef OPENSSL_NO_RSA
   2431 	p[ret++]=SSL3_CT_RSA_SIGN;
   2432 #endif
   2433 #ifndef OPENSSL_NO_DSA
   2434 	p[ret++]=SSL3_CT_DSS_SIGN;
   2435 #endif
   2436 #ifndef OPENSSL_NO_ECDH
   2437 	/* We should ask for fixed ECDH certificates only
   2438 	 * for SSL_kECDH (and not SSL_kECDHE)
   2439 	 */
   2440 	if ((alg & SSL_kECDH) && (s->version >= TLS1_VERSION))
   2441 		{
   2442 		p[ret++]=TLS_CT_RSA_FIXED_ECDH;
   2443 		p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
   2444 		}
   2445 #endif
   2446 
   2447 #ifndef OPENSSL_NO_ECDSA
   2448 	/* ECDSA certs can be used with RSA cipher suites as well
   2449 	 * so we don't need to check for SSL_kECDH or SSL_kECDHE
   2450 	 */
   2451 	if (s->version >= TLS1_VERSION)
   2452 		{
   2453 		p[ret++]=TLS_CT_ECDSA_SIGN;
   2454 		}
   2455 #endif
   2456 	return(ret);
   2457 	}
   2458 
   2459 int ssl3_shutdown(SSL *s)
   2460 	{
   2461 	int ret;
   2462 
   2463 	/* Don't do anything much if we have not done the handshake or
   2464 	 * we don't want to send messages :-) */
   2465 	if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
   2466 		{
   2467 		s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
   2468 		return(1);
   2469 		}
   2470 
   2471 	if (!(s->shutdown & SSL_SENT_SHUTDOWN))
   2472 		{
   2473 		s->shutdown|=SSL_SENT_SHUTDOWN;
   2474 #if 1
   2475 		ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
   2476 #endif
   2477 		/* our shutdown alert has been sent now, and if it still needs
   2478 	 	 * to be written, s->s3->alert_dispatch will be true */
   2479 	 	if (s->s3->alert_dispatch)
   2480 	 		return(-1);	/* return WANT_WRITE */
   2481 		}
   2482 	else if (s->s3->alert_dispatch)
   2483 		{
   2484 		/* resend it if not sent */
   2485 #if 1
   2486 		ret=s->method->ssl_dispatch_alert(s);
   2487 		if(ret == -1)
   2488 			{
   2489 			/* we only get to return -1 here the 2nd/Nth
   2490 			 * invocation, we must  have already signalled
   2491 			 * return 0 upon a previous invoation,
   2492 			 * return WANT_WRITE */
   2493 			return(ret);
   2494 			}
   2495 #endif
   2496 		}
   2497 	else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
   2498 		{
   2499 		/* If we are waiting for a close from our peer, we are closed */
   2500 		s->method->ssl_read_bytes(s,0,NULL,0,0);
   2501 		if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
   2502 			{
   2503 			return(-1);	/* return WANT_READ */
   2504 			}
   2505 		}
   2506 
   2507 	if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
   2508 		!s->s3->alert_dispatch)
   2509 		return(1);
   2510 	else
   2511 		return(0);
   2512 	}
   2513 
   2514 int ssl3_write(SSL *s, const void *buf, int len)
   2515 	{
   2516 	int ret,n;
   2517 
   2518 #if 0
   2519 	if (s->shutdown & SSL_SEND_SHUTDOWN)
   2520 		{
   2521 		s->rwstate=SSL_NOTHING;
   2522 		return(0);
   2523 		}
   2524 #endif
   2525 	clear_sys_error();
   2526 	if (s->s3->renegotiate) ssl3_renegotiate_check(s);
   2527 
   2528 	/* This is an experimental flag that sends the
   2529 	 * last handshake message in the same packet as the first
   2530 	 * use data - used to see if it helps the TCP protocol during
   2531 	 * session-id reuse */
   2532 	/* The second test is because the buffer may have been removed */
   2533 	if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
   2534 		{
   2535 		/* First time through, we write into the buffer */
   2536 		if (s->s3->delay_buf_pop_ret == 0)
   2537 			{
   2538 			ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
   2539 					     buf,len);
   2540 			if (ret <= 0) return(ret);
   2541 
   2542 			s->s3->delay_buf_pop_ret=ret;
   2543 			}
   2544 
   2545 		s->rwstate=SSL_WRITING;
   2546 		n=BIO_flush(s->wbio);
   2547 		if (n <= 0) return(n);
   2548 		s->rwstate=SSL_NOTHING;
   2549 
   2550 		/* We have flushed the buffer, so remove it */
   2551 		ssl_free_wbio_buffer(s);
   2552 		s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
   2553 
   2554 		ret=s->s3->delay_buf_pop_ret;
   2555 		s->s3->delay_buf_pop_ret=0;
   2556 		}
   2557 	else
   2558 		{
   2559 		ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
   2560 			buf,len);
   2561 		if (ret <= 0) return(ret);
   2562 		}
   2563 
   2564 	return(ret);
   2565 	}
   2566 
   2567 static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
   2568 	{
   2569 	int n,ret;
   2570 
   2571 	clear_sys_error();
   2572 	if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
   2573 		{
   2574 		/* Deal with an application that calls SSL_read() when handshake data
   2575 		 * is yet to be written.
   2576 		 */
   2577 		if (BIO_wpending(s->wbio) > 0)
   2578 			{
   2579 			s->rwstate=SSL_WRITING;
   2580 			n=BIO_flush(s->wbio);
   2581 			if (n <= 0) return(n);
   2582 			s->rwstate=SSL_NOTHING;
   2583 			}
   2584 		}
   2585 	if (s->s3->renegotiate) ssl3_renegotiate_check(s);
   2586 	s->s3->in_read_app_data=1;
   2587 	ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
   2588 	if ((ret == -1) && (s->s3->in_read_app_data == 2))
   2589 		{
   2590 		/* ssl3_read_bytes decided to call s->handshake_func, which
   2591 		 * called ssl3_read_bytes to read handshake data.
   2592 		 * However, ssl3_read_bytes actually found application data
   2593 		 * and thinks that application data makes sense here; so disable
   2594 		 * handshake processing and try to read application data again. */
   2595 		s->in_handshake++;
   2596 		ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
   2597 		s->in_handshake--;
   2598 		}
   2599 	else
   2600 		s->s3->in_read_app_data=0;
   2601 
   2602 	return(ret);
   2603 	}
   2604 
   2605 int ssl3_read(SSL *s, void *buf, int len)
   2606 	{
   2607 	return ssl3_read_internal(s, buf, len, 0);
   2608 	}
   2609 
   2610 int ssl3_peek(SSL *s, void *buf, int len)
   2611 	{
   2612 	return ssl3_read_internal(s, buf, len, 1);
   2613 	}
   2614 
   2615 int ssl3_renegotiate(SSL *s)
   2616 	{
   2617 	if (s->handshake_func == NULL)
   2618 		return(1);
   2619 
   2620 	if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
   2621 		return(0);
   2622 
   2623 	s->s3->renegotiate=1;
   2624 	return(1);
   2625 	}
   2626 
   2627 int ssl3_renegotiate_check(SSL *s)
   2628 	{
   2629 	int ret=0;
   2630 
   2631 	if (s->s3->renegotiate)
   2632 		{
   2633 		if (	(s->s3->rbuf.left == 0) &&
   2634 			(s->s3->wbuf.left == 0) &&
   2635 			!SSL_in_init(s))
   2636 			{
   2637 /*
   2638 if we are the server, and we have sent a 'RENEGOTIATE' message, we
   2639 need to go to SSL_ST_ACCEPT.
   2640 */
   2641 			/* SSL_ST_ACCEPT */
   2642 			s->state=SSL_ST_RENEGOTIATE;
   2643 			s->s3->renegotiate=0;
   2644 			s->s3->num_renegotiations++;
   2645 			s->s3->total_renegotiations++;
   2646 			ret=1;
   2647 			}
   2648 		}
   2649 	return(ret);
   2650 	}
   2651 
   2652