s3_lib.c 48.9 KB
Newer Older
1
/* ssl/s3_lib.c */
2
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
 * 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.]
 */
B
Bodo Möller 已提交
58
/* ====================================================================
59
 * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.
B
Bodo Möller 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
 *
 * 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).
 *
 */
B
Bodo Möller 已提交
111 112 113 114 115 116 117 118 119 120 121 122 123
/* ====================================================================
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
 *
 * Portions of the attached software ("Contribution") are developed by 
 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
 *
 * The Contribution is licensed pursuant to the OpenSSL open source
 * license provided above.
 *
 * ECC cipher suite support in OpenSSL originally written by
 * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
 *
 */
124 125

#include <stdio.h>
126
#include <openssl/objects.h>
127
#include "ssl_locl.h"
128
#include "kssl_lcl.h"
129
#include <openssl/md5.h>
N
make  
Nils Larsch 已提交
130
#ifndef OPENSSL_NO_DH
131
#include <openssl/dh.h>
N
make  
Nils Larsch 已提交
132
#endif
133

B
Ben Laurie 已提交
134
const char *ssl3_version_str="SSLv3" OPENSSL_VERSION_PTEXT;
135 136 137

#define SSL3_NUM_CIPHERS	(sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))

138
/* list of available SSLv3 ciphers (sorted by id) */
B
Bodo Möller 已提交
139
OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
140 141 142 143 144 145
/* The RSA ciphers */
/* Cipher 01 */
	{
	1,
	SSL3_TXT_RSA_NULL_MD5,
	SSL3_CK_RSA_NULL_MD5,
146
	SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_MD5|SSL_SSLV3,
147
	SSL_NOT_EXP|SSL_STRONG_NONE,
148 149
	0,
	0,
150 151
	0,
	SSL_ALL_CIPHERS,
152
	SSL_ALL_STRENGTHS,
153 154 155 156 157 158
	},
/* Cipher 02 */
	{
	1,
	SSL3_TXT_RSA_NULL_SHA,
	SSL3_CK_RSA_NULL_SHA,
159
	SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_SHA1|SSL_SSLV3,
160
	SSL_NOT_EXP|SSL_STRONG_NONE,
161 162
	0,
	0,
163 164
	0,
	SSL_ALL_CIPHERS,
165
	SSL_ALL_STRENGTHS,
166 167 168 169 170 171
	},
/* Cipher 03 */
	{
	1,
	SSL3_TXT_RSA_RC4_40_MD5,
	SSL3_CK_RSA_RC4_40_MD5,
172 173
	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
174
	0,
175 176
	40,
	128,
177
	SSL_ALL_CIPHERS,
178
	SSL_ALL_STRENGTHS,
179 180 181 182 183 184
	},
/* Cipher 04 */
	{
	1,
	SSL3_TXT_RSA_RC4_128_MD5,
	SSL3_CK_RSA_RC4_128_MD5,
185 186
	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5|SSL_SSLV3,
	SSL_NOT_EXP|SSL_MEDIUM,
187
	0,
188 189
	128,
	128,
190
	SSL_ALL_CIPHERS,
191
	SSL_ALL_STRENGTHS,
192 193 194 195 196 197
	},
/* Cipher 05 */
	{
	1,
	SSL3_TXT_RSA_RC4_128_SHA,
	SSL3_CK_RSA_RC4_128_SHA,
198 199
	SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_MEDIUM,
200
	0,
201 202
	128,
	128,
203
	SSL_ALL_CIPHERS,
204
	SSL_ALL_STRENGTHS,
205 206 207 208 209 210
	},
/* Cipher 06 */
	{
	1,
	SSL3_TXT_RSA_RC2_40_MD5,
	SSL3_CK_RSA_RC2_40_MD5,
211 212
	SSL_kRSA|SSL_aRSA|SSL_RC2  |SSL_MD5 |SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
213
	0,
214 215
	40,
	128,
216
	SSL_ALL_CIPHERS,
217
	SSL_ALL_STRENGTHS,
218 219
	},
/* Cipher 07 */
220
#ifndef OPENSSL_NO_IDEA
221 222 223 224
	{
	1,
	SSL3_TXT_RSA_IDEA_128_SHA,
	SSL3_CK_RSA_IDEA_128_SHA,
225 226
	SSL_kRSA|SSL_aRSA|SSL_IDEA |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_MEDIUM,
227
	0,
228 229
	128,
	128,
230
	SSL_ALL_CIPHERS,
231
	SSL_ALL_STRENGTHS,
232
	},
233
#endif
234 235 236 237 238
/* Cipher 08 */
	{
	1,
	SSL3_TXT_RSA_DES_40_CBC_SHA,
	SSL3_CK_RSA_DES_40_CBC_SHA,
239 240
	SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
241
	0,
242 243
	40,
	56,
244
	SSL_ALL_CIPHERS,
245
	SSL_ALL_STRENGTHS,
246 247 248 249 250 251
	},
/* Cipher 09 */
	{
	1,
	SSL3_TXT_RSA_DES_64_CBC_SHA,
	SSL3_CK_RSA_DES_64_CBC_SHA,
252 253
	SSL_kRSA|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_LOW,
254
	0,
255 256
	56,
	56,
257
	SSL_ALL_CIPHERS,
258
	SSL_ALL_STRENGTHS,
259 260 261 262 263 264
	},
/* Cipher 0A */
	{
	1,
	SSL3_TXT_RSA_DES_192_CBC3_SHA,
	SSL3_CK_RSA_DES_192_CBC3_SHA,
265 266
	SSL_kRSA|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_HIGH,
267
	0,
268 269
	168,
	168,
270
	SSL_ALL_CIPHERS,
271
	SSL_ALL_STRENGTHS,
272
	},
273
/* The DH ciphers */
274 275 276 277 278
/* Cipher 0B */
	{
	0,
	SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
	SSL3_CK_DH_DSS_DES_40_CBC_SHA,
279 280
	SSL_kDHd |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
281
	0,
282 283
	40,
	56,
284
	SSL_ALL_CIPHERS,
285
	SSL_ALL_STRENGTHS,
286 287 288 289 290 291
	},
/* Cipher 0C */
	{
	0,
	SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
	SSL3_CK_DH_DSS_DES_64_CBC_SHA,
292 293
	SSL_kDHd |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_LOW,
294
	0,
295 296
	56,
	56,
297
	SSL_ALL_CIPHERS,
298
	SSL_ALL_STRENGTHS,
299 300 301 302 303 304
	},
/* Cipher 0D */
	{
	0,
	SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
	SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
305 306
	SSL_kDHd |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_HIGH,
307
	0,
308 309
	168,
	168,
310
	SSL_ALL_CIPHERS,
311
	SSL_ALL_STRENGTHS,
312 313 314 315 316 317
	},
