| OLD | NEW |
| 1 /* ssl/s2_lib.c */ | 1 /* ssl/s2_lib.c */ |
| 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * This package is an SSL implementation written | 5 * This package is an SSL implementation written |
| 6 * by Eric Young (eay@cryptsoft.com). | 6 * by Eric Young (eay@cryptsoft.com). |
| 7 * The implementation was written so as to conform with Netscapes SSL. | 7 * The implementation was written so as to conform with Netscapes SSL. |
| 8 * | 8 * |
| 9 * This library is free for commercial and non-commercial use as long as | 9 * This library is free for commercial and non-commercial use as long as |
| 10 * the following conditions are aheared to. The following conditions | 10 * the following conditions are aheared to. The following conditions |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 * SUCH DAMAGE. | 51 * SUCH DAMAGE. |
| 52 * | 52 * |
| 53 * The licence and distribution terms for any publically available version or | 53 * The licence and distribution terms for any publically available version or |
| 54 * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 * copied and put under another distribution licence | 55 * copied and put under another distribution licence |
| 56 * [including the GNU Public Licence.] | 56 * [including the GNU Public Licence.] |
| 57 */ | 57 */ |
| 58 /* ==================================================================== |
| 59 * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. |
| 60 * |
| 61 * Redistribution and use in source and binary forms, with or without |
| 62 * modification, are permitted provided that the following conditions |
| 63 * are met: |
| 64 * |
| 65 * 1. Redistributions of source code must retain the above copyright |
| 66 * notice, this list of conditions and the following disclaimer. |
| 67 * |
| 68 * 2. Redistributions in binary form must reproduce the above copyright |
| 69 * notice, this list of conditions and the following disclaimer in |
| 70 * the documentation and/or other materials provided with the |
| 71 * distribution. |
| 72 * |
| 73 * 3. All advertising materials mentioning features or use of this |
| 74 * software must display the following acknowledgment: |
| 75 * "This product includes software developed by the OpenSSL Project |
| 76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" |
| 77 * |
| 78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to |
| 79 * endorse or promote products derived from this software without |
| 80 * prior written permission. For written permission, please contact |
| 81 * openssl-core@openssl.org. |
| 82 * |
| 83 * 5. Products derived from this software may not be called "OpenSSL" |
| 84 * nor may "OpenSSL" appear in their names without prior written |
| 85 * permission of the OpenSSL Project. |
| 86 * |
| 87 * 6. Redistributions of any form whatsoever must retain the following |
| 88 * acknowledgment: |
| 89 * "This product includes software developed by the OpenSSL Project |
| 90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)" |
| 91 * |
| 92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY |
| 93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| 95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR |
| 96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| 98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
| 101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| 102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
| 103 * OF THE POSSIBILITY OF SUCH DAMAGE. |
| 104 * ==================================================================== |
| 105 * |
| 106 * This product includes cryptographic software written by Eric Young |
| 107 * (eay@cryptsoft.com). This product includes software written by Tim |
| 108 * Hudson (tjh@cryptsoft.com). |
| 109 * |
| 110 */ |
| 58 | 111 |
| 59 #include "ssl_locl.h" | 112 #include "ssl_locl.h" |
| 60 #ifndef OPENSSL_NO_SSL2 | 113 #ifndef OPENSSL_NO_SSL2 |
| 61 #include <stdio.h> | 114 #include <stdio.h> |
| 62 #include <openssl/objects.h> | 115 #include <openssl/objects.h> |
| 63 #include <openssl/evp.h> | 116 #include <openssl/evp.h> |
| 64 #include <openssl/md5.h> | 117 #include <openssl/md5.h> |
| 65 | 118 |
| 66 const char ssl2_version_str[]="SSLv2" OPENSSL_VERSION_PTEXT; | 119 const char ssl2_version_str[]="SSLv2" OPENSSL_VERSION_PTEXT; |
| 67 | 120 |
| 68 #define SSL2_NUM_CIPHERS (sizeof(ssl2_ciphers)/sizeof(SSL_CIPHER)) | 121 #define SSL2_NUM_CIPHERS (sizeof(ssl2_ciphers)/sizeof(SSL_CIPHER)) |
| 69 | 122 |
| 70 /* list of available SSLv2 ciphers (sorted by id) */ | 123 /* list of available SSLv2 ciphers (sorted by id) */ |
| 71 OPENSSL_GLOBAL SSL_CIPHER ssl2_ciphers[]={ | 124 OPENSSL_GLOBAL const SSL_CIPHER ssl2_ciphers[]={ |
| 125 #if 0 |
| 72 /* NULL_WITH_MD5 v3 */ | 126 /* NULL_WITH_MD5 v3 */ |
| 73 #if 0 | |
| 74 { | 127 { |
| 75 1, | 128 1, |
| 76 SSL2_TXT_NULL_WITH_MD5, | 129 SSL2_TXT_NULL_WITH_MD5, |
| 77 SSL2_CK_NULL_WITH_MD5, | 130 SSL2_CK_NULL_WITH_MD5, |
| 78 » SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_MD5|SSL_SSLV2, | 131 » SSL_kRSA, |
| 132 » SSL_aRSA, |
| 133 » SSL_eNULL, |
| 134 » SSL_MD5, |
| 135 » SSL_SSLV2, |
| 79 SSL_EXPORT|SSL_EXP40|SSL_STRONG_NONE, | 136 SSL_EXPORT|SSL_EXP40|SSL_STRONG_NONE, |
| 80 0, | 137 0, |
| 81 0, | 138 0, |
| 82 0, | 139 0, |
| 83 SSL_ALL_CIPHERS, | |
| 84 SSL_ALL_STRENGTHS, | |
| 85 }, | 140 }, |
| 86 #endif | 141 #endif |
| 142 |
| 87 /* RC4_128_WITH_MD5 */ | 143 /* RC4_128_WITH_MD5 */ |
| 88 { | 144 { |
| 89 1, | 145 1, |
| 90 SSL2_TXT_RC4_128_WITH_MD5, | 146 SSL2_TXT_RC4_128_WITH_MD5, |
| 91 SSL2_CK_RC4_128_WITH_MD5, | 147 SSL2_CK_RC4_128_WITH_MD5, |
| 92 » SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2, | 148 » SSL_kRSA, |
| 149 » SSL_aRSA, |
| 150 » SSL_RC4, |
| 151 » SSL_MD5, |
| 152 » SSL_SSLV2, |
| 93 SSL_NOT_EXP|SSL_MEDIUM, | 153 SSL_NOT_EXP|SSL_MEDIUM, |
| 94 0, | 154 0, |
| 95 128, | 155 128, |
| 96 128, | 156 128, |
| 97 SSL_ALL_CIPHERS, | |
| 98 SSL_ALL_STRENGTHS, | |
| 99 }, | 157 }, |
| 158 |
| 100 /* RC4_128_EXPORT40_WITH_MD5 */ | 159 /* RC4_128_EXPORT40_WITH_MD5 */ |
| 101 { | 160 { |
| 102 1, | 161 1, |
| 103 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5, | 162 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5, |
| 104 SSL2_CK_RC4_128_EXPORT40_WITH_MD5, | 163 SSL2_CK_RC4_128_EXPORT40_WITH_MD5, |
| 105 » SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2, | 164 » SSL_kRSA, |
| 165 » SSL_aRSA, |
| 166 » SSL_RC4, |
| 167 » SSL_MD5, |
| 168 » SSL_SSLV2, |
| 106 SSL_EXPORT|SSL_EXP40, | 169 SSL_EXPORT|SSL_EXP40, |
| 107 SSL2_CF_5_BYTE_ENC, | 170 SSL2_CF_5_BYTE_ENC, |
| 108 40, | 171 40, |
| 109 128, | 172 128, |
| 110 SSL_ALL_CIPHERS, | |
| 111 SSL_ALL_STRENGTHS, | |
| 112 }, | 173 }, |
| 174 |
| 113 /* RC2_128_CBC_WITH_MD5 */ | 175 /* RC2_128_CBC_WITH_MD5 */ |
| 114 { | 176 { |
| 115 1, | 177 1, |
| 116 SSL2_TXT_RC2_128_CBC_WITH_MD5, | 178 SSL2_TXT_RC2_128_CBC_WITH_MD5, |
| 117 SSL2_CK_RC2_128_CBC_WITH_MD5, | 179 SSL2_CK_RC2_128_CBC_WITH_MD5, |
| 118 » SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_SSLV2, | 180 » SSL_kRSA, |
| 181 » SSL_aRSA, |
| 182 » SSL_RC2, |
| 183 » SSL_MD5, |
| 184 » SSL_SSLV2, |
| 119 SSL_NOT_EXP|SSL_MEDIUM, | 185 SSL_NOT_EXP|SSL_MEDIUM, |
| 120 0, | 186 0, |
| 121 128, | 187 128, |
| 122 128, | 188 128, |
| 123 SSL_ALL_CIPHERS, | |
| 124 SSL_ALL_STRENGTHS, | |
| 125 }, | 189 }, |
| 190 |
| 126 /* RC2_128_CBC_EXPORT40_WITH_MD5 */ | 191 /* RC2_128_CBC_EXPORT40_WITH_MD5 */ |
| 127 { | 192 { |
| 128 1, | 193 1, |
| 129 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5, | 194 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5, |
| 130 SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5, | 195 SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5, |
| 131 » SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_SSLV2, | 196 » SSL_kRSA, |
| 197 » SSL_aRSA, |
| 198 » SSL_RC2, |
| 199 » SSL_MD5, |
| 200 » SSL_SSLV2, |
| 132 SSL_EXPORT|SSL_EXP40, | 201 SSL_EXPORT|SSL_EXP40, |
| 133 SSL2_CF_5_BYTE_ENC, | 202 SSL2_CF_5_BYTE_ENC, |
| 134 40, | 203 40, |
| 135 128, | 204 128, |
| 136 SSL_ALL_CIPHERS, | |
| 137 SSL_ALL_STRENGTHS, | |
| 138 }, | 205 }, |
| 206 |
| 207 #ifndef OPENSSL_NO_IDEA |
| 139 /* IDEA_128_CBC_WITH_MD5 */ | 208 /* IDEA_128_CBC_WITH_MD5 */ |
| 140 #ifndef OPENSSL_NO_IDEA | |
| 141 { | 209 { |
| 142 1, | 210 1, |
| 143 SSL2_TXT_IDEA_128_CBC_WITH_MD5, | 211 SSL2_TXT_IDEA_128_CBC_WITH_MD5, |
| 144 SSL2_CK_IDEA_128_CBC_WITH_MD5, | 212 SSL2_CK_IDEA_128_CBC_WITH_MD5, |
| 145 » SSL_kRSA|SSL_aRSA|SSL_IDEA|SSL_MD5|SSL_SSLV2, | 213 » SSL_kRSA, |
| 214 » SSL_aRSA, |
| 215 » SSL_IDEA, |
| 216 » SSL_MD5, |
| 217 » SSL_SSLV2, |
| 146 SSL_NOT_EXP|SSL_MEDIUM, | 218 SSL_NOT_EXP|SSL_MEDIUM, |
| 147 0, | 219 0, |
| 148 128, | 220 128, |
| 149 128, | 221 128, |
| 150 SSL_ALL_CIPHERS, | |
| 151 SSL_ALL_STRENGTHS, | |
| 152 }, | 222 }, |
| 153 #endif | 223 #endif |
| 224 |
| 154 /* DES_64_CBC_WITH_MD5 */ | 225 /* DES_64_CBC_WITH_MD5 */ |
| 155 { | 226 { |
| 156 1, | 227 1, |
| 157 SSL2_TXT_DES_64_CBC_WITH_MD5, | 228 SSL2_TXT_DES_64_CBC_WITH_MD5, |
| 158 SSL2_CK_DES_64_CBC_WITH_MD5, | 229 SSL2_CK_DES_64_CBC_WITH_MD5, |
| 159 » SSL_kRSA|SSL_aRSA|SSL_DES|SSL_MD5|SSL_SSLV2, | 230 » SSL_kRSA, |
| 231 » SSL_aRSA, |
| 232 » SSL_DES, |
| 233 » SSL_MD5, |
| 234 » SSL_SSLV2, |
| 160 SSL_NOT_EXP|SSL_LOW, | 235 SSL_NOT_EXP|SSL_LOW, |
| 161 0, | 236 0, |
| 162 56, | 237 56, |
| 163 56, | 238 56, |
| 164 SSL_ALL_CIPHERS, | |
| 165 SSL_ALL_STRENGTHS, | |
| 166 }, | 239 }, |
| 240 |
| 167 /* DES_192_EDE3_CBC_WITH_MD5 */ | 241 /* DES_192_EDE3_CBC_WITH_MD5 */ |
| 168 { | 242 { |
| 169 1, | 243 1, |
| 170 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5, | 244 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5, |
| 171 SSL2_CK_DES_192_EDE3_CBC_WITH_MD5, | 245 SSL2_CK_DES_192_EDE3_CBC_WITH_MD5, |
| 172 » SSL_kRSA|SSL_aRSA|SSL_3DES|SSL_MD5|SSL_SSLV2, | 246 » SSL_kRSA, |
| 247 » SSL_aRSA, |
| 248 » SSL_3DES, |
| 249 » SSL_MD5, |
| 250 » SSL_SSLV2, |
| 173 SSL_NOT_EXP|SSL_HIGH, | 251 SSL_NOT_EXP|SSL_HIGH, |
| 174 0, | 252 0, |
| 175 168, | 253 168, |
| 176 168, | 254 168, |
| 177 SSL_ALL_CIPHERS, | |
| 178 SSL_ALL_STRENGTHS, | |
| 179 }, | 255 }, |
| 256 |
| 257 #if 0 |
| 180 /* RC4_64_WITH_MD5 */ | 258 /* RC4_64_WITH_MD5 */ |
| 181 #if 0 | |
| 182 { | 259 { |
| 183 1, | 260 1, |
| 184 SSL2_TXT_RC4_64_WITH_MD5, | 261 SSL2_TXT_RC4_64_WITH_MD5, |
| 185 SSL2_CK_RC4_64_WITH_MD5, | 262 SSL2_CK_RC4_64_WITH_MD5, |
| 186 » SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2, | 263 » SSL_kRSA, |
| 264 » SSL_aRSA, |
| 265 » SSL_RC4, |
| 266 » SSL_MD5, |
| 267 » SSL_SSLV2, |
| 187 SSL_NOT_EXP|SSL_LOW, | 268 SSL_NOT_EXP|SSL_LOW, |
| 188 SSL2_CF_8_BYTE_ENC, | 269 SSL2_CF_8_BYTE_ENC, |
| 189 64, | 270 64, |
| 190 64, | 271 64, |
| 191 SSL_ALL_CIPHERS, | |
| 192 SSL_ALL_STRENGTHS, | |
| 193 }, | 272 }, |
| 194 #endif | 273 #endif |
| 274 |
| 275 #if 0 |
| 195 /* NULL SSLeay (testing) */ | 276 /* NULL SSLeay (testing) */ |
| 196 #if 0 | |
| 197 { | 277 { |
| 198 0, | 278 0, |
| 199 SSL2_TXT_NULL, | 279 SSL2_TXT_NULL, |
| 200 SSL2_CK_NULL, | 280 SSL2_CK_NULL, |
| 201 0, | 281 0, |
| 282 0, |
| 283 0, |
| 284 0, |
| 285 SSL_SSLV2, |
| 202 SSL_STRONG_NONE, | 286 SSL_STRONG_NONE, |
| 203 0, | 287 0, |
| 204 0, | 288 0, |
| 205 0, | 289 0, |
| 206 SSL_ALL_CIPHERS, | |
| 207 SSL_ALL_STRENGTHS, | |
| 208 }, | 290 }, |
| 209 #endif | 291 #endif |
| 210 | 292 |
| 211 /* end of list :-) */ | 293 /* end of list :-) */ |
| 212 }; | 294 }; |
| 213 | 295 |
| 214 long ssl2_default_timeout(void) | 296 long ssl2_default_timeout(void) |
| 215 { | 297 { |
| 216 return(300); | 298 return(300); |
| 217 } | 299 } |
| 218 | 300 |
| 219 IMPLEMENT_ssl2_meth_func(sslv2_base_method, | |
| 220 ssl_undefined_function, | |
| 221 ssl_undefined_function, | |
| 222 ssl_bad_method) | |
| 223 | |
| 224 int ssl2_num_ciphers(void) | 301 int ssl2_num_ciphers(void) |
| 225 { | 302 { |
| 226 return(SSL2_NUM_CIPHERS); | 303 return(SSL2_NUM_CIPHERS); |
| 227 } | 304 } |
| 228 | 305 |
| 229 SSL_CIPHER *ssl2_get_cipher(unsigned int u) | 306 const SSL_CIPHER *ssl2_get_cipher(unsigned int u) |
| 230 { | 307 { |
| 231 if (u < SSL2_NUM_CIPHERS) | 308 if (u < SSL2_NUM_CIPHERS) |
| 232 return(&(ssl2_ciphers[SSL2_NUM_CIPHERS-1-u])); | 309 return(&(ssl2_ciphers[SSL2_NUM_CIPHERS-1-u])); |
| 233 else | 310 else |
| 234 return(NULL); | 311 return(NULL); |
| 235 } | 312 } |
| 236 | 313 |
| 237 int ssl2_pending(const SSL *s) | 314 int ssl2_pending(const SSL *s) |
| 238 { | 315 { |
| 239 return SSL_in_init(s) ? 0 : s->s2->ract_data_length; | 316 return SSL_in_init(s) ? 0 : s->s2->ract_data_length; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 return(0); | 407 return(0); |
| 331 } | 408 } |
| 332 | 409 |
| 333 long ssl2_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | 410 long ssl2_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) |
| 334 { | 411 { |
| 335 return(0); | 412 return(0); |
| 336 } | 413 } |
| 337 | 414 |
| 338 /* This function needs to check if the ciphers required are actually | 415 /* This function needs to check if the ciphers required are actually |
| 339 * available */ | 416 * available */ |
| 340 SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p) | 417 const SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p) |
| 341 { | 418 { |
| 342 » SSL_CIPHER c,*cp; | 419 » SSL_CIPHER c; |
| 420 » const SSL_CIPHER *cp; |
| 343 unsigned long id; | 421 unsigned long id; |
| 344 | 422 |
| 345 id=0x02000000L|((unsigned long)p[0]<<16L)| | 423 id=0x02000000L|((unsigned long)p[0]<<16L)| |
| 346 ((unsigned long)p[1]<<8L)|(unsigned long)p[2]; | 424 ((unsigned long)p[1]<<8L)|(unsigned long)p[2]; |
| 347 c.id=id; | 425 c.id=id; |
| 348 » cp = (SSL_CIPHER *)OBJ_bsearch((char *)&c, | 426 » cp = OBJ_bsearch_ssl_cipher_id(&c, ssl2_ciphers, SSL2_NUM_CIPHERS); |
| 349 » » (char *)ssl2_ciphers, | |
| 350 » » SSL2_NUM_CIPHERS,sizeof(SSL_CIPHER), | |
| 351 » » FP_ICC ssl_cipher_id_cmp); | |
| 352 if ((cp == NULL) || (cp->valid == 0)) | 427 if ((cp == NULL) || (cp->valid == 0)) |
| 353 return NULL; | 428 return NULL; |
| 354 else | 429 else |
| 355 return cp; | 430 return cp; |
| 356 } | 431 } |
| 357 | 432 |
| 358 int ssl2_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) | 433 int ssl2_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) |
| 359 { | 434 { |
| 360 long l; | 435 long l; |
| 361 | 436 |
| 362 if (p != NULL) | 437 if (p != NULL) |
| 363 { | 438 { |
| 364 l=c->id; | 439 l=c->id; |
| 365 if ((l & 0xff000000) != 0x02000000) return(0); | 440 if ((l & 0xff000000) != 0x02000000) return(0); |
| 366 p[0]=((unsigned char)(l>>16L))&0xFF; | 441 p[0]=((unsigned char)(l>>16L))&0xFF; |
| 367 p[1]=((unsigned char)(l>> 8L))&0xFF; | 442 p[1]=((unsigned char)(l>> 8L))&0xFF; |
| 368 p[2]=((unsigned char)(l ))&0xFF; | 443 p[2]=((unsigned char)(l ))&0xFF; |
| 369 } | 444 } |
| 370 return(3); | 445 return(3); |
| 371 } | 446 } |
| 372 | 447 |
| 373 int ssl2_generate_key_material(SSL *s) | 448 int ssl2_generate_key_material(SSL *s) |
| 374 { | 449 { |
| 375 unsigned int i; | 450 unsigned int i; |
| 376 EVP_MD_CTX ctx; | 451 EVP_MD_CTX ctx; |
| 377 unsigned char *km; | 452 unsigned char *km; |
| 378 unsigned char c='0'; | 453 unsigned char c='0'; |
| 379 const EVP_MD *md5; | 454 const EVP_MD *md5; |
| 455 int md_size; |
| 380 | 456 |
| 381 md5 = EVP_md5(); | 457 md5 = EVP_md5(); |
| 382 | 458 |
| 383 #ifdef CHARSET_EBCDIC | 459 #ifdef CHARSET_EBCDIC |
| 384 c = os_toascii['0']; /* Must be an ASCII '0', not EBCDIC '0', | 460 c = os_toascii['0']; /* Must be an ASCII '0', not EBCDIC '0', |
| 385 see SSLv2 docu */ | 461 see SSLv2 docu */ |
| 386 #endif | 462 #endif |
| 387 EVP_MD_CTX_init(&ctx); | 463 EVP_MD_CTX_init(&ctx); |
| 388 km=s->s2->key_material; | 464 km=s->s2->key_material; |
| 389 | 465 |
| 390 if (s->session->master_key_length < 0 || | 466 if (s->session->master_key_length < 0 || |
| 391 s->session->master_key_length > (int)sizeof(s->session->
master_key)) | 467 s->session->master_key_length > (int)sizeof(s->session->
master_key)) |
| 392 { | 468 { |
| 393 SSLerr(SSL_F_SSL2_GENERATE_KEY_MATERIAL, ERR_R_INTERNAL_ERROR); | 469 SSLerr(SSL_F_SSL2_GENERATE_KEY_MATERIAL, ERR_R_INTERNAL_ERROR); |
| 394 return 0; | 470 return 0; |
| 395 } | 471 } |
| 396 | 472 » md_size = EVP_MD_size(md5); |
| 397 » for (i=0; i<s->s2->key_material_length; i += EVP_MD_size(md5)) | 473 » if (md_size < 0) |
| 474 » return 0; |
| 475 » for (i=0; i<s->s2->key_material_length; i += md_size) |
| 398 { | 476 { |
| 399 » » if (((km - s->s2->key_material) + EVP_MD_size(md5)) > | 477 » » if (((km - s->s2->key_material) + md_size) > |
| 400 (int)sizeof(s->s2->key_material)) | 478 (int)sizeof(s->s2->key_material)) |
| 401 { | 479 { |
| 402 /* EVP_DigestFinal_ex() below would write beyond buffer
*/ | 480 /* EVP_DigestFinal_ex() below would write beyond buffer
*/ |
| 403 SSLerr(SSL_F_SSL2_GENERATE_KEY_MATERIAL, ERR_R_INTERNAL_
ERROR); | 481 SSLerr(SSL_F_SSL2_GENERATE_KEY_MATERIAL, ERR_R_INTERNAL_
ERROR); |
| 404 return 0; | 482 return 0; |
| 405 } | 483 } |
| 406 | 484 |
| 407 EVP_DigestInit_ex(&ctx, md5, NULL); | 485 EVP_DigestInit_ex(&ctx, md5, NULL); |
| 408 | 486 |
| 409 OPENSSL_assert(s->session->master_key_length >= 0 | 487 OPENSSL_assert(s->session->master_key_length >= 0 |
| 410 && s->session->master_key_length | 488 && s->session->master_key_length |
| 411 < (int)sizeof(s->session->master_key)); | 489 < (int)sizeof(s->session->master_key)); |
| 412 EVP_DigestUpdate(&ctx,s->session->master_key,s->session->master_
key_length); | 490 EVP_DigestUpdate(&ctx,s->session->master_key,s->session->master_
key_length); |
| 413 EVP_DigestUpdate(&ctx,&c,1); | 491 EVP_DigestUpdate(&ctx,&c,1); |
| 414 c++; | 492 c++; |
| 415 EVP_DigestUpdate(&ctx,s->s2->challenge,s->s2->challenge_length); | 493 EVP_DigestUpdate(&ctx,s->s2->challenge,s->s2->challenge_length); |
| 416 EVP_DigestUpdate(&ctx,s->s2->conn_id,s->s2->conn_id_length); | 494 EVP_DigestUpdate(&ctx,s->s2->conn_id,s->s2->conn_id_length); |
| 417 EVP_DigestFinal_ex(&ctx,km,NULL); | 495 EVP_DigestFinal_ex(&ctx,km,NULL); |
| 418 » » km += EVP_MD_size(md5); | 496 » » km += md_size; |
| 419 } | 497 } |
| 420 | 498 |
| 421 EVP_MD_CTX_cleanup(&ctx); | 499 EVP_MD_CTX_cleanup(&ctx); |
| 422 return 1; | 500 return 1; |
| 423 } | 501 } |
| 424 | 502 |
| 425 void ssl2_return_error(SSL *s, int err) | 503 void ssl2_return_error(SSL *s, int err) |
| 426 { | 504 { |
| 427 if (!s->error) | 505 if (!s->error) |
| 428 { | 506 { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 547 s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); |
| 470 return(1); | 548 return(1); |
| 471 } | 549 } |
| 472 #else /* !OPENSSL_NO_SSL2 */ | 550 #else /* !OPENSSL_NO_SSL2 */ |
| 473 | 551 |
| 474 # if PEDANTIC | 552 # if PEDANTIC |
| 475 static void *dummy=&dummy; | 553 static void *dummy=&dummy; |
| 476 # endif | 554 # endif |
| 477 | 555 |
| 478 #endif | 556 #endif |
| OLD | NEW |