Index: openssl/ssl/s2_lib.c |
=================================================================== |
--- openssl/ssl/s2_lib.c (revision 105093) |
+++ openssl/ssl/s2_lib.c (working copy) |
@@ -55,6 +55,59 @@ |
* copied and put under another distribution licence |
* [including the GNU Public Licence.] |
*/ |
+/* ==================================================================== |
+ * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. |
+ * |
+ * 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). |
+ * |
+ */ |
#include "ssl_locl.h" |
#ifndef OPENSSL_NO_SSL2 |
@@ -68,143 +121,172 @@ |
#define SSL2_NUM_CIPHERS (sizeof(ssl2_ciphers)/sizeof(SSL_CIPHER)) |
/* list of available SSLv2 ciphers (sorted by id) */ |
-OPENSSL_GLOBAL SSL_CIPHER ssl2_ciphers[]={ |
+OPENSSL_GLOBAL const SSL_CIPHER ssl2_ciphers[]={ |
+#if 0 |
/* NULL_WITH_MD5 v3 */ |
-#if 0 |
{ |
1, |
SSL2_TXT_NULL_WITH_MD5, |
SSL2_CK_NULL_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_eNULL, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_EXPORT|SSL_EXP40|SSL_STRONG_NONE, |
0, |
0, |
0, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
#endif |
+ |
/* RC4_128_WITH_MD5 */ |
{ |
1, |
SSL2_TXT_RC4_128_WITH_MD5, |
SSL2_CK_RC4_128_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_RC4, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_NOT_EXP|SSL_MEDIUM, |
0, |
128, |
128, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
+ |
/* RC4_128_EXPORT40_WITH_MD5 */ |
{ |
1, |
SSL2_TXT_RC4_128_EXPORT40_WITH_MD5, |
SSL2_CK_RC4_128_EXPORT40_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_RC4, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_EXPORT|SSL_EXP40, |
SSL2_CF_5_BYTE_ENC, |
40, |
128, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
+ |
/* RC2_128_CBC_WITH_MD5 */ |
{ |
1, |
SSL2_TXT_RC2_128_CBC_WITH_MD5, |
SSL2_CK_RC2_128_CBC_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_RC2, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_NOT_EXP|SSL_MEDIUM, |
0, |
128, |
128, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
+ |
/* RC2_128_CBC_EXPORT40_WITH_MD5 */ |
{ |
1, |
SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5, |
SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_RC2, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_EXPORT|SSL_EXP40, |
SSL2_CF_5_BYTE_ENC, |
40, |
128, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
+ |
+#ifndef OPENSSL_NO_IDEA |
/* IDEA_128_CBC_WITH_MD5 */ |
-#ifndef OPENSSL_NO_IDEA |
{ |
1, |
SSL2_TXT_IDEA_128_CBC_WITH_MD5, |
SSL2_CK_IDEA_128_CBC_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_IDEA|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_IDEA, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_NOT_EXP|SSL_MEDIUM, |
0, |
128, |
128, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
#endif |
+ |
/* DES_64_CBC_WITH_MD5 */ |
{ |
1, |
SSL2_TXT_DES_64_CBC_WITH_MD5, |
SSL2_CK_DES_64_CBC_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_DES|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_DES, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_NOT_EXP|SSL_LOW, |
0, |
56, |
56, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
+ |
/* DES_192_EDE3_CBC_WITH_MD5 */ |
{ |
1, |
SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5, |
SSL2_CK_DES_192_EDE3_CBC_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_3DES|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_3DES, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_NOT_EXP|SSL_HIGH, |
0, |
168, |
168, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
+ |
+#if 0 |
/* RC4_64_WITH_MD5 */ |
-#if 0 |
{ |
1, |
SSL2_TXT_RC4_64_WITH_MD5, |
SSL2_CK_RC4_64_WITH_MD5, |
- SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2, |
+ SSL_kRSA, |
+ SSL_aRSA, |
+ SSL_RC4, |
+ SSL_MD5, |
+ SSL_SSLV2, |
SSL_NOT_EXP|SSL_LOW, |
SSL2_CF_8_BYTE_ENC, |
64, |
64, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
#endif |
+ |
+#if 0 |
/* NULL SSLeay (testing) */ |
-#if 0 |
{ |
0, |
SSL2_TXT_NULL, |
SSL2_CK_NULL, |
0, |
+ 0, |
+ 0, |
+ 0, |
+ SSL_SSLV2, |
SSL_STRONG_NONE, |
0, |
0, |
0, |
- SSL_ALL_CIPHERS, |
- SSL_ALL_STRENGTHS, |
}, |
#endif |
@@ -216,17 +298,12 @@ |
return(300); |
} |
-IMPLEMENT_ssl2_meth_func(sslv2_base_method, |
- ssl_undefined_function, |
- ssl_undefined_function, |
- ssl_bad_method) |
- |
int ssl2_num_ciphers(void) |
{ |
return(SSL2_NUM_CIPHERS); |
} |
-SSL_CIPHER *ssl2_get_cipher(unsigned int u) |
+const SSL_CIPHER *ssl2_get_cipher(unsigned int u) |
{ |
if (u < SSL2_NUM_CIPHERS) |
return(&(ssl2_ciphers[SSL2_NUM_CIPHERS-1-u])); |
@@ -337,18 +414,16 @@ |
/* This function needs to check if the ciphers required are actually |
* available */ |
-SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p) |
+const SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p) |
{ |
- SSL_CIPHER c,*cp; |
+ SSL_CIPHER c; |
+ const SSL_CIPHER *cp; |
unsigned long id; |
id=0x02000000L|((unsigned long)p[0]<<16L)| |
((unsigned long)p[1]<<8L)|(unsigned long)p[2]; |
c.id=id; |
- cp = (SSL_CIPHER *)OBJ_bsearch((char *)&c, |
- (char *)ssl2_ciphers, |
- SSL2_NUM_CIPHERS,sizeof(SSL_CIPHER), |
- FP_ICC ssl_cipher_id_cmp); |
+ cp = OBJ_bsearch_ssl_cipher_id(&c, ssl2_ciphers, SSL2_NUM_CIPHERS); |
if ((cp == NULL) || (cp->valid == 0)) |
return NULL; |
else |
@@ -377,6 +452,7 @@ |
unsigned char *km; |
unsigned char c='0'; |
const EVP_MD *md5; |
+ int md_size; |
md5 = EVP_md5(); |
@@ -393,10 +469,12 @@ |
SSLerr(SSL_F_SSL2_GENERATE_KEY_MATERIAL, ERR_R_INTERNAL_ERROR); |
return 0; |
} |
- |
- for (i=0; i<s->s2->key_material_length; i += EVP_MD_size(md5)) |
+ md_size = EVP_MD_size(md5); |
+ if (md_size < 0) |
+ return 0; |
+ for (i=0; i<s->s2->key_material_length; i += md_size) |
{ |
- if (((km - s->s2->key_material) + EVP_MD_size(md5)) > |
+ if (((km - s->s2->key_material) + md_size) > |
(int)sizeof(s->s2->key_material)) |
{ |
/* EVP_DigestFinal_ex() below would write beyond buffer */ |
@@ -415,7 +493,7 @@ |
EVP_DigestUpdate(&ctx,s->s2->challenge,s->s2->challenge_length); |
EVP_DigestUpdate(&ctx,s->s2->conn_id,s->s2->conn_id_length); |
EVP_DigestFinal_ex(&ctx,km,NULL); |
- km += EVP_MD_size(md5); |
+ km += md_size; |
} |
EVP_MD_CTX_cleanup(&ctx); |