/* Cipher 0E */
	{
	0,
	SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
	SSL3_CK_DH_RSA_DES_40_CBC_SHA,
318 319
	SSL_kDHr |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
320
	0,
321 322
	40,
	56,
323
	SSL_ALL_CIPHERS,
324
	SSL_ALL_STRENGTHS,
325 326 327 328 329 330
	},
/* Cipher 0F */
	{
	0,
	SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
	SSL3_CK_DH_RSA_DES_64_CBC_SHA,
331 332
	SSL_kDHr |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_LOW,
333
	0,
334 335
	56,
	56,
336
	SSL_ALL_CIPHERS,
337
	SSL_ALL_STRENGTHS,
338 339 340 341 342 343
	},
/* Cipher 10 */
	{
	0,
	SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
	SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
344 345
	SSL_kDHr |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_HIGH,
346
	0,
347 348
	168,
	168,
349
	SSL_ALL_CIPHERS,
350
	SSL_ALL_STRENGTHS,
351 352 353 354 355 356 357 358
	},

/* The Ephemeral DH ciphers */
/* Cipher 11 */
	{
	1,
	SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
	SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
359 360
	SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA1|SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
361
	0,
362 363
	40,
	56,
364
	SSL_ALL_CIPHERS,
365
	SSL_ALL_STRENGTHS,
366 367 368 369 370 371
	},
/* Cipher 12 */
	{
	1,
	SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
	SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
372 373
	SSL_kEDH|SSL_aDSS|SSL_DES  |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_LOW,
374
	0,
375 376
	56,
	56,
377
	SSL_ALL_CIPHERS,
378
	SSL_ALL_STRENGTHS,
379 380 381 382 383 384
	},
/* Cipher 13 */
	{
	1,
	SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
	SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
385 386
	SSL_kEDH|SSL_aDSS|SSL_3DES |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_HIGH,
387
	0,
388 389
	168,
	168,
390
	SSL_ALL_CIPHERS,
391
	SSL_ALL_STRENGTHS,
392 393 394 395 396 397
	},
/* Cipher 14 */
	{
	1,
	SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
	SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
398 399
	SSL_kEDH|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
400
	0,
401 402
	40,
	56,
403
	SSL_ALL_CIPHERS,
404
	SSL_ALL_STRENGTHS,
405 406 407 408 409 410
	},
/* Cipher 15 */
	{
	1,
	SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
	SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
411 412
	SSL_kEDH|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_LOW,
413
	0,
414 415
	56,
	56,
416
	SSL_ALL_CIPHERS,
417
	SSL_ALL_STRENGTHS,
418 419 420 421 422 423
	},
/* Cipher 16 */
	{
	1,
	SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
	SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
424 425
	SSL_kEDH|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_HIGH,
426
	0,
427 428
	168,
	168,
429
	SSL_ALL_CIPHERS,
430
	SSL_ALL_STRENGTHS,
431
	},
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496
/* Cipher 17 */
	{
	1,
	SSL3_TXT_ADH_RC4_40_MD5,
	SSL3_CK_ADH_RC4_40_MD5,
	SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
	0,
	40,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},
/* Cipher 18 */
	{
	1,
	SSL3_TXT_ADH_RC4_128_MD5,
	SSL3_CK_ADH_RC4_128_MD5,
	SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
	SSL_NOT_EXP|SSL_MEDIUM,
	0,
	128,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},
/* Cipher 19 */
	{
	1,
	SSL3_TXT_ADH_DES_40_CBC_SHA,
	SSL3_CK_ADH_DES_40_CBC_SHA,
	SSL_kEDH |SSL_aNULL|SSL_DES|SSL_SHA1|SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
	0,
	40,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},
/* Cipher 1A */
	{
	1,
	SSL3_TXT_ADH_DES_64_CBC_SHA,
	SSL3_CK_ADH_DES_64_CBC_SHA,
	SSL_kEDH |SSL_aNULL|SSL_DES  |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_LOW,
	0,
	56,
	56,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},
/* Cipher 1B */
	{
	1,
	SSL3_TXT_ADH_DES_192_CBC_SHA,
	SSL3_CK_ADH_DES_192_CBC_SHA,
	SSL_kEDH |SSL_aNULL|SSL_3DES |SSL_SHA1|SSL_SSLV3,
	SSL_NOT_EXP|SSL_HIGH,
	0,
	168,
	168,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},
497 498 499 500 501 502 503

/* Fortezza */
/* Cipher 1C */
	{
	0,
	SSL3_TXT_FZA_DMS_NULL_SHA,
	SSL3_CK_FZA_DMS_NULL_SHA,
504
	SSL_kFZA|SSL_aFZA |SSL_eNULL |SSL_SHA1|SSL_SSLV3,
505
	SSL_NOT_EXP|SSL_STRONG_NONE,
506 507
	0,
	0,
508 509
	0,
	SSL_ALL_CIPHERS,
510
	SSL_ALL_STRENGTHS,
511 512 513 514 515 516 517
	},

/* Cipher 1D */
	{
	0,
	SSL3_TXT_FZA_DMS_FZA_SHA,
	SSL3_CK_FZA_DMS_FZA_SHA,
518
	SSL_kFZA|SSL_aFZA |SSL_eFZA |SSL_SHA1|SSL_SSLV3,
519
	SSL_NOT_EXP|SSL_STRONG_NONE,
520 521
	0,
	0,
522 523
	0,
	SSL_ALL_CIPHERS,
524
	SSL_ALL_STRENGTHS,
525 526
	},

527
#if 0
528 529 530 531 532
/* Cipher 1E */
	{
	0,
	SSL3_TXT_FZA_DMS_RC4_SHA,
	SSL3_CK_FZA_DMS_RC4_SHA,
533
	SSL_kFZA|SSL_aFZA |SSL_RC4  |SSL_SHA1|SSL_SSLV3,
L
Lutz Jänicke 已提交
534
	SSL_NOT_EXP|SSL_MEDIUM,
535
	0,
536 537
	128,
	128,
538
	SSL_ALL_CIPHERS,
539
	SSL_ALL_STRENGTHS,
540
	},
541
#endif
542

