Home | History | Annotate | Download | only in ssl
      1 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
      2  * All rights reserved.
      3  *
      4  * This package is an SSL implementation written
      5  * by Eric Young (eay (at) cryptsoft.com).
      6  * The implementation was written so as to conform with Netscapes SSL.
      7  *
      8  * This library is free for commercial and non-commercial use as long as
      9  * the following conditions are aheared to.  The following conditions
     10  * apply to all code found in this distribution, be it the RC4, RSA,
     11  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
     12  * included with this distribution is covered by the same copyright terms
     13  * except that the holder is Tim Hudson (tjh (at) cryptsoft.com).
     14  *
     15  * Copyright remains Eric Young's, and as such any Copyright notices in
     16  * the code are not to be removed.
     17  * If this package is used in a product, Eric Young should be given attribution
     18  * as the author of the parts of the library used.
     19  * This can be in the form of a textual message at program startup or
     20  * in documentation (online or textual) provided with the package.
     21  *
     22  * Redistribution and use in source and binary forms, with or without
     23  * modification, are permitted provided that the following conditions
     24  * are met:
     25  * 1. Redistributions of source code must retain the copyright
     26  *    notice, this list of conditions and the following disclaimer.
     27  * 2. Redistributions in binary form must reproduce the above copyright
     28  *    notice, this list of conditions and the following disclaimer in the
     29  *    documentation and/or other materials provided with the distribution.
     30  * 3. All advertising materials mentioning features or use of this software
     31  *    must display the following acknowledgement:
     32  *    "This product includes cryptographic software written by
     33  *     Eric Young (eay (at) cryptsoft.com)"
     34  *    The word 'cryptographic' can be left out if the rouines from the library
     35  *    being used are not cryptographic related :-).
     36  * 4. If you include any Windows specific code (or a derivative thereof) from
     37  *    the apps directory (application code) you must include an acknowledgement:
     38  *    "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)"
     39  *
     40  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
     41  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     43  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     44  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     45  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     46  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     47  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     48  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     49  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     50  * SUCH DAMAGE.
     51  *
     52  * The licence and distribution terms for any publically available version or
     53  * derivative of this code cannot be changed.  i.e. this code cannot simply be
     54  * copied and put under another distribution licence
     55  * [including the GNU Public Licence.]
     56  */
     57 /* ====================================================================
     58  * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
     59  *
     60  * Redistribution and use in source and binary forms, with or without
     61  * modification, are permitted provided that the following conditions
     62  * are met:
     63  *
     64  * 1. Redistributions of source code must retain the above copyright
     65  *    notice, this list of conditions and the following disclaimer.
     66  *
     67  * 2. Redistributions in binary form must reproduce the above copyright
     68  *    notice, this list of conditions and the following disclaimer in
     69  *    the documentation and/or other materials provided with the
     70  *    distribution.
     71  *
     72  * 3. All advertising materials mentioning features or use of this
     73  *    software must display the following acknowledgment:
     74  *    "This product includes software developed by the OpenSSL Project
     75  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
     76  *
     77  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     78  *    endorse or promote products derived from this software without
     79  *    prior written permission. For written permission, please contact
     80  *    openssl-core (at) openssl.org.
     81  *
     82  * 5. Products derived from this software may not be called "OpenSSL"
     83  *    nor may "OpenSSL" appear in their names without prior written
     84  *    permission of the OpenSSL Project.
     85  *
     86  * 6. Redistributions of any form whatsoever must retain the following
     87  *    acknowledgment:
     88  *    "This product includes software developed by the OpenSSL Project
     89  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
     90  *
     91  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     92  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     93  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     94  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     95  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     96  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     97  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     98  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     99  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    100  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    101  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    102  * OF THE POSSIBILITY OF SUCH DAMAGE.
    103  * ====================================================================
    104  *
    105  * This product includes cryptographic software written by Eric Young
    106  * (eay (at) cryptsoft.com).  This product includes software written by Tim
    107  * Hudson (tjh (at) cryptsoft.com).
    108  *
    109  */
    110 /* ====================================================================
    111  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
    112  *
    113  * Portions of the attached software ("Contribution") are developed by
    114  * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
    115  *
    116  * The Contribution is licensed pursuant to the OpenSSL open source
    117  * license provided above.
    118  *
    119  * ECC cipher suite support in OpenSSL originally written by
    120  * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
    121  *
    122  */
    123 /* ====================================================================
    124  * Copyright 2005 Nokia. All rights reserved.
    125  *
    126  * The portions of the attached software ("Contribution") is developed by
    127  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
    128  * license.
    129  *
    130  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
    131  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
    132  * support (see RFC 4279) to OpenSSL.
    133  *
    134  * No patent licenses or other rights except those expressly stated in
    135  * the OpenSSL open source license shall be deemed granted or received
    136  * expressly, by implication, estoppel, or otherwise.
    137  *
    138  * No assurances are provided by Nokia that the Contribution does not
    139  * infringe the patent or other intellectual property rights of any third
    140  * party or that the license provides you with all the necessary rights
    141  * to make use of the Contribution.
    142  *
    143  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
    144  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
    145  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
    146  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
    147  * OTHERWISE. */
    148 
    149 #include <assert.h>
    150 #include <stdio.h>
    151 
    152 #include <openssl/buf.h>
    153 #include <openssl/dh.h>
    154 #include <openssl/md5.h>
    155 #include <openssl/mem.h>
    156 #include <openssl/obj.h>
    157 
    158 #include "ssl_locl.h"
    159 
    160 #define SSL3_NUM_CIPHERS	(sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
    161 
    162 /* FIXED_NONCE_LEN is a macro that results in the correct value to set the
    163  * fixed nonce length in SSL_CIPHER.algorithms2. It's the inverse of
    164  * SSL_CIPHER_AEAD_FIXED_NONCE_LEN. */
    165 #define FIXED_NONCE_LEN(x) ((x/2)<<24)
    166 
    167 /* list of available SSLv3 ciphers (sorted by id) */
    168 const SSL_CIPHER ssl3_ciphers[]={
    169 
    170 /* The RSA ciphers */
    171 /* Cipher 04 */
    172 	{
    173 	1,
    174 	SSL3_TXT_RSA_RC4_128_MD5,
    175 	SSL3_CK_RSA_RC4_128_MD5,
    176 	SSL_kRSA,
    177 	SSL_aRSA,
    178 	SSL_RC4,
    179 	SSL_MD5,
    180 	SSL_SSLV3,
    181 	SSL_MEDIUM,
    182 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|SSL_CIPHER_ALGORITHM2_STATEFUL_AEAD,
    183 	128,
    184 	128,
    185 	},
    186 
    187 /* Cipher 05 */
    188 	{
    189 	1,
    190 	SSL3_TXT_RSA_RC4_128_SHA,
    191 	SSL3_CK_RSA_RC4_128_SHA,
    192 	SSL_kRSA,
    193 	SSL_aRSA,
    194 	SSL_RC4,
    195 	SSL_SHA1,
    196 	SSL_SSLV3,
    197 	SSL_MEDIUM,
    198 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    199 	128,
    200 	128,
    201 	},
    202 
    203 /* Cipher 0A */
    204 	{
    205 	1,
    206 	SSL3_TXT_RSA_DES_192_CBC3_SHA,
    207 	SSL3_CK_RSA_DES_192_CBC3_SHA,
    208 	SSL_kRSA,
    209 	SSL_aRSA,
    210 	SSL_3DES,
    211 	SSL_SHA1,
    212 	SSL_SSLV3,
    213 	SSL_HIGH|SSL_FIPS,
    214 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    215 	112,
    216 	168,
    217 	},
    218 
    219 /* The Ephemeral DH ciphers */
    220 
    221 /* Cipher 18 */
    222 	{
    223 	1,
    224 	SSL3_TXT_ADH_RC4_128_MD5,
    225 	SSL3_CK_ADH_RC4_128_MD5,
    226 	SSL_kEDH,
    227 	SSL_aNULL,
    228 	SSL_RC4,
    229 	SSL_MD5,
    230 	SSL_SSLV3,
    231 	SSL_MEDIUM,
    232 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    233 	128,
    234 	128,
    235 	},
    236 
    237 /* New AES ciphersuites */
    238 /* Cipher 2F */
    239 	{
    240 	1,
    241 	TLS1_TXT_RSA_WITH_AES_128_SHA,
    242 	TLS1_CK_RSA_WITH_AES_128_SHA,
    243 	SSL_kRSA,
    244 	SSL_aRSA,
    245 	SSL_AES128,
    246 	SSL_SHA1,
    247 	SSL_TLSV1,
    248 	SSL_HIGH|SSL_FIPS,
    249 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    250 	128,
    251 	128,
    252 	},
    253 /* Cipher 33 */
    254 	{
    255 	1,
    256 	TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
    257 	TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
    258 	SSL_kEDH,
    259 	SSL_aRSA,
    260 	SSL_AES128,
    261 	SSL_SHA1,
    262 	SSL_TLSV1,
    263 	SSL_HIGH|SSL_FIPS,
    264 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    265 	128,
    266 	128,
    267 	},
    268 /* Cipher 34 */
    269 	{
    270 	1,
    271 	TLS1_TXT_ADH_WITH_AES_128_SHA,
    272 	TLS1_CK_ADH_WITH_AES_128_SHA,
    273 	SSL_kEDH,
    274 	SSL_aNULL,
    275 	SSL_AES128,
    276 	SSL_SHA1,
    277 	SSL_TLSV1,
    278 	SSL_HIGH|SSL_FIPS,
    279 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    280 	128,
    281 	128,
    282 	},
    283 
    284 /* Cipher 35 */
    285 	{
    286 	1,
    287 	TLS1_TXT_RSA_WITH_AES_256_SHA,
    288 	TLS1_CK_RSA_WITH_AES_256_SHA,
    289 	SSL_kRSA,
    290 	SSL_aRSA,
    291 	SSL_AES256,
    292 	SSL_SHA1,
    293 	SSL_TLSV1,
    294 	SSL_HIGH|SSL_FIPS,
    295 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    296 	256,
    297 	256,
    298 	},
    299 
    300 /* Cipher 39 */
    301 	{
    302 	1,
    303 	TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
    304 	TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
    305 	SSL_kEDH,
    306 	SSL_aRSA,
    307 	SSL_AES256,
    308 	SSL_SHA1,
    309 	SSL_TLSV1,
    310 	SSL_HIGH|SSL_FIPS,
    311 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    312 	256,
    313 	256,
    314 	},
    315 
    316 	/* Cipher 3A */
    317 	{
    318 	1,
    319 	TLS1_TXT_ADH_WITH_AES_256_SHA,
    320 	TLS1_CK_ADH_WITH_AES_256_SHA,
    321 	SSL_kEDH,
    322 	SSL_aNULL,
    323 	SSL_AES256,
    324 	SSL_SHA1,
    325 	SSL_TLSV1,
    326 	SSL_HIGH|SSL_FIPS,
    327 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    328 	256,
    329 	256,
    330 	},
    331 
    332 	/* TLS v1.2 ciphersuites */
    333 	/* Cipher 3C */
    334 	{
    335 	1,
    336 	TLS1_TXT_RSA_WITH_AES_128_SHA256,
    337 	TLS1_CK_RSA_WITH_AES_128_SHA256,
    338 	SSL_kRSA,
    339 	SSL_aRSA,
    340 	SSL_AES128,
    341 	SSL_SHA256,
    342 	SSL_TLSV1_2,
    343 	SSL_HIGH|SSL_FIPS,
    344 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    345 	128,
    346 	128,
    347 	},
    348 
    349 	/* Cipher 3D */
    350 	{
    351 	1,
    352 	TLS1_TXT_RSA_WITH_AES_256_SHA256,
    353 	TLS1_CK_RSA_WITH_AES_256_SHA256,
    354 	SSL_kRSA,
    355 	SSL_aRSA,
    356 	SSL_AES256,
    357 	SSL_SHA256,
    358 	SSL_TLSV1_2,
    359 	SSL_HIGH|SSL_FIPS,
    360 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    361 	256,
    362 	256,
    363 	},
    364 
    365 
    366 	/* TLS v1.2 ciphersuites */
    367 	/* Cipher 67 */
    368 	{
    369 	1,
    370 	TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
    371 	TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
    372 	SSL_kEDH,
    373 	SSL_aRSA,
    374 	SSL_AES128,
    375 	SSL_SHA256,
    376 	SSL_TLSV1_2,
    377 	SSL_HIGH|SSL_FIPS,
    378 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    379 	128,
    380 	128,
    381 	},
    382 
    383 	/* Cipher 6B */
    384 	{
    385 	1,
    386 	TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
    387 	TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
    388 	SSL_kEDH,
    389 	SSL_aRSA,
    390 	SSL_AES256,
    391 	SSL_SHA256,
    392 	SSL_TLSV1_2,
    393 	SSL_HIGH|SSL_FIPS,
    394 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    395 	256,
    396 	256,
    397 	},
    398 
    399 	/* Cipher 6C */
    400 	{
    401 	1,
    402 	TLS1_TXT_ADH_WITH_AES_128_SHA256,
    403 	TLS1_CK_ADH_WITH_AES_128_SHA256,
    404 	SSL_kEDH,
    405 	SSL_aNULL,
    406 	SSL_AES128,
    407 	SSL_SHA256,
    408 	SSL_TLSV1_2,
    409 	SSL_HIGH|SSL_FIPS,
    410 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    411 	128,
    412 	128,
    413 	},
    414 
    415 	/* Cipher 6D */
    416 	{
    417 	1,
    418 	TLS1_TXT_ADH_WITH_AES_256_SHA256,
    419 	TLS1_CK_ADH_WITH_AES_256_SHA256,
    420 	SSL_kEDH,
    421 	SSL_aNULL,
    422 	SSL_AES256,
    423 	SSL_SHA256,
    424 	SSL_TLSV1_2,
    425 	SSL_HIGH|SSL_FIPS,
    426 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    427 	256,
    428 	256,
    429 	},
    430 
    431 
    432 	/* Cipher 8A */
    433 	{
    434 	1,
    435 	TLS1_TXT_PSK_WITH_RC4_128_SHA,
    436 	TLS1_CK_PSK_WITH_RC4_128_SHA,
    437 	SSL_kPSK,
    438 	SSL_aPSK,
    439 	SSL_RC4,
    440 	SSL_SHA1,
    441 	SSL_TLSV1,
    442 	SSL_MEDIUM,
    443 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    444 	128,
    445 	128,
    446 	},
    447 
    448 	/* Cipher 8C */
    449 	{
    450 	1,
    451 	TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
    452 	TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
    453 	SSL_kPSK,
    454 	SSL_aPSK,
    455 	SSL_AES128,
    456 	SSL_SHA1,
    457 	SSL_TLSV1,
    458 	SSL_HIGH|SSL_FIPS,
    459 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    460 	128,
    461 	128,
    462 	},
    463 
    464 	/* Cipher 8D */
    465 	{
    466 	1,
    467 	TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
    468 	TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
    469 	SSL_kPSK,
    470 	SSL_aPSK,
    471 	SSL_AES256,
    472 	SSL_SHA1,
    473 	SSL_TLSV1,
    474 	SSL_HIGH|SSL_FIPS,
    475 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    476 	256,
    477 	256,
    478 	},
    479 
    480 	/* GCM ciphersuites from RFC5288 */
    481 
    482 	/* Cipher 9C */
    483 	{
    484 	1,
    485 	TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
    486 	TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
    487 	SSL_kRSA,
    488 	SSL_aRSA,
    489 	SSL_AES128GCM,
    490 	SSL_AEAD,
    491 	SSL_TLSV1_2,
    492 	SSL_HIGH|SSL_FIPS,
    493 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    494 	128,
    495 	128,
    496 	},
    497 
    498 	/* Cipher 9D */
    499 	{
    500 	1,
    501 	TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
    502 	TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
    503 	SSL_kRSA,
    504 	SSL_aRSA,
    505 	SSL_AES256GCM,
    506 	SSL_AEAD,
    507 	SSL_TLSV1_2,
    508 	SSL_HIGH|SSL_FIPS,
    509 	SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
    510 		SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    511 	256,
    512 	256,
    513 	},
    514 
    515 	/* Cipher 9E */
    516 	{
    517 	1,
    518 	TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
    519 	TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
    520 	SSL_kEDH,
    521 	SSL_aRSA,
    522 	SSL_AES128GCM,
    523 	SSL_AEAD,
    524 	SSL_TLSV1_2,
    525 	SSL_HIGH|SSL_FIPS,
    526 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    527 	128,
    528 	128,
    529 	},
    530 
    531 	/* Cipher 9F */
    532 	{
    533 	1,
    534 	TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
    535 	TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
    536 	SSL_kEDH,
    537 	SSL_aRSA,
    538 	SSL_AES256GCM,
    539 	SSL_AEAD,
    540 	SSL_TLSV1_2,
    541 	SSL_HIGH|SSL_FIPS,
    542 	SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
    543 		SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    544 	256,
    545 	256,
    546 	},
    547 
    548 	/* Cipher A6 */
    549 	{
    550 	1,
    551 	TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
    552 	TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
    553 	SSL_kEDH,
    554 	SSL_aNULL,
    555 	SSL_AES128GCM,
    556 	SSL_AEAD,
    557 	SSL_TLSV1_2,
    558 	SSL_HIGH|SSL_FIPS,
    559 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    560 	128,
    561 	128,
    562 	},
    563 
    564 	/* Cipher A7 */
    565 	{
    566 	1,
    567 	TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
    568 	TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
    569 	SSL_kEDH,
    570 	SSL_aNULL,
    571 	SSL_AES256GCM,
    572 	SSL_AEAD,
    573 	SSL_TLSV1_2,
    574 	SSL_HIGH|SSL_FIPS,
    575 	SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
    576 		SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    577 	256,
    578 	256,
    579 	},
    580 
    581 	/* Cipher C007 */
    582 	{
    583 	1,
    584 	TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
    585 	TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
    586 	SSL_kEECDH,
    587 	SSL_aECDSA,
    588 	SSL_RC4,
    589 	SSL_SHA1,
    590 	SSL_TLSV1,
    591 	SSL_MEDIUM,
    592 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    593 	128,
    594 	128,
    595 	},
    596 
    597 	/* Cipher C009 */
    598 	{
    599 	1,
    600 	TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
    601 	TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
    602 	SSL_kEECDH,
    603 	SSL_aECDSA,
    604 	SSL_AES128,
    605 	SSL_SHA1,
    606 	SSL_TLSV1,
    607 	SSL_HIGH|SSL_FIPS,
    608 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    609 	128,
    610 	128,
    611 	},
    612 
    613 	/* Cipher C00A */
    614 	{
    615 	1,
    616 	TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
    617 	TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
    618 	SSL_kEECDH,
    619 	SSL_aECDSA,
    620 	SSL_AES256,
    621 	SSL_SHA1,
    622 	SSL_TLSV1,
    623 	SSL_HIGH|SSL_FIPS,
    624 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    625 	256,
    626 	256,
    627 	},
    628 
    629 	/* Cipher C011 */
    630 	{
    631 	1,
    632 	TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
    633 	TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
    634 	SSL_kEECDH,
    635 	SSL_aRSA,
    636 	SSL_RC4,
    637 	SSL_SHA1,
    638 	SSL_TLSV1,
    639 	SSL_MEDIUM,
    640 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    641 	128,
    642 	128,
    643 	},
    644 
    645 	/* Cipher C013 */
    646 	{
    647 	1,
    648 	TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
    649 	TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
    650 	SSL_kEECDH,
    651 	SSL_aRSA,
    652 	SSL_AES128,
    653 	SSL_SHA1,
    654 	SSL_TLSV1,
    655 	SSL_HIGH|SSL_FIPS,
    656 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    657 	128,
    658 	128,
    659 	},
    660 
    661 	/* Cipher C014 */
    662 	{
    663 	1,
    664 	TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
    665 	TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
    666 	SSL_kEECDH,
    667 	SSL_aRSA,
    668 	SSL_AES256,
    669 	SSL_SHA1,
    670 	SSL_TLSV1,
    671 	SSL_HIGH|SSL_FIPS,
    672 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    673 	256,
    674 	256,
    675 	},
    676 
    677 	/* Cipher C016 */
    678 	{
    679 	1,
    680 	TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
    681 	TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
    682 	SSL_kEECDH,
    683 	SSL_aNULL,
    684 	SSL_RC4,
    685 	SSL_SHA1,
    686 	SSL_TLSV1,
    687 	SSL_MEDIUM,
    688 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    689 	128,
    690 	128,
    691 	},
    692 
    693 	/* Cipher C018 */
    694 	{
    695 	1,
    696 	TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
    697 	TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
    698 	SSL_kEECDH,
    699 	SSL_aNULL,
    700 	SSL_AES128,
    701 	SSL_SHA1,
    702 	SSL_TLSV1,
    703 	SSL_HIGH|SSL_FIPS,
    704 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    705 	128,
    706 	128,
    707 	},
    708 
    709 	/* Cipher C019 */
    710 	{
    711 	1,
    712 	TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
    713 	TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
    714 	SSL_kEECDH,
    715 	SSL_aNULL,
    716 	SSL_AES256,
    717 	SSL_SHA1,
    718 	SSL_TLSV1,
    719 	SSL_HIGH|SSL_FIPS,
    720 	SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
    721 	256,
    722 	256,
    723 	},
    724 
    725 
    726 	/* HMAC based TLS v1.2 ciphersuites from RFC5289 */
    727 
    728 	/* Cipher C023 */
    729 	{
    730 	1,
    731 	TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
    732 	TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
    733 	SSL_kEECDH,
    734 	SSL_aECDSA,
    735 	SSL_AES128,
    736 	SSL_SHA256,
    737 	SSL_TLSV1_2,
    738 	SSL_HIGH|SSL_FIPS,
    739 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
    740 	128,
    741 	128,
    742 	},
    743 
    744 	/* Cipher C024 */
    745 	{
    746 	1,
    747 	TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
    748 	TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
    749 	SSL_kEECDH,
    750 	SSL_aECDSA,
    751 	SSL_AES256,
    752 	SSL_SHA384,
    753 	SSL_TLSV1_2,
    754 	SSL_HIGH|SSL_FIPS,
    755 	SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
    756 	256,
    757 	256,
    758 	},
    759 
    760 	/* Cipher C027 */
    761 	{
    762 	1,
    763 	TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
    764 	TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
    765 	SSL_kEECDH,
    766 	SSL_aRSA,
    767 	SSL_AES128,
    768 	SSL_SHA256,
    769 	SSL_TLSV1_2,
    770 	SSL_HIGH|SSL_FIPS,
    771 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
    772 	128,
    773 	128,
    774 	},
    775 
    776 	/* Cipher C028 */
    777 	{
    778 	1,
    779 	TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
    780 	TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
    781 	SSL_kEECDH,
    782 	SSL_aRSA,
    783 	SSL_AES256,
    784 	SSL_SHA384,
    785 	SSL_TLSV1_2,
    786 	SSL_HIGH|SSL_FIPS,
    787 	SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
    788 	256,
    789 	256,
    790 	},
    791 
    792 	/* GCM based TLS v1.2 ciphersuites from RFC5289 */
    793 
    794 	/* Cipher C02B */
    795 	{
    796 	1,
    797 	TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
    798 	TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
    799 	SSL_kEECDH,
    800 	SSL_aECDSA,
    801 	SSL_AES128GCM,
    802 	SSL_AEAD,
    803 	SSL_TLSV1_2,
    804 	SSL_HIGH|SSL_FIPS,
    805 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    806 	128,
    807 	128,
    808 	},
    809 
    810 	/* Cipher C02C */
    811 	{
    812 	1,
    813 	TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
    814 	TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
    815 	SSL_kEECDH,
    816 	SSL_aECDSA,
    817 	SSL_AES256GCM,
    818 	SSL_AEAD,
    819 	SSL_TLSV1_2,
    820 	SSL_HIGH|SSL_FIPS,
    821 	SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
    822 		SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    823 	256,
    824 	256,
    825 	},
    826 
    827 	/* Cipher C02F */
    828 	{
    829 	1,
    830 	TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
    831 	TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
    832 	SSL_kEECDH,
    833 	SSL_aRSA,
    834 	SSL_AES128GCM,
    835 	SSL_AEAD,
    836 	SSL_TLSV1_2,
    837 	SSL_HIGH|SSL_FIPS,
    838 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    839 	128,
    840 	128,
    841 	},
    842 
    843 	/* Cipher C030 */
    844 	{
    845 	1,
    846 	TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
    847 	TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
    848 	SSL_kEECDH,
    849 	SSL_aRSA,
    850 	SSL_AES256GCM,
    851 	SSL_AEAD,
    852 	SSL_TLSV1_2,
    853 	SSL_HIGH|SSL_FIPS,
    854 	SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
    855 		SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    856 	256,
    857 	256,
    858 	},
    859 
    860     /* ECDH PSK ciphersuites */
    861 	/* Cipher CAFE */
    862 	{
    863 	1,
    864 	TLS1_TXT_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
    865 	TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
    866 	SSL_kEECDH,
    867 	SSL_aPSK,
    868 	SSL_AES128GCM,
    869 	SSL_AEAD,
    870 	SSL_TLSV1_2,
    871 	SSL_HIGH,
    872 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
    873 		SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
    874 	128,
    875 	128,
    876 	},
    877 
    878 
    879 	{
    880 	1,
    881 	TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
    882 	TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305,
    883 	SSL_kEECDH,
    884 	SSL_aRSA,
    885 	SSL_CHACHA20POLY1305,
    886 	SSL_AEAD,
    887 	SSL_TLSV1_2,
    888 	SSL_HIGH,
    889 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
    890 	256,
    891 	0,
    892 	},
    893 
    894 	{
    895 	1,
    896 	TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
    897 	TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305,
    898 	SSL_kEECDH,
    899 	SSL_aECDSA,
    900 	SSL_CHACHA20POLY1305,
    901 	SSL_AEAD,
    902 	SSL_TLSV1_2,
    903 	SSL_HIGH,
    904 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
    905 	256,
    906 	0,
    907 	},
    908 
    909 	{
    910 	1,
    911 	TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
    912 	TLS1_CK_DHE_RSA_CHACHA20_POLY1305,
    913 	SSL_kEDH,
    914 	SSL_aRSA,
    915 	SSL_CHACHA20POLY1305,
    916 	SSL_AEAD,
    917 	SSL_TLSV1_2,
    918 	SSL_HIGH,
    919 	SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
    920 	256,
    921 	0,
    922 	},
    923 
    924 /* end of list */
    925 	};
    926 
    927 SSL3_ENC_METHOD SSLv3_enc_data={
    928 	ssl3_enc,
    929 	n_ssl3_mac,
    930 	ssl3_setup_key_block,
    931 	ssl3_generate_master_secret,
    932 	ssl3_change_cipher_state,
    933 	ssl3_final_finish_mac,
    934 	MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
    935 	ssl3_cert_verify_mac,
    936 	SSL3_MD_CLIENT_FINISHED_CONST,4,
    937 	SSL3_MD_SERVER_FINISHED_CONST,4,
    938 	ssl3_alert_code,
    939 	(int (*)(SSL *, unsigned char *, size_t, const char *,
    940 		 size_t, const unsigned char *, size_t,
    941 		 int use_context))ssl_undefined_function,
    942 	0,
    943 	SSL3_HM_HEADER_LENGTH,
    944 	ssl3_set_handshake_header,
    945 	ssl3_handshake_write
    946 	};
    947 
    948 int ssl3_num_ciphers(void)
    949 	{
    950 	return(SSL3_NUM_CIPHERS);
    951 	}
    952 
    953 const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
    954 	{
    955 	if (u < SSL3_NUM_CIPHERS)
    956 		return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
    957 	else
    958 		return(NULL);
    959 	}
    960 
    961 int ssl3_pending(const SSL *s)
    962 	{
    963 	if (s->rstate == SSL_ST_READ_BODY)
    964 		return 0;
    965 
    966 	return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
    967 	}
    968 
    969 void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len)
    970 	{
    971 	unsigned char *p = (unsigned char *)s->init_buf->data;
    972 	*(p++) = htype;
    973 	l2n3(len, p);
    974 	s->init_num = (int)len + SSL3_HM_HEADER_LENGTH;
    975 	s->init_off = 0;
    976 	}
    977 
    978 int ssl3_handshake_write(SSL *s)
    979 	{
    980 	return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
    981 	}
    982 
    983 int ssl3_new(SSL *s)
    984 	{
    985 	SSL3_STATE *s3;
    986 
    987 	if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
    988 	memset(s3,0,sizeof *s3);
    989 	memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
    990 	memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
    991 
    992 	s->s3=s3;
    993 
    994 	s->tlsext_channel_id_enabled = s->ctx->tlsext_channel_id_enabled;
    995 	if (s->ctx->tlsext_channel_id_private)
    996 		s->tlsext_channel_id_private = EVP_PKEY_dup(s->ctx->tlsext_channel_id_private);
    997 	s->method->ssl_clear(s);
    998 	return(1);
    999 err:
   1000 	return(0);
   1001 	}
   1002 
   1003 void ssl3_free(SSL *s)
   1004 	{
   1005 	if(s == NULL)
   1006 	    return;
   1007 
   1008 	ssl3_cleanup_key_block(s);
   1009 	if (s->s3->rbuf.buf != NULL)
   1010 		ssl3_release_read_buffer(s);
   1011 	if (s->s3->wbuf.buf != NULL)
   1012 		ssl3_release_write_buffer(s);
   1013 	if (s->s3->tmp.dh != NULL)
   1014 		DH_free(s->s3->tmp.dh);
   1015 	if (s->s3->tmp.ecdh != NULL)
   1016 		EC_KEY_free(s->s3->tmp.ecdh);
   1017 
   1018 	if (s->s3->tmp.ca_names != NULL)
   1019 		sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
   1020 	if (s->s3->tmp.certificate_types != NULL)
   1021 		OPENSSL_free(s->s3->tmp.certificate_types);
   1022 	if (s->s3->handshake_buffer) {
   1023 		BIO_free(s->s3->handshake_buffer);
   1024 	}
   1025 	if (s->s3->handshake_dgst) ssl3_free_digest_list(s);
   1026 	if (s->s3->alpn_selected)
   1027 		OPENSSL_free(s->s3->alpn_selected);
   1028 
   1029 	OPENSSL_cleanse(s->s3,sizeof *s->s3);
   1030 	OPENSSL_free(s->s3);
   1031 	s->s3=NULL;
   1032 	}
   1033 
   1034 void ssl3_clear(SSL *s)
   1035 	{
   1036 	unsigned char *rp,*wp;
   1037 	size_t rlen, wlen;
   1038 	int init_extra;
   1039 
   1040 	ssl3_cleanup_key_block(s);
   1041 	if (s->s3->tmp.ca_names != NULL)
   1042 		sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
   1043 	if (s->s3->tmp.certificate_types != NULL)
   1044 		OPENSSL_free(s->s3->tmp.certificate_types);
   1045 	s->s3->tmp.num_certificate_types = 0;
   1046 
   1047 	if (s->s3->tmp.dh != NULL)
   1048 		{
   1049 		DH_free(s->s3->tmp.dh);
   1050 		s->s3->tmp.dh = NULL;
   1051 		}
   1052 	if (s->s3->tmp.ecdh != NULL)
   1053 		{
   1054 		EC_KEY_free(s->s3->tmp.ecdh);
   1055 		s->s3->tmp.ecdh = NULL;
   1056 		}
   1057 	rp = s->s3->rbuf.buf;
   1058 	wp = s->s3->wbuf.buf;
   1059 	rlen = s->s3->rbuf.len;
   1060  	wlen = s->s3->wbuf.len;
   1061 	init_extra = s->s3->init_extra;
   1062 	if (s->s3->handshake_buffer) {
   1063 		BIO_free(s->s3->handshake_buffer);
   1064 		s->s3->handshake_buffer = NULL;
   1065 	}
   1066 	if (s->s3->handshake_dgst) {
   1067 		ssl3_free_digest_list(s);
   1068 	}
   1069 
   1070 	if (s->s3->alpn_selected)
   1071 		{
   1072 		OPENSSL_free(s->s3->alpn_selected);
   1073 		s->s3->alpn_selected = NULL;
   1074 		}
   1075 	memset(s->s3,0,sizeof *s->s3);
   1076 	s->s3->rbuf.buf = rp;
   1077 	s->s3->wbuf.buf = wp;
   1078 	s->s3->rbuf.len = rlen;
   1079  	s->s3->wbuf.len = wlen;
   1080 	s->s3->init_extra = init_extra;
   1081 
   1082 	ssl_free_wbio_buffer(s);
   1083 
   1084 	s->packet_length=0;
   1085 	s->s3->renegotiate=0;
   1086 	s->s3->total_renegotiations=0;
   1087 	s->s3->num_renegotiations=0;
   1088 	s->s3->in_read_app_data=0;
   1089 	s->version = s->method->version;
   1090 
   1091 	if (s->next_proto_negotiated)
   1092 		{
   1093 		OPENSSL_free(s->next_proto_negotiated);
   1094 		s->next_proto_negotiated = NULL;
   1095 		s->next_proto_negotiated_len = 0;
   1096 		}
   1097 
   1098 	s->s3->tlsext_channel_id_valid = 0;
   1099 	}
   1100 
   1101 static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
   1102 
   1103 long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
   1104 	{
   1105 	int ret=0;
   1106 
   1107 	if (cmd == SSL_CTRL_SET_TMP_RSA ||
   1108 	    cmd == SSL_CTRL_SET_TMP_RSA_CB ||
   1109 	    cmd == SSL_CTRL_SET_TMP_DH ||
   1110 	    cmd == SSL_CTRL_SET_TMP_DH_CB)
   1111 		{
   1112 		if (!ssl_cert_inst(&s->cert))
   1113 		    	{
   1114 			OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_MALLOC_FAILURE);
   1115 			return(0);
   1116 			}
   1117 		}
   1118 
   1119 	switch (cmd)
   1120 		{
   1121 	case SSL_CTRL_GET_SESSION_REUSED:
   1122 		ret=s->hit;
   1123 		break;
   1124 	case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
   1125 		break;
   1126 	case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
   1127 		ret=s->s3->num_renegotiations;
   1128 		break;
   1129 	case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
   1130 		ret=s->s3->num_renegotiations;
   1131 		s->s3->num_renegotiations=0;
   1132 		break;
   1133 	case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
   1134 		ret=s->s3->total_renegotiations;
   1135 		break;
   1136 	case SSL_CTRL_GET_FLAGS:
   1137 		ret=(int)(s->s3->flags);
   1138 		break;
   1139 	case SSL_CTRL_NEED_TMP_RSA:
   1140 		/* Temporary RSA keys are never used. */
   1141 		ret = 0;
   1142 		break;
   1143 	case SSL_CTRL_SET_TMP_RSA:
   1144 		/* Temporary RSA keys are never used. */
   1145 		OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1146 		break;
   1147 	case SSL_CTRL_SET_TMP_RSA_CB:
   1148 		{
   1149 		OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1150 		return(ret);
   1151 		}
   1152 		break;
   1153 	case SSL_CTRL_SET_TMP_DH:
   1154 		{
   1155 			DH *dh = (DH *)parg;
   1156 			if (dh == NULL)
   1157 				{
   1158 				OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
   1159 				return(ret);
   1160 				}
   1161 			if ((dh = DHparams_dup(dh)) == NULL)
   1162 				{
   1163 				OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
   1164 				return(ret);
   1165 				}
   1166 			if (!(s->options & SSL_OP_SINGLE_DH_USE))
   1167 				{
   1168 				if (!DH_generate_key(dh))
   1169 					{
   1170 					DH_free(dh);
   1171 					OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
   1172 					return(ret);
   1173 					}
   1174 				}
   1175 			if (s->cert->dh_tmp != NULL)
   1176 				DH_free(s->cert->dh_tmp);
   1177 			s->cert->dh_tmp = dh;
   1178 			ret = 1;
   1179 		}
   1180 		break;
   1181 	case SSL_CTRL_SET_TMP_DH_CB:
   1182 		{
   1183 		OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1184 		return(ret);
   1185 		}
   1186 		break;
   1187 	case SSL_CTRL_SET_TMP_ECDH:
   1188 		{
   1189 		EC_KEY *ecdh = NULL;
   1190 
   1191 		if (parg == NULL)
   1192 			{
   1193 			OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
   1194 			return(ret);
   1195 			}
   1196 		if (!EC_KEY_up_ref((EC_KEY *)parg))
   1197 			{
   1198 			OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
   1199 			return(ret);
   1200 			}
   1201 		ecdh = (EC_KEY *)parg;
   1202 		if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
   1203 			{
   1204 			if (!EC_KEY_generate_key(ecdh))
   1205 				{
   1206 				EC_KEY_free(ecdh);
   1207 				OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
   1208 				return(ret);
   1209 				}
   1210 			}
   1211 		if (s->cert->ecdh_tmp != NULL)
   1212 			EC_KEY_free(s->cert->ecdh_tmp);
   1213 		s->cert->ecdh_tmp = ecdh;
   1214 		ret = 1;
   1215 		}
   1216 		break;
   1217 	case SSL_CTRL_SET_TMP_ECDH_CB:
   1218 		{
   1219 		OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1220 		return(ret);
   1221 		}
   1222 		break;
   1223 	case SSL_CTRL_SET_TLSEXT_HOSTNAME:
   1224  		if (larg == TLSEXT_NAMETYPE_host_name)
   1225 			{
   1226 			if (s->tlsext_hostname != NULL)
   1227 				OPENSSL_free(s->tlsext_hostname);
   1228 			s->tlsext_hostname = NULL;
   1229 
   1230 			ret = 1;
   1231 			if (parg == NULL)
   1232 				break;
   1233 			if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
   1234 				{
   1235 				OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
   1236 				return 0;
   1237 				}
   1238 			if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
   1239 				{
   1240 				OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_INTERNAL_ERROR);
   1241 				return 0;
   1242 				}
   1243 			}
   1244 		else
   1245 			{
   1246 			OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
   1247 			return 0;
   1248 			}
   1249  		break;
   1250 	case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
   1251 		s->tlsext_debug_arg=parg;
   1252 		ret = 1;
   1253 		break;
   1254 
   1255 	case SSL_CTRL_CHAIN:
   1256 		if (larg)
   1257 			return ssl_cert_set1_chain(s->cert,
   1258 						(STACK_OF (X509) *)parg);
   1259 		else
   1260 			return ssl_cert_set0_chain(s->cert,
   1261 						(STACK_OF (X509) *)parg);
   1262 
   1263 	case SSL_CTRL_CHAIN_CERT:
   1264 		if (larg)
   1265 			return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg);
   1266 		else
   1267 			return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg);
   1268 
   1269 	case SSL_CTRL_GET_CHAIN_CERTS:
   1270 		*(STACK_OF(X509) **)parg = s->cert->key->chain;
   1271 		break;
   1272 
   1273 	case SSL_CTRL_SELECT_CURRENT_CERT:
   1274 		return ssl_cert_select_current(s->cert, (X509 *)parg);
   1275 
   1276 	case SSL_CTRL_GET_CURVES:
   1277 		{
   1278 		const uint16_t *clist;
   1279 		size_t clistlen;
   1280 		if (!s->session)
   1281 			return 0;
   1282 		clist = s->session->tlsext_ellipticcurvelist;
   1283 		clistlen = s->session->tlsext_ellipticcurvelist_length;
   1284 		if (parg)
   1285 			{
   1286 			size_t i;
   1287 			int *cptr = parg;
   1288 			int nid;
   1289 			for (i = 0; i < clistlen; i++)
   1290 				{
   1291 				nid = tls1_ec_curve_id2nid(clist[i]);
   1292 				if (nid != OBJ_undef)
   1293 					cptr[i] = nid;
   1294 				else
   1295 					cptr[i] = TLSEXT_nid_unknown | clist[i];
   1296 				}
   1297 			}
   1298 		return (int)clistlen;
   1299 		}
   1300 
   1301 	case SSL_CTRL_SET_CURVES:
   1302 		return tls1_set_curves(&s->tlsext_ellipticcurvelist,
   1303 					&s->tlsext_ellipticcurvelist_length,
   1304 								parg, larg);
   1305 
   1306 	case SSL_CTRL_SET_ECDH_AUTO:
   1307 		s->cert->ecdh_tmp_auto = larg;
   1308 		return 1;
   1309 	case SSL_CTRL_SET_SIGALGS:
   1310 		return tls1_set_sigalgs(s->cert, parg, larg, 0);
   1311 
   1312 	case SSL_CTRL_SET_CLIENT_SIGALGS:
   1313 		return tls1_set_sigalgs(s->cert, parg, larg, 1);
   1314 
   1315 	case SSL_CTRL_GET_CLIENT_CERT_TYPES:
   1316 		{
   1317 		const unsigned char **pctype = parg;
   1318 		if (s->server || !s->s3->tmp.cert_req)
   1319 			return 0;
   1320 		if (pctype)
   1321 			*pctype = s->s3->tmp.certificate_types;
   1322 		return (int)s->s3->tmp.num_certificate_types;
   1323 		}
   1324 
   1325 	case SSL_CTRL_SET_CLIENT_CERT_TYPES:
   1326 		if (!s->server)
   1327 			return 0;
   1328 		return ssl3_set_req_cert_type(s->cert, parg, larg);
   1329 
   1330 	case SSL_CTRL_BUILD_CERT_CHAIN:
   1331 		return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg);
   1332 
   1333 	case SSL_CTRL_SET_VERIFY_CERT_STORE:
   1334 		return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
   1335 
   1336 	case SSL_CTRL_SET_CHAIN_CERT_STORE:
   1337 		return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
   1338 
   1339 	case SSL_CTRL_GET_PEER_SIGNATURE_NID:
   1340 		if (SSL_USE_SIGALGS(s))
   1341 			{
   1342 			if (s->session && s->session->sess_cert)
   1343 				{
   1344 				const EVP_MD *sig;
   1345 				sig = s->session->sess_cert->peer_key->digest;
   1346 				if (sig)
   1347 					{
   1348 					*(int *)parg = EVP_MD_type(sig);
   1349 					return 1;
   1350 					}
   1351 				}
   1352 			return 0;
   1353 			}
   1354 		/* Might want to do something here for other versions */
   1355 		else
   1356 			return 0;
   1357 
   1358 	case SSL_CTRL_GET_SERVER_TMP_KEY:
   1359 		if (s->server || !s->session || !s->session->sess_cert)
   1360 			return 0;
   1361 		else
   1362 			{
   1363 			SESS_CERT *sc;
   1364 			EVP_PKEY *ptmp;
   1365 			int rv = 0;
   1366 			sc = s->session->sess_cert;
   1367 			if (!sc->peer_rsa_tmp && !sc->peer_dh_tmp && !sc->peer_ecdh_tmp)
   1368 				return 0;
   1369 			ptmp = EVP_PKEY_new();
   1370 			if (!ptmp)
   1371 				return 0;
   1372 			if (sc->peer_rsa_tmp)
   1373 				rv = EVP_PKEY_set1_RSA(ptmp, sc->peer_rsa_tmp);
   1374 			else if (sc->peer_dh_tmp)
   1375 				rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp);
   1376 			else if (sc->peer_ecdh_tmp)
   1377 				rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp);
   1378 			if (rv)
   1379 				{
   1380 				*(EVP_PKEY **)parg = ptmp;
   1381 				return 1;
   1382 				}
   1383 			EVP_PKEY_free(ptmp);
   1384 			return 0;
   1385 			}
   1386 	case SSL_CTRL_GET_EC_POINT_FORMATS:
   1387 		{
   1388 		SSL_SESSION *sess = s->session;
   1389 		const unsigned char **pformat = parg;
   1390 		if (!sess || !sess->tlsext_ecpointformatlist)
   1391 			return 0;
   1392 		*pformat = sess->tlsext_ecpointformatlist;
   1393 		return (int)sess->tlsext_ecpointformatlist_length;
   1394 		}
   1395 
   1396 	case SSL_CTRL_CHANNEL_ID:
   1397 		s->tlsext_channel_id_enabled = 1;
   1398 		ret = 1;
   1399 		break;
   1400 
   1401 	case SSL_CTRL_SET_CHANNEL_ID:
   1402 		if (s->server)
   1403 			break;
   1404 		s->tlsext_channel_id_enabled = 1;
   1405 		if (EVP_PKEY_bits(parg) != 256)
   1406 			{
   1407 			OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
   1408 			break;
   1409 			}
   1410 		if (s->tlsext_channel_id_private)
   1411 			EVP_PKEY_free(s->tlsext_channel_id_private);
   1412 		s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
   1413 		ret = 1;
   1414 		break;
   1415 
   1416 	case SSL_CTRL_GET_CHANNEL_ID:
   1417 		if (!s->server)
   1418 			break;
   1419 		if (!s->s3->tlsext_channel_id_valid)
   1420 			break;
   1421 		memcpy(parg, s->s3->tlsext_channel_id, larg < 64 ? larg : 64);
   1422 		return 64;
   1423 
   1424 	case SSL_CTRL_FALLBACK_SCSV:
   1425 		if (s->server)
   1426 			break;
   1427 		s->fallback_scsv = 1;
   1428 		ret = 1;
   1429 		break;
   1430 
   1431 	default:
   1432 		break;
   1433 		}
   1434 	return(ret);
   1435 	}
   1436 
   1437 long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
   1438 	{
   1439 	int ret=0;
   1440 
   1441 	if (cmd == SSL_CTRL_SET_TMP_RSA_CB || cmd == SSL_CTRL_SET_TMP_DH_CB)
   1442 		{
   1443 		if (!ssl_cert_inst(&s->cert))
   1444 			{
   1445 			OPENSSL_PUT_ERROR(SSL, ssl3_callback_ctrl, ERR_R_MALLOC_FAILURE);
   1446 			return(0);
   1447 			}
   1448 		}
   1449 
   1450 	switch (cmd)
   1451 		{
   1452 	case SSL_CTRL_SET_TMP_RSA_CB:
   1453 		/* Ignore the callback; temporary RSA keys are never used. */
   1454 		break;
   1455 	case SSL_CTRL_SET_TMP_DH_CB:
   1456 		{
   1457 		s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
   1458 		}
   1459 		break;
   1460 	case SSL_CTRL_SET_TMP_ECDH_CB:
   1461 		{
   1462 		s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
   1463 		}
   1464 		break;
   1465 	case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
   1466 		s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
   1467 					unsigned char *, int, void *))fp;
   1468 		break;
   1469 	default:
   1470 		break;
   1471 		}
   1472 	return(ret);
   1473 	}
   1474 
   1475 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
   1476 	{
   1477 	CERT *cert;
   1478 
   1479 	cert=ctx->cert;
   1480 
   1481 	switch (cmd)
   1482 		{
   1483 	case SSL_CTRL_NEED_TMP_RSA:
   1484 		/* Temporary RSA keys are never used. */
   1485 		return 0;
   1486 	case SSL_CTRL_SET_TMP_RSA:
   1487 		OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1488 		return 0;
   1489 	case SSL_CTRL_SET_TMP_RSA_CB:
   1490 		{
   1491 		OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1492 		return(0);
   1493 		}
   1494 		break;
   1495 	case SSL_CTRL_SET_TMP_DH:
   1496 		{
   1497 		DH *new=NULL,*dh;
   1498 
   1499 		dh=(DH *)parg;
   1500 		if ((new=DHparams_dup(dh)) == NULL)
   1501 			{
   1502 			OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
   1503 			return 0;
   1504 			}
   1505 		if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
   1506 			{
   1507 			if (!DH_generate_key(new))
   1508 				{
   1509 				OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
   1510 				DH_free(new);
   1511 				return 0;
   1512 				}
   1513 			}
   1514 		if (cert->dh_tmp != NULL)
   1515 			DH_free(cert->dh_tmp);
   1516 		cert->dh_tmp=new;
   1517 		return 1;
   1518 		}
   1519 		/*break; */
   1520 	case SSL_CTRL_SET_TMP_DH_CB:
   1521 		{
   1522 		OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1523 		return(0);
   1524 		}
   1525 		break;
   1526 	case SSL_CTRL_SET_TMP_ECDH:
   1527 		{
   1528 		EC_KEY *ecdh = NULL;
   1529 
   1530 		if (parg == NULL)
   1531 			{
   1532 			OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
   1533 			return 0;
   1534 			}
   1535 		ecdh = EC_KEY_dup((EC_KEY *)parg);
   1536 		if (ecdh == NULL)
   1537 			{
   1538 			OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_EC_LIB);
   1539 			return 0;
   1540 			}
   1541 		if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
   1542 			{
   1543 			if (!EC_KEY_generate_key(ecdh))
   1544 				{
   1545 				EC_KEY_free(ecdh);
   1546 				OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
   1547 				return 0;
   1548 				}
   1549 			}
   1550 
   1551 		if (cert->ecdh_tmp != NULL)
   1552 			{
   1553 			EC_KEY_free(cert->ecdh_tmp);
   1554 			}
   1555 		cert->ecdh_tmp = ecdh;
   1556 		return 1;
   1557 		}
   1558 		/* break; */
   1559 	case SSL_CTRL_SET_TMP_ECDH_CB:
   1560 		{
   1561 		OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1562 		return(0);
   1563 		}
   1564 		break;
   1565 	case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
   1566 		ctx->tlsext_servername_arg=parg;
   1567 		break;
   1568 	case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
   1569 	case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
   1570 		{
   1571 		unsigned char *keys = parg;
   1572 		if (!keys)
   1573 			return 48;
   1574 		if (larg != 48)
   1575 			{
   1576 			OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_INVALID_TICKET_KEYS_LENGTH);
   1577 			return 0;
   1578 			}
   1579 		if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
   1580 			{
   1581 			memcpy(ctx->tlsext_tick_key_name, keys, 16);
   1582 			memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
   1583 			memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
   1584 			}
   1585 		else
   1586 			{
   1587 			memcpy(keys, ctx->tlsext_tick_key_name, 16);
   1588 			memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
   1589 			memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
   1590 			}
   1591 		return 1;
   1592 		}
   1593 
   1594 	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
   1595 		ctx->tlsext_status_arg=parg;
   1596 		return 1;
   1597 		break;
   1598 
   1599 	case SSL_CTRL_SET_CURVES:
   1600 		return tls1_set_curves(&ctx->tlsext_ellipticcurvelist,
   1601 					&ctx->tlsext_ellipticcurvelist_length,
   1602 								parg, larg);
   1603 
   1604 	case SSL_CTRL_SET_ECDH_AUTO:
   1605 		ctx->cert->ecdh_tmp_auto = larg;
   1606 		return 1;
   1607 	case SSL_CTRL_SET_SIGALGS:
   1608 		return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
   1609 
   1610 	case SSL_CTRL_SET_CLIENT_SIGALGS:
   1611 		return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
   1612 
   1613 	case SSL_CTRL_SET_CLIENT_CERT_TYPES:
   1614 		return ssl3_set_req_cert_type(ctx->cert, parg, larg);
   1615 
   1616 	case SSL_CTRL_BUILD_CERT_CHAIN:
   1617 		return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg);
   1618 
   1619 	case SSL_CTRL_SET_VERIFY_CERT_STORE:
   1620 		return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
   1621 
   1622 	case SSL_CTRL_SET_CHAIN_CERT_STORE:
   1623 		return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
   1624 
   1625 
   1626 	/* A Thawte special :-) */
   1627 	case SSL_CTRL_EXTRA_CHAIN_CERT:
   1628 		if (ctx->extra_certs == NULL)
   1629 			{
   1630 			if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
   1631 				return(0);
   1632 			}
   1633 		sk_X509_push(ctx->extra_certs,(X509 *)parg);
   1634 		break;
   1635 
   1636 	case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
   1637 		if (ctx->extra_certs == NULL && larg == 0)
   1638 			*(STACK_OF(X509) **)parg =  ctx->cert->key->chain;
   1639 		else
   1640 			*(STACK_OF(X509) **)parg =  ctx->extra_certs;
   1641 		break;
   1642 
   1643 	case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
   1644 		if (ctx->extra_certs)
   1645 			{
   1646 			sk_X509_pop_free(ctx->extra_certs, X509_free);
   1647 			ctx->extra_certs = NULL;
   1648 			}
   1649 		break;
   1650 
   1651 	case SSL_CTRL_CHAIN:
   1652 		if (larg)
   1653 			return ssl_cert_set1_chain(ctx->cert,
   1654 						(STACK_OF (X509) *)parg);
   1655 		else
   1656 			return ssl_cert_set0_chain(ctx->cert,
   1657 						(STACK_OF (X509) *)parg);
   1658 
   1659 	case SSL_CTRL_CHAIN_CERT:
   1660 		if (larg)
   1661 			return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg);
   1662 		else
   1663 			return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg);
   1664 
   1665 	case SSL_CTRL_GET_CHAIN_CERTS:
   1666 		*(STACK_OF(X509) **)parg = ctx->cert->key->chain;
   1667 		break;
   1668 
   1669 	case SSL_CTRL_SELECT_CURRENT_CERT:
   1670 		return ssl_cert_select_current(ctx->cert, (X509 *)parg);
   1671 
   1672 	case SSL_CTRL_CHANNEL_ID:
   1673 		/* must be called on a server */
   1674 		if (ctx->method->ssl_accept == ssl_undefined_function)
   1675 			return 0;
   1676 		ctx->tlsext_channel_id_enabled=1;
   1677 		return 1;
   1678 
   1679 	case SSL_CTRL_SET_CHANNEL_ID:
   1680 		ctx->tlsext_channel_id_enabled = 1;
   1681 		if (EVP_PKEY_bits(parg) != 256)
   1682 			{
   1683 			OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
   1684 			break;
   1685 			}
   1686 		if (ctx->tlsext_channel_id_private)
   1687 			EVP_PKEY_free(ctx->tlsext_channel_id_private);
   1688 		ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
   1689 		break;
   1690 
   1691 	default:
   1692 		return(0);
   1693 		}
   1694 	return(1);
   1695 	}
   1696 
   1697 long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
   1698 	{
   1699 	CERT *cert;
   1700 
   1701 	cert=ctx->cert;
   1702 
   1703 	switch (cmd)
   1704 		{
   1705 	case SSL_CTRL_SET_TMP_RSA_CB:
   1706 		/* Ignore the callback; temporary RSA keys are never used. */
   1707 		break;
   1708 	case SSL_CTRL_SET_TMP_DH_CB:
   1709 		{
   1710 		cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
   1711 		}
   1712 		break;
   1713 	case SSL_CTRL_SET_TMP_ECDH_CB:
   1714 		{
   1715 		cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
   1716 		}
   1717 		break;
   1718 	case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
   1719 		ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
   1720 		break;
   1721 
   1722 	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
   1723 		ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
   1724 		break;
   1725 
   1726 	case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
   1727 		ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char  *,
   1728 						unsigned char *,
   1729 						EVP_CIPHER_CTX *,
   1730 						HMAC_CTX *, int))fp;
   1731 		break;
   1732 
   1733 	default:
   1734 		return(0);
   1735 		}
   1736 	return(1);
   1737 	}
   1738 
   1739 /* ssl3_get_cipher_by_value returns the SSL_CIPHER with value |value| or NULL if
   1740  * none exists.
   1741  *
   1742  * This function needs to check if the ciphers required are actually
   1743  * available. */
   1744 const SSL_CIPHER *ssl3_get_cipher_by_value(uint16_t value)
   1745 	{
   1746 	SSL_CIPHER c;
   1747 
   1748 	c.id = 0x03000000L|value;
   1749 	return bsearch(&c, ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(SSL_CIPHER), ssl_cipher_id_cmp);
   1750 	}
   1751 
   1752 /* ssl3_get_cipher_by_value returns the cipher value of |c|. */
   1753 uint16_t ssl3_get_cipher_value(const SSL_CIPHER *c)
   1754 	{
   1755 	unsigned long id = c->id;
   1756 	/* All ciphers are SSLv3 now. */
   1757 	assert((id & 0xff000000) == 0x03000000);
   1758 	return id & 0xffff;
   1759 	}
   1760 
   1761 struct ssl_cipher_preference_list_st* ssl_get_cipher_preferences(SSL *s)
   1762 	{
   1763 	if (s->cipher_list != NULL)
   1764 		return(s->cipher_list);
   1765 
   1766 	if (s->version >= TLS1_1_VERSION)
   1767 		{
   1768 		if (s->ctx != NULL && s->ctx->cipher_list_tls11 != NULL)
   1769 			return s->ctx->cipher_list_tls11;
   1770 		}
   1771 
   1772 	if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL))
   1773 		return(s->ctx->cipher_list);
   1774 
   1775 	return NULL;
   1776 	}
   1777 
   1778 const SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
   1779 	     struct ssl_cipher_preference_list_st *server_pref)
   1780 	{
   1781 	const SSL_CIPHER *c,*ret=NULL;
   1782 	STACK_OF(SSL_CIPHER) *srvr = server_pref->ciphers, *prio, *allow;
   1783 	int i,ok;
   1784 	size_t cipher_index;
   1785 	CERT *cert;
   1786 	unsigned long alg_k,alg_a,mask_k,mask_a;
   1787 	/* in_group_flags will either be NULL, or will point to an array of
   1788 	 * bytes which indicate equal-preference groups in the |prio| stack.
   1789 	 * See the comment about |in_group_flags| in the
   1790 	 * |ssl_cipher_preference_list_st| struct. */
   1791 	const unsigned char *in_group_flags;
   1792 	/* group_min contains the minimal index so far found in a group, or -1
   1793 	 * if no such value exists yet. */
   1794 	int group_min = -1;
   1795 
   1796 	/* Let's see which ciphers we can support */
   1797 	cert=s->cert;
   1798 
   1799 #if 0
   1800 	/* Do not set the compare functions, because this may lead to a
   1801 	 * reordering by "id". We want to keep the original ordering.
   1802 	 * We may pay a price in performance during sk_SSL_CIPHER_find(),
   1803 	 * but would have to pay with the price of sk_SSL_CIPHER_dup().
   1804 	 */
   1805 	sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
   1806 	sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
   1807 #endif
   1808 
   1809 #ifdef CIPHER_DEBUG
   1810 	printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr);
   1811 	for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
   1812 		{
   1813 		c=sk_SSL_CIPHER_value(srvr,i);
   1814 		printf("%p:%s\n",(void *)c,c->name);
   1815 		}
   1816 	printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt);
   1817 	for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
   1818 	    {
   1819 	    c=sk_SSL_CIPHER_value(clnt,i);
   1820 	    printf("%p:%s\n",(void *)c,c->name);
   1821 	    }
   1822 #endif
   1823 
   1824 	if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)
   1825 		{
   1826 		prio = srvr;
   1827 		in_group_flags = server_pref->in_group_flags;
   1828 		allow = clnt;
   1829 		}
   1830 	else
   1831 		{
   1832 		prio = clnt;
   1833 		in_group_flags = NULL;
   1834 		allow = srvr;
   1835 		}
   1836 
   1837 	tls1_set_cert_validity(s);
   1838 
   1839 	for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
   1840 		{
   1841 		c=sk_SSL_CIPHER_value(prio,i);
   1842 
   1843 		ok = 1;
   1844 
   1845 		/* Skip TLS v1.2 only ciphersuites if not supported */
   1846 		if ((c->algorithm_ssl & SSL_TLSV1_2) &&
   1847 			!SSL_USE_TLS1_2_CIPHERS(s))
   1848 			ok = 0;
   1849 
   1850 		ssl_set_cert_masks(cert,c);
   1851 		mask_k = cert->mask_k;
   1852 		mask_a = cert->mask_a;
   1853 
   1854 #ifdef KSSL_DEBUG
   1855 /*		printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/
   1856 #endif    /* KSSL_DEBUG */
   1857 
   1858 		alg_k=c->algorithm_mkey;
   1859 		alg_a=c->algorithm_auth;
   1860 
   1861 		/* with PSK there must be server callback set */
   1862 		if ((alg_a & SSL_aPSK) && s->psk_server_callback == NULL)
   1863 			ok = 0;
   1864 
   1865 		ok = ok && (alg_k & mask_k) && (alg_a & mask_a);
   1866 #ifdef CIPHER_DEBUG
   1867 		printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c,
   1868 		       c->name);
   1869 #endif
   1870 
   1871 		/* if we are considering an ECC cipher suite that uses
   1872 		 * an ephemeral EC key check it */
   1873 		if (alg_k & SSL_kEECDH)
   1874 			ok = ok && tls1_check_ec_tmp_key(s, c->id);
   1875 
   1876 		if (ok && sk_SSL_CIPHER_find(allow, &cipher_index, c))
   1877 			{
   1878 			if (in_group_flags != NULL && in_group_flags[i] == 1)
   1879 				{
   1880 				/* This element of |prio| is in a group. Update
   1881 				 * the minimum index found so far and continue
   1882 				 * looking. */
   1883 				if (group_min == -1 || group_min > cipher_index)
   1884 					group_min = cipher_index;
   1885 				}
   1886 			else
   1887 				{
   1888 				if (group_min != -1 && group_min < cipher_index)
   1889 					cipher_index = group_min;
   1890 				ret=sk_SSL_CIPHER_value(allow,cipher_index);
   1891 				break;
   1892 				}
   1893 			}
   1894 
   1895 		if (in_group_flags != NULL &&
   1896 		    in_group_flags[i] == 0 &&
   1897 		    group_min != -1)
   1898 			{
   1899 			/* We are about to leave a group, but we found a match
   1900 			 * in it, so that's our answer. */
   1901 			ret=sk_SSL_CIPHER_value(allow,group_min);
   1902 			break;
   1903 			}
   1904 		}
   1905 	return(ret);
   1906 	}
   1907 
   1908 int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
   1909 	{
   1910 	int ret=0;
   1911 	const unsigned char *sig;
   1912 	size_t i, siglen;
   1913 	int have_rsa_sign = 0;
   1914 	int have_ecdsa_sign = 0;
   1915 
   1916 	/* If we have custom certificate types set, use them */
   1917 	if (s->cert->client_certificate_types)
   1918 		{
   1919 		memcpy(p, s->cert->client_certificate_types,
   1920 			s->cert->num_client_certificate_types);
   1921 		return (int)s->cert->num_client_certificate_types;
   1922 		}
   1923 	/* get configured sigalgs */
   1924 	siglen = tls12_get_psigalgs(s, &sig);
   1925 	for (i = 0; i < siglen; i+=2, sig+=2)
   1926 		{
   1927 		switch(sig[1])
   1928 			{
   1929 		case TLSEXT_signature_rsa:
   1930 			have_rsa_sign = 1;
   1931 			break;
   1932 
   1933 		case TLSEXT_signature_ecdsa:
   1934 			have_ecdsa_sign = 1;
   1935 			break;
   1936 			}
   1937 		}
   1938 
   1939 	if (have_rsa_sign)
   1940 		p[ret++]=SSL3_CT_RSA_SIGN;
   1941 
   1942 	/* ECDSA certs can be used with RSA cipher suites as well
   1943 	 * so we don't need to check for SSL_kECDH or SSL_kEECDH
   1944 	 */
   1945 	if (s->version >= TLS1_VERSION)
   1946 		{
   1947 		if (have_ecdsa_sign)
   1948 			p[ret++]=TLS_CT_ECDSA_SIGN;
   1949 		}
   1950 	return(ret);
   1951 	}
   1952 
   1953 static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
   1954 	{
   1955 	if (c->client_certificate_types)
   1956 		{
   1957 		OPENSSL_free(c->client_certificate_types);
   1958 		c->client_certificate_types = NULL;
   1959 		}
   1960 	c->num_client_certificate_types = 0;
   1961 	if (!p || !len)
   1962 		return 1;
   1963 	if (len > 0xff)
   1964 		return 0;
   1965 	c->client_certificate_types = BUF_memdup(p, len);
   1966 	if (!c->client_certificate_types)
   1967 		return 0;
   1968 	c->num_client_certificate_types = len;
   1969 	return 1;
   1970 	}
   1971 
   1972 int ssl3_shutdown(SSL *s)
   1973 	{
   1974 	int ret;
   1975 
   1976 	/* Don't do anything much if we have not done the handshake or
   1977 	 * we don't want to send messages :-) */
   1978 	if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
   1979 		{
   1980 		s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
   1981 		return(1);
   1982 		}
   1983 
   1984 	if (!(s->shutdown & SSL_SENT_SHUTDOWN))
   1985 		{
   1986 		s->shutdown|=SSL_SENT_SHUTDOWN;
   1987 #if 1
   1988 		ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
   1989 #endif
   1990 		/* our shutdown alert has been sent now, and if it still needs
   1991 	 	 * to be written, s->s3->alert_dispatch will be true */
   1992 	 	if (s->s3->alert_dispatch)
   1993 	 		return(-1);	/* return WANT_WRITE */
   1994 		}
   1995 	else if (s->s3->alert_dispatch)
   1996 		{
   1997 		/* resend it if not sent */
   1998 #if 1
   1999 		ret=s->method->ssl_dispatch_alert(s);
   2000 		if(ret == -1)
   2001 			{
   2002 			/* we only get to return -1 here the 2nd/Nth
   2003 			 * invocation, we must  have already signalled
   2004 			 * return 0 upon a previous invoation,
   2005 			 * return WANT_WRITE */
   2006 			return(ret);
   2007 			}
   2008 #endif
   2009 		}
   2010 	else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
   2011 		{
   2012 		/* If we are waiting for a close from our peer, we are closed */
   2013 		s->method->ssl_read_bytes(s,0,NULL,0,0);
   2014 		if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
   2015 			{
   2016 			return(-1);	/* return WANT_READ */
   2017 			}
   2018 		}
   2019 
   2020 	if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
   2021 		!s->s3->alert_dispatch)
   2022 		return(1);
   2023 	else
   2024 		return(0);
   2025 	}
   2026 
   2027 int ssl3_write(SSL *s, const void *buf, int len)
   2028 	{
   2029 	int ret,n;
   2030 
   2031 #if 0
   2032 	if (s->shutdown & SSL_SEND_SHUTDOWN)
   2033 		{
   2034 		s->rwstate=SSL_NOTHING;
   2035 		return(0);
   2036 		}
   2037 #endif
   2038 	ERR_clear_system_error();
   2039 	if (s->s3->renegotiate) ssl3_renegotiate_check(s);
   2040 
   2041 	/* This is an experimental flag that sends the
   2042 	 * last handshake message in the same packet as the first
   2043 	 * use data - used to see if it helps the TCP protocol during
   2044 	 * session-id reuse */
   2045 	/* The second test is because the buffer may have been removed */
   2046 	if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
   2047 		{
   2048 		/* First time through, we write into the buffer */
   2049 		if (s->s3->delay_buf_pop_ret == 0)
   2050 			{
   2051 			ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
   2052 					     buf,len);
   2053 			if (ret <= 0) return(ret);
   2054 
   2055 			s->s3->delay_buf_pop_ret=ret;
   2056 			}
   2057 
   2058 		s->rwstate=SSL_WRITING;
   2059 		n=BIO_flush(s->wbio);
   2060 		if (n <= 0) return(n);
   2061 		s->rwstate=SSL_NOTHING;
   2062 
   2063 		/* We have flushed the buffer, so remove it */
   2064 		ssl_free_wbio_buffer(s);
   2065 		s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
   2066 
   2067 		ret=s->s3->delay_buf_pop_ret;
   2068 		s->s3->delay_buf_pop_ret=0;
   2069 		}
   2070 	else
   2071 		{
   2072 		ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
   2073 			buf,len);
   2074 		if (ret <= 0) return(ret);
   2075 		}
   2076 
   2077 	return(ret);
   2078 	}
   2079 
   2080 static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
   2081 	{
   2082 	int n,ret;
   2083 
   2084 	ERR_clear_system_error();
   2085 	if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
   2086 		{
   2087 		/* Deal with an application that calls SSL_read() when handshake data
   2088 		 * is yet to be written.
   2089 		 */
   2090 		if (BIO_wpending(s->wbio) > 0)
   2091 			{
   2092 			s->rwstate=SSL_WRITING;
   2093 			n=BIO_flush(s->wbio);
   2094 			if (n <= 0) return(n);
   2095 			s->rwstate=SSL_NOTHING;
   2096 			}
   2097 		}
   2098 	if (s->s3->renegotiate) ssl3_renegotiate_check(s);
   2099 	s->s3->in_read_app_data=1;
   2100 	ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
   2101 	if ((ret == -1) && (s->s3->in_read_app_data == 2))
   2102 		{
   2103 		/* ssl3_read_bytes decided to call s->handshake_func, which
   2104 		 * called ssl3_read_bytes to read handshake data.
   2105 		 * However, ssl3_read_bytes actually found application data
   2106 		 * and thinks that application data makes sense here; so disable
   2107 		 * handshake processing and try to read application data again. */
   2108 		s->in_handshake++;
   2109 		ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
   2110 		s->in_handshake--;
   2111 		}
   2112 	else
   2113 		s->s3->in_read_app_data=0;
   2114 
   2115 	return(ret);
   2116 	}
   2117 
   2118 int ssl3_read(SSL *s, void *buf, int len)
   2119 	{
   2120 	return ssl3_read_internal(s, buf, len, 0);
   2121 	}
   2122 
   2123 int ssl3_peek(SSL *s, void *buf, int len)
   2124 	{
   2125 	return ssl3_read_internal(s, buf, len, 1);
   2126 	}
   2127 
   2128 int ssl3_renegotiate(SSL *s)
   2129 	{
   2130 	if (s->handshake_func == NULL)
   2131 		return(1);
   2132 
   2133 	if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
   2134 		return(0);
   2135 
   2136 	s->s3->renegotiate=1;
   2137 	return(1);
   2138 	}
   2139 
   2140 int ssl3_renegotiate_check(SSL *s)
   2141 	{
   2142 	int ret=0;
   2143 
   2144 	if (s->s3->renegotiate)
   2145 		{
   2146 		if (	(s->s3->rbuf.left == 0) &&
   2147 			(s->s3->wbuf.left == 0) &&
   2148 			!SSL_in_init(s))
   2149 			{
   2150 /*
   2151 if we are the server, and we have sent a 'RENEGOTIATE' message, we
   2152 need to go to SSL_ST_ACCEPT.
   2153 */
   2154 			/* SSL_ST_ACCEPT */
   2155 			s->state=SSL_ST_RENEGOTIATE;
   2156 			s->s3->renegotiate=0;
   2157 			s->s3->num_renegotiations++;
   2158 			s->s3->total_renegotiations++;
   2159 			ret=1;
   2160 			}
   2161 		}
   2162 	return(ret);
   2163 	}
   2164 /* If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF
   2165  * and handshake macs if required.
   2166  */
   2167 long ssl_get_algorithm2(SSL *s)
   2168 	{
   2169 	static const unsigned long kMask = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF;
   2170 	long alg2 = s->s3->tmp.new_cipher->algorithm2;
   2171 	if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF
   2172 	    && (alg2 & kMask) == kMask)
   2173 		return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
   2174 	return alg2;
   2175 	}
   2176 
   2177