195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * All rights reserved. 395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This package is an SSL implementation written 595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * by Eric Young (eay@cryptsoft.com). 695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The implementation was written so as to conform with Netscapes SSL. 795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This library is free for commercial and non-commercial use as long as 995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the following conditions are aheared to. The following conditions 1095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * apply to all code found in this distribution, be it the RC4, RSA, 1195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * lhash, DES, etc., code; not just the SSL code. The SSL documentation 1295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * included with this distribution is covered by the same copyright terms 1395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com). 1495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Copyright remains Eric Young's, and as such any Copyright notices in 1695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the code are not to be removed. 1795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * If this package is used in a product, Eric Young should be given attribution 1895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * as the author of the parts of the library used. 1995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This can be in the form of a textual message at program startup or 2095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * in documentation (online or textual) provided with the package. 2195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 2295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Redistribution and use in source and binary forms, with or without 2395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * modification, are permitted provided that the following conditions 2495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * are met: 2595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1. Redistributions of source code must retain the copyright 2695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer. 2795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 2. Redistributions in binary form must reproduce the above copyright 2895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer in the 2995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * documentation and/or other materials provided with the distribution. 3095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 3. All advertising materials mentioning features or use of this software 3195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * must display the following acknowledgement: 3295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes cryptographic software written by 3395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Eric Young (eay@cryptsoft.com)" 3495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The word 'cryptographic' can be left out if the rouines from the library 3595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * being used are not cryptographic related :-). 3695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 4. If you include any Windows specific code (or a derivative thereof) from 3795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the apps directory (application code) you must include an acknowledgement: 3895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 3995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 4095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 4195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 4495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 4895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 4995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * SUCH DAMAGE. 5195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 5295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The licence and distribution terms for any publically available version or 5395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * derivative of this code cannot be changed. i.e. this code cannot simply be 5495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * copied and put under another distribution licence 5595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * [including the GNU Public Licence.] 5695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley */ 5795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* ==================================================================== 5895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. 5995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 6095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Redistribution and use in source and binary forms, with or without 6195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * modification, are permitted provided that the following conditions 6295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * are met: 6395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 6495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1. Redistributions of source code must retain the above copyright 6595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer. 6695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 6795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 2. Redistributions in binary form must reproduce the above copyright 6895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer in 6995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the documentation and/or other materials provided with the 7095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * distribution. 7195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 7295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 3. All advertising materials mentioning features or use of this 7395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * software must display the following acknowledgment: 7495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes software developed by the OpenSSL Project 7595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 7695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 7795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 7895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * endorse or promote products derived from this software without 7995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * prior written permission. For written permission, please contact 8095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * openssl-core@openssl.org. 8195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 8295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 5. Products derived from this software may not be called "OpenSSL" 8395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * nor may "OpenSSL" appear in their names without prior written 8495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * permission of the OpenSSL Project. 8595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 8695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 6. Redistributions of any form whatsoever must retain the following 8795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * acknowledgment: 8895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes software developed by the OpenSSL Project 8995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * for use in the OpenSSL Toolkit (http://www.openssl.org/)" 9095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 9195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 9295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 9395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 9495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 9595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 9695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 9795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 9895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 9995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 10095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 10195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 10295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OF THE POSSIBILITY OF SUCH DAMAGE. 10395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ==================================================================== 10495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 10595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This product includes cryptographic software written by Eric Young 10695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * (eay@cryptsoft.com). This product includes software written by Tim 10795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Hudson (tjh@cryptsoft.com). 10895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 10995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley */ 11095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* ==================================================================== 11195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 11295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 11395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Portions of the attached software ("Contribution") are developed by 11495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. 11595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 11695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The Contribution is licensed pursuant to the OpenSSL open source 11795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * license provided above. 11895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 11995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ECC cipher suite support in OpenSSL originally written by 12095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories. 12195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 12295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley */ 12395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* ==================================================================== 12495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Copyright 2005 Nokia. All rights reserved. 12595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 12695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The portions of the attached software ("Contribution") is developed by 12795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Nokia Corporation and is licensed pursuant to the OpenSSL open source 12895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * license. 12995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 13095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The Contribution, originally written by Mika Kousa and Pasi Eronen of 13195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites 13295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * support (see RFC 4279) to OpenSSL. 13395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 13495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * No patent licenses or other rights except those expressly stated in 13595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the OpenSSL open source license shall be deemed granted or received 13695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * expressly, by implication, estoppel, or otherwise. 13795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 13895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * No assurances are provided by Nokia that the Contribution does not 13995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * infringe the patent or other intellectual property rights of any third 14095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * party or that the license provides you with all the necessary rights 14195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * to make use of the Contribution. 14295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 14395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN 14495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA 14595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY 14695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR 14795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OTHERWISE. */ 14895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 14939482a13aca033b72118807fadd152207e0fad8aDavid Benjamin#include <assert.h> 15095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <stdio.h> 15195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 152676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin#include <openssl/buf.h> 15395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/dh.h> 15495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/md5.h> 15595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/mem.h> 15695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/obj.h> 15795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 15895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include "ssl_locl.h" 15995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 16095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER)) 16195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 162d8983ce0f2b083a45416195e05a11f3a2a1d5aedAdam Langley/* FIXED_NONCE_LEN is a macro that results in the correct value to set the 163d8983ce0f2b083a45416195e05a11f3a2a1d5aedAdam Langley * fixed nonce length in SSL_CIPHER.algorithms2. It's the inverse of 164d8983ce0f2b083a45416195e05a11f3a2a1d5aedAdam Langley * SSL_CIPHER_AEAD_FIXED_NONCE_LEN. */ 165d8983ce0f2b083a45416195e05a11f3a2a1d5aedAdam Langley#define FIXED_NONCE_LEN(x) ((x/2)<<24) 166d8983ce0f2b083a45416195e05a11f3a2a1d5aedAdam Langley 16795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* list of available SSLv3 ciphers (sorted by id) */ 1686f2600199c82330240de9a7f65a801b6f606b7b3David Benjaminconst SSL_CIPHER ssl3_ciphers[]={ 16995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 17095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* The RSA ciphers */ 17195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 04 */ 17295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 17395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 17495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_TXT_RSA_RC4_128_MD5, 17595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_CK_RSA_RC4_128_MD5, 17695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 17795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 17895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_RC4, 17995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_MD5, 18095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SSLV3, 181594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_MEDIUM, 1829447dff5a25980032883975c7d981d9606395938Adam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|SSL_CIPHER_ALGORITHM2_STATEFUL_AEAD, 18395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 18495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 18595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 18695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 18795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 05 */ 18895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 18995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 19095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_TXT_RSA_RC4_128_SHA, 19195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_CK_RSA_RC4_128_SHA, 19295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 19395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 19495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_RC4, 19595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 19695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SSLV3, 197594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_MEDIUM, 19895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 19995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 20095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 20195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 20295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 20395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 0A */ 20495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 20595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 20695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_TXT_RSA_DES_192_CBC3_SHA, 20795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_CK_RSA_DES_192_CBC3_SHA, 20895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 20995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 21095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_3DES, 21195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 21295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SSLV3, 213594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 21495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 2158314351bcca46f175e305ba18a5e0040ce06034fAdam Langley 112, 21695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 168, 21795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 21895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 21995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* The Ephemeral DH ciphers */ 22095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 18 */ 22295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 22395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 22495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_TXT_ADH_RC4_128_MD5, 22595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_CK_ADH_RC4_128_MD5, 22695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 22795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 22895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_RC4, 22995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_MD5, 23095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SSLV3, 231594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_MEDIUM, 23295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 23395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 23495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 23595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 23695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 23795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* New AES ciphersuites */ 23895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 2F */ 23995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 24095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 24195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_RSA_WITH_AES_128_SHA, 24295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_RSA_WITH_AES_128_SHA, 24395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 24495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 24595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 24695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 24795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 248594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 24995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 25095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 25195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 25295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 25395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 33 */ 25495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 25595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 25695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, 25795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_DHE_RSA_WITH_AES_128_SHA, 25895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 25995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 26095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 26195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 26295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 263594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 26495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 26595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 26695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 26795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 26895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 34 */ 26995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 27095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 27195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ADH_WITH_AES_128_SHA, 27295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ADH_WITH_AES_128_SHA, 27395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 27495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 27595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 27695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 27795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 278594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 27995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 28095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 28195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 28295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 28395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 28495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 35 */ 28595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 28695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 28795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_RSA_WITH_AES_256_SHA, 28895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_RSA_WITH_AES_256_SHA, 28995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 29095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 29195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 29295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 29395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 294594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 29595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 29695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 29795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 29895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 29995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 30095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Cipher 39 */ 30195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 30295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 30395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, 30495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_DHE_RSA_WITH_AES_256_SHA, 30595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 30695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 30795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 30895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 30995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 310594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 31195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 31295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 31395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 31495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 31595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 31695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 3A */ 31795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 31895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 31995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ADH_WITH_AES_256_SHA, 32095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ADH_WITH_AES_256_SHA, 32195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 32295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 32395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 32495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 32595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 326594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 32795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 32895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 32995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 33095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 33195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 33295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* TLS v1.2 ciphersuites */ 33395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 3C */ 33495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 33595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 33695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_RSA_WITH_AES_128_SHA256, 33795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_RSA_WITH_AES_128_SHA256, 33895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 33995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 34095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 34195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA256, 34295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 343594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 34495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 34595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 34695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 34795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 34895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 34995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 3D */ 35095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 35195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 35295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_RSA_WITH_AES_256_SHA256, 35395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_RSA_WITH_AES_256_SHA256, 35495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 35595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 35695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 35795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA256, 35895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 359594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 36095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 36195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 36295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 36395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 36495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 36595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 36695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* TLS v1.2 ciphersuites */ 36795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 67 */ 36895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 36995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 37095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, 37195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, 37295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 37395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 37495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 37595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA256, 37695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 377594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 37895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 37995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 38095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 38195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 38295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 38395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 6B */ 38495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 38595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 38695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, 38795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, 38895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 38995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 39095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 39195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA256, 39295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 393594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 39495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 39595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 39695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 39795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 39895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 39995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 6C */ 40095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 40195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 40295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ADH_WITH_AES_128_SHA256, 40395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ADH_WITH_AES_128_SHA256, 40495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 40595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 40695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 40795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA256, 40895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 409594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 41095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 41195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 41295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 41395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 41495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 41595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 6D */ 41695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 41795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 41895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ADH_WITH_AES_256_SHA256, 41995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ADH_WITH_AES_256_SHA256, 42095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 42195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 42295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 42395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA256, 42495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 425594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 42695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 42795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 42895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 42995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 43095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 43195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 43295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 8A */ 43395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 43495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 43595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_PSK_WITH_RC4_128_SHA, 43695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_PSK_WITH_RC4_128_SHA, 43795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kPSK, 43895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aPSK, 43995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_RC4, 44095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 44195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 442594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_MEDIUM, 44395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 44495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 44595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 44695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 44795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 44895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 8C */ 44995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 45095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 45195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, 45295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_PSK_WITH_AES_128_CBC_SHA, 45395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kPSK, 45495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aPSK, 45595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 45695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 45795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 458594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 45995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 46095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 46195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 46295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 46395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 46495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 8D */ 46595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 46695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 46795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, 46895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_PSK_WITH_AES_256_CBC_SHA, 46995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kPSK, 47095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aPSK, 47195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 47295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 47395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 474594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 47595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 47695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 47795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 47895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 47995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 48095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* GCM ciphersuites from RFC5288 */ 48195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 48295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 9C */ 48395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 48495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 48595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, 48695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 48795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 48895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 48995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128GCM, 49095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 49195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 492594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 493de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 49495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 49595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 49695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 49795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 49895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 9D */ 49995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 50095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 50195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, 50295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, 50395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kRSA, 50495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 50595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256GCM, 50695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 50795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 508594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 5095c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)| 5105c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 51195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 51295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 51395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 51495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 51595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 9E */ 51695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 51795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 51895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, 51995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, 52095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 52195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 52295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128GCM, 52395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 52495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 525594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 526de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 52795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 52895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 52995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 53095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 53195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher 9F */ 53295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 53395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 53495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, 53595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, 53695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 53795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 53895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256GCM, 53995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 54095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 541594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 5425c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)| 5435c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 54495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 54595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 54695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 54795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 54895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher A6 */ 54995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 55095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 55195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, 55295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, 55395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 55495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 55595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128GCM, 55695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 55795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 558594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 559de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 56095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 56195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 56295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 56395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 56495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher A7 */ 56595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 56695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 56795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, 56895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, 56995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEDH, 57095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 57195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256GCM, 57295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 57395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 574594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 5755c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)| 5765c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 57795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 57895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 57995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 58095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 58195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C007 */ 58295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 58395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 58495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, 58595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, 58695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 58795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aECDSA, 58895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_RC4, 58995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 59095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 591594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_MEDIUM, 59295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 59395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 59495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 59595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 59695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 59795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C009 */ 59895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 59995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 60095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 60195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 60295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 60395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aECDSA, 60495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 60595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 60695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 607594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 60895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 60995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 61095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 61195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 61295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 61395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C00A */ 61495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 61595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 61695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 61795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 61895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 61995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aECDSA, 62095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 62195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 62295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 623594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 62495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 62595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 62695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 62795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 62895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 62995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C011 */ 63095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 63195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 63295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, 63395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, 63495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 63595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 63695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_RC4, 63795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 63895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 639594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_MEDIUM, 64095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 64195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 64295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 64395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 64495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 64595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C013 */ 64695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 64795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 64895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, 64995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, 65095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 65195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 65295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 65395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 65495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 655594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 65695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 65795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 65895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 65995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 66095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 66195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C014 */ 66295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 66395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 66495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, 66595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, 66695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 66795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 66895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 66995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 67095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 671594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 67295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 67395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 67495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 67595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 67695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 67795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C016 */ 67895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 67995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 68095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, 68195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, 68295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 68395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 68495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_RC4, 68595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 68695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 687594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_MEDIUM, 68895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 68995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 69095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 69195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 69295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 69395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C018 */ 69495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 69595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 69695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, 69795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, 69895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 69995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 70095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 70195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 70295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 703594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 70495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 70595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 70695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 70795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 70895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 70995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C019 */ 71095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 71195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 71295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, 71395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, 71495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 71595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aNULL, 71695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 71795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA1, 71895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1, 719594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 72095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 72195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 72295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 72395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 72495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 72595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 72695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* HMAC based TLS v1.2 ciphersuites from RFC5289 */ 72795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 72895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C023 */ 72995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 73095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 73195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, 73295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, 73395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 73495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aECDSA, 73595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 73695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA256, 73795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 738594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 73995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, 74095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 74195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 74295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 74395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 74495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C024 */ 74595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 74695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 74795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, 74895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, 74995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 75095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aECDSA, 75195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 75295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA384, 75395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 754594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 75595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, 75695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 75795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 75895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 75995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 76095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C027 */ 76195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 76295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 76395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, 76495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, 76595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 76695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 76795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128, 76895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA256, 76995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 770594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 77195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, 77295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 77395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 77495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 77595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 77695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C028 */ 77795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 77895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 77995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, 78095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, 78195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 78295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 78395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256, 78495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SHA384, 78595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 786594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 78795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, 78895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 78995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 79095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 79195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 79295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* GCM based TLS v1.2 ciphersuites from RFC5289 */ 79395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 79495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C02B */ 79595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 79695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 79795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 79895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 79995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 80095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aECDSA, 80195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128GCM, 80295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 80395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 804594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 805de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 80695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 80795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 80895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 80995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 81095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C02C */ 81195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 81295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 81395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 81495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 81595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 81695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aECDSA, 81795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256GCM, 81895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 81995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 820594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 8215c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)| 8225c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 82395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 82495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 82595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 82695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 82795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C02F */ 82895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 82995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 83095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 83195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 83295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 83395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 83495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES128GCM, 83595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 83695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 837594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 838de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 83995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 84095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 128, 84195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 84295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 84395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Cipher C030 */ 84495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 84595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1, 84695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 84795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 84895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_kEECDH, 84995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_aRSA, 85095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AES256GCM, 85195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_AEAD, 85295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_TLSV1_2, 853594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH|SSL_FIPS, 8545c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)| 8555c270c590d2f8b3599132385b04d95cb88578f89Adam Langley SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 85695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 85795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 256, 85895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }, 85995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 860c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley /* ECDH PSK ciphersuites */ 861c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley /* Cipher CAFE */ 862c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley { 863c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley 1, 864c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley TLS1_TXT_ECDHE_PSK_WITH_AES_128_GCM_SHA256, 865c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256, 866c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley SSL_kEECDH, 867c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley SSL_aPSK, 868c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley SSL_AES128GCM, 869c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley SSL_AEAD, 870c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley SSL_TLSV1_2, 871594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH, 872c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)| 873c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD, 874c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley 128, 875c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley 128, 876c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley }, 877c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley 87895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 879de0b2026841c34193cacf5c97646b38439e13200Adam Langley { 880de0b2026841c34193cacf5c97646b38439e13200Adam Langley 1, 881de0b2026841c34193cacf5c97646b38439e13200Adam Langley TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305, 882de0b2026841c34193cacf5c97646b38439e13200Adam Langley TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305, 883de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_kEECDH, 884de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_aRSA, 885de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_CHACHA20POLY1305, 886de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_AEAD, 887de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_TLSV1_2, 888594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH, 889de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), 890de0b2026841c34193cacf5c97646b38439e13200Adam Langley 256, 891de0b2026841c34193cacf5c97646b38439e13200Adam Langley 0, 892de0b2026841c34193cacf5c97646b38439e13200Adam Langley }, 893de0b2026841c34193cacf5c97646b38439e13200Adam Langley 894de0b2026841c34193cacf5c97646b38439e13200Adam Langley { 895de0b2026841c34193cacf5c97646b38439e13200Adam Langley 1, 896de0b2026841c34193cacf5c97646b38439e13200Adam Langley TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, 897de0b2026841c34193cacf5c97646b38439e13200Adam Langley TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305, 898de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_kEECDH, 899de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_aECDSA, 900de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_CHACHA20POLY1305, 901de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_AEAD, 902de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_TLSV1_2, 903594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH, 904de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), 905de0b2026841c34193cacf5c97646b38439e13200Adam Langley 256, 906de0b2026841c34193cacf5c97646b38439e13200Adam Langley 0, 907de0b2026841c34193cacf5c97646b38439e13200Adam Langley }, 908de0b2026841c34193cacf5c97646b38439e13200Adam Langley 909de0b2026841c34193cacf5c97646b38439e13200Adam Langley { 910de0b2026841c34193cacf5c97646b38439e13200Adam Langley 1, 911de0b2026841c34193cacf5c97646b38439e13200Adam Langley TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305, 912de0b2026841c34193cacf5c97646b38439e13200Adam Langley TLS1_CK_DHE_RSA_CHACHA20_POLY1305, 913de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_kEDH, 914de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_aRSA, 915de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_CHACHA20POLY1305, 916de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_AEAD, 917de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_TLSV1_2, 918594a58e0781e06597eafc7599e9f88d5ceaeb566David Benjamin SSL_HIGH, 919de0b2026841c34193cacf5c97646b38439e13200Adam Langley SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), 920de0b2026841c34193cacf5c97646b38439e13200Adam Langley 256, 921de0b2026841c34193cacf5c97646b38439e13200Adam Langley 0, 922de0b2026841c34193cacf5c97646b38439e13200Adam Langley }, 923de0b2026841c34193cacf5c97646b38439e13200Adam Langley 92495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* end of list */ 92595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }; 92695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 92795c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleySSL3_ENC_METHOD SSLv3_enc_data={ 92895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_enc, 92995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley n_ssl3_mac, 93095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_setup_key_block, 93195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_generate_master_secret, 93295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_change_cipher_state, 93395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_final_finish_mac, 93495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, 93595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_cert_verify_mac, 93695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_MD_CLIENT_FINISHED_CONST,4, 93795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_MD_SERVER_FINISHED_CONST,4, 93895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_alert_code, 93995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley (int (*)(SSL *, unsigned char *, size_t, const char *, 94095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley size_t, const unsigned char *, size_t, 94195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int use_context))ssl_undefined_function, 94295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 0, 94395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_HM_HEADER_LENGTH, 94495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_set_handshake_header, 94595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_handshake_write 94695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley }; 94795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 94895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_num_ciphers(void) 94995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 95095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(SSL3_NUM_CIPHERS); 95195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 95295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 95395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyconst SSL_CIPHER *ssl3_get_cipher(unsigned int u) 95495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 95595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (u < SSL3_NUM_CIPHERS) 95695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u])); 95795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 95895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(NULL); 95995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 96095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 96195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_pending(const SSL *s) 96295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 96395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->rstate == SSL_ST_READ_BODY) 96495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 96595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 96695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; 96795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 96895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 96995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid ssl3_set_handshake_header(SSL *s, int htype, unsigned long len) 97095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 97195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley unsigned char *p = (unsigned char *)s->init_buf->data; 97295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *(p++) = htype; 97395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley l2n3(len, p); 97495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->init_num = (int)len + SSL3_HM_HEADER_LENGTH; 97595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->init_off = 0; 97695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 97795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 97895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_handshake_write(SSL *s) 97995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 98095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl3_do_write(s, SSL3_RT_HANDSHAKE); 98195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 98295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 98395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_new(SSL *s) 98495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 98595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL3_STATE *s3; 98695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 98795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err; 98895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memset(s3,0,sizeof *s3); 98995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num)); 99095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num)); 99195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 99295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3=s3; 99395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 9941258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley s->tlsext_channel_id_enabled = s->ctx->tlsext_channel_id_enabled; 9951258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (s->ctx->tlsext_channel_id_private) 9961258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley s->tlsext_channel_id_private = EVP_PKEY_dup(s->ctx->tlsext_channel_id_private); 99795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->method->ssl_clear(s); 99895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(1); 99995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyerr: 100095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 100195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 100295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 100395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid ssl3_free(SSL *s) 100495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 100595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(s == NULL) 100695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return; 100795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 100895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_cleanup_key_block(s); 100995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->rbuf.buf != NULL) 101095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_release_read_buffer(s); 101195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->wbuf.buf != NULL) 101295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_release_write_buffer(s); 101395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->tmp.dh != NULL) 101495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DH_free(s->s3->tmp.dh); 101595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->tmp.ecdh != NULL) 101695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY_free(s->s3->tmp.ecdh); 101795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 101895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->tmp.ca_names != NULL) 101995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); 1020676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin if (s->s3->tmp.certificate_types != NULL) 1021676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin OPENSSL_free(s->s3->tmp.certificate_types); 102295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->handshake_buffer) { 102395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley BIO_free(s->s3->handshake_buffer); 102495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 102595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->handshake_dgst) ssl3_free_digest_list(s); 102695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->alpn_selected) 102795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_free(s->s3->alpn_selected); 102895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 102995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_cleanse(s->s3,sizeof *s->s3); 103095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_free(s->s3); 103195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3=NULL; 103295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 103395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 103495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyvoid ssl3_clear(SSL *s) 103595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 103695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley unsigned char *rp,*wp; 103795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley size_t rlen, wlen; 103895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int init_extra; 103995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 104095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_cleanup_key_block(s); 104195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->tmp.ca_names != NULL) 104295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); 1043676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin if (s->s3->tmp.certificate_types != NULL) 1044676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin OPENSSL_free(s->s3->tmp.certificate_types); 1045676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin s->s3->tmp.num_certificate_types = 0; 104695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 104795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->tmp.dh != NULL) 104895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 104995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DH_free(s->s3->tmp.dh); 105095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->tmp.dh = NULL; 105195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 105295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->tmp.ecdh != NULL) 105395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 105495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY_free(s->s3->tmp.ecdh); 105595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->tmp.ecdh = NULL; 105695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 105795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rp = s->s3->rbuf.buf; 105895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley wp = s->s3->wbuf.buf; 105995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rlen = s->s3->rbuf.len; 106095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley wlen = s->s3->wbuf.len; 106195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley init_extra = s->s3->init_extra; 106295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->handshake_buffer) { 106395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley BIO_free(s->s3->handshake_buffer); 106495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->handshake_buffer = NULL; 106595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 106695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->handshake_dgst) { 106795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_free_digest_list(s); 106895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 106995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 107095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->alpn_selected) 107195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 1072584d28cad691d8fd7b6cd4766f26513b63434b52HÃ¥vard Molland OPENSSL_free(s->s3->alpn_selected); 107395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->alpn_selected = NULL; 107495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 107595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memset(s->s3,0,sizeof *s->s3); 107695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->rbuf.buf = rp; 107795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->wbuf.buf = wp; 107895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->rbuf.len = rlen; 107995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->wbuf.len = wlen; 108095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->init_extra = init_extra; 108195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 108295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl_free_wbio_buffer(s); 108395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 108495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->packet_length=0; 108595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->renegotiate=0; 108695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->total_renegotiations=0; 108795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->num_renegotiations=0; 108895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->in_read_app_data=0; 10891b96526c6f3a3ba492fd0c7d75ddd4e2414a690cDavid Benjamin s->version = s->method->version; 109095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 109195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->next_proto_negotiated) 109295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 109395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_free(s->next_proto_negotiated); 109495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->next_proto_negotiated = NULL; 109595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->next_proto_negotiated_len = 0; 109695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 10971258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley 10981258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley s->s3->tlsext_channel_id_valid = 0; 109995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 110095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 110195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len); 110295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 110395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleylong ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) 110495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 110595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int ret=0; 110695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1107457112e1973251a721ae419128d7108844d3c1a3David Benjamin if (cmd == SSL_CTRL_SET_TMP_RSA || 110895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cmd == SSL_CTRL_SET_TMP_RSA_CB || 110995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cmd == SSL_CTRL_SET_TMP_DH || 1110457112e1973251a721ae419128d7108844d3c1a3David Benjamin cmd == SSL_CTRL_SET_TMP_DH_CB) 111195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 111295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!ssl_cert_inst(&s->cert)) 111395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 111495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_MALLOC_FAILURE); 111595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 111695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 111795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 111895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 111995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley switch (cmd) 112095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 112195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_SESSION_REUSED: 112295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->hit; 112395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 112495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_CLIENT_CERT_REQUEST: 112595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 112695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_NUM_RENEGOTIATIONS: 112795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->s3->num_renegotiations; 112895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 112995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: 113095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->s3->num_renegotiations; 113195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->num_renegotiations=0; 113295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 113395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: 113495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->s3->total_renegotiations; 113595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 113695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_FLAGS: 113795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=(int)(s->s3->flags); 113895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 113995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_NEED_TMP_RSA: 114077a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin /* Temporary RSA keys are never used. */ 114177a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin ret = 0; 114295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 114395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_RSA: 114477a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin /* Temporary RSA keys are never used. */ 114577a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 114695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 114795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_RSA_CB: 114895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 114995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 115095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 115195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 115295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 115395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_DH: 115495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 115595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DH *dh = (DH *)parg; 115695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (dh == NULL) 115795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 115895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER); 115995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 116095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 116195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((dh = DHparams_dup(dh)) == NULL) 116295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 116395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB); 116495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 116595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 116695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!(s->options & SSL_OP_SINGLE_DH_USE)) 116795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 116895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!DH_generate_key(dh)) 116995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 117095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DH_free(dh); 117195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB); 117295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 117395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 117495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 117595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->cert->dh_tmp != NULL) 117695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DH_free(s->cert->dh_tmp); 117795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->cert->dh_tmp = dh; 117895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret = 1; 117995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 118095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 118195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_DH_CB: 118295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 118395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 118495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 118595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 118695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 118795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_ECDH: 118895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 118995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY *ecdh = NULL; 119095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 119195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (parg == NULL) 119295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 119395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER); 119495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 119595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 119695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!EC_KEY_up_ref((EC_KEY *)parg)) 119795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 119895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB); 119995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 120095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 120195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ecdh = (EC_KEY *)parg; 120295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) 120395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 120495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!EC_KEY_generate_key(ecdh)) 120595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 120695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY_free(ecdh); 120795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB); 120895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 120995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 121095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 121195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->cert->ecdh_tmp != NULL) 121295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY_free(s->cert->ecdh_tmp); 121395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->cert->ecdh_tmp = ecdh; 121495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret = 1; 121595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 121695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 121795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_ECDH_CB: 121895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 121995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 122095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 122195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 122295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 122395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_HOSTNAME: 122495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (larg == TLSEXT_NAMETYPE_host_name) 122595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 122695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->tlsext_hostname != NULL) 122795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_free(s->tlsext_hostname); 122895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->tlsext_hostname = NULL; 122995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 123095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret = 1; 123195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (parg == NULL) 123295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 123395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) 123495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 123595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME); 123695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 123795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 123895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) 123995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 124095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_INTERNAL_ERROR); 124195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 124295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 124395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 124495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 124595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 124695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); 124795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 124895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 124995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 125095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: 125195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->tlsext_debug_arg=parg; 125295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret = 1; 125395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 125495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 125595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_CHAIN: 125695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (larg) 125795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_set1_chain(s->cert, 125895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley (STACK_OF (X509) *)parg); 125995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 126095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_set0_chain(s->cert, 126195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley (STACK_OF (X509) *)parg); 126295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 126395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_CHAIN_CERT: 126495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (larg) 126595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg); 126695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 126795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg); 126895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 126995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_CHAIN_CERTS: 127095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *(STACK_OF(X509) **)parg = s->cert->key->chain; 127195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 127295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 127395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SELECT_CURRENT_CERT: 127495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_select_current(s->cert, (X509 *)parg); 127595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 127695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_CURVES: 127795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 1278072334d943ef81d45f75d97cd722b46f1293f773David Benjamin const uint16_t *clist; 127995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley size_t clistlen; 128095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!s->session) 128195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 128295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley clist = s->session->tlsext_ellipticcurvelist; 1283072334d943ef81d45f75d97cd722b46f1293f773David Benjamin clistlen = s->session->tlsext_ellipticcurvelist_length; 128495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (parg) 128595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 128695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley size_t i; 128795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int *cptr = parg; 1288072334d943ef81d45f75d97cd722b46f1293f773David Benjamin int nid; 128995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley for (i = 0; i < clistlen; i++) 129095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 1291072334d943ef81d45f75d97cd722b46f1293f773David Benjamin nid = tls1_ec_curve_id2nid(clist[i]); 1292072334d943ef81d45f75d97cd722b46f1293f773David Benjamin if (nid != OBJ_undef) 129395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cptr[i] = nid; 129495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 1295072334d943ef81d45f75d97cd722b46f1293f773David Benjamin cptr[i] = TLSEXT_nid_unknown | clist[i]; 129695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 129795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 129895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return (int)clistlen; 129995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 130095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 130195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_CURVES: 130295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return tls1_set_curves(&s->tlsext_ellipticcurvelist, 130395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley &s->tlsext_ellipticcurvelist_length, 130495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley parg, larg); 130595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 130695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_ECDH_AUTO: 130795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->cert->ecdh_tmp_auto = larg; 130895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 130995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_SIGALGS: 131095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return tls1_set_sigalgs(s->cert, parg, larg, 0); 131195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 131295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_CLIENT_SIGALGS: 131395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return tls1_set_sigalgs(s->cert, parg, larg, 1); 131495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 131595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_CLIENT_CERT_TYPES: 131695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 131795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const unsigned char **pctype = parg; 131895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->server || !s->s3->tmp.cert_req) 131995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 132095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (pctype) 1321676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin *pctype = s->s3->tmp.certificate_types; 1322676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin return (int)s->s3->tmp.num_certificate_types; 132395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 132495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 132595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_CLIENT_CERT_TYPES: 132695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!s->server) 132795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 132895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl3_set_req_cert_type(s->cert, parg, larg); 132995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 133095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_BUILD_CERT_CHAIN: 133195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg); 133295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 133395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_VERIFY_CERT_STORE: 133495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_set_cert_store(s->cert, parg, 0, larg); 133595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 133695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_CHAIN_CERT_STORE: 133795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_set_cert_store(s->cert, parg, 1, larg); 133895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 133995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_PEER_SIGNATURE_NID: 134095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (SSL_USE_SIGALGS(s)) 134195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 134295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->session && s->session->sess_cert) 134395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 134495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const EVP_MD *sig; 134595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sig = s->session->sess_cert->peer_key->digest; 134695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (sig) 134795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 134895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *(int *)parg = EVP_MD_type(sig); 134995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 135095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 135195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 135295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 135395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 135495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Might want to do something here for other versions */ 135595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 135695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 135795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 135895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_SERVER_TMP_KEY: 135995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->server || !s->session || !s->session->sess_cert) 136095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 136195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 136295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 136395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SESS_CERT *sc; 136495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *ptmp; 136595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int rv = 0; 136695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sc = s->session->sess_cert; 1367457112e1973251a721ae419128d7108844d3c1a3David Benjamin if (!sc->peer_rsa_tmp && !sc->peer_dh_tmp && !sc->peer_ecdh_tmp) 136895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 136995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ptmp = EVP_PKEY_new(); 137095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!ptmp) 137195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 1372457112e1973251a721ae419128d7108844d3c1a3David Benjamin if (sc->peer_rsa_tmp) 137395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rv = EVP_PKEY_set1_RSA(ptmp, sc->peer_rsa_tmp); 137495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else if (sc->peer_dh_tmp) 137595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp); 137695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else if (sc->peer_ecdh_tmp) 137795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp); 137895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (rv) 137995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 138095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *(EVP_PKEY **)parg = ptmp; 138195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 138295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 138395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY_free(ptmp); 138495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 138595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 138695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_EC_POINT_FORMATS: 138795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 138895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_SESSION *sess = s->session; 138995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const unsigned char **pformat = parg; 139095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!sess || !sess->tlsext_ecpointformatlist) 139195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 139295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *pformat = sess->tlsext_ecpointformatlist; 139395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return (int)sess->tlsext_ecpointformatlist_length; 139495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 13951258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley 13961258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley case SSL_CTRL_CHANNEL_ID: 13971258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley s->tlsext_channel_id_enabled = 1; 13981258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley ret = 1; 13991258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley break; 14001258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley 14011258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley case SSL_CTRL_SET_CHANNEL_ID: 14021258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (s->server) 14031258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley break; 14041258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley s->tlsext_channel_id_enabled = 1; 14051258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (EVP_PKEY_bits(parg) != 256) 14061258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley { 14071258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_CHANNEL_ID_NOT_P256); 14081258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley break; 14091258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley } 14101258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (s->tlsext_channel_id_private) 14111258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley EVP_PKEY_free(s->tlsext_channel_id_private); 14121258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg); 14131258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley ret = 1; 14141258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley break; 14151258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley 14161258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley case SSL_CTRL_GET_CHANNEL_ID: 14171258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (!s->server) 14181258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley break; 14191258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (!s->s3->tlsext_channel_id_valid) 14201258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley break; 14211258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley memcpy(parg, s->s3->tlsext_channel_id, larg < 64 ? larg : 64); 14221258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley return 64; 14231258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley 1424ac61fa379fde449f52f7804aa5e7e39554a37b74Adam Langley case SSL_CTRL_FALLBACK_SCSV: 1425ac61fa379fde449f52f7804aa5e7e39554a37b74Adam Langley if (s->server) 1426ac61fa379fde449f52f7804aa5e7e39554a37b74Adam Langley break; 1427ac61fa379fde449f52f7804aa5e7e39554a37b74Adam Langley s->fallback_scsv = 1; 1428ac61fa379fde449f52f7804aa5e7e39554a37b74Adam Langley ret = 1; 1429ac61fa379fde449f52f7804aa5e7e39554a37b74Adam Langley break; 1430ac61fa379fde449f52f7804aa5e7e39554a37b74Adam Langley 143195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley default: 143295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 143395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 143495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 143595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 143695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 143795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleylong ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) 143895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 143995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int ret=0; 144095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1441457112e1973251a721ae419128d7108844d3c1a3David Benjamin if (cmd == SSL_CTRL_SET_TMP_RSA_CB || cmd == SSL_CTRL_SET_TMP_DH_CB) 144295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 144395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!ssl_cert_inst(&s->cert)) 144495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 144595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_callback_ctrl, ERR_R_MALLOC_FAILURE); 144695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 144795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 144895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 144995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 145095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley switch (cmd) 145195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 145295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_RSA_CB: 145377a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin /* Ignore the callback; temporary RSA keys are never used. */ 145495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 145595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_DH_CB: 145695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 145795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; 145895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 145995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 146095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_ECDH_CB: 146195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 146295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; 146395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 146495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 146595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_DEBUG_CB: 146695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->tlsext_debug_cb=(void (*)(SSL *,int ,int, 146795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley unsigned char *, int, void *))fp; 146895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 146995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley default: 147095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 147195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 147295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 147395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 147495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 147595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleylong ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) 147695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 147795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley CERT *cert; 147895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 147995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cert=ctx->cert; 148095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 148195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley switch (cmd) 148295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 148395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_NEED_TMP_RSA: 148477a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin /* Temporary RSA keys are never used. */ 148577a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin return 0; 148695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_RSA: 148777a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 148877a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin return 0; 148995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_RSA_CB: 149095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 149195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 149295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 149395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 149495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 149595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_DH: 149695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 149795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DH *new=NULL,*dh; 149895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 149995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley dh=(DH *)parg; 150095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((new=DHparams_dup(dh)) == NULL) 150195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 150295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB); 150395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 150495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 150595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) 150695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 150795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!DH_generate_key(new)) 150895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 150995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB); 151095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DH_free(new); 151195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 151295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 151395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 151495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (cert->dh_tmp != NULL) 151595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DH_free(cert->dh_tmp); 151695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cert->dh_tmp=new; 151795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 151895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 151995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /*break; */ 152095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_DH_CB: 152195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 152295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 152395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 152495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 152595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 152695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_ECDH: 152795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 152895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY *ecdh = NULL; 152995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 153095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (parg == NULL) 153195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 153295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB); 153395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 153495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 153595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ecdh = EC_KEY_dup((EC_KEY *)parg); 153695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (ecdh == NULL) 153795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 153895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_EC_LIB); 153995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 154095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 154195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) 154295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 154395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!EC_KEY_generate_key(ecdh)) 154495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 154595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY_free(ecdh); 154695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB); 154795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 154895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 154995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 155095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 155195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (cert->ecdh_tmp != NULL) 155295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 155395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY_free(cert->ecdh_tmp); 155495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 155595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cert->ecdh_tmp = ecdh; 155695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 155795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 155895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* break; */ 155995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_ECDH_CB: 156095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 156195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 156295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 156395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 156495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 156595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: 156695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ctx->tlsext_servername_arg=parg; 156795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 156895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: 156995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: 157095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 157195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley unsigned char *keys = parg; 157295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!keys) 157395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 48; 157495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (larg != 48) 157595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 157695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_INVALID_TICKET_KEYS_LENGTH); 157795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 157895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 157995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) 158095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 158195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memcpy(ctx->tlsext_tick_key_name, keys, 16); 158295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); 158395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); 158495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 158595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 158695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 158795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memcpy(keys, ctx->tlsext_tick_key_name, 16); 158895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); 158995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); 159095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 159195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 159295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 159395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 159495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: 159595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ctx->tlsext_status_arg=parg; 159695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 159795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 159895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 159995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_CURVES: 160095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return tls1_set_curves(&ctx->tlsext_ellipticcurvelist, 160195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley &ctx->tlsext_ellipticcurvelist_length, 160295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley parg, larg); 160395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 160495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_ECDH_AUTO: 160595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ctx->cert->ecdh_tmp_auto = larg; 160695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 160795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_SIGALGS: 160895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return tls1_set_sigalgs(ctx->cert, parg, larg, 0); 160995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 161095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_CLIENT_SIGALGS: 161195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return tls1_set_sigalgs(ctx->cert, parg, larg, 1); 161295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 161395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_CLIENT_CERT_TYPES: 161495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl3_set_req_cert_type(ctx->cert, parg, larg); 161595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 161695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_BUILD_CERT_CHAIN: 161795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg); 161895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 161995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_VERIFY_CERT_STORE: 162095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg); 162195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 162295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_CHAIN_CERT_STORE: 162395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg); 162495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 162595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 162695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* A Thawte special :-) */ 162795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_EXTRA_CHAIN_CERT: 162895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (ctx->extra_certs == NULL) 162995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 163095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((ctx->extra_certs=sk_X509_new_null()) == NULL) 163195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 163295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 163395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_X509_push(ctx->extra_certs,(X509 *)parg); 163495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 163595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 163695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: 1637b6333d600e0f54707cba962093ef3eca0312d6bcAdam Langley if (ctx->extra_certs == NULL && larg == 0) 1638b6333d600e0f54707cba962093ef3eca0312d6bcAdam Langley *(STACK_OF(X509) **)parg = ctx->cert->key->chain; 1639b6333d600e0f54707cba962093ef3eca0312d6bcAdam Langley else 1640b6333d600e0f54707cba962093ef3eca0312d6bcAdam Langley *(STACK_OF(X509) **)parg = ctx->extra_certs; 164195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 164295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 164395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: 164495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (ctx->extra_certs) 164595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 164695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_X509_pop_free(ctx->extra_certs, X509_free); 164795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ctx->extra_certs = NULL; 164895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 164995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 165095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 165195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_CHAIN: 165295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (larg) 165395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_set1_chain(ctx->cert, 165495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley (STACK_OF (X509) *)parg); 165595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 165695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_set0_chain(ctx->cert, 165795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley (STACK_OF (X509) *)parg); 165895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 165995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_CHAIN_CERT: 166095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (larg) 166195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg); 166295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 166395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg); 166495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 166595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_GET_CHAIN_CERTS: 166695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *(STACK_OF(X509) **)parg = ctx->cert->key->chain; 166795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 166895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 166995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SELECT_CURRENT_CERT: 167095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl_cert_select_current(ctx->cert, (X509 *)parg); 167195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 16721258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley case SSL_CTRL_CHANNEL_ID: 16731258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley /* must be called on a server */ 16741258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (ctx->method->ssl_accept == ssl_undefined_function) 16751258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley return 0; 16761258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley ctx->tlsext_channel_id_enabled=1; 16771258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley return 1; 16781258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley 16791258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley case SSL_CTRL_SET_CHANNEL_ID: 16801258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley ctx->tlsext_channel_id_enabled = 1; 16811258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (EVP_PKEY_bits(parg) != 256) 16821258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley { 16831258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_CHANNEL_ID_NOT_P256); 16841258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley break; 16851258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley } 16861258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley if (ctx->tlsext_channel_id_private) 16871258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley EVP_PKEY_free(ctx->tlsext_channel_id_private); 16881258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg); 16891258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley break; 16901258b6a756674d63f172602d8041ccc0dffd03d1Adam Langley 169195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley default: 169295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 169395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 169495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(1); 169595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 169695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 169795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleylong ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) 169895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 169995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley CERT *cert; 170095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 170195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cert=ctx->cert; 170295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 170395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley switch (cmd) 170495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 170595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_RSA_CB: 170677a942b7fedb58ae1afee042255b4b9267abebcaDavid Benjamin /* Ignore the callback; temporary RSA keys are never used. */ 170795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 170895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_DH_CB: 170995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 171095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; 171195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 171295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 171395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TMP_ECDH_CB: 171495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 171595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; 171695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 171795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 171895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: 171995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp; 172095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 172195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 172295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: 172395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp; 172495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 172595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 172695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: 172795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *, 172895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley unsigned char *, 172995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_CIPHER_CTX *, 173095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley HMAC_CTX *, int))fp; 173195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 173295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 173395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley default: 173495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 173595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 173695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(1); 173795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 173895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 173939482a13aca033b72118807fadd152207e0fad8aDavid Benjamin/* ssl3_get_cipher_by_value returns the SSL_CIPHER with value |value| or NULL if 174039482a13aca033b72118807fadd152207e0fad8aDavid Benjamin * none exists. 174139482a13aca033b72118807fadd152207e0fad8aDavid Benjamin * 174239482a13aca033b72118807fadd152207e0fad8aDavid Benjamin * This function needs to check if the ciphers required are actually 174339482a13aca033b72118807fadd152207e0fad8aDavid Benjamin * available. */ 174439482a13aca033b72118807fadd152207e0fad8aDavid Benjaminconst SSL_CIPHER *ssl3_get_cipher_by_value(uint16_t value) 174595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 174695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley SSL_CIPHER c; 174739482a13aca033b72118807fadd152207e0fad8aDavid Benjamin 174839482a13aca033b72118807fadd152207e0fad8aDavid Benjamin c.id = 0x03000000L|value; 174939482a13aca033b72118807fadd152207e0fad8aDavid Benjamin return bsearch(&c, ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(SSL_CIPHER), ssl_cipher_id_cmp); 175095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 175195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 175239482a13aca033b72118807fadd152207e0fad8aDavid Benjamin/* ssl3_get_cipher_by_value returns the cipher value of |c|. */ 175339482a13aca033b72118807fadd152207e0fad8aDavid Benjaminuint16_t ssl3_get_cipher_value(const SSL_CIPHER *c) 175495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 175539482a13aca033b72118807fadd152207e0fad8aDavid Benjamin unsigned long id = c->id; 175639482a13aca033b72118807fadd152207e0fad8aDavid Benjamin /* All ciphers are SSLv3 now. */ 175739482a13aca033b72118807fadd152207e0fad8aDavid Benjamin assert((id & 0xff000000) == 0x03000000); 175839482a13aca033b72118807fadd152207e0fad8aDavid Benjamin return id & 0xffff; 175995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 176095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1761858a88daf27975f67d9f63e18f95645be2886bfbAdam Langleystruct ssl_cipher_preference_list_st* ssl_get_cipher_preferences(SSL *s) 1762858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley { 1763858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if (s->cipher_list != NULL) 1764858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley return(s->cipher_list); 1765858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley 1766858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if (s->version >= TLS1_1_VERSION) 1767858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley { 1768858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if (s->ctx != NULL && s->ctx->cipher_list_tls11 != NULL) 1769858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley return s->ctx->cipher_list_tls11; 1770858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley } 1771858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley 1772858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) 1773858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley return(s->ctx->cipher_list); 1774858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley 1775858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley return NULL; 1776858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley } 1777858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley 17786f2600199c82330240de9a7f65a801b6f606b7b3David Benjaminconst SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, 1779858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley struct ssl_cipher_preference_list_st *server_pref) 178095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 17816f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin const SSL_CIPHER *c,*ret=NULL; 1782858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley STACK_OF(SSL_CIPHER) *srvr = server_pref->ciphers, *prio, *allow; 178395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int i,ok; 178495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley size_t cipher_index; 178595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley CERT *cert; 1786060d9d2c563b3fbe00eff93e5033591504516e6cDavid Benjamin unsigned long alg_k,alg_a,mask_k,mask_a; 1787858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley /* in_group_flags will either be NULL, or will point to an array of 1788858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley * bytes which indicate equal-preference groups in the |prio| stack. 1789858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley * See the comment about |in_group_flags| in the 1790858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley * |ssl_cipher_preference_list_st| struct. */ 1791858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley const unsigned char *in_group_flags; 1792858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley /* group_min contains the minimal index so far found in a group, or -1 1793858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley * if no such value exists yet. */ 1794858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley int group_min = -1; 179595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 179695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Let's see which ciphers we can support */ 179795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley cert=s->cert; 179895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 179995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if 0 180095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Do not set the compare functions, because this may lead to a 180195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * reordering by "id". We want to keep the original ordering. 180295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * We may pay a price in performance during sk_SSL_CIPHER_find(), 180395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * but would have to pay with the price of sk_SSL_CIPHER_dup(). 180495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley */ 180595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp); 180695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp); 180795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 180895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 180995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef CIPHER_DEBUG 181095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); 181195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i) 181295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 181395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley c=sk_SSL_CIPHER_value(srvr,i); 181495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley printf("%p:%s\n",(void *)c,c->name); 181595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 181695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); 181795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i) 181895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 181995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley c=sk_SSL_CIPHER_value(clnt,i); 182095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley printf("%p:%s\n",(void *)c,c->name); 182195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 182295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 182395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1824335d10d201a22598c2b2c379148c9a095b8ab175David Benjamin if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) 182595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 182695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley prio = srvr; 1827858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley in_group_flags = server_pref->in_group_flags; 182895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley allow = clnt; 182995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 183095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 183195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 183295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley prio = clnt; 1833858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley in_group_flags = NULL; 183495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley allow = srvr; 183595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 183695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 183795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley tls1_set_cert_validity(s); 183895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 183995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley for (i=0; i<sk_SSL_CIPHER_num(prio); i++) 184095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 184195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley c=sk_SSL_CIPHER_value(prio,i); 184295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1843858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley ok = 1; 1844858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley 184595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Skip TLS v1.2 only ciphersuites if not supported */ 1846858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if ((c->algorithm_ssl & SSL_TLSV1_2) && 184795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley !SSL_USE_TLS1_2_CIPHERS(s)) 1848858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley ok = 0; 184995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 185095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl_set_cert_masks(cert,c); 185195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mask_k = cert->mask_k; 185295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mask_a = cert->mask_a; 185395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 185495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef KSSL_DEBUG 185595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ 185695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif /* KSSL_DEBUG */ 185795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 185895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley alg_k=c->algorithm_mkey; 185995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley alg_a=c->algorithm_auth; 186095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 186195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* with PSK there must be server callback set */ 1862c26c802a8912a813181ea677b7da38d1d3aedcf8Adam Langley if ((alg_a & SSL_aPSK) && s->psk_server_callback == NULL) 1863858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley ok = 0; 186495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1865060d9d2c563b3fbe00eff93e5033591504516e6cDavid Benjamin ok = ok && (alg_k & mask_k) && (alg_a & mask_a); 186695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef CIPHER_DEBUG 1867060d9d2c563b3fbe00eff93e5033591504516e6cDavid Benjamin printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c, 1868060d9d2c563b3fbe00eff93e5033591504516e6cDavid Benjamin c->name); 186995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 187095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 187195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* if we are considering an ECC cipher suite that uses 187295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * an ephemeral EC key check it */ 187395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (alg_k & SSL_kEECDH) 187495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ok = ok && tls1_check_ec_tmp_key(s, c->id); 187595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1876858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if (ok && sk_SSL_CIPHER_find(allow, &cipher_index, c)) 187795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 1878858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if (in_group_flags != NULL && in_group_flags[i] == 1) 187995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 1880858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley /* This element of |prio| is in a group. Update 1881858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley * the minimum index found so far and continue 1882858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley * looking. */ 1883858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if (group_min == -1 || group_min > cipher_index) 1884858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley group_min = cipher_index; 188595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 1886858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley else 1887858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley { 1888858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if (group_min != -1 && group_min < cipher_index) 1889858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley cipher_index = group_min; 1890858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley ret=sk_SSL_CIPHER_value(allow,cipher_index); 1891858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley break; 1892858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley } 1893858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley } 1894858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley 1895858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley if (in_group_flags != NULL && 1896858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley in_group_flags[i] == 0 && 1897858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley group_min != -1) 1898858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley { 1899858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley /* We are about to leave a group, but we found a match 1900858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley * in it, so that's our answer. */ 1901858a88daf27975f67d9f63e18f95645be2886bfbAdam Langley ret=sk_SSL_CIPHER_value(allow,group_min); 190295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 190395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 190495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 190595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 190695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 190795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 190895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_get_req_cert_type(SSL *s, unsigned char *p) 190995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 191095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int ret=0; 191195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const unsigned char *sig; 191295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley size_t i, siglen; 1913ef2116d33c3c1b38005eb59caa2aaa6300a9b450David Benjamin int have_rsa_sign = 0; 191495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int have_ecdsa_sign = 0; 191595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 191695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* If we have custom certificate types set, use them */ 1917676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin if (s->cert->client_certificate_types) 191895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 1919676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin memcpy(p, s->cert->client_certificate_types, 1920676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin s->cert->num_client_certificate_types); 1921676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin return (int)s->cert->num_client_certificate_types; 192295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 192395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* get configured sigalgs */ 192495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley siglen = tls12_get_psigalgs(s, &sig); 192595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley for (i = 0; i < siglen; i+=2, sig+=2) 192695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 192795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley switch(sig[1]) 192895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 192995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case TLSEXT_signature_rsa: 193095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley have_rsa_sign = 1; 193195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 193295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 193395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley case TLSEXT_signature_ecdsa: 193495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley have_ecdsa_sign = 1; 193595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley break; 193695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 193795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 193895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 193995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (have_rsa_sign) 194095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley p[ret++]=SSL3_CT_RSA_SIGN; 194195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 194295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* ECDSA certs can be used with RSA cipher suites as well 194395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * so we don't need to check for SSL_kECDH or SSL_kEECDH 194495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley */ 194595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->version >= TLS1_VERSION) 194695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 194795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (have_ecdsa_sign) 194895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley p[ret++]=TLS_CT_ECDSA_SIGN; 194995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 195095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 195195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 195295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 195395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len) 195495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 1955676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin if (c->client_certificate_types) 195695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 1957676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin OPENSSL_free(c->client_certificate_types); 1958676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin c->client_certificate_types = NULL; 195995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 1960676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin c->num_client_certificate_types = 0; 196195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!p || !len) 196295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 196395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (len > 0xff) 196495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 1965676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin c->client_certificate_types = BUF_memdup(p, len); 1966676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin if (!c->client_certificate_types) 196795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 0; 1968676d1e780e96b201113958e8a6f2e787438f200bDavid Benjamin c->num_client_certificate_types = len; 196995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return 1; 197095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 197195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 197295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_shutdown(SSL *s) 197395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 197495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int ret; 197595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 197695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Don't do anything much if we have not done the handshake or 197795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * we don't want to send messages :-) */ 197895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) 197995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 198095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); 198195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(1); 198295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 198395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 198495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (!(s->shutdown & SSL_SENT_SHUTDOWN)) 198595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 198695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->shutdown|=SSL_SENT_SHUTDOWN; 198795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if 1 198895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY); 198995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 199095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* our shutdown alert has been sent now, and if it still needs 199195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * to be written, s->s3->alert_dispatch will be true */ 199295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->alert_dispatch) 199395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(-1); /* return WANT_WRITE */ 199495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 199595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else if (s->s3->alert_dispatch) 199695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 199795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* resend it if not sent */ 199895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if 1 199995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->method->ssl_dispatch_alert(s); 200095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(ret == -1) 200195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 200295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* we only get to return -1 here the 2nd/Nth 200395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * invocation, we must have already signalled 200495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * return 0 upon a previous invoation, 200595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * return WANT_WRITE */ 200695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 200795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 200895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 200995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 201095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) 201195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 201295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* If we are waiting for a close from our peer, we are closed */ 201395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->method->ssl_read_bytes(s,0,NULL,0,0); 201495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) 201595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 201695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(-1); /* return WANT_READ */ 201795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 201895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 201995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 202095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && 202195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley !s->s3->alert_dispatch) 202295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(1); 202395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 202495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 202595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 202695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 202795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_write(SSL *s, const void *buf, int len) 202895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 202995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int ret,n; 203095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 203195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if 0 203295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->shutdown & SSL_SEND_SHUTDOWN) 203395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 203495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->rwstate=SSL_NOTHING; 203595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 203695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 203795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 203895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ERR_clear_system_error(); 203995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->renegotiate) ssl3_renegotiate_check(s); 204095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 204195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* This is an experimental flag that sends the 204295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * last handshake message in the same packet as the first 204395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * use data - used to see if it helps the TCP protocol during 204495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * session-id reuse */ 204595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* The second test is because the buffer may have been removed */ 204695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) 204795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 204895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* First time through, we write into the buffer */ 204995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->delay_buf_pop_ret == 0) 205095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 205195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA, 205295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley buf,len); 205395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (ret <= 0) return(ret); 205495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 205595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->delay_buf_pop_ret=ret; 205695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 205795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 205895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->rwstate=SSL_WRITING; 205995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley n=BIO_flush(s->wbio); 206095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (n <= 0) return(n); 206195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->rwstate=SSL_NOTHING; 206295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 206395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* We have flushed the buffer, so remove it */ 206495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ssl_free_wbio_buffer(s); 206595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; 206695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 206795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->s3->delay_buf_pop_ret; 206895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->delay_buf_pop_ret=0; 206995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 207095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 207195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 207295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA, 207395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley buf,len); 207495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (ret <= 0) return(ret); 207595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 207695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 207795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 207895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 207995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 208095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic int ssl3_read_internal(SSL *s, void *buf, int len, int peek) 208195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 2082adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley int n,ret; 208395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 208495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ERR_clear_system_error(); 2085adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) 2086adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley { 2087adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley /* Deal with an application that calls SSL_read() when handshake data 2088adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley * is yet to be written. 2089adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley */ 2090adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley if (BIO_wpending(s->wbio) > 0) 2091adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley { 2092adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley s->rwstate=SSL_WRITING; 2093adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley n=BIO_flush(s->wbio); 2094adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley if (n <= 0) return(n); 2095adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley s->rwstate=SSL_NOTHING; 2096adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley } 2097adb739e1e59a48a421a080e64ad16f23e6b18cfdAdam Langley } 209895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->renegotiate) ssl3_renegotiate_check(s); 209995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->in_read_app_data=1; 210095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); 210195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ((ret == -1) && (s->s3->in_read_app_data == 2)) 210295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 210395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* ssl3_read_bytes decided to call s->handshake_func, which 210495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * called ssl3_read_bytes to read handshake data. 210595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * However, ssl3_read_bytes actually found application data 210695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * and thinks that application data makes sense here; so disable 210795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * handshake processing and try to read application data again. */ 210895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->in_handshake++; 210995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); 211095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->in_handshake--; 211195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 211295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley else 211395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->in_read_app_data=0; 211495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 211595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 211695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 211795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 211895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_read(SSL *s, void *buf, int len) 211995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 212095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl3_read_internal(s, buf, len, 0); 212195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 212295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 212395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_peek(SSL *s, void *buf, int len) 212495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 212595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return ssl3_read_internal(s, buf, len, 1); 212695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 212795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 212895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_renegotiate(SSL *s) 212995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 213095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->handshake_func == NULL) 213195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(1); 213295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 213395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) 213495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(0); 213595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 213695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->renegotiate=1; 213795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(1); 213895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 213995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 214095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint ssl3_renegotiate_check(SSL *s) 214195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 214295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int ret=0; 214395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 214495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->s3->renegotiate) 214595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 214695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if ( (s->s3->rbuf.left == 0) && 214795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley (s->s3->wbuf.left == 0) && 214895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley !SSL_in_init(s)) 214995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 215095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* 215195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyif we are the server, and we have sent a 'RENEGOTIATE' message, we 215295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyneed to go to SSL_ST_ACCEPT. 215395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley*/ 215495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* SSL_ST_ACCEPT */ 215595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->state=SSL_ST_RENEGOTIATE; 215695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->renegotiate=0; 215795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->num_renegotiations++; 215895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley s->s3->total_renegotiations++; 215995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ret=1; 216095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 216195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 216295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return(ret); 216395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 216495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF 216595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * and handshake macs if required. 216695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley */ 216795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleylong ssl_get_algorithm2(SSL *s) 216895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 21699447dff5a25980032883975c7d981d9606395938Adam Langley static const unsigned long kMask = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF; 217095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley long alg2 = s->s3->tmp.new_cipher->algorithm2; 217195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF 21729447dff5a25980032883975c7d981d9606395938Adam Langley && (alg2 & kMask) == kMask) 217395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; 217495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return alg2; 217595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 217695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 2177