543
#ifndef OPENSSL_NO_KRB5
544 545 546 547
/* The Kerberos ciphers
** 20000107 VRS: And the first shall be last,
** in hopes of avoiding the lynx ssl renegotiation problem.
*/
548
/* Cipher 1E VRS */
549 550
	{
	1,
551 552
	SSL3_TXT_KRB5_DES_64_CBC_SHA,
	SSL3_CK_KRB5_DES_64_CBC_SHA,
553
	SSL_kKRB5|SSL_aKRB5|  SSL_DES|SSL_SHA1   |SSL_SSLV3,
554
	SSL_NOT_EXP|SSL_LOW,
555
	0,
556
	56,
557 558 559 560 561
	56,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

562
/* Cipher 1F VRS */
563 564
	{
	1,
565 566 567 568
	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,
569
	0,
570 571
	112,
	168,
572 573 574 575
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

576
/* Cipher 20 VRS */
577 578
	{
	1,
579 580 581 582
	SSL3_TXT_KRB5_RC4_128_SHA,
	SSL3_CK_KRB5_RC4_128_SHA,
	SSL_kKRB5|SSL_aKRB5|  SSL_RC4|SSL_SHA1  |SSL_SSLV3,
	SSL_NOT_EXP|SSL_MEDIUM,
583
	0,
584 585
	128,
	128,
586 587 588 589
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

590 591 592 593 594 595 596 597 598 599 600 601 602 603 604
/* Cipher 21 VRS */
	{
	1,
	SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
	SSL3_CK_KRB5_IDEA_128_CBC_SHA,
	SSL_kKRB5|SSL_aKRB5|  SSL_IDEA|SSL_SHA1  |SSL_SSLV3,
	SSL_NOT_EXP|SSL_MEDIUM,
	0,
	128,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

/* Cipher 22 VRS */
605 606 607 608 609 610 611 612 613 614 615 616 617
	{
	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,
	},

618
/* Cipher 23 VRS */
619 620
	{
	1,
621 622 623
	SSL3_TXT_KRB5_DES_192_CBC3_MD5,
	SSL3_CK_KRB5_DES_192_CBC3_MD5,
	SSL_kKRB5|SSL_aKRB5|  SSL_3DES|SSL_MD5   |SSL_SSLV3,
624 625 626 627 628 629 630 631
	SSL_NOT_EXP|SSL_HIGH,
	0,
	112,
	168,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659
/* Cipher 24 VRS */
	{
	1,
	SSL3_TXT_KRB5_RC4_128_MD5,
	SSL3_CK_KRB5_RC4_128_MD5,
	SSL_kKRB5|SSL_aKRB5|  SSL_RC4|SSL_MD5  |SSL_SSLV3,
	SSL_NOT_EXP|SSL_MEDIUM,
	0,
	128,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

/* Cipher 25 VRS */
	{
	1,
	SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
	SSL3_CK_KRB5_IDEA_128_CBC_MD5,
	SSL_kKRB5|SSL_aKRB5|  SSL_IDEA|SSL_MD5  |SSL_SSLV3,
	SSL_NOT_EXP|SSL_MEDIUM,
	0,
	128,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

660 661 662
/* Cipher 26 VRS */
	{
	1,
663 664 665 666
	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,
667
	0,
668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690
	40,
	56,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

/* Cipher 27 VRS */
	{
	1,
	SSL3_TXT_KRB5_RC2_40_CBC_SHA,
	SSL3_CK_KRB5_RC2_40_CBC_SHA,
	SSL_kKRB5|SSL_aKRB5|  SSL_RC2|SSL_SHA1   |SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
	0,
	40,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

/* Cipher 28 VRS */
	{
	1,
R
Typos.  
Richard Levitte 已提交
691 692
	SSL3_TXT_KRB5_RC4_40_SHA,
	SSL3_CK_KRB5_RC4_40_SHA,
693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732
	SSL_kKRB5|SSL_aKRB5|  SSL_RC4|SSL_SHA1   |SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
	0,
	128,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

/* Cipher 29 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 2A VRS */
	{
	1,
	SSL3_TXT_KRB5_RC2_40_CBC_MD5,
	SSL3_CK_KRB5_RC2_40_CBC_MD5,
	SSL_kKRB5|SSL_aKRB5|  SSL_RC2|SSL_MD5    |SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
	0,
	40,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},

/* Cipher 2B VRS */
	{
	1,
R
Typos.  
Richard Levitte 已提交
733 734
	SSL3_TXT_KRB5_RC4_40_MD5,
	SSL3_CK_KRB5_RC4_40_MD5,
735 736 737 738 739
	SSL_kKRB5|SSL_aKRB5|  SSL_RC4|SSL_MD5    |SSL_SSLV3,
	SSL_EXPORT|SSL_EXP40,
	0,
	128,
	128,
740 741 742
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},
743
#endif	/* OPENSSL_NO_KRB5 */
744
/* New AES ciphersuites */
D
 
Dr. Stephen Henson 已提交
745

746 747 748 749 750 751
/* Cipher 2F */
	{
	1,
	TLS1_TXT_RSA_WITH_AES_128_SHA,
	TLS1_CK_RSA_WITH_AES_128_SHA,
	SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1,
752
	SSL_NOT_EXP|SSL_HIGH,
753 754 755 756 757 758 759 760 761 762 763 764
	0,
	128,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},
/* 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,
765
	SSL_NOT_EXP|SSL_HIGH,
766 767 768 769 770 771 772 773 774 775 776 777
	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,
778
	SSL_NOT_EXP|SSL_HIGH,
779 780 781 782 783 784 785 786 787 788 789 790
	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,
791
	SSL_NOT_EXP|SSL_HIGH,
792 793 794 795 796 797 798 799 800 801 802 803
	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,
804
	SSL_NOT_EXP|SSL_HIGH,
805 806 807 808 809 810 811 812 813 814 815 816
	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,
817
	SSL_NOT_EXP|SSL_HIGH,
818 819 820 821 822 823
	0,
	128,
	128,
	SSL_ALL_CIPHERS,
	SSL_ALL_STRENGTHS,
	},
D
 
Dr. Stephen Henson 已提交
824

825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889
/* 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,
	},
D
 
Dr. Stephen Henson 已提交
890
	/* Cipher 3A */
891 892 893 894 895 896 897 898 899 900 901 902
	{
	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,
	},
B
Bodo Möller 已提交
903

B
Bodo Möller 已提交
904
#ifndef OPENSSL_NO_ECDH
B
Bodo Möller 已提交
905
	/* Cipher C001 */
B
Bodo Möller 已提交
906 907 908 909 910 911 912 913 914 915 916 917 918
	    {
            1,
            TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
            TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
            SSL_kECDH|SSL_aECDSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP,
            0,
            0,
            0,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
919
	/* Cipher C002 */
B
Bodo Möller 已提交
920 921 922 923 924 925 926 927 928 929 930 931 932
	    {
            1,
            TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
            TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
            SSL_kECDH|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP,
            0,
            128,
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
933
	/* Cipher C003 */
B
Bodo Möller 已提交
934 935 936 937 938 939 940 941 942 943 944 945 946
	    {
            1,
            TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
            TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
            SSL_kECDH|SSL_aECDSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            168,
            168,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
947
	/* Cipher C004 */
B
Bodo Möller 已提交
948 949 950 951 952
	    {
            1,
            TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
            TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
            SSL_kECDH|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
953
            SSL_NOT_EXP|SSL_HIGH,
B
Bodo Möller 已提交
954 955 956 957 958 959 960
            0,
            128,
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
961
	/* Cipher C005 */
B
Bodo Möller 已提交
962 963 964 965 966 967 968 969 970 971 972 973 974
	    {
            1,
            TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
            TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
            SSL_kECDH|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            256,
            256,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
975
	/* Cipher C006 */
B
Bodo Möller 已提交
976 977
	    {
            1,
B
Bodo Möller 已提交
978 979 980
            TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
            TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
            SSL_kECDHE|SSL_aECDSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
B
Bodo Möller 已提交
981 982 983 984 985 986 987 988
            SSL_NOT_EXP,
            0,
            0,
            0,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
989
	/* Cipher C007 */
B
Bodo Möller 已提交
990 991
	    {
            1,
B
Bodo Möller 已提交
992 993 994
            TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
            TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
            SSL_kECDHE|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
B
Bodo Möller 已提交
995 996 997 998 999 1000 1001 1002
            SSL_NOT_EXP,
            0,
            128,
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045
	/* Cipher C008 */
	    {
            1,
            TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
            TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
            SSL_kECDHE|SSL_aECDSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            168,
            168,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

	/* Cipher C009 */
	    {
            1,
            TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
            TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
            SSL_kECDHE|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            128,
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

	/* Cipher C00A */
	    {
            1,
            TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
            TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
            SSL_kECDHE|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            256,
            256,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

	/* Cipher C00B */
B
Bodo Möller 已提交
1046 1047
	    {
            1,
B
Bodo Möller 已提交
1048 1049 1050 1051 1052 1053
            TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
            TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
            SSL_kECDH|SSL_aRSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP,
            0,
            0,
B
Bodo Möller 已提交
1054 1055 1056 1057 1058
            0,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073
	/* Cipher C00C */
	    {
            1,
            TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
            TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
            SSL_kECDH|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP,
            0,
            128,
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

	/* Cipher C00D */
B
Bodo Möller 已提交
1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086
	    {
            1,
            TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
            TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
            SSL_kECDH|SSL_aRSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            168,
            168,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1087
	/* Cipher C00E */
B
Bodo Möller 已提交
1088 1089 1090 1091 1092
	    {
            1,
            TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
            TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
            SSL_kECDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
1093
            SSL_NOT_EXP|SSL_HIGH,
B
Bodo Möller 已提交
1094 1095 1096 1097 1098 1099 1100
            0,
            128,
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1101
	/* Cipher C00F */
B
Bodo Möller 已提交
1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114
	    {
            1,
            TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
            TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
            SSL_kECDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            256,
            256,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1115
	/* Cipher C010 */
B
Bodo Möller 已提交
1116 1117
	    {
            1,
B
Bodo Möller 已提交
1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135
            TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
            TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
            SSL_kECDHE|SSL_aRSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP,
            0,
            0,
            0,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

	/* Cipher C011 */
	    {
            1,
            TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
            TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
            SSL_kECDHE|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP,
B
Bodo Möller 已提交
1136
            0,
B
Bodo Möller 已提交
1137
            128,
B
Bodo Möller 已提交
1138 1139 1140 1141 1142
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1143
	/* Cipher C012 */
B
Bodo Möller 已提交
1144 1145
	    {
            1,
B
Bodo Möller 已提交
1146 1147 1148 1149
            TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
            TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
            SSL_kECDHE|SSL_aRSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
B
Bodo Möller 已提交
1150
            0,
B
Bodo Möller 已提交
1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165
            168,
            168,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

	/* Cipher C013 */
	    {
            1,
            TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
            TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
            SSL_kECDHE|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            128,
B
Bodo Möller 已提交
1166 1167 1168 1169 1170
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185
	/* Cipher C014 */
	    {
            1,
            TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
            TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
            SSL_kECDHE|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            256,
            256,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

	/* Cipher C015 */
B
Bodo Möller 已提交
1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198
            {
            1,
            TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
            TLS1_CK_ECDH_anon_WITH_NULL_SHA,
            SSL_kECDHE|SSL_aNULL|SSL_eNULL|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP,
            0,
            0,
            0,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
	    },

B
Bodo Möller 已提交
1199
	/* Cipher C016 */
B
Bodo Möller 已提交
1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212
            {
            1,
            TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
            TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
            SSL_kECDHE|SSL_aNULL|SSL_RC4|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP,
            0,
            128,
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
	    },

B
Bodo Möller 已提交
1213
	/* Cipher C017 */
B
Bodo Möller 已提交
1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226
	    {
            1,
            TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
            TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
            SSL_kECDHE|SSL_aNULL|SSL_3DES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
            0,
            168,
            168,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1227
	/* Cipher C018 */
B
Bodo Möller 已提交
1228 1229
	    {
            1,
B
Bodo Möller 已提交
1230 1231 1232 1233
            TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
            TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
            SSL_kECDHE|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
B
Bodo Möller 已提交
1234 1235
            0,
            128,
1236 1237 1238 1239 1240
            128,
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },

B
Bodo Möller 已提交
1241
	/* Cipher C019 */
1242 1243
	    {
            1,
B
Bodo Möller 已提交
1244 1245 1246 1247
            TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
            TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
            SSL_kECDHE|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1,
            SSL_NOT_EXP|SSL_HIGH,
1248
            0,
B
Bodo Möller 已提交
1249 1250
            256,
            256,
1251 1252 1253 1254 1255 1256
            SSL_ALL_CIPHERS,
            SSL_ALL_STRENGTHS,
            },
#endif	/* OPENSSL_NO_ECDH */

#if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
B
Bodo Möller 已提交
1257 1258
	/* New TLS Export CipherSuites from expired ID */
#if 0
1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284
	/* Cipher 60 */
	    {
	    1,
	    TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
	    TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
	    SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_TLSV1,
	    SSL_EXPORT|SSL_EXP56,
	    0,
	    56,
	    128,
	    SSL_ALL_CIPHERS,
	    SSL_ALL_STRENGTHS,
	    },
	/* Cipher 61 */
	    {
	    1,
	    TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
	    TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
	    SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_TLSV1,
	    SSL_EXPORT|SSL_EXP56,
	    0,
	    56,
	    128,
	    SSL_ALL_CIPHERS,
	    SSL_ALL_STRENGTHS,
	    },
B
Bodo Möller 已提交
1285
#endif
1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351
	/* Cipher 62 */
	    {
	    1,
	    TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
	    TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
	    SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA|SSL_TLSV1,
	    SSL_EXPORT|SSL_EXP56,
	    0,
	    56,
	    56,
	    SSL_ALL_CIPHERS,
	    SSL_ALL_STRENGTHS,
	    },
	/* Cipher 63 */
	    {
	    1,
	    TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
	    TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
	    SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA|SSL_TLSV1,
	    SSL_EXPORT|SSL_EXP56,
	    0,
	    56,
	    56,
	    SSL_ALL_CIPHERS,
	    SSL_ALL_STRENGTHS,
	    },
	/* Cipher 64 */
	    {
	    1,
	    TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
	    TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
	    SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
	    SSL_EXPORT|SSL_EXP56,
	    0,
	    56,
	    128,
	    SSL_ALL_CIPHERS,
	    SSL_ALL_STRENGTHS,
	    },
	/* Cipher 65 */
	    {
	    1,
	    TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
	    TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
	    SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1,
	    SSL_EXPORT|SSL_EXP56,
	    0,
	    56,
	    128,
	    SSL_ALL_CIPHERS,
	    SSL_ALL_STRENGTHS,
	    },
	/* 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,
	    SSL_NOT_EXP|SSL_MEDIUM,
	    0,
	    128,
	    128,
	    SSL_ALL_CIPHERS,
	    SSL_ALL_STRENGTHS
	    },
#endif
B
Bodo Möller 已提交
1352

1353 1354 1355
/* end of list */
	};

1356
SSL3_ENC_METHOD SSLv3_enc_data={
1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369
	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,
	};

1370
long ssl3_default_timeout(void)
1371 1372 1373 1374 1375 1376
	{
	/* 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);
	}

U
Ulf Möller 已提交
1377
int ssl3_num_ciphers(void)
1378 1379 1380 1381
	{
	return(SSL3_NUM_CIPHERS);
	}

U
Ulf Möller 已提交
1382
SSL_CIPHER *ssl3_get_cipher(unsigned int u)
1383 1384 1385 1386 1387 1388 1389
	{
	if (u < SSL3_NUM_CIPHERS)
		return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
	else
		return(NULL);
	}

B
Ben Laurie 已提交
1390
int ssl3_pending(const SSL *s)
1391
	{
B
Bodo Möller 已提交
1392 1393 1394
	if (s->rstate == SSL_ST_READ_BODY)
		return 0;
	
B
Bodo Möller 已提交
1395
	return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
1396 1397
	}

U
Ulf Möller 已提交
1398
int ssl3_new(SSL *s)
1399
	{
1400
	SSL3_STATE *s3;
1401

1402
	if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
1403
	memset(s3,0,sizeof *s3);
1404 1405
	EVP_MD_CTX_init(&s3->finish_dgst1);
	EVP_MD_CTX_init(&s3->finish_dgst2);
1406 1407
	memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
	memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
1408 1409 1410

	s->s3=s3;

1411
	s->method->ssl_clear(s);
1412 1413 1414 1415 1416
	return(1);
err:
	return(0);
	}

U
Ulf Möller 已提交
1417
void ssl3_free(SSL *s)
1418
	{
B
Ben Laurie 已提交
1419 1420 1421
	if(s == NULL)
	    return;

1422 1423
	ssl3_cleanup_key_block(s);
	if (s->s3->rbuf.buf != NULL)
1424
		OPENSSL_free(s->s3->rbuf.buf);
1425
	if (s->s3->wbuf.buf != NULL)
1426
		OPENSSL_free(s->s3->wbuf.buf);
1427
	if (s->s3->rrec.comp != NULL)
1428
		OPENSSL_free(s->s3->rrec.comp);
1429
#ifndef OPENSSL_NO_DH
1430 1431 1432
	if (s->s3->tmp.dh != NULL)
		DH_free(s->s3->tmp.dh);
#endif
B
Bodo Möller 已提交
1433 1434 1435 1436 1437
#ifndef OPENSSL_NO_ECDH
	if (s->s3->tmp.ecdh != NULL)
		EC_KEY_free(s->s3->tmp.ecdh);
#endif

1438
	if (s->s3->tmp.ca_names != NULL)
B
Ben Laurie 已提交
1439
		sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
1440 1441
	EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
	EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
1442

1443
	OPENSSL_cleanse(s->s3,sizeof *s->s3);
1444
	OPENSSL_free(s->s3);
1445 1446 1447
	s->s3=NULL;
	}

U
Ulf Möller 已提交
1448
void ssl3_clear(SSL *s)
1449 1450
	{
	unsigned char *rp,*wp;
1451
	size_t rlen, wlen;
1452 1453 1454

	ssl3_cleanup_key_block(s);
	if (s->s3->tmp.ca_names != NULL)
B
Ben Laurie 已提交
1455
		sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
1456

1457 1458
	if (s->s3->rrec.comp != NULL)
		{
1459
		OPENSSL_free(s->s3->rrec.comp);
1460 1461
		s->s3->rrec.comp=NULL;
		}
1462
#ifndef OPENSSL_NO_DH
B
Bodo Möller 已提交
1463 1464 1465
	if (s->s3->tmp.dh != NULL)
		DH_free(s->s3->tmp.dh);
#endif
B
Bodo Möller 已提交
1466 1467 1468 1469
#ifndef OPENSSL_NO_ECDH
	if (s->s3->tmp.ecdh != NULL)
		EC_KEY_free(s->s3->tmp.ecdh);
#endif
1470

1471 1472 1473 1474
	rp = s->s3->rbuf.buf;
	wp = s->s3->wbuf.buf;
	rlen = s->s3->rbuf.len;
 	wlen = s->s3->wbuf.len;
1475

B
Ben Laurie 已提交
1476 1477 1478
	EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
	EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);

1479
	memset(s->s3,0,sizeof *s->s3);
1480 1481 1482 1483
	s->s3->rbuf.buf = rp;
	s->s3->wbuf.buf = wp;
	s->s3->rbuf.len = rlen;
 	s->s3->wbuf.len = wlen;
1484

1485
	ssl_free_wbio_buffer(s);
1486

1487
	s->packet_length=0;
1488 1489 1490 1491 1492
	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;
1493 1494
	}

1495
long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
1496
	{
1497 1498
	int ret=0;

1499
#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
1500
	if (
1501
#ifndef OPENSSL_NO_RSA
1502 1503 1504
	    cmd == SSL_CTRL_SET_TMP_RSA ||
	    cmd == SSL_CTRL_SET_TMP_RSA_CB ||
#endif
1505
#ifndef OPENSSL_NO_DSA
1506 1507 1508 1509 1510
	    cmd == SSL_CTRL_SET_TMP_DH ||
	    cmd == SSL_CTRL_SET_TMP_DH_CB ||
#endif
		0)
		{
1511
		if (!ssl_cert_inst(&s->cert))
1512 1513 1514 1515 1516 1517 1518
		    	{
			SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
			return(0);
			}
		}
#endif

1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535
	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;
1536
	case SSL_CTRL_GET_FLAGS:
1537
		ret=(int)(s->s3->flags);
1538
		break;
1539
#ifndef OPENSSL_NO_RSA
1540 1541 1542 1543 1544 1545 1546 1547 1548
	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;
1549 1550
			if (rsa == NULL)
				{
1551 1552
				SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
				return(ret);
1553 1554 1555
				}
			if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
				{
1556 1557
				SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
				return(ret);
1558
				}
1559 1560 1561 1562 1563 1564 1565
			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:
1566
		{
1567 1568
		SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
		return(ret);
1569
		}
1570 1571
		break;
#endif
1572
#ifndef OPENSSL_NO_DH
1573 1574 1575
	case SSL_CTRL_SET_TMP_DH:
		{
			DH *dh = (DH *)parg;
1576 1577
			if (dh == NULL)
				{
1578 1579
				SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
				return(ret);
1580 1581 1582
				}
			if ((dh = DHparams_dup(dh)) == NULL)
				{
1583 1584
				SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
				return(ret);
1585 1586 1587 1588 1589 1590 1591 1592 1593 1594
				}
			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);
					}
				}
1595 1596 1597 1598 1599 1600 1601
			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:
1602
		{
1603 1604 1605 1606 1607
		SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
		return(ret);
		}
		break;
#endif
B
Bodo Möller 已提交
1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645
#ifndef OPENSSL_NO_ECDH
	case SSL_CTRL_SET_TMP_ECDH:
		{
		EC_KEY *ecdh = NULL;
 			
		if (parg == NULL)
			{
			SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
			return(ret);
			}
		if (!EC_KEY_up_ref((EC_KEY *)parg))
			{
			SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
			return(ret);
			}
		ecdh = (EC_KEY *)parg;
		if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
			{
			if (!EC_KEY_generate_key(ecdh))
				{
				EC_KEY_free(ecdh);
				SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
				return(ret);
				}
			}
		if (s->cert->ecdh_tmp != NULL)
			EC_KEY_free(s->cert->ecdh_tmp);
		s->cert->ecdh_tmp = ecdh;
		ret = 1;
		}
		break;
	case SSL_CTRL_SET_TMP_ECDH_CB:
		{
		SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
		return(ret);
		}
		break;
#endif /* !OPENSSL_NO_ECDH */
1646 1647
#ifndef OPENSSL_NO_TLSEXT
	case SSL_CTRL_GET_TLSEXT_HOSTNAME:	
1648
		if (larg != TLSEXT_NAMETYPE_host_name)
1649 1650 1651 1652
			{
			SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
			return(0);
			}
1653 1654 1655 1656 1657
		/* XXX cf. SSL_get_servername() (ssl_lib.c) */
		if (s->session && s->session->tlsext_hostname)
			*((char **) parg) = s->session->tlsext_hostname;
		else
			*((char **) parg) = s->tlsext_hostname;
1658
		ret = 1;
1659
		break;
1660
	case SSL_CTRL_SET_TLSEXT_HOSTNAME:
1661 1662
 		if (larg == TLSEXT_NAMETYPE_host_name)
			{
1663 1664 1665 1666 1667 1668 1669
			if (s->tlsext_hostname != NULL) 
				OPENSSL_free(s->tlsext_hostname);
			s->tlsext_hostname = NULL;

			ret = 1;
			if (parg == NULL) 
				break;
1670 1671
			if (strlen((char *)parg) > 255)
				{
1672 1673
				SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
				return 0;
1674 1675 1676
				}
			if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
				{
1677 1678
				SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
				return 0;
1679
				}
1680
			}
1681 1682
		else
			{
1683 1684
			SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
			return 0;
1685 1686
			}
		s->options |= SSL_OP_NO_SSLv2; /* can't use extension w/ SSL 2.0 format */
1687 1688 1689 1690 1691
 		break;
	case SSL_CTRL_SET_TLSEXT_SERVERNAME_DONE:
		s->servername_done = larg;
		break;
#endif /* !OPENSSL_NO_TLSEXT */
1692 1693 1694 1695 1696
	default:
		break;
		}
	return(ret);
	}
1697

1698
long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
1699 1700 1701
	{
	int ret=0;

1702
#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
1703
	if (
1704
#ifndef OPENSSL_NO_RSA
1705 1706
	    cmd == SSL_CTRL_SET_TMP_RSA_CB ||
#endif
1707
#ifndef OPENSSL_NO_DSA
1708 1709 1710 1711 1712
	    cmd == SSL_CTRL_SET_TMP_DH_CB ||
#endif
		0)
		{
		if (!ssl_cert_inst(&s->cert))
1713
			{
1714
			SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
1715 1716 1717 1718 1719 1720 1721
			return(0);
			}
		}
#endif

	switch (cmd)
		{
1722
#ifndef OPENSSL_NO_RSA
1723 1724 1725 1726 1727 1728
	case SSL_CTRL_SET_TMP_RSA_CB:
		{
		s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
		}
		break;
#endif
1729
#ifndef OPENSSL_NO_DH
1730 1731 1732
	case SSL_CTRL_SET_TMP_DH_CB:
		{
		s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
1733
		}
1734
		break;
B
Bodo Möller 已提交
1735 1736 1737 1738 1739 1740 1741
#endif
#ifndef OPENSSL_NO_ECDH
	case SSL_CTRL_SET_TMP_ECDH_CB:
		{
		s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
		}
		break;
1742
#endif
1743 1744 1745 1746
	default:
		break;
		}
	return(ret);
1747 1748
	}

1749
long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
1750 1751 1752
	{
	CERT *cert;

1753
	cert=ctx->cert;
1754 1755 1756

	switch (cmd)
		{
1757
#ifndef OPENSSL_NO_RSA
1758 1759 1760 1761 1762 1763 1764 1765
	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);
1766
		/* break; */
1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793
	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);
			}
		}
1794
		/* break; */
1795
	case SSL_CTRL_SET_TMP_RSA_CB:
1796
		{
1797 1798
		SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
		return(0);
1799
		}
1800 1801
		break;
#endif
1802
#ifndef OPENSSL_NO_DH
1803 1804 1805 1806 1807
	case SSL_CTRL_SET_TMP_DH:
		{
		DH *new=NULL,*dh;

		dh=(DH *)parg;
1808
		if ((new=DHparams_dup(dh)) == NULL)
1809 1810
			{
			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
1811
			return 0;
1812
			}
1813
		if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
1814
			{
1815 1816 1817 1818 1819 1820
			if (!DH_generate_key(new))
				{
				SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
				DH_free(new);
				return 0;
				}
1821
			}
1822 1823 1824 1825
		if (cert->dh_tmp != NULL)
			DH_free(cert->dh_tmp);
		cert->dh_tmp=new;
		return 1;
1826
		}
1827
		/*break; */
1828
	case SSL_CTRL_SET_TMP_DH_CB:
1829
		{
1830 1831
		SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
		return(0);
1832
		}
1833 1834
		break;
#endif
B
Bodo Möller 已提交
1835 1836 1837 1838 1839 1840 1841 1842 1843 1844
#ifndef OPENSSL_NO_ECDH
	case SSL_CTRL_SET_TMP_ECDH:
		{
		EC_KEY *ecdh = NULL;
 			
		if (parg == NULL)
			{
			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
			return 0;
			}
1845 1846
		ecdh = EC_KEY_dup((EC_KEY *)parg);
		if (ecdh == NULL)
B
Bodo Möller 已提交
1847
			{
1848
			SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB);
B
Bodo Möller 已提交
1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875
			return 0;
			}
		if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
			{
			if (!EC_KEY_generate_key(ecdh))
				{
				EC_KEY_free(ecdh);
				SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
				return 0;
				}
			}

		if (cert->ecdh_tmp != NULL)
			{
			EC_KEY_free(cert->ecdh_tmp);
			}
		cert->ecdh_tmp = ecdh;
		return 1;
		}
		/* break; */
	case SSL_CTRL_SET_TMP_ECDH_CB:
		{
		SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
		return(0);
		}
		break;
#endif /* !OPENSSL_NO_ECDH */
1876 1877 1878 1879 1880
#ifndef OPENSSL_NO_TLSEXT
	case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
		ctx->tlsext_servername_arg=parg;
		break;
#endif /* !OPENSSL_NO_TLSEXT */
1881
	/* A Thawte special :-) */
1882 1883 1884
	case SSL_CTRL_EXTRA_CHAIN_CERT:
		if (ctx->extra_certs == NULL)
			{
B
Ben Laurie 已提交
1885
			if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
1886 1887
				return(0);
			}
B
Ben Laurie 已提交
1888
		sk_X509_push(ctx->extra_certs,(X509 *)parg);
1889 1890
		break;

1891 1892 1893 1894 1895 1896
	default:
		return(0);
		}
	return(1);
	}

1897
long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
1898 1899 1900 1901 1902 1903 1904
	{
	CERT *cert;

	cert=ctx->cert;

	switch (cmd)
		{
1905
#ifndef OPENSSL_NO_RSA
1906 1907 1908 1909 1910 1911
	case SSL_CTRL_SET_TMP_RSA_CB:
		{
		cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
		}
		break;
#endif
1912
#ifndef OPENSSL_NO_DH
1913 1914 1915 1916 1917
	case SSL_CTRL_SET_TMP_DH_CB:
		{
		cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
		}
		break;
B
Bodo Möller 已提交
1918 1919 1920 1921 1922 1923 1924
#endif
#ifndef OPENSSL_NO_ECDH
	case SSL_CTRL_SET_TMP_ECDH_CB:
		{
		cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
		}
		break;
1925 1926 1927 1928 1929
#endif
#ifndef OPENSSL_NO_TLSEXT
	case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
		ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
		break;
1930 1931 1932 1933 1934 1935 1936
#endif
	default:
		return(0);
		}
	return(1);
	}

1937 1938
/* This function needs to check if the ciphers required are actually
 * available */
U
Ulf Möller 已提交
1939
SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
1940
	{
1941
	SSL_CIPHER c,*cp;
1942 1943 1944 1945
	unsigned long id;

	id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
	c.id=id;
1946 1947 1948 1949 1950 1951
	cp = (SSL_CIPHER *)OBJ_bsearch((char *)&c,
		(char *)ssl3_ciphers,
		SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER),
		FP_ICC ssl_cipher_id_cmp);
	if (cp == NULL || cp->valid == 0)
		return NULL;
1952
	else
1953
		return cp;
1954 1955
	}

U
Ulf Möller 已提交
1956
int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969
	{
	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);
	}

1970 1971
SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
	     STACK_OF(SSL_CIPHER) *srvr)
1972 1973
	{
	SSL_CIPHER *c,*ret=NULL;
1974
	STACK_OF(SSL_CIPHER) *prio, *allow;
1975 1976 1977 1978
	int i,j,ok;
	CERT *cert;
	unsigned long alg,mask,emask;

1979 1980
	/* Let's see which ciphers we can support */
	cert=s->cert;
1981

1982 1983 1984 1985 1986 1987 1988 1989 1990
#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
1991

B
Ben Laurie 已提交
1992
#ifdef CIPHER_DEBUG
1993 1994
        printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), srvr);
        for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
B
Ben Laurie 已提交
1995
	    {
1996 1997 1998 1999 2000 2001 2002
	    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);
B
Ben Laurie 已提交
2003 2004 2005 2006
	    printf("%p:%s\n",c,c->name);
	    }
#endif

2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
	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++)
2019
		{
2020
		c=sk_SSL_CIPHER_value(prio,i);
2021

2022
		ssl_set_cert_masks(cert,c);
2023 2024 2025
		mask=cert->mask;
		emask=cert->export_mask;
			
2026 2027 2028 2029
#ifdef KSSL_DEBUG
		printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);
#endif    /* KSSL_DEBUG */

2030
		alg=c->algorithms&(SSL_MKEY_MASK|SSL_AUTH_MASK);
2031 2032 2033 2034 2035 2036 2037
#ifndef OPENSSL_NO_KRB5
                if (alg & SSL_KRB5) 
                        {
                        if ( !kssl_keytab_is_available(s->kssl_ctx) )
                            continue;
                        }
#endif /* OPENSSL_NO_KRB5 */
2038
		if (SSL_C_IS_EXPORT(c))
2039 2040 2041
			{
			ok=((alg & emask) == alg)?1:0;
#ifdef CIPHER_DEBUG
B
Ben Laurie 已提交
2042 2043
			printf("%d:[%08lX:%08lX]%p:%s (export)\n",ok,alg,emask,
			       c,c->name);
2044 2045 2046 2047 2048 2049
#endif
			}
		else
			{
			ok=((alg & mask) == alg)?1:0;
#ifdef CIPHER_DEBUG
B
Ben Laurie 已提交
2050 2051
			printf("%d:[%08lX:%08lX]%p:%s\n",ok,alg,mask,c,
			       c->name);
2052 2053 2054 2055
#endif
			}

		if (!ok) continue;
2056
		j=sk_SSL_CIPHER_find(allow,c);
2057 2058
		if (j >= 0)
			{
2059
			ret=sk_SSL_CIPHER_value(allow,j);
2060 2061 2062 2063 2064 2065
			break;
			}
		}
	return(ret);
	}

U
Ulf Möller 已提交
2066
int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
2067 2068 2069 2070 2071 2072
	{
	int ret=0;
	unsigned long alg;

	alg=s->s3->tmp.new_cipher->algorithms;

2073
#ifndef OPENSSL_NO_DH
2074 2075
	if (alg & (SSL_kDHr|SSL_kEDH))
		{
2076
#  ifndef OPENSSL_NO_RSA
2077
		p[ret++]=SSL3_CT_RSA_FIXED_DH;
2078
#  endif
2079
#  ifndef OPENSSL_NO_DSA
2080
		p[ret++]=SSL3_CT_DSS_FIXED_DH;
2081
#  endif
2082
		}
2083 2084
	if ((s->version == SSL3_VERSION) &&
		(alg & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
2085
		{
2086
#  ifndef OPENSSL_NO_RSA
2087
		p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
2088
#  endif
2089
#  ifndef OPENSSL_NO_DSA
2090
		p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
2091
#  endif
2092
		}
2093 2094
#endif /* !OPENSSL_NO_DH */
#ifndef OPENSSL_NO_RSA
2095 2096
	p[ret++]=SSL3_CT_RSA_SIGN;
#endif
2097
#ifndef OPENSSL_NO_DSA
2098
	p[ret++]=SSL3_CT_DSS_SIGN;
2099
#endif
B
Bodo Möller 已提交
2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119
#ifndef OPENSSL_NO_ECDH
	/* We should ask for fixed ECDH certificates only
	 * for SSL_kECDH (and not SSL_kECDHE)
	 */
	if ((alg & SSL_kECDH) && (s->version >= TLS1_VERSION))
		{
		p[ret++]=TLS_CT_RSA_FIXED_ECDH;
		p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
		}
#endif

#ifndef OPENSSL_NO_ECDSA
	/* ECDSA certs can be used with RSA cipher suites as well 
	 * so we don't need to check for SSL_kECDH or SSL_kECDHE
	 */
	if (s->version >= TLS1_VERSION)
		{
		p[ret++]=TLS_CT_ECDSA_SIGN;
		}
#endif	
2120 2121 2122
	return(ret);
	}

U
Ulf Möller 已提交
2123
int ssl3_shutdown(SSL *s)
2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137
	{

	/* 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
2138
		ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
2139 2140 2141 2142 2143 2144 2145 2146
#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
B
Ben Laurie 已提交
2147
		s->method->ssl_dispatch_alert(s);
2148 2149 2150 2151 2152
#endif
		}
	else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
		{
		/* If we are waiting for a close from our peer, we are closed */
B
Ben Laurie 已提交
2153
		s->method->ssl_read_bytes(s,0,NULL,0,0);
2154 2155 2156 2157 2158 2159 2160 2161 2162
		}

	if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
		!s->s3->alert_dispatch)
		return(1);
	else
		return(0);
	}

B
Ben Laurie 已提交
2163
int ssl3_write(SSL *s, const void *buf, int len)
2164 2165 2166 2167 2168 2169 2170 2171 2172 2173
	{
	int ret,n;

#if 0
	if (s->shutdown & SSL_SEND_SHUTDOWN)
		{
		s->rwstate=SSL_NOTHING;
		return(0);
		}
#endif
2174 2175
	clear_sys_error();
	if (s->s3->renegotiate) ssl3_renegotiate_check(s);
2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187

	/* 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,
B
Ben Laurie 已提交
2188
					     buf,len);
2189 2190 2191 2192 2193 2194 2195 2196 2197 2198
			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;

2199 2200 2201 2202
		/* We have flushed the buffer, so remove it */
		ssl_free_wbio_buffer(s);
		s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;

2203 2204 2205 2206 2207
		ret=s->s3->delay_buf_pop_ret;
		s->s3->delay_buf_pop_ret=0;
		}
	else
		{
B
Ben Laurie 已提交
2208 2209
		ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
			buf,len);
2210 2211
		if (ret <= 0) return(ret);
		}
2212

2213 2214 2215
	return(ret);
	}

B
Bodo Möller 已提交
2216
static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
2217
	{
2218 2219 2220 2221 2222
	int ret;
	
	clear_sys_error();
	if (s->s3->renegotiate) ssl3_renegotiate_check(s);
	s->s3->in_read_app_data=1;
B
Ben Laurie 已提交
2223
	ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
2224
	if ((ret == -1) && (s->s3->in_read_app_data == 2))
2225
		{
2226 2227 2228
		/* 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
2229
		 * and thinks that application data makes sense here; so disable
2230
		 * handshake processing and try to read application data again. */
2231
		s->in_handshake++;
B
Ben Laurie 已提交
2232
		ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
2233 2234 2235 2236 2237 2238
		s->in_handshake--;
		}
	else
		s->s3->in_read_app_data=0;

	return(ret);
2239 2240
	}

B
Bodo Möller 已提交
2241
int ssl3_read(SSL *s, void *buf, int len)
2242
	{
B
Bodo Möller 已提交
2243 2244
	return ssl3_read_internal(s, buf, len, 0);
	}
2245

2246
int ssl3_peek(SSL *s, void *buf, int len)
B
Bodo Möller 已提交
2247
	{
B
typo  
Bodo Möller 已提交
2248
	return ssl3_read_internal(s, buf, len, 1);
2249 2250
	}

U
Ulf Möller 已提交
2251
int ssl3_renegotiate(SSL *s)
2252 2253 2254 2255 2256 2257 2258
	{
	if (s->handshake_func == NULL)
		return(1);

	if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
		return(0);

2259
	s->s3->renegotiate=1;
2260 2261 2262
	return(1);
	}

U
Ulf Möller 已提交
2263
int ssl3_renegotiate_check(SSL *s)
2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274
	{
	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
U
Ulf Möller 已提交
2275
need to go to SSL_ST_ACCEPT.
2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287
*/
			/* SSL_ST_ACCEPT */
			s->state=SSL_ST_RENEGOTIATE;
			s->s3->renegotiate=0;
			s->s3->num_renegotiations++;
			s->s3->total_renegotiations++;
			ret=1;
			}
		}
	return(ret);
	}