| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | /* ssl/s3_lib.c */ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  |  * All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This package is an SSL implementation written | 
					
						
							|  |  |  |  * by Eric Young (eay@cryptsoft.com). | 
					
						
							|  |  |  |  * The implementation was written so as to conform with Netscapes SSL. | 
					
						
							|  |  |  |  *  | 
					
						
							|  |  |  |  * This library is free for commercial and non-commercial use as long as | 
					
						
							|  |  |  |  * the following conditions are aheared to.  The following conditions | 
					
						
							|  |  |  |  * apply to all code found in this distribution, be it the RC4, RSA, | 
					
						
							|  |  |  |  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation | 
					
						
							|  |  |  |  * included with this distribution is covered by the same copyright terms | 
					
						
							|  |  |  |  * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
					
						
							|  |  |  |  *  | 
					
						
							|  |  |  |  * Copyright remains Eric Young's, and as such any Copyright notices in | 
					
						
							|  |  |  |  * the code are not to be removed. | 
					
						
							|  |  |  |  * If this package is used in a product, Eric Young should be given attribution | 
					
						
							|  |  |  |  * as the author of the parts of the library used. | 
					
						
							|  |  |  |  * This can be in the form of a textual message at program startup or | 
					
						
							|  |  |  |  * in documentation (online or textual) provided with the package. | 
					
						
							|  |  |  |  *  | 
					
						
							|  |  |  |  * Redistribution and use in source and binary forms, with or without | 
					
						
							|  |  |  |  * modification, are permitted provided that the following conditions | 
					
						
							|  |  |  |  * are met: | 
					
						
							|  |  |  |  * 1. Redistributions of source code must retain the copyright | 
					
						
							|  |  |  |  *    notice, this list of conditions and the following disclaimer. | 
					
						
							|  |  |  |  * 2. Redistributions in binary form must reproduce the above copyright | 
					
						
							|  |  |  |  *    notice, this list of conditions and the following disclaimer in the | 
					
						
							|  |  |  |  *    documentation and/or other materials provided with the distribution. | 
					
						
							|  |  |  |  * 3. All advertising materials mentioning features or use of this software | 
					
						
							|  |  |  |  *    must display the following acknowledgement: | 
					
						
							|  |  |  |  *    "This product includes cryptographic software written by | 
					
						
							|  |  |  |  *     Eric Young (eay@cryptsoft.com)" | 
					
						
							|  |  |  |  *    The word 'cryptographic' can be left out if the rouines from the library | 
					
						
							|  |  |  |  *    being used are not cryptographic related :-). | 
					
						
							|  |  |  |  * 4. If you include any Windows specific code (or a derivative thereof) from  | 
					
						
							|  |  |  |  *    the apps directory (application code) you must include an acknowledgement: | 
					
						
							|  |  |  |  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
					
						
							|  |  |  |  *  | 
					
						
							|  |  |  |  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
					
						
							|  |  |  |  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
					
						
							|  |  |  |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
					
						
							|  |  |  |  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | 
					
						
							|  |  |  |  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
					
						
							|  |  |  |  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
					
						
							|  |  |  |  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
					
						
							|  |  |  |  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
					
						
							|  |  |  |  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
					
						
							|  |  |  |  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
					
						
							|  |  |  |  * SUCH DAMAGE. | 
					
						
							|  |  |  |  *  | 
					
						
							|  |  |  |  * The licence and distribution terms for any publically available version or | 
					
						
							|  |  |  |  * derivative of this code cannot be changed.  i.e. this code cannot simply be | 
					
						
							|  |  |  |  * copied and put under another distribution licence | 
					
						
							|  |  |  |  * [including the GNU Public Licence.] | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  | /* ====================================================================
 | 
					
						
							| 
									
										
										
										
											2002-03-15 18:52:32 +08:00
										 |  |  |  * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved. | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Redistribution and use in source and binary forms, with or without | 
					
						
							|  |  |  |  * modification, are permitted provided that the following conditions | 
					
						
							|  |  |  |  * are met: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 1. Redistributions of source code must retain the above copyright | 
					
						
							|  |  |  |  *    notice, this list of conditions and the following disclaimer.  | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 2. Redistributions in binary form must reproduce the above copyright | 
					
						
							|  |  |  |  *    notice, this list of conditions and the following disclaimer in | 
					
						
							|  |  |  |  *    the documentation and/or other materials provided with the | 
					
						
							|  |  |  |  *    distribution. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 3. All advertising materials mentioning features or use of this | 
					
						
							|  |  |  |  *    software must display the following acknowledgment: | 
					
						
							|  |  |  |  *    "This product includes software developed by the OpenSSL Project | 
					
						
							|  |  |  |  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | 
					
						
							|  |  |  |  *    endorse or promote products derived from this software without | 
					
						
							|  |  |  |  *    prior written permission. For written permission, please contact | 
					
						
							|  |  |  |  *    openssl-core@openssl.org. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 5. Products derived from this software may not be called "OpenSSL" | 
					
						
							|  |  |  |  *    nor may "OpenSSL" appear in their names without prior written | 
					
						
							|  |  |  |  *    permission of the OpenSSL Project. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 6. Redistributions of any form whatsoever must retain the following | 
					
						
							|  |  |  |  *    acknowledgment: | 
					
						
							|  |  |  |  *    "This product includes software developed by the OpenSSL Project | 
					
						
							|  |  |  |  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | 
					
						
							|  |  |  |  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
					
						
							|  |  |  |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 
					
						
							|  |  |  |  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR | 
					
						
							|  |  |  |  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
					
						
							|  |  |  |  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | 
					
						
							|  |  |  |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 
					
						
							|  |  |  |  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
					
						
							|  |  |  |  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | 
					
						
							|  |  |  |  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
					
						
							|  |  |  |  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | 
					
						
							|  |  |  |  * OF THE POSSIBILITY OF SUCH DAMAGE. | 
					
						
							|  |  |  |  * ==================================================================== | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This product includes cryptographic software written by Eric Young | 
					
						
							|  |  |  |  * (eay@cryptsoft.com).  This product includes software written by Tim | 
					
						
							|  |  |  |  * Hudson (tjh@cryptsoft.com). | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							| 
									
										
										
										
											1999-04-24 06:13:45 +08:00
										 |  |  | #include <openssl/objects.h>
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | #include "ssl_locl.h"
 | 
					
						
							| 
									
										
										
										
											2001-07-12 05:11:40 +08:00
										 |  |  | #include "kssl_lcl.h"
 | 
					
						
							| 
									
										
										
										
											2001-07-31 07:57:25 +08:00
										 |  |  | #include <openssl/md5.h>
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-18 05:25:43 +08:00
										 |  |  | const char *ssl3_version_str="SSLv3" OPENSSL_VERSION_PTEXT; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define SSL3_NUM_CIPHERS	(sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static long ssl3_default_timeout(void ); | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-15 22:23:29 +08:00
										 |  |  | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | /* The RSA ciphers */ | 
					
						
							|  |  |  | /* Cipher 01 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_NULL_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_NULL_MD5, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_MD5|SSL_SSLV3, | 
					
						
							| 
									
										
										
										
											2002-07-10 14:41:55 +08:00
										 |  |  | 	SSL_NOT_EXP|SSL_STRONG_NONE, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	0, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 02 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_NULL_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_NULL_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_SHA1|SSL_SSLV3, | 
					
						
							| 
									
										
										
										
											2002-07-10 14:41:55 +08:00
										 |  |  | 	SSL_NOT_EXP|SSL_STRONG_NONE, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	0, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* anon DH */ | 
					
						
							|  |  |  | /* Cipher 17 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_ADH_RC4_40_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_ADH_RC4_40_MD5, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 18 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_ADH_RC4_128_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_ADH_RC4_128_MD5, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_SSLV3, | 
					
						
							| 
									
										
										
										
											2002-03-15 02:53:15 +08:00
										 |  |  | 	SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	128, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 19 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_ADH_DES_40_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_ADH_DES_40_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH |SSL_aNULL|SSL_DES|SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 1A */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_ADH_DES_64_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_ADH_DES_64_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH |SSL_aNULL|SSL_DES  |SSL_SHA1|SSL_SSLV3, | 
					
						
							| 
									
										
										
										
											2002-03-15 02:53:15 +08:00
										 |  |  | 	SSL_NOT_EXP|SSL_LOW, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	56, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 1B */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	SSL3_TXT_ADH_DES_192_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_ADH_DES_192_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH |SSL_aNULL|SSL_3DES |SSL_SHA1|SSL_SSLV3, | 
					
						
							| 
									
										
										
										
											2002-03-15 02:53:15 +08:00
										 |  |  | 	SSL_NOT_EXP|SSL_HIGH, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	168, | 
					
						
							|  |  |  | 	168, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* RSA again */ | 
					
						
							|  |  |  | /* Cipher 03 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_RC4_40_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_RC4_40_MD5, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5 |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 04 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_RC4_128_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_RC4_128_MD5, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	128, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 05 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_RC4_128_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_RC4_128_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	128, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 06 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_RC2_40_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_RC2_40_MD5, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_RC2  |SSL_MD5 |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 07 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_IDEA_128_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_IDEA_128_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_IDEA |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	128, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 08 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_DES_40_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_DES_40_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 09 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_DES_64_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_DES_64_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_LOW, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	56, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 0A */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_RSA_DES_192_CBC3_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_RSA_DES_192_CBC3_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kRSA|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_HIGH, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	168, | 
					
						
							|  |  |  | 	168, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*  The DH ciphers */ | 
					
						
							|  |  |  | /* Cipher 0B */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_DH_DSS_DES_40_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_DH_DSS_DES_40_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kDHd |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 0C */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_DH_DSS_DES_64_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_DH_DSS_DES_64_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kDHd |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_LOW, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	56, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 0D */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_DH_DSS_DES_192_CBC3_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kDHd |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_HIGH, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	168, | 
					
						
							|  |  |  | 	168, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 0E */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_DH_RSA_DES_40_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_DH_RSA_DES_40_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kDHr |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 0F */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_DH_RSA_DES_64_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_DH_RSA_DES_64_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kDHr |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_LOW, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	56, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 10 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_DH_RSA_DES_192_CBC3_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kDHr |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_HIGH, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	168, | 
					
						
							|  |  |  | 	168, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* The Ephemeral DH ciphers */ | 
					
						
							|  |  |  | /* Cipher 11 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_EDH_DSS_DES_40_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 12 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_EDH_DSS_DES_64_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH|SSL_aDSS|SSL_DES  |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_LOW, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	56, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 13 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH|SSL_aDSS|SSL_3DES |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_HIGH, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	168, | 
					
						
							|  |  |  | 	168, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 14 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_EDH_RSA_DES_40_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	40, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 15 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_EDH_RSA_DES_64_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_LOW, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	56, | 
					
						
							|  |  |  | 	56, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | /* Cipher 16 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kEDH|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_HIGH, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	168, | 
					
						
							|  |  |  | 	168, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Fortezza */ | 
					
						
							|  |  |  | /* Cipher 1C */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_FZA_DMS_NULL_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_FZA_DMS_NULL_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kFZA|SSL_aFZA |SSL_eNULL |SSL_SHA1|SSL_SSLV3, | 
					
						
							| 
									
										
										
										
											2002-07-10 14:41:55 +08:00
										 |  |  | 	SSL_NOT_EXP|SSL_STRONG_NONE, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	0, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cipher 1D */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_FZA_DMS_FZA_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_FZA_DMS_FZA_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kFZA|SSL_aFZA |SSL_eFZA |SSL_SHA1|SSL_SSLV3, | 
					
						
							| 
									
										
										
										
											2002-07-10 14:41:55 +08:00
										 |  |  | 	SSL_NOT_EXP|SSL_STRONG_NONE, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	0, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cipher 1E */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	SSL3_TXT_FZA_DMS_RC4_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_FZA_DMS_RC4_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_kFZA|SSL_aFZA |SSL_RC4  |SSL_SHA1|SSL_SSLV3, | 
					
						
							| 
									
										
										
										
											2002-03-15 02:53:15 +08:00
										 |  |  | 	SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	128, | 
					
						
							|  |  |  | 	128, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_KRB5
 | 
					
						
							| 
									
										
										
										
											2000-12-01 06:53:34 +08:00
										 |  |  | /* The Kerberos ciphers
 | 
					
						
							|  |  |  | ** 20000107 VRS: And the first shall be last, | 
					
						
							|  |  |  | ** in hopes of avoiding the lynx ssl renegotiation problem. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | /* Cipher 21 VRS */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_KRB5_DES_40_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_KRB5_DES_40_CBC_SHA, | 
					
						
							|  |  |  | 	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_SHA1   |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	40, | 
					
						
							|  |  |  | 	56, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cipher 22 VRS */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_KRB5_DES_40_CBC_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_KRB5_DES_40_CBC_MD5, | 
					
						
							|  |  |  | 	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_MD5    |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_EXPORT|SSL_EXP40, | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	40, | 
					
						
							|  |  |  | 	56, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cipher 23 VRS */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_KRB5_DES_64_CBC_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_KRB5_DES_64_CBC_SHA, | 
					
						
							|  |  |  | 	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_SHA1   |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_LOW, | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	56, | 
					
						
							|  |  |  | 	56, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cipher 24 VRS */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_KRB5_DES_64_CBC_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_KRB5_DES_64_CBC_MD5, | 
					
						
							|  |  |  | 	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_MD5    |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_LOW, | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	56, | 
					
						
							|  |  |  | 	56, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cipher 25 VRS */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_KRB5_DES_192_CBC3_SHA, | 
					
						
							|  |  |  | 	SSL3_CK_KRB5_DES_192_CBC3_SHA, | 
					
						
							|  |  |  | 	SSL_kKRB5|SSL_aKRB5|  SSL_3DES|SSL_SHA1  |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_HIGH, | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	112, | 
					
						
							|  |  |  | 	168, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cipher 26 VRS */ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	1, | 
					
						
							|  |  |  | 	SSL3_TXT_KRB5_DES_192_CBC3_MD5, | 
					
						
							|  |  |  | 	SSL3_CK_KRB5_DES_192_CBC3_MD5, | 
					
						
							|  |  |  | 	SSL_kKRB5|SSL_aKRB5|  SSL_3DES|SSL_MD5   |SSL_SSLV3, | 
					
						
							|  |  |  | 	SSL_NOT_EXP|SSL_HIGH, | 
					
						
							|  |  |  | 	0, | 
					
						
							|  |  |  | 	112, | 
					
						
							|  |  |  | 	168, | 
					
						
							|  |  |  | 	SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #endif	/* OPENSSL_NO_KRB5 */
 | 
					
						
							| 
									
										
										
										
											2001-02-08 02:15:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-06 23:21:02 +08:00
										 |  |  | #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
 | 
					
						
							| 
									
										
										
										
											1999-02-22 04:03:24 +08:00
										 |  |  | 	/* New TLS Export CipherSuites */ | 
					
						
							|  |  |  | 	/* Cipher 60 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, | 
					
						
							|  |  |  | 	    TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_EXPORT|SSL_EXP56, | 
					
						
							| 
									
										
										
										
											1999-02-22 04:03:24 +08:00
										 |  |  | 	    0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    56, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1999-02-22 04:03:24 +08:00
										 |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 61 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 
					
						
							|  |  |  | 	    TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_EXPORT|SSL_EXP56, | 
					
						
							| 
									
										
										
										
											1999-02-22 04:03:24 +08:00
										 |  |  | 	    0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    56, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1999-02-22 04:03:24 +08:00
										 |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 62 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_EXPORT|SSL_EXP56, | 
					
						
							| 
									
										
										
										
											1999-02-22 04:03:24 +08:00
										 |  |  | 	    0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    56, | 
					
						
							|  |  |  | 	    56, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1999-02-22 04:03:24 +08:00
										 |  |  | 	    }, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	/* Cipher 63 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_EXPORT|SSL_EXP56, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    56, | 
					
						
							|  |  |  | 	    56, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 64 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_EXPORT|SSL_EXP56, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    56, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 65 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_EXPORT|SSL_EXP56, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    56, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 66 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, | 
					
						
							|  |  |  | 	    SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1, | 
					
						
							| 
									
										
										
										
											2002-03-15 02:53:15 +08:00
										 |  |  | 	    SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    0, | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 	    128, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS | 
					
						
							| 
									
										
										
										
											1999-04-16 02:52:13 +08:00
										 |  |  | 	    }, | 
					
						
							| 
									
										
										
										
											2001-02-08 02:15:18 +08:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 	/* New AES ciphersuites */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Cipher 2F */ | 
					
						
							| 
									
										
										
										
											2001-02-06 22:09:13 +08:00
										 |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							| 
									
										
										
										
											2001-02-08 02:15:18 +08:00
										 |  |  | 	    TLS1_TXT_RSA_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_RSA_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							| 
									
										
										
										
											2001-02-06 22:09:13 +08:00
										 |  |  | 	    0, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							| 
									
										
										
										
											2001-02-08 02:15:18 +08:00
										 |  |  | 	/* Cipher 30 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    TLS1_TXT_DH_DSS_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DH_DSS_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    SSL_kDHd|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 31 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    TLS1_TXT_DH_RSA_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DH_RSA_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    SSL_kDHr|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 32 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DHE_DSS_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    SSL_kEDH|SSL_aDSS|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 33 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DHE_RSA_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    SSL_kEDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 34 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_ADH_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_ADH_WITH_AES_128_SHA, | 
					
						
							|  |  |  | 	    SSL_kEDH|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_MEDIUM, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    128, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Cipher 35 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_RSA_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_RSA_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_HIGH, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 36 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    TLS1_TXT_DH_DSS_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DH_DSS_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    SSL_kDHd|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_HIGH, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 37 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    TLS1_TXT_DH_RSA_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DH_RSA_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    SSL_kDHr|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_HIGH, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 38 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DHE_DSS_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    SSL_kEDH|SSL_aDSS|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_HIGH, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 39 */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_DHE_RSA_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    SSL_kEDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_HIGH, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							|  |  |  | 	/* Cipher 3A */ | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    1, | 
					
						
							|  |  |  | 	    TLS1_TXT_ADH_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    TLS1_CK_ADH_WITH_AES_256_SHA, | 
					
						
							|  |  |  | 	    SSL_kEDH|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1, | 
					
						
							|  |  |  | 	    SSL_NOT_EXP|SSL_HIGH, | 
					
						
							|  |  |  | 	    0, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    256, | 
					
						
							|  |  |  | 	    SSL_ALL_CIPHERS, | 
					
						
							|  |  |  | 	    SSL_ALL_STRENGTHS, | 
					
						
							|  |  |  | 	    }, | 
					
						
							| 
									
										
										
										
											1999-02-22 04:03:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | /* end of list */ | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | static SSL3_ENC_METHOD SSLv3_enc_data={ | 
					
						
							|  |  |  | 	ssl3_enc, | 
					
						
							|  |  |  | 	ssl3_mac, | 
					
						
							|  |  |  | 	ssl3_setup_key_block, | 
					
						
							|  |  |  | 	ssl3_generate_master_secret, | 
					
						
							|  |  |  | 	ssl3_change_cipher_state, | 
					
						
							|  |  |  | 	ssl3_final_finish_mac, | 
					
						
							|  |  |  | 	MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, | 
					
						
							|  |  |  | 	ssl3_cert_verify_mac, | 
					
						
							|  |  |  | 	SSL3_MD_CLIENT_FINISHED_CONST,4, | 
					
						
							|  |  |  | 	SSL3_MD_SERVER_FINISHED_CONST,4, | 
					
						
							|  |  |  | 	ssl3_alert_code, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | static SSL_METHOD SSLv3_data= { | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	SSL3_VERSION, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	ssl3_new, | 
					
						
							|  |  |  | 	ssl3_clear, | 
					
						
							|  |  |  | 	ssl3_free, | 
					
						
							|  |  |  | 	ssl_undefined_function, | 
					
						
							|  |  |  | 	ssl_undefined_function, | 
					
						
							|  |  |  | 	ssl3_read, | 
					
						
							|  |  |  | 	ssl3_peek, | 
					
						
							|  |  |  | 	ssl3_write, | 
					
						
							|  |  |  | 	ssl3_shutdown, | 
					
						
							|  |  |  | 	ssl3_renegotiate, | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	ssl3_renegotiate_check, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	ssl3_ctrl, | 
					
						
							|  |  |  | 	ssl3_ctx_ctrl, | 
					
						
							|  |  |  | 	ssl3_get_cipher_by_char, | 
					
						
							|  |  |  | 	ssl3_put_cipher_by_char, | 
					
						
							|  |  |  | 	ssl3_pending, | 
					
						
							|  |  |  | 	ssl3_num_ciphers, | 
					
						
							|  |  |  | 	ssl3_get_cipher, | 
					
						
							|  |  |  | 	ssl_bad_method, | 
					
						
							|  |  |  | 	ssl3_default_timeout, | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	&SSLv3_enc_data, | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 	ssl_undefined_function, | 
					
						
							|  |  |  | 	ssl3_callback_ctrl, | 
					
						
							|  |  |  | 	ssl3_ctx_callback_ctrl, | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | static long ssl3_default_timeout(void) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	/* 2 hours, the 24 hours mentioned in the SSLv3 spec
 | 
					
						
							|  |  |  | 	 * is way too long for http, the cache would over fill */ | 
					
						
							|  |  |  | 	return(60*60*2); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | SSL_METHOD *sslv3_base_method(void) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	return(&SSLv3_data); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int ssl3_num_ciphers(void) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	return(SSL3_NUM_CIPHERS); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | SSL_CIPHER *ssl3_get_cipher(unsigned int u) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	if (u < SSL3_NUM_CIPHERS) | 
					
						
							|  |  |  | 		return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u])); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		return(NULL); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int ssl3_pending(SSL *s) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2002-03-15 18:52:32 +08:00
										 |  |  | 	if (s->rstate == SSL_ST_READ_BODY) | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2000-12-26 02:40:46 +08:00
										 |  |  | 	return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int ssl3_new(SSL *s) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2000-02-21 07:04:06 +08:00
										 |  |  | 	SSL3_STATE *s3; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 	if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err; | 
					
						
							| 
									
										
										
										
											2000-02-21 07:04:06 +08:00
										 |  |  | 	memset(s3,0,sizeof *s3); | 
					
						
							| 
									
										
										
										
											2001-07-31 07:57:25 +08:00
										 |  |  | 	EVP_MD_CTX_init(&s3->finish_dgst1); | 
					
						
							|  |  |  | 	EVP_MD_CTX_init(&s3->finish_dgst2); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	s->s3=s3; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	s->method->ssl_clear(s); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	return(1); | 
					
						
							|  |  |  | err: | 
					
						
							|  |  |  | 	return(0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | void ssl3_free(SSL *s) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											1999-01-08 03:15:59 +08:00
										 |  |  | 	if(s == NULL) | 
					
						
							|  |  |  | 	    return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	ssl3_cleanup_key_block(s); | 
					
						
							|  |  |  | 	if (s->s3->rbuf.buf != NULL) | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 		OPENSSL_free(s->s3->rbuf.buf); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	if (s->s3->wbuf.buf != NULL) | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 		OPENSSL_free(s->s3->wbuf.buf); | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	if (s->s3->rrec.comp != NULL) | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 		OPENSSL_free(s->s3->rrec.comp); | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DH
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	if (s->s3->tmp.dh != NULL) | 
					
						
							|  |  |  | 		DH_free(s->s3->tmp.dh); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 	if (s->s3->tmp.ca_names != NULL) | 
					
						
							| 
									
										
										
										
											1999-04-13 01:23:57 +08:00
										 |  |  | 		sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 
					
						
							| 
									
										
										
										
											2001-07-31 07:57:25 +08:00
										 |  |  | 	EVP_MD_CTX_cleanup(&s->s3->finish_dgst1); | 
					
						
							|  |  |  | 	EVP_MD_CTX_cleanup(&s->s3->finish_dgst2); | 
					
						
							| 
									
										
										
										
											2000-02-21 07:04:06 +08:00
										 |  |  | 	memset(s->s3,0,sizeof *s->s3); | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 	OPENSSL_free(s->s3); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	s->s3=NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | void ssl3_clear(SSL *s) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	unsigned char *rp,*wp; | 
					
						
							| 
									
										
										
										
											2002-04-14 06:47:20 +08:00
										 |  |  | 	size_t rlen, wlen; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	ssl3_cleanup_key_block(s); | 
					
						
							|  |  |  | 	if (s->s3->tmp.ca_names != NULL) | 
					
						
							| 
									
										
										
										
											1999-04-13 01:23:57 +08:00
										 |  |  | 		sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
											
												Updates to the new SSL compression code
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Fix so that the version number in the master secret, when passed
     via RSA, checks that if TLS was proposed, but we roll back to SSLv3
     (because the server will not accept higher), that the version number
     is 0x03,0x01, not 0x03,0x00
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Submitted by:
Reviewed by:
PR:
											
										 
											1999-02-16 17:22:21 +08:00
										 |  |  | 	if (s->s3->rrec.comp != NULL) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 		OPENSSL_free(s->s3->rrec.comp); | 
					
						
							| 
									
										
										
											
												Updates to the new SSL compression code
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Fix so that the version number in the master secret, when passed
     via RSA, checks that if TLS was proposed, but we roll back to SSLv3
     (because the server will not accept higher), that the version number
     is 0x03,0x01, not 0x03,0x00
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Submitted by:
Reviewed by:
PR:
											
										 
											1999-02-16 17:22:21 +08:00
										 |  |  | 		s->s3->rrec.comp=NULL; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DH
 | 
					
						
							| 
									
										
										
										
											2000-02-22 01:09:54 +08:00
										 |  |  | 	if (s->s3->tmp.dh != NULL) | 
					
						
							|  |  |  | 		DH_free(s->s3->tmp.dh); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
											
												Updates to the new SSL compression code
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Fix so that the version number in the master secret, when passed
     via RSA, checks that if TLS was proposed, but we roll back to SSLv3
     (because the server will not accept higher), that the version number
     is 0x03,0x01, not 0x03,0x00
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Submitted by:
Reviewed by:
PR:
											
										 
											1999-02-16 17:22:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-14 06:47:20 +08:00
										 |  |  | 	rp = s->s3->rbuf.buf; | 
					
						
							|  |  |  | 	wp = s->s3->wbuf.buf; | 
					
						
							|  |  |  | 	rlen = s->s3->rbuf.len; | 
					
						
							|  |  |  |  	wlen = s->s3->wbuf.len; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-28 21:45:41 +08:00
										 |  |  | 	EVP_MD_CTX_cleanup(&s->s3->finish_dgst1); | 
					
						
							|  |  |  | 	EVP_MD_CTX_cleanup(&s->s3->finish_dgst2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:04:06 +08:00
										 |  |  | 	memset(s->s3,0,sizeof *s->s3); | 
					
						
							| 
									
										
										
										
											2002-04-14 06:47:20 +08:00
										 |  |  | 	s->s3->rbuf.buf = rp; | 
					
						
							|  |  |  | 	s->s3->wbuf.buf = wp; | 
					
						
							|  |  |  | 	s->s3->rbuf.len = rlen; | 
					
						
							|  |  |  |  	s->s3->wbuf.len = wlen; | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
											
												Updates to the new SSL compression code
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Fix so that the version number in the master secret, when passed
     via RSA, checks that if TLS was proposed, but we roll back to SSLv3
     (because the server will not accept higher), that the version number
     is 0x03,0x01, not 0x03,0x00
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Submitted by:
Reviewed by:
PR:
											
										 
											1999-02-16 17:22:21 +08:00
										 |  |  | 	ssl_free_wbio_buffer(s); | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	s->packet_length=0; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	s->s3->renegotiate=0; | 
					
						
							|  |  |  | 	s->s3->total_renegotiations=0; | 
					
						
							|  |  |  | 	s->s3->num_renegotiations=0; | 
					
						
							|  |  |  | 	s->s3->in_read_app_data=0; | 
					
						
							|  |  |  | 	s->version=SSL3_VERSION; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-21 01:56:36 +08:00
										 |  |  | long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	int ret=0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
 | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 	if ( | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 	    cmd == SSL_CTRL_SET_TMP_RSA || | 
					
						
							|  |  |  | 	    cmd == SSL_CTRL_SET_TMP_RSA_CB || | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DSA
 | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 	    cmd == SSL_CTRL_SET_TMP_DH || | 
					
						
							|  |  |  | 	    cmd == SSL_CTRL_SET_TMP_DH_CB || | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 		0) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											1999-05-10 04:12:44 +08:00
										 |  |  | 		if (!ssl_cert_inst(&s->cert)) | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 		    	{ | 
					
						
							|  |  |  | 			SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); | 
					
						
							|  |  |  | 			return(0); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	switch (cmd) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 	case SSL_CTRL_GET_SESSION_REUSED: | 
					
						
							|  |  |  | 		ret=s->hit; | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case SSL_CTRL_GET_CLIENT_CERT_REQUEST: | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case SSL_CTRL_GET_NUM_RENEGOTIATIONS: | 
					
						
							|  |  |  | 		ret=s->s3->num_renegotiations; | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: | 
					
						
							|  |  |  | 		ret=s->s3->num_renegotiations; | 
					
						
							|  |  |  | 		s->s3->num_renegotiations=0; | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: | 
					
						
							|  |  |  | 		ret=s->s3->total_renegotiations; | 
					
						
							|  |  |  | 		break; | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	case SSL_CTRL_GET_FLAGS: | 
					
						
							| 
									
										
										
										
											1998-12-22 23:04:48 +08:00
										 |  |  | 		ret=(int)(s->s3->flags); | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 		break; | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 	case SSL_CTRL_NEED_TMP_RSA: | 
					
						
							|  |  |  | 		if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && | 
					
						
							|  |  |  | 		    ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 
					
						
							|  |  |  | 		     (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))) | 
					
						
							|  |  |  | 			ret = 1; | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case SSL_CTRL_SET_TMP_RSA: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			RSA *rsa = (RSA *)parg; | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 			if (rsa == NULL) | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 
					
						
							|  |  |  | 				return(ret); | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); | 
					
						
							|  |  |  | 				return(ret); | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 			if (s->cert->rsa_tmp != NULL) | 
					
						
							|  |  |  | 				RSA_free(s->cert->rsa_tmp); | 
					
						
							|  |  |  | 			s->cert->rsa_tmp = rsa; | 
					
						
							|  |  |  | 			ret = 1; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case SSL_CTRL_SET_TMP_RSA_CB: | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 		SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
					
						
							|  |  |  | 		return(ret); | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 		break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DH
 | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_DH: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			DH *dh = (DH *)parg; | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 			if (dh == NULL) | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 
					
						
							|  |  |  | 				return(ret); | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			if ((dh = DHparams_dup(dh)) == NULL) | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 				SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 
					
						
							|  |  |  | 				return(ret); | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			if (!(s->options & SSL_OP_SINGLE_DH_USE)) | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 				if (!DH_generate_key(dh)) | 
					
						
							|  |  |  | 					{ | 
					
						
							|  |  |  | 					DH_free(dh); | 
					
						
							|  |  |  | 					SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 
					
						
							|  |  |  | 					return(ret); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 			if (s->cert->dh_tmp != NULL) | 
					
						
							|  |  |  | 				DH_free(s->cert->dh_tmp); | 
					
						
							|  |  |  | 			s->cert->dh_tmp = dh; | 
					
						
							|  |  |  | 			ret = 1; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case SSL_CTRL_SET_TMP_DH_CB: | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 		SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
					
						
							|  |  |  | 		return(ret); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(ret); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)()) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	int ret=0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 	if ( | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 	    cmd == SSL_CTRL_SET_TMP_RSA_CB || | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DSA
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 	    cmd == SSL_CTRL_SET_TMP_DH_CB || | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 		0) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		if (!ssl_cert_inst(&s->cert)) | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2000-03-14 22:10:56 +08:00
										 |  |  | 			SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 			return(0); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch (cmd) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_RSA_CB: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DH
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_DH_CB: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1999-02-25 22:40:29 +08:00
										 |  |  | 		break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	default: | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(ret); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-21 01:56:36 +08:00
										 |  |  | long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	CERT *cert; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-10 04:12:44 +08:00
										 |  |  | 	cert=ctx->cert; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	switch (cmd) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	case SSL_CTRL_NEED_TMP_RSA: | 
					
						
							|  |  |  | 		if (	(cert->rsa_tmp == NULL) && | 
					
						
							|  |  |  | 			((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 
					
						
							|  |  |  | 			 (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))) | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 			return(1); | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			return(0); | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 		/* break; */ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_RSA: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		RSA *rsa; | 
					
						
							|  |  |  | 		int i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		rsa=(RSA *)parg; | 
					
						
							|  |  |  | 		i=1; | 
					
						
							|  |  |  | 		if (rsa == NULL) | 
					
						
							|  |  |  | 			i=0; | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 			if ((rsa=RSAPrivateKey_dup(rsa)) == NULL) | 
					
						
							|  |  |  | 				i=0; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		if (!i) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB); | 
					
						
							|  |  |  | 			return(0); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 			if (cert->rsa_tmp != NULL) | 
					
						
							|  |  |  | 				RSA_free(cert->rsa_tmp); | 
					
						
							|  |  |  | 			cert->rsa_tmp=rsa; | 
					
						
							|  |  |  | 			return(1); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 		/* break; */ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_RSA_CB: | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 		SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
					
						
							|  |  |  | 		return(0); | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DH
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_DH: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		DH *new=NULL,*dh; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		dh=(DH *)parg; | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 		if ((new=DHparams_dup(dh)) == NULL) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 			return 0; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 		if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 			if (!DH_generate_key(new)) | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 				SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | 
					
						
							|  |  |  | 				DH_free(new); | 
					
						
							|  |  |  | 				return 0; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2000-03-14 01:07:04 +08:00
										 |  |  | 		if (cert->dh_tmp != NULL) | 
					
						
							|  |  |  | 			DH_free(cert->dh_tmp); | 
					
						
							|  |  |  | 		cert->dh_tmp=new; | 
					
						
							|  |  |  | 		return 1; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 		/*break; */ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_DH_CB: | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 		SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
					
						
							|  |  |  | 		return(0); | 
					
						
							| 
									
										
										
										
											2000-01-18 17:30:51 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1998-12-22 23:04:48 +08:00
										 |  |  | 	/* A Thawte special :-) */ | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	case SSL_CTRL_EXTRA_CHAIN_CERT: | 
					
						
							|  |  |  | 		if (ctx->extra_certs == NULL) | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											1999-04-13 01:23:57 +08:00
										 |  |  | 			if ((ctx->extra_certs=sk_X509_new_null()) == NULL) | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 				return(0); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											1999-04-13 01:23:57 +08:00
										 |  |  | 		sk_X509_push(ctx->extra_certs,(X509 *)parg); | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 		break; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	default: | 
					
						
							|  |  |  | 		return(0); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(1); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)()) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	CERT *cert; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cert=ctx->cert; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch (cmd) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_RSA_CB: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DH
 | 
					
						
							| 
									
										
										
										
											2000-02-21 07:43:02 +08:00
										 |  |  | 	case SSL_CTRL_SET_TMP_DH_CB: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return(0); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(1); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | /* This function needs to check if the ciphers required are actually
 | 
					
						
							|  |  |  |  * available */ | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	static int init=1; | 
					
						
							|  |  |  | 	static SSL_CIPHER *sorted[SSL3_NUM_CIPHERS]; | 
					
						
							|  |  |  | 	SSL_CIPHER c,*cp= &c,**cpp; | 
					
						
							|  |  |  | 	unsigned long id; | 
					
						
							|  |  |  | 	int i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (init) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											1999-04-22 21:37:46 +08:00
										 |  |  | 		CRYPTO_w_lock(CRYPTO_LOCK_SSL); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		for (i=0; i<SSL3_NUM_CIPHERS; i++) | 
					
						
							|  |  |  | 			sorted[i]= &(ssl3_ciphers[i]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		qsort(	(char *)sorted, | 
					
						
							|  |  |  | 			SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER *), | 
					
						
							|  |  |  | 			FP_ICC ssl_cipher_ptr_id_cmp); | 
					
						
							| 
									
										
										
										
											1999-04-22 21:37:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		CRYPTO_w_unlock(CRYPTO_LOCK_SSL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		init=0; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1]; | 
					
						
							|  |  |  | 	c.id=id; | 
					
						
							|  |  |  | 	cpp=(SSL_CIPHER **)OBJ_bsearch((char *)&cp, | 
					
						
							|  |  |  | 		(char *)sorted, | 
					
						
							|  |  |  | 		SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER *), | 
					
						
							| 
									
										
										
										
											2000-06-21 10:25:30 +08:00
										 |  |  | 		FP_ICC ssl_cipher_ptr_id_cmp); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	if ((cpp == NULL) || !(*cpp)->valid) | 
					
						
							|  |  |  | 		return(NULL); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		return(*cpp); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	long l; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (p != NULL) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		l=c->id; | 
					
						
							|  |  |  | 		if ((l & 0xff000000) != 0x03000000) return(0); | 
					
						
							|  |  |  | 		p[0]=((unsigned char)(l>> 8L))&0xFF; | 
					
						
							|  |  |  | 		p[1]=((unsigned char)(l     ))&0xFF; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(2); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | 
					
						
							|  |  |  | 	     STACK_OF(SSL_CIPHER) *srvr) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	SSL_CIPHER *c,*ret=NULL; | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  | 	STACK_OF(SSL_CIPHER) *prio, *allow; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	int i,j,ok; | 
					
						
							|  |  |  | 	CERT *cert; | 
					
						
							|  |  |  | 	unsigned long alg,mask,emask; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-10 04:12:44 +08:00
										 |  |  | 	/* Let's see which ciphers we can support */ | 
					
						
							|  |  |  | 	cert=s->cert; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  | #if 0
 | 
					
						
							|  |  |  | 	/* Do not set the compare functions, because this may lead to a
 | 
					
						
							|  |  |  | 	 * reordering by "id". We want to keep the original ordering. | 
					
						
							|  |  |  | 	 * We may pay a price in performance during sk_SSL_CIPHER_find(), | 
					
						
							|  |  |  | 	 * but would have to pay with the price of sk_SSL_CIPHER_dup(). | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp); | 
					
						
							|  |  |  | 	sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-06 22:09:36 +08:00
										 |  |  | #ifdef CIPHER_DEBUG
 | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  |         printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), srvr); | 
					
						
							|  |  |  |         for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i) | 
					
						
							| 
									
										
										
										
											1999-03-06 22:09:36 +08:00
										 |  |  | 	    { | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  | 	    c=sk_SSL_CIPHER_value(srvr,i); | 
					
						
							|  |  |  | 	    printf("%p:%s\n",c,c->name); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  |         printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), clnt); | 
					
						
							|  |  |  |         for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i) | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    c=sk_SSL_CIPHER_value(clnt,i); | 
					
						
							| 
									
										
										
										
											1999-03-06 22:09:36 +08:00
										 |  |  | 	    printf("%p:%s\n",c,c->name); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  | 	if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    prio = srvr; | 
					
						
							|  |  |  | 	    allow = clnt; | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	    prio = clnt; | 
					
						
							|  |  |  | 	    allow = srvr; | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (i=0; i<sk_SSL_CIPHER_num(prio); i++) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  | 		c=sk_SSL_CIPHER_value(prio,i); | 
					
						
							| 
									
										
										
										
											1999-02-22 05:58:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-10 04:12:44 +08:00
										 |  |  | 		ssl_set_cert_masks(cert,c); | 
					
						
							| 
									
										
										
										
											1999-02-22 05:58:59 +08:00
										 |  |  | 		mask=cert->mask; | 
					
						
							|  |  |  | 		emask=cert->export_mask; | 
					
						
							|  |  |  | 			 | 
					
						
							| 
									
										
										
										
											2000-12-01 06:53:34 +08:00
										 |  |  | #ifdef KSSL_DEBUG
 | 
					
						
							|  |  |  | 		printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms); | 
					
						
							|  |  |  | #endif    /* KSSL_DEBUG */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		alg=c->algorithms&(SSL_MKEY_MASK|SSL_AUTH_MASK); | 
					
						
							| 
									
										
										
										
											2001-07-12 03:03:58 +08:00
										 |  |  | #ifndef OPENSSL_NO_KRB5
 | 
					
						
							|  |  |  |                 if (alg & SSL_KRB5)  | 
					
						
							|  |  |  |                         { | 
					
						
							|  |  |  |                         if ( !kssl_keytab_is_available(s->kssl_ctx) ) | 
					
						
							|  |  |  |                             continue; | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  | #endif /* OPENSSL_NO_KRB5 */
 | 
					
						
							| 
									
										
										
										
											2000-01-22 11:17:06 +08:00
										 |  |  | 		if (SSL_C_IS_EXPORT(c)) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 			ok=((alg & emask) == alg)?1:0; | 
					
						
							|  |  |  | #ifdef CIPHER_DEBUG
 | 
					
						
							| 
									
										
										
										
											1999-03-06 22:09:36 +08:00
										 |  |  | 			printf("%d:[%08lX:%08lX]%p:%s (export)\n",ok,alg,emask, | 
					
						
							|  |  |  | 			       c,c->name); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 			ok=((alg & mask) == alg)?1:0; | 
					
						
							|  |  |  | #ifdef CIPHER_DEBUG
 | 
					
						
							| 
									
										
										
										
											1999-03-06 22:09:36 +08:00
										 |  |  | 			printf("%d:[%08lX:%08lX]%p:%s\n",ok,alg,mask,c, | 
					
						
							|  |  |  | 			       c->name); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (!ok) continue; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  | 		j=sk_SSL_CIPHER_find(allow,c); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		if (j >= 0) | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2001-02-10 03:56:31 +08:00
										 |  |  | 			ret=sk_SSL_CIPHER_value(allow,j); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(ret); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int ssl3_get_req_cert_type(SSL *s, unsigned char *p) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	int ret=0; | 
					
						
							|  |  |  | 	unsigned long alg; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	alg=s->s3->tmp.new_cipher->algorithms; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DH
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	if (alg & (SSL_kDHr|SSL_kEDH)) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #  ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		p[ret++]=SSL3_CT_RSA_FIXED_DH; | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | #  endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #  ifndef OPENSSL_NO_DSA
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		p[ret++]=SSL3_CT_DSS_FIXED_DH; | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | #  endif
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	if ((s->version == SSL3_VERSION) && | 
					
						
							|  |  |  | 		(alg & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #  ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH; | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | #  endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #  ifndef OPENSSL_NO_DSA
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH; | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | #  endif
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #endif /* !OPENSSL_NO_DH */
 | 
					
						
							|  |  |  | #ifndef OPENSSL_NO_RSA
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	p[ret++]=SSL3_CT_RSA_SIGN; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-20 16:13:47 +08:00
										 |  |  | #ifndef OPENSSL_NO_DSA
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	p[ret++]=SSL3_CT_DSS_SIGN; | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	return(ret); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int ssl3_shutdown(SSL *s) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Don't do anything much if we have not done the handshake or
 | 
					
						
							|  |  |  | 	 * we don't want to send messages :-) */ | 
					
						
							|  |  |  | 	if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 
					
						
							|  |  |  | 		return(1); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!(s->shutdown & SSL_SENT_SHUTDOWN)) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		s->shutdown|=SSL_SENT_SHUTDOWN; | 
					
						
							|  |  |  | #if 1
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 		ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 		/* our shutdown alert has been sent now, and if it still needs
 | 
					
						
							|  |  |  | 	 	 * to be written, s->s3->alert_dispatch will be true */ | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	else if (s->s3->alert_dispatch) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		/* resend it if not sent */ | 
					
						
							|  |  |  | #if 1
 | 
					
						
							|  |  |  | 		ssl3_dispatch_alert(s); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		/* If we are waiting for a close from our peer, we are closed */ | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  | 		ssl3_read_bytes(s,0,NULL,0,0); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && | 
					
						
							|  |  |  | 		!s->s3->alert_dispatch) | 
					
						
							|  |  |  | 		return(1); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		return(0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-23 23:01:15 +08:00
										 |  |  | int ssl3_write(SSL *s, const void *buf, int len) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	int ret,n; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if 0
 | 
					
						
							|  |  |  | 	if (s->shutdown & SSL_SEND_SHUTDOWN) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		s->rwstate=SSL_NOTHING; | 
					
						
							|  |  |  | 		return(0); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	clear_sys_error(); | 
					
						
							|  |  |  | 	if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* This is an experimental flag that sends the
 | 
					
						
							|  |  |  | 	 * last handshake message in the same packet as the first | 
					
						
							|  |  |  | 	 * use data - used to see if it helps the TCP protocol during | 
					
						
							|  |  |  | 	 * session-id reuse */ | 
					
						
							|  |  |  | 	/* The second test is because the buffer may have been removed */ | 
					
						
							|  |  |  | 	if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		/* First time through, we write into the buffer */ | 
					
						
							|  |  |  | 		if (s->s3->delay_buf_pop_ret == 0) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 			ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 
					
						
							| 
									
										
										
										
											1999-04-18 05:25:43 +08:00
										 |  |  | 					     buf,len); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 			if (ret <= 0) return(ret); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			s->s3->delay_buf_pop_ret=ret; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		s->rwstate=SSL_WRITING; | 
					
						
							|  |  |  | 		n=BIO_flush(s->wbio); | 
					
						
							|  |  |  | 		if (n <= 0) return(n); | 
					
						
							|  |  |  | 		s->rwstate=SSL_NOTHING; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Updates to the new SSL compression code
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Fix so that the version number in the master secret, when passed
     via RSA, checks that if TLS was proposed, but we roll back to SSLv3
     (because the server will not accept higher), that the version number
     is 0x03,0x01, not 0x03,0x00
     [Eric A. Young, (from changes to C2Net SSLeay, integrated by Mark Cox)]
Submitted by:
Reviewed by:
PR:
											
										 
											1999-02-16 17:22:21 +08:00
										 |  |  | 		/* We have flushed the buffer, so remove it */ | 
					
						
							|  |  |  | 		ssl_free_wbio_buffer(s); | 
					
						
							|  |  |  | 		s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		ret=s->s3->delay_buf_pop_ret; | 
					
						
							|  |  |  | 		s->s3->delay_buf_pop_ret=0; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 
					
						
							| 
									
										
										
										
											1999-04-18 05:25:43 +08:00
										 |  |  | 				     buf,len); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 		if (ret <= 0) return(ret); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	return(ret); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  | static int ssl3_read_internal(SSL *s, void *buf, int len, int peek) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	int ret; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	clear_sys_error(); | 
					
						
							|  |  |  | 	if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 
					
						
							|  |  |  | 	s->s3->in_read_app_data=1; | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  | 	ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 
					
						
							| 
									
										
										
										
											2002-04-14 06:47:20 +08:00
										 |  |  | 	if ((ret == -1) && (s->s3->in_read_app_data == 2)) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2000-02-21 07:04:06 +08:00
										 |  |  | 		/* ssl3_read_bytes decided to call s->handshake_func, which
 | 
					
						
							|  |  |  | 		 * called ssl3_read_bytes to read handshake data. | 
					
						
							|  |  |  | 		 * However, ssl3_read_bytes actually found application data | 
					
						
							| 
									
										
										
										
											2002-04-14 06:47:20 +08:00
										 |  |  | 		 * and thinks that application data makes sense here; so disable | 
					
						
							| 
									
										
										
										
											2000-02-21 07:04:06 +08:00
										 |  |  | 		 * handshake processing and try to read application data again. */ | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 		s->in_handshake++; | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  | 		ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 		s->in_handshake--; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		s->s3->in_read_app_data=0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return(ret); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  | int ssl3_read(SSL *s, void *buf, int len) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  | 	return ssl3_read_internal(s, buf, len, 0); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-09 18:09:20 +08:00
										 |  |  | int ssl3_peek(SSL *s, void *buf, int len) | 
					
						
							| 
									
										
										
										
											2000-12-15 01:36:59 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2000-12-15 01:47:29 +08:00
										 |  |  | 	return ssl3_read_internal(s, buf, len, 1); | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int ssl3_renegotiate(SSL *s) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	if (s->handshake_func == NULL) | 
					
						
							|  |  |  | 		return(1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) | 
					
						
							|  |  |  | 		return(0); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	s->s3->renegotiate=1; | 
					
						
							| 
									
										
										
										
											1998-12-21 18:52:47 +08:00
										 |  |  | 	return(1); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int ssl3_renegotiate_check(SSL *s) | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	int ret=0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (s->s3->renegotiate) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		if (	(s->s3->rbuf.left == 0) && | 
					
						
							|  |  |  | 			(s->s3->wbuf.left == 0) && | 
					
						
							|  |  |  | 			!SSL_in_init(s)) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | if we are the server, and we have sent a 'RENEGOTIATE' message, we | 
					
						
							| 
									
										
										
										
											1999-09-30 06:14:47 +08:00
										 |  |  | need to go to SSL_ST_ACCEPT. | 
					
						
							| 
									
										
										
										
											1998-12-21 18:56:39 +08:00
										 |  |  | */ | 
					
						
							|  |  |  | 			/* SSL_ST_ACCEPT */ | 
					
						
							|  |  |  | 			s->state=SSL_ST_RENEGOTIATE; | 
					
						
							|  |  |  | 			s->s3->renegotiate=0; | 
					
						
							|  |  |  | 			s->s3->num_renegotiations++; | 
					
						
							|  |  |  | 			s->s3->total_renegotiations++; | 
					
						
							|  |  |  | 			ret=1; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(ret); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 |