1/* ssl/s3_lib.c */ 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3 * All rights reserved. 4 * 5 * This package is an SSL implementation written 6 * by Eric Young (eay@cryptsoft.com). 7 * The implementation was written so as to conform with Netscapes SSL. 8 * 9 * This library is free for commercial and non-commercial use as long as 10 * the following conditions are aheared to. The following conditions 11 * apply to all code found in this distribution, be it the RC4, RSA, 12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13 * included with this distribution is covered by the same copyright terms 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15 * 16 * Copyright remains Eric Young's, and as such any Copyright notices in 17 * the code are not to be removed. 18 * If this package is used in a product, Eric Young should be given attribution 19 * as the author of the parts of the library used. 20 * This can be in the form of a textual message at program startup or 21 * in documentation (online or textual) provided with the package. 22 * 23 * Redistribution and use in source and binary forms, with or without 24 * modification, are permitted provided that the following conditions 25 * are met: 26 * 1. Redistributions of source code must retain the copyright 27 * notice, this list of conditions and the following disclaimer. 28 * 2. Redistributions in binary form must reproduce the above copyright 29 * notice, this list of conditions and the following disclaimer in the 30 * documentation and/or other materials provided with the distribution. 31 * 3. All advertising materials mentioning features or use of this software 32 * must display the following acknowledgement: 33 * "This product includes cryptographic software written by 34 * Eric Young (eay@cryptsoft.com)" 35 * The word 'cryptographic' can be left out if the rouines from the library 36 * being used are not cryptographic related :-). 37 * 4. If you include any Windows specific code (or a derivative thereof) from 38 * the apps directory (application code) you must include an acknowledgement: 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40 * 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51 * SUCH DAMAGE. 52 * 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 55 * copied and put under another distribution licence 56 * [including the GNU Public Licence.] 57 */ 58/* ==================================================================== 59 * Copyright (c) 1998-2006 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 */ 111/* ==================================================================== 112 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 113 * 114 * Portions of the attached software ("Contribution") are developed by 115 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. 116 * 117 * The Contribution is licensed pursuant to the OpenSSL open source 118 * license provided above. 119 * 120 * ECC cipher suite support in OpenSSL originally written by 121 * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories. 122 * 123 */ 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> 130#ifndef OPENSSL_NO_DH 131#include <openssl/dh.h> 132#endif 133#include <openssl/pq_compat.h> 134 135const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; 136 137#define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER)) 138 139/* list of available SSLv3 ciphers (sorted by id) */ 140OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ 141/* The RSA ciphers */ 142/* Cipher 01 */ 143 { 144 1, 145 SSL3_TXT_RSA_NULL_MD5, 146 SSL3_CK_RSA_NULL_MD5, 147 SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_MD5|SSL_SSLV3, 148 SSL_NOT_EXP|SSL_STRONG_NONE, 149 0, 150 0, 151 0, 152 SSL_ALL_CIPHERS, 153 SSL_ALL_STRENGTHS, 154 }, 155/* Cipher 02 */ 156 { 157 1, 158 SSL3_TXT_RSA_NULL_SHA, 159 SSL3_CK_RSA_NULL_SHA, 160 SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_SHA1|SSL_SSLV3, 161 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, 162 0, 163 0, 164 0, 165 SSL_ALL_CIPHERS, 166 SSL_ALL_STRENGTHS, 167 }, 168/* Cipher 03 */ 169 { 170 1, 171 SSL3_TXT_RSA_RC4_40_MD5, 172 SSL3_CK_RSA_RC4_40_MD5, 173 SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_MD5 |SSL_SSLV3, 174 SSL_EXPORT|SSL_EXP40, 175 0, 176 40, 177 128, 178 SSL_ALL_CIPHERS, 179 SSL_ALL_STRENGTHS, 180 }, 181/* Cipher 04 */ 182 { 183 1, 184 SSL3_TXT_RSA_RC4_128_MD5, 185 SSL3_CK_RSA_RC4_128_MD5, 186 SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_MD5|SSL_SSLV3, 187 SSL_NOT_EXP|SSL_MEDIUM, 188 0, 189 128, 190 128, 191 SSL_ALL_CIPHERS, 192 SSL_ALL_STRENGTHS, 193 }, 194/* Cipher 05 */ 195 { 196 1, 197 SSL3_TXT_RSA_RC4_128_SHA, 198 SSL3_CK_RSA_RC4_128_SHA, 199 SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_SHA1|SSL_SSLV3, 200 SSL_NOT_EXP|SSL_MEDIUM, 201 0, 202 128, 203 128, 204 SSL_ALL_CIPHERS, 205 SSL_ALL_STRENGTHS, 206 }, 207/* Cipher 06 */ 208 { 209 1, 210 SSL3_TXT_RSA_RC2_40_MD5, 211 SSL3_CK_RSA_RC2_40_MD5, 212 SSL_kRSA|SSL_aRSA|SSL_RC2 |SSL_MD5 |SSL_SSLV3, 213 SSL_EXPORT|SSL_EXP40, 214 0, 215 40, 216 128, 217 SSL_ALL_CIPHERS, 218 SSL_ALL_STRENGTHS, 219 }, 220/* Cipher 07 */ 221/* Cipher 08 */ 222 { 223 1, 224 SSL3_TXT_RSA_DES_40_CBC_SHA, 225 SSL3_CK_RSA_DES_40_CBC_SHA, 226 SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3, 227 SSL_EXPORT|SSL_EXP40, 228 0, 229 40, 230 56, 231 SSL_ALL_CIPHERS, 232 SSL_ALL_STRENGTHS, 233 }, 234/* Cipher 09 */ 235 { 236 1, 237 SSL3_TXT_RSA_DES_64_CBC_SHA, 238 SSL3_CK_RSA_DES_64_CBC_SHA, 239 SSL_kRSA|SSL_aRSA|SSL_DES |SSL_SHA1|SSL_SSLV3, 240 SSL_NOT_EXP|SSL_LOW, 241 0, 242 56, 243 56, 244 SSL_ALL_CIPHERS, 245 SSL_ALL_STRENGTHS, 246 }, 247/* Cipher 0A */ 248 { 249 1, 250 SSL3_TXT_RSA_DES_192_CBC3_SHA, 251 SSL3_CK_RSA_DES_192_CBC3_SHA, 252 SSL_kRSA|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3, 253 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 254 0, 255 168, 256 168, 257 SSL_ALL_CIPHERS, 258 SSL_ALL_STRENGTHS, 259 }, 260/* The DH ciphers */ 261/* Cipher 0B */ 262 { 263 0, 264 SSL3_TXT_DH_DSS_DES_40_CBC_SHA, 265 SSL3_CK_DH_DSS_DES_40_CBC_SHA, 266 SSL_kDHd |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3, 267 SSL_EXPORT|SSL_EXP40, 268 0, 269 40, 270 56, 271 SSL_ALL_CIPHERS, 272 SSL_ALL_STRENGTHS, 273 }, 274/* Cipher 0C */ 275 { 276 0, 277 SSL3_TXT_DH_DSS_DES_64_CBC_SHA, 278 SSL3_CK_DH_DSS_DES_64_CBC_SHA, 279 SSL_kDHd |SSL_aDH|SSL_DES |SSL_SHA1|SSL_SSLV3, 280 SSL_NOT_EXP|SSL_LOW, 281 0, 282 56, 283 56, 284 SSL_ALL_CIPHERS, 285 SSL_ALL_STRENGTHS, 286 }, 287/* Cipher 0D */ 288 { 289 0, 290 SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, 291 SSL3_CK_DH_DSS_DES_192_CBC3_SHA, 292 SSL_kDHd |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3, 293 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 294 0, 295 168, 296 168, 297 SSL_ALL_CIPHERS, 298 SSL_ALL_STRENGTHS, 299 }, 300/* Cipher 0E */ 301 { 302 0, 303 SSL3_TXT_DH_RSA_DES_40_CBC_SHA, 304 SSL3_CK_DH_RSA_DES_40_CBC_SHA, 305 SSL_kDHr |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3, 306 SSL_EXPORT|SSL_EXP40, 307 0, 308 40, 309 56, 310 SSL_ALL_CIPHERS, 311 SSL_ALL_STRENGTHS, 312 }, 313/* Cipher 0F */ 314 { 315 0, 316 SSL3_TXT_DH_RSA_DES_64_CBC_SHA, 317 SSL3_CK_DH_RSA_DES_64_CBC_SHA, 318 SSL_kDHr |SSL_aDH|SSL_DES |SSL_SHA1|SSL_SSLV3, 319 SSL_NOT_EXP|SSL_LOW, 320 0, 321 56, 322 56, 323 SSL_ALL_CIPHERS, 324 SSL_ALL_STRENGTHS, 325 }, 326/* Cipher 10 */ 327 { 328 0, 329 SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, 330 SSL3_CK_DH_RSA_DES_192_CBC3_SHA, 331 SSL_kDHr |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3, 332 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 333 0, 334 168, 335 168, 336 SSL_ALL_CIPHERS, 337 SSL_ALL_STRENGTHS, 338 }, 339 340/* The Ephemeral DH ciphers */ 341/* Cipher 11 */ 342 { 343 1, 344 SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, 345 SSL3_CK_EDH_DSS_DES_40_CBC_SHA, 346 SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA1|SSL_SSLV3, 347 SSL_EXPORT|SSL_EXP40, 348 0, 349 40, 350 56, 351 SSL_ALL_CIPHERS, 352 SSL_ALL_STRENGTHS, 353 }, 354/* Cipher 12 */ 355 { 356 1, 357 SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, 358 SSL3_CK_EDH_DSS_DES_64_CBC_SHA, 359 SSL_kEDH|SSL_aDSS|SSL_DES |SSL_SHA1|SSL_SSLV3, 360 SSL_NOT_EXP|SSL_LOW, 361 0, 362 56, 363 56, 364 SSL_ALL_CIPHERS, 365 SSL_ALL_STRENGTHS, 366 }, 367/* Cipher 13 */ 368 { 369 1, 370 SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, 371 SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, 372 SSL_kEDH|SSL_aDSS|SSL_3DES |SSL_SHA1|SSL_SSLV3, 373 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 374 0, 375 168, 376 168, 377 SSL_ALL_CIPHERS, 378 SSL_ALL_STRENGTHS, 379 }, 380/* Cipher 14 */ 381 { 382 1, 383 SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, 384 SSL3_CK_EDH_RSA_DES_40_CBC_SHA, 385 SSL_kEDH|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3, 386 SSL_EXPORT|SSL_EXP40, 387 0, 388 40, 389 56, 390 SSL_ALL_CIPHERS, 391 SSL_ALL_STRENGTHS, 392 }, 393/* Cipher 15 */ 394 { 395 1, 396 SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, 397 SSL3_CK_EDH_RSA_DES_64_CBC_SHA, 398 SSL_kEDH|SSL_aRSA|SSL_DES |SSL_SHA1|SSL_SSLV3, 399 SSL_NOT_EXP|SSL_LOW, 400 0, 401 56, 402 56, 403 SSL_ALL_CIPHERS, 404 SSL_ALL_STRENGTHS, 405 }, 406/* Cipher 16 */ 407 { 408 1, 409 SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, 410 SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, 411 SSL_kEDH|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3, 412 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 413 0, 414 168, 415 168, 416 SSL_ALL_CIPHERS, 417 SSL_ALL_STRENGTHS, 418 }, 419/* Cipher 17 */ 420 { 421 1, 422 SSL3_TXT_ADH_RC4_40_MD5, 423 SSL3_CK_ADH_RC4_40_MD5, 424 SSL_kEDH |SSL_aNULL|SSL_RC4 |SSL_MD5 |SSL_SSLV3, 425 SSL_EXPORT|SSL_EXP40, 426 0, 427 40, 428 128, 429 SSL_ALL_CIPHERS, 430 SSL_ALL_STRENGTHS, 431 }, 432/* Cipher 18 */ 433 { 434 1, 435 SSL3_TXT_ADH_RC4_128_MD5, 436 SSL3_CK_ADH_RC4_128_MD5, 437 SSL_kEDH |SSL_aNULL|SSL_RC4 |SSL_MD5 |SSL_SSLV3, 438 SSL_NOT_EXP|SSL_MEDIUM, 439 0, 440 128, 441 128, 442 SSL_ALL_CIPHERS, 443 SSL_ALL_STRENGTHS, 444 }, 445/* Cipher 19 */ 446 { 447 1, 448 SSL3_TXT_ADH_DES_40_CBC_SHA, 449 SSL3_CK_ADH_DES_40_CBC_SHA, 450 SSL_kEDH |SSL_aNULL|SSL_DES|SSL_SHA1|SSL_SSLV3, 451 SSL_EXPORT|SSL_EXP40, 452 0, 453 40, 454 128, 455 SSL_ALL_CIPHERS, 456 SSL_ALL_STRENGTHS, 457 }, 458/* Cipher 1A */ 459 { 460 1, 461 SSL3_TXT_ADH_DES_64_CBC_SHA, 462 SSL3_CK_ADH_DES_64_CBC_SHA, 463 SSL_kEDH |SSL_aNULL|SSL_DES |SSL_SHA1|SSL_SSLV3, 464 SSL_NOT_EXP|SSL_LOW, 465 0, 466 56, 467 56, 468 SSL_ALL_CIPHERS, 469 SSL_ALL_STRENGTHS, 470 }, 471/* Cipher 1B */ 472 { 473 1, 474 SSL3_TXT_ADH_DES_192_CBC_SHA, 475 SSL3_CK_ADH_DES_192_CBC_SHA, 476 SSL_kEDH |SSL_aNULL|SSL_3DES |SSL_SHA1|SSL_SSLV3, 477 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 478 0, 479 168, 480 168, 481 SSL_ALL_CIPHERS, 482 SSL_ALL_STRENGTHS, 483 }, 484 485/* Fortezza */ 486/* Cipher 1C */ 487 { 488 0, 489 SSL3_TXT_FZA_DMS_NULL_SHA, 490 SSL3_CK_FZA_DMS_NULL_SHA, 491 SSL_kFZA|SSL_aFZA |SSL_eNULL |SSL_SHA1|SSL_SSLV3, 492 SSL_NOT_EXP|SSL_STRONG_NONE, 493 0, 494 0, 495 0, 496 SSL_ALL_CIPHERS, 497 SSL_ALL_STRENGTHS, 498 }, 499 500/* Cipher 1D */ 501 { 502 0, 503 SSL3_TXT_FZA_DMS_FZA_SHA, 504 SSL3_CK_FZA_DMS_FZA_SHA, 505 SSL_kFZA|SSL_aFZA |SSL_eFZA |SSL_SHA1|SSL_SSLV3, 506 SSL_NOT_EXP|SSL_STRONG_NONE, 507 0, 508 0, 509 0, 510 SSL_ALL_CIPHERS, 511 SSL_ALL_STRENGTHS, 512 }, 513 514#if 0 515/* Cipher 1E */ 516 { 517 0, 518 SSL3_TXT_FZA_DMS_RC4_SHA, 519 SSL3_CK_FZA_DMS_RC4_SHA, 520 SSL_kFZA|SSL_aFZA |SSL_RC4 |SSL_SHA1|SSL_SSLV3, 521 SSL_NOT_EXP|SSL_MEDIUM, 522 0, 523 128, 524 128, 525 SSL_ALL_CIPHERS, 526 SSL_ALL_STRENGTHS, 527 }, 528#endif 529 530#ifndef OPENSSL_NO_KRB5 531/* The Kerberos ciphers */ 532/* Cipher 1E */ 533 { 534 1, 535 SSL3_TXT_KRB5_DES_64_CBC_SHA, 536 SSL3_CK_KRB5_DES_64_CBC_SHA, 537 SSL_kKRB5|SSL_aKRB5| SSL_DES|SSL_SHA1 |SSL_SSLV3, 538 SSL_NOT_EXP|SSL_LOW, 539 0, 540 56, 541 56, 542 SSL_ALL_CIPHERS, 543 SSL_ALL_STRENGTHS, 544 }, 545 546/* Cipher 1F */ 547 { 548 1, 549 SSL3_TXT_KRB5_DES_192_CBC3_SHA, 550 SSL3_CK_KRB5_DES_192_CBC3_SHA, 551 SSL_kKRB5|SSL_aKRB5| SSL_3DES|SSL_SHA1 |SSL_SSLV3, 552 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 553 0, 554 168, 555 168, 556 SSL_ALL_CIPHERS, 557 SSL_ALL_STRENGTHS, 558 }, 559 560/* Cipher 20 */ 561 { 562 1, 563 SSL3_TXT_KRB5_RC4_128_SHA, 564 SSL3_CK_KRB5_RC4_128_SHA, 565 SSL_kKRB5|SSL_aKRB5| SSL_RC4|SSL_SHA1 |SSL_SSLV3, 566 SSL_NOT_EXP|SSL_MEDIUM, 567 0, 568 128, 569 128, 570 SSL_ALL_CIPHERS, 571 SSL_ALL_STRENGTHS, 572 }, 573 574/* Cipher 21 */ 575 { 576 1, 577 SSL3_TXT_KRB5_IDEA_128_CBC_SHA, 578 SSL3_CK_KRB5_IDEA_128_CBC_SHA, 579 SSL_kKRB5|SSL_aKRB5| SSL_IDEA|SSL_SHA1 |SSL_SSLV3, 580 SSL_NOT_EXP|SSL_MEDIUM, 581 0, 582 128, 583 128, 584 SSL_ALL_CIPHERS, 585 SSL_ALL_STRENGTHS, 586 }, 587 588/* Cipher 22 */ 589 { 590 1, 591 SSL3_TXT_KRB5_DES_64_CBC_MD5, 592 SSL3_CK_KRB5_DES_64_CBC_MD5, 593 SSL_kKRB5|SSL_aKRB5| SSL_DES|SSL_MD5 |SSL_SSLV3, 594 SSL_NOT_EXP|SSL_LOW, 595 0, 596 56, 597 56, 598 SSL_ALL_CIPHERS, 599 SSL_ALL_STRENGTHS, 600 }, 601 602/* Cipher 23 */ 603 { 604 1, 605 SSL3_TXT_KRB5_DES_192_CBC3_MD5, 606 SSL3_CK_KRB5_DES_192_CBC3_MD5, 607 SSL_kKRB5|SSL_aKRB5| SSL_3DES|SSL_MD5 |SSL_SSLV3, 608 SSL_NOT_EXP|SSL_HIGH, 609 0, 610 168, 611 168, 612 SSL_ALL_CIPHERS, 613 SSL_ALL_STRENGTHS, 614 }, 615 616/* Cipher 24 */ 617 { 618 1, 619 SSL3_TXT_KRB5_RC4_128_MD5, 620 SSL3_CK_KRB5_RC4_128_MD5, 621 SSL_kKRB5|SSL_aKRB5| SSL_RC4|SSL_MD5 |SSL_SSLV3, 622 SSL_NOT_EXP|SSL_MEDIUM, 623 0, 624 128, 625 128, 626 SSL_ALL_CIPHERS, 627 SSL_ALL_STRENGTHS, 628 }, 629 630/* Cipher 25 */ 631 { 632 1, 633 SSL3_TXT_KRB5_IDEA_128_CBC_MD5, 634 SSL3_CK_KRB5_IDEA_128_CBC_MD5, 635 SSL_kKRB5|SSL_aKRB5| SSL_IDEA|SSL_MD5 |SSL_SSLV3, 636 SSL_NOT_EXP|SSL_MEDIUM, 637 0, 638 128, 639 128, 640 SSL_ALL_CIPHERS, 641 SSL_ALL_STRENGTHS, 642 }, 643 644/* Cipher 26 */ 645 { 646 1, 647 SSL3_TXT_KRB5_DES_40_CBC_SHA, 648 SSL3_CK_KRB5_DES_40_CBC_SHA, 649 SSL_kKRB5|SSL_aKRB5| SSL_DES|SSL_SHA1 |SSL_SSLV3, 650 SSL_EXPORT|SSL_EXP40, 651 0, 652 40, 653 56, 654 SSL_ALL_CIPHERS, 655 SSL_ALL_STRENGTHS, 656 }, 657 658/* Cipher 27 */ 659 { 660 1, 661 SSL3_TXT_KRB5_RC2_40_CBC_SHA, 662 SSL3_CK_KRB5_RC2_40_CBC_SHA, 663 SSL_kKRB5|SSL_aKRB5| SSL_RC2|SSL_SHA1 |SSL_SSLV3, 664 SSL_EXPORT|SSL_EXP40, 665 0, 666 40, 667 128, 668 SSL_ALL_CIPHERS, 669 SSL_ALL_STRENGTHS, 670 }, 671 672/* Cipher 28 */ 673 { 674 1, 675 SSL3_TXT_KRB5_RC4_40_SHA, 676 SSL3_CK_KRB5_RC4_40_SHA, 677 SSL_kKRB5|SSL_aKRB5| SSL_RC4|SSL_SHA1 |SSL_SSLV3, 678 SSL_EXPORT|SSL_EXP40, 679 0, 680 40, 681 128, 682 SSL_ALL_CIPHERS, 683 SSL_ALL_STRENGTHS, 684 }, 685 686/* Cipher 29 */ 687 { 688 1, 689 SSL3_TXT_KRB5_DES_40_CBC_MD5, 690 SSL3_CK_KRB5_DES_40_CBC_MD5, 691 SSL_kKRB5|SSL_aKRB5| SSL_DES|SSL_MD5 |SSL_SSLV3, 692 SSL_EXPORT|SSL_EXP40, 693 0, 694 40, 695 56, 696 SSL_ALL_CIPHERS, 697 SSL_ALL_STRENGTHS, 698 }, 699 700/* Cipher 2A */ 701 { 702 1, 703 SSL3_TXT_KRB5_RC2_40_CBC_MD5, 704 SSL3_CK_KRB5_RC2_40_CBC_MD5, 705 SSL_kKRB5|SSL_aKRB5| SSL_RC2|SSL_MD5 |SSL_SSLV3, 706 SSL_EXPORT|SSL_EXP40, 707 0, 708 40, 709 128, 710 SSL_ALL_CIPHERS, 711 SSL_ALL_STRENGTHS, 712 }, 713 714/* Cipher 2B */ 715 { 716 1, 717 SSL3_TXT_KRB5_RC4_40_MD5, 718 SSL3_CK_KRB5_RC4_40_MD5, 719 SSL_kKRB5|SSL_aKRB5| SSL_RC4|SSL_MD5 |SSL_SSLV3, 720 SSL_EXPORT|SSL_EXP40, 721 0, 722 40, 723 128, 724 SSL_ALL_CIPHERS, 725 SSL_ALL_STRENGTHS, 726 }, 727#endif /* OPENSSL_NO_KRB5 */ 728 729/* New AES ciphersuites */ 730/* Cipher 2F */ 731 { 732 1, 733 TLS1_TXT_RSA_WITH_AES_128_SHA, 734 TLS1_CK_RSA_WITH_AES_128_SHA, 735 SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1, 736 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 737 0, 738 128, 739 128, 740 SSL_ALL_CIPHERS, 741 SSL_ALL_STRENGTHS, 742 }, 743/* Cipher 30 */ 744 { 745 0, 746 TLS1_TXT_DH_DSS_WITH_AES_128_SHA, 747 TLS1_CK_DH_DSS_WITH_AES_128_SHA, 748 SSL_kDHd|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1, 749 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 750 0, 751 128, 752 128, 753 SSL_ALL_CIPHERS, 754 SSL_ALL_STRENGTHS, 755 }, 756/* Cipher 31 */ 757 { 758 0, 759 TLS1_TXT_DH_RSA_WITH_AES_128_SHA, 760 TLS1_CK_DH_RSA_WITH_AES_128_SHA, 761 SSL_kDHr|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1, 762 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 763 0, 764 128, 765 128, 766 SSL_ALL_CIPHERS, 767 SSL_ALL_STRENGTHS, 768 }, 769/* Cipher 32 */ 770 { 771 1, 772 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, 773 TLS1_CK_DHE_DSS_WITH_AES_128_SHA, 774 SSL_kEDH|SSL_aDSS|SSL_AES|SSL_SHA|SSL_TLSV1, 775 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 776 0, 777 128, 778 128, 779 SSL_ALL_CIPHERS, 780 SSL_ALL_STRENGTHS, 781 }, 782/* Cipher 33 */ 783 { 784 1, 785 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, 786 TLS1_CK_DHE_RSA_WITH_AES_128_SHA, 787 SSL_kEDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1, 788 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 789 0, 790 128, 791 128, 792 SSL_ALL_CIPHERS, 793 SSL_ALL_STRENGTHS, 794 }, 795/* Cipher 34 */ 796 { 797 1, 798 TLS1_TXT_ADH_WITH_AES_128_SHA, 799 TLS1_CK_ADH_WITH_AES_128_SHA, 800 SSL_kEDH|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1, 801 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 802 0, 803 128, 804 128, 805 SSL_ALL_CIPHERS, 806 SSL_ALL_STRENGTHS, 807 }, 808 809/* Cipher 35 */ 810 { 811 1, 812 TLS1_TXT_RSA_WITH_AES_256_SHA, 813 TLS1_CK_RSA_WITH_AES_256_SHA, 814 SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1, 815 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 816 0, 817 256, 818 256, 819 SSL_ALL_CIPHERS, 820 SSL_ALL_STRENGTHS, 821 }, 822/* Cipher 36 */ 823 { 824 0, 825 TLS1_TXT_DH_DSS_WITH_AES_256_SHA, 826 TLS1_CK_DH_DSS_WITH_AES_256_SHA, 827 SSL_kDHd|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1, 828 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 829 0, 830 256, 831 256, 832 SSL_ALL_CIPHERS, 833 SSL_ALL_STRENGTHS, 834 }, 835/* Cipher 37 */ 836 { 837 0, 838 TLS1_TXT_DH_RSA_WITH_AES_256_SHA, 839 TLS1_CK_DH_RSA_WITH_AES_256_SHA, 840 SSL_kDHr|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1, 841 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 842 0, 843 256, 844 256, 845 SSL_ALL_CIPHERS, 846 SSL_ALL_STRENGTHS, 847 }, 848/* Cipher 38 */ 849 { 850 1, 851 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, 852 TLS1_CK_DHE_DSS_WITH_AES_256_SHA, 853 SSL_kEDH|SSL_aDSS|SSL_AES|SSL_SHA|SSL_TLSV1, 854 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 855 0, 856 256, 857 256, 858 SSL_ALL_CIPHERS, 859 SSL_ALL_STRENGTHS, 860 }, 861/* Cipher 39 */ 862 { 863 1, 864 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, 865 TLS1_CK_DHE_RSA_WITH_AES_256_SHA, 866 SSL_kEDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1, 867 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 868 0, 869 256, 870 256, 871 SSL_ALL_CIPHERS, 872 SSL_ALL_STRENGTHS, 873 }, 874 /* Cipher 3A */ 875 { 876 1, 877 TLS1_TXT_ADH_WITH_AES_256_SHA, 878 TLS1_CK_ADH_WITH_AES_256_SHA, 879 SSL_kEDH|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1, 880 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, 881 0, 882 256, 883 256, 884 SSL_ALL_CIPHERS, 885 SSL_ALL_STRENGTHS, 886 }, 887 888#ifndef OPENSSL_NO_CAMELLIA 889 /* Camellia ciphersuites from RFC4132 (128-bit portion) */ 890 891 /* Cipher 41 */ 892 { 893 1, 894 TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, 895 TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, 896 SSL_kRSA|SSL_aRSA|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 897 SSL_NOT_EXP|SSL_HIGH, 898 0, 899 128, 900 128, 901 SSL_ALL_CIPHERS, 902 SSL_ALL_STRENGTHS 903 }, 904 /* Cipher 42 */ 905 { 906 0, /* not implemented (non-ephemeral DH) */ 907 TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, 908 TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, 909 SSL_kDHd|SSL_aDH|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 910 SSL_NOT_EXP|SSL_HIGH, 911 0, 912 128, 913 128, 914 SSL_ALL_CIPHERS, 915 SSL_ALL_STRENGTHS 916 }, 917 /* Cipher 43 */ 918 { 919 0, /* not implemented (non-ephemeral DH) */ 920 TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, 921 TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, 922 SSL_kDHr|SSL_aDH|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 923 SSL_NOT_EXP|SSL_HIGH, 924 0, 925 128, 926 128, 927 SSL_ALL_CIPHERS, 928 SSL_ALL_STRENGTHS 929 }, 930 /* Cipher 44 */ 931 { 932 1, 933 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, 934 TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, 935 SSL_kEDH|SSL_aDSS|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 936 SSL_NOT_EXP|SSL_HIGH, 937 0, 938 128, 939 128, 940 SSL_ALL_CIPHERS, 941 SSL_ALL_STRENGTHS 942 }, 943 /* Cipher 45 */ 944 { 945 1, 946 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, 947 TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, 948 SSL_kEDH|SSL_aRSA|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 949 SSL_NOT_EXP|SSL_HIGH, 950 0, 951 128, 952 128, 953 SSL_ALL_CIPHERS, 954 SSL_ALL_STRENGTHS 955 }, 956 /* Cipher 46 */ 957 { 958 1, 959 TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, 960 TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, 961 SSL_kEDH|SSL_aNULL|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 962 SSL_NOT_EXP|SSL_HIGH, 963 0, 964 128, 965 128, 966 SSL_ALL_CIPHERS, 967 SSL_ALL_STRENGTHS 968 }, 969#endif /* OPENSSL_NO_CAMELLIA */ 970 971#if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 972 /* New TLS Export CipherSuites from expired ID */ 973#if 0 974 /* Cipher 60 */ 975 { 976 1, 977 TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, 978 TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, 979 SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_TLSV1, 980 SSL_EXPORT|SSL_EXP56, 981 0, 982 56, 983 128, 984 SSL_ALL_CIPHERS, 985 SSL_ALL_STRENGTHS, 986 }, 987 /* Cipher 61 */ 988 { 989 1, 990 TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, 991 TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, 992 SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_TLSV1, 993 SSL_EXPORT|SSL_EXP56, 994 0, 995 56, 996 128, 997 SSL_ALL_CIPHERS, 998 SSL_ALL_STRENGTHS, 999 }, 1000#endif 1001 /* Cipher 62 */ 1002 { 1003 1, 1004 TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, 1005 TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, 1006 SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA|SSL_TLSV1, 1007 SSL_EXPORT|SSL_EXP56, 1008 0, 1009 56, 1010 56, 1011 SSL_ALL_CIPHERS, 1012 SSL_ALL_STRENGTHS, 1013 }, 1014 /* Cipher 63 */ 1015 { 1016 1, 1017 TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, 1018 TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, 1019 SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA|SSL_TLSV1, 1020 SSL_EXPORT|SSL_EXP56, 1021 0, 1022 56, 1023 56, 1024 SSL_ALL_CIPHERS, 1025 SSL_ALL_STRENGTHS, 1026 }, 1027 /* Cipher 64 */ 1028 { 1029 1, 1030 TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, 1031 TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, 1032 SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1, 1033 SSL_EXPORT|SSL_EXP56, 1034 0, 1035 56, 1036 128, 1037 SSL_ALL_CIPHERS, 1038 SSL_ALL_STRENGTHS, 1039 }, 1040 /* Cipher 65 */ 1041 { 1042 1, 1043 TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, 1044 TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, 1045 SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1, 1046 SSL_EXPORT|SSL_EXP56, 1047 0, 1048 56, 1049 128, 1050 SSL_ALL_CIPHERS, 1051 SSL_ALL_STRENGTHS, 1052 }, 1053 /* Cipher 66 */ 1054 { 1055 1, 1056 TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, 1057 TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, 1058 SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1, 1059 SSL_NOT_EXP|SSL_MEDIUM, 1060 0, 1061 128, 1062 128, 1063 SSL_ALL_CIPHERS, 1064 SSL_ALL_STRENGTHS 1065 }, 1066#endif 1067 1068#ifndef OPENSSL_NO_CAMELLIA 1069 /* Camellia ciphersuites from RFC4132 (256-bit portion) */ 1070 1071 /* Cipher 84 */ 1072 { 1073 1, 1074 TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, 1075 TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, 1076 SSL_kRSA|SSL_aRSA|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 1077 SSL_NOT_EXP|SSL_HIGH, 1078 0, 1079 256, 1080 256, 1081 SSL_ALL_CIPHERS, 1082 SSL_ALL_STRENGTHS 1083 }, 1084 /* Cipher 85 */ 1085 { 1086 0, /* not implemented (non-ephemeral DH) */ 1087 TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, 1088 TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, 1089 SSL_kDHd|SSL_aDH|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 1090 SSL_NOT_EXP|SSL_HIGH, 1091 0, 1092 256, 1093 256, 1094 SSL_ALL_CIPHERS, 1095 SSL_ALL_STRENGTHS 1096 }, 1097 /* Cipher 86 */ 1098 { 1099 0, /* not implemented (non-ephemeral DH) */ 1100 TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, 1101 TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, 1102 SSL_kDHr|SSL_aDH|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 1103 SSL_NOT_EXP|SSL_HIGH, 1104 0, 1105 256, 1106 256, 1107 SSL_ALL_CIPHERS, 1108 SSL_ALL_STRENGTHS 1109 }, 1110 /* Cipher 87 */ 1111 { 1112 1, 1113 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, 1114 TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, 1115 SSL_kEDH|SSL_aDSS|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 1116 SSL_NOT_EXP|SSL_HIGH, 1117 0, 1118 256, 1119 256, 1120 SSL_ALL_CIPHERS, 1121 SSL_ALL_STRENGTHS 1122 }, 1123 /* Cipher 88 */ 1124 { 1125 1, 1126 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, 1127 TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, 1128 SSL_kEDH|SSL_aRSA|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 1129 SSL_NOT_EXP|SSL_HIGH, 1130 0, 1131 256, 1132 256, 1133 SSL_ALL_CIPHERS, 1134 SSL_ALL_STRENGTHS 1135 }, 1136 /* Cipher 89 */ 1137 { 1138 1, 1139 TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, 1140 TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, 1141 SSL_kEDH|SSL_aNULL|SSL_CAMELLIA|SSL_SHA|SSL_TLSV1, 1142 SSL_NOT_EXP|SSL_HIGH, 1143 0, 1144 256, 1145 256, 1146 SSL_ALL_CIPHERS, 1147 SSL_ALL_STRENGTHS 1148 }, 1149#endif /* OPENSSL_NO_CAMELLIA */ 1150 1151#ifndef OPENSSL_NO_SEED 1152 /* SEED ciphersuites from RFC4162 */ 1153 1154 /* Cipher 96 */ 1155 { 1156 1, 1157 TLS1_TXT_RSA_WITH_SEED_SHA, 1158 TLS1_CK_RSA_WITH_SEED_SHA, 1159 SSL_kRSA|SSL_aRSA|SSL_SEED|SSL_SHA1|SSL_TLSV1, 1160 SSL_NOT_EXP|SSL_MEDIUM, 1161 0, 1162 128, 1163 128, 1164 SSL_ALL_CIPHERS, 1165 SSL_ALL_STRENGTHS, 1166 }, 1167 1168 /* Cipher 97 */ 1169 { 1170 0, /* not implemented (non-ephemeral DH) */ 1171 TLS1_TXT_DH_DSS_WITH_SEED_SHA, 1172 TLS1_CK_DH_DSS_WITH_SEED_SHA, 1173 SSL_kDHd|SSL_aDH|SSL_SEED|SSL_SHA1|SSL_TLSV1, 1174 SSL_NOT_EXP|SSL_MEDIUM, 1175 0, 1176 128, 1177 128, 1178 SSL_ALL_CIPHERS, 1179 SSL_ALL_STRENGTHS, 1180 }, 1181 1182 /* Cipher 98 */ 1183 { 1184 0, /* not implemented (non-ephemeral DH) */ 1185 TLS1_TXT_DH_RSA_WITH_SEED_SHA, 1186 TLS1_CK_DH_RSA_WITH_SEED_SHA, 1187 SSL_kDHr|SSL_aDH|SSL_SEED|SSL_SHA1|SSL_TLSV1, 1188 SSL_NOT_EXP|SSL_MEDIUM, 1189 0, 1190 128, 1191 128, 1192 SSL_ALL_CIPHERS, 1193 SSL_ALL_STRENGTHS, 1194 }, 1195 1196 /* Cipher 99 */ 1197 { 1198 1, 1199 TLS1_TXT_DHE_DSS_WITH_SEED_SHA, 1200 TLS1_CK_DHE_DSS_WITH_SEED_SHA, 1201 SSL_kEDH|SSL_aDSS|SSL_SEED|SSL_SHA1|SSL_TLSV1, 1202 SSL_NOT_EXP|SSL_MEDIUM, 1203 0, 1204 128, 1205 128, 1206 SSL_ALL_CIPHERS, 1207 SSL_ALL_STRENGTHS, 1208 }, 1209 1210 /* Cipher 9A */ 1211 { 1212 1, 1213 TLS1_TXT_DHE_RSA_WITH_SEED_SHA, 1214 TLS1_CK_DHE_RSA_WITH_SEED_SHA, 1215 SSL_kEDH|SSL_aRSA|SSL_SEED|SSL_SHA1|SSL_TLSV1, 1216 SSL_NOT_EXP|SSL_MEDIUM, 1217 0, 1218 128, 1219 128, 1220 SSL_ALL_CIPHERS, 1221 SSL_ALL_STRENGTHS, 1222 }, 1223 1224 /* Cipher 9B */ 1225 { 1226 1, 1227 TLS1_TXT_ADH_WITH_SEED_SHA, 1228 TLS1_CK_ADH_WITH_SEED_SHA, 1229 SSL_kEDH|SSL_aNULL|SSL_SEED|SSL_SHA1|SSL_TLSV1, 1230 SSL_NOT_EXP|SSL_MEDIUM, 1231 0, 1232 128, 1233 128, 1234 SSL_ALL_CIPHERS, 1235 SSL_ALL_STRENGTHS, 1236 }, 1237 1238#endif /* OPENSSL_NO_SEED */ 1239 1240#ifndef OPENSSL_NO_ECDH 1241 /* Cipher C001 */ 1242 { 1243 1, 1244 TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, 1245 TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, 1246 SSL_kECDH|SSL_aECDSA|SSL_eNULL|SSL_SHA|SSL_TLSV1, 1247 SSL_NOT_EXP, 1248 0, 1249 0, 1250 0, 1251 SSL_ALL_CIPHERS, 1252 SSL_ALL_STRENGTHS, 1253 }, 1254 1255 /* Cipher C002 */ 1256 { 1257 1, 1258 TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, 1259 TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, 1260 SSL_kECDH|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1, 1261 SSL_NOT_EXP, 1262 0, 1263 128, 1264 128, 1265 SSL_ALL_CIPHERS, 1266 SSL_ALL_STRENGTHS, 1267 }, 1268 1269 /* Cipher C003 */ 1270 { 1271 1, 1272 TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, 1273 TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, 1274 SSL_kECDH|SSL_aECDSA|SSL_3DES|SSL_SHA|SSL_TLSV1, 1275 SSL_NOT_EXP|SSL_HIGH, 1276 0, 1277 168, 1278 168, 1279 SSL_ALL_CIPHERS, 1280 SSL_ALL_STRENGTHS, 1281 }, 1282 1283 /* Cipher C004 */ 1284 { 1285 1, 1286 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, 1287 TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, 1288 SSL_kECDH|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1, 1289 SSL_NOT_EXP|SSL_HIGH, 1290 0, 1291 128, 1292 128, 1293 SSL_ALL_CIPHERS, 1294 SSL_ALL_STRENGTHS, 1295 }, 1296 1297 /* Cipher C005 */ 1298 { 1299 1, 1300 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, 1301 TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, 1302 SSL_kECDH|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1, 1303 SSL_NOT_EXP|SSL_HIGH, 1304 0, 1305 256, 1306 256, 1307 SSL_ALL_CIPHERS, 1308 SSL_ALL_STRENGTHS, 1309 }, 1310 1311 /* Cipher C006 */ 1312 { 1313 1, 1314 TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, 1315 TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, 1316 SSL_kECDHE|SSL_aECDSA|SSL_eNULL|SSL_SHA|SSL_TLSV1, 1317 SSL_NOT_EXP, 1318 0, 1319 0, 1320 0, 1321 SSL_ALL_CIPHERS, 1322 SSL_ALL_STRENGTHS, 1323 }, 1324 1325 /* Cipher C007 */ 1326 { 1327 1, 1328 TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, 1329 TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, 1330 SSL_kECDHE|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1, 1331 SSL_NOT_EXP, 1332 0, 1333 128, 1334 128, 1335 SSL_ALL_CIPHERS, 1336 SSL_ALL_STRENGTHS, 1337 }, 1338 1339 /* Cipher C008 */ 1340 { 1341 1, 1342 TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, 1343 TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, 1344 SSL_kECDHE|SSL_aECDSA|SSL_3DES|SSL_SHA|SSL_TLSV1, 1345 SSL_NOT_EXP|SSL_HIGH, 1346 0, 1347 168, 1348 168, 1349 SSL_ALL_CIPHERS, 1350 SSL_ALL_STRENGTHS, 1351 }, 1352 1353 /* Cipher C009 */ 1354 { 1355 1, 1356 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 1357 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 1358 SSL_kECDHE|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1, 1359 SSL_NOT_EXP|SSL_HIGH, 1360 0, 1361 128, 1362 128, 1363 SSL_ALL_CIPHERS, 1364 SSL_ALL_STRENGTHS, 1365 }, 1366 1367 /* Cipher C00A */ 1368 { 1369 1, 1370 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 1371 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 1372 SSL_kECDHE|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1, 1373 SSL_NOT_EXP|SSL_HIGH, 1374 0, 1375 256, 1376 256, 1377 SSL_ALL_CIPHERS, 1378 SSL_ALL_STRENGTHS, 1379 }, 1380 1381 /* Cipher C00B */ 1382 { 1383 1, 1384 TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, 1385 TLS1_CK_ECDH_RSA_WITH_NULL_SHA, 1386 SSL_kECDH|SSL_aRSA|SSL_eNULL|SSL_SHA|SSL_TLSV1, 1387 SSL_NOT_EXP, 1388 0, 1389 0, 1390 0, 1391 SSL_ALL_CIPHERS, 1392 SSL_ALL_STRENGTHS, 1393 }, 1394 1395 /* Cipher C00C */ 1396 { 1397 1, 1398 TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, 1399 TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, 1400 SSL_kECDH|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1, 1401 SSL_NOT_EXP, 1402 0, 1403 128, 1404 128, 1405 SSL_ALL_CIPHERS, 1406 SSL_ALL_STRENGTHS, 1407 }, 1408 1409 /* Cipher C00D */ 1410 { 1411 1, 1412 TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, 1413 TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, 1414 SSL_kECDH|SSL_aRSA|SSL_3DES|SSL_SHA|SSL_TLSV1, 1415 SSL_NOT_EXP|SSL_HIGH, 1416 0, 1417 168, 1418 168, 1419 SSL_ALL_CIPHERS, 1420 SSL_ALL_STRENGTHS, 1421 }, 1422 1423 /* Cipher C00E */ 1424 { 1425 1, 1426 TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, 1427 TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, 1428 SSL_kECDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1, 1429 SSL_NOT_EXP|SSL_HIGH, 1430 0, 1431 128, 1432 128, 1433 SSL_ALL_CIPHERS, 1434 SSL_ALL_STRENGTHS, 1435 }, 1436 1437 /* Cipher C00F */ 1438 { 1439 1, 1440 TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, 1441 TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, 1442 SSL_kECDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1, 1443 SSL_NOT_EXP|SSL_HIGH, 1444 0, 1445 256, 1446 256, 1447 SSL_ALL_CIPHERS, 1448 SSL_ALL_STRENGTHS, 1449 }, 1450 1451 /* Cipher C010 */ 1452 { 1453 1, 1454 TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, 1455 TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, 1456 SSL_kECDHE|SSL_aRSA|SSL_eNULL|SSL_SHA|SSL_TLSV1, 1457 SSL_NOT_EXP, 1458 0, 1459 0, 1460 0, 1461 SSL_ALL_CIPHERS, 1462 SSL_ALL_STRENGTHS, 1463 }, 1464 1465 /* Cipher C011 */ 1466 { 1467 1, 1468 TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, 1469 TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, 1470 SSL_kECDHE|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1, 1471 SSL_NOT_EXP, 1472 0, 1473 128, 1474 128, 1475 SSL_ALL_CIPHERS, 1476 SSL_ALL_STRENGTHS, 1477 }, 1478 1479 /* Cipher C012 */ 1480 { 1481 1, 1482 TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, 1483 TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, 1484 SSL_kECDHE|SSL_aRSA|SSL_3DES|SSL_SHA|SSL_TLSV1, 1485 SSL_NOT_EXP|SSL_HIGH, 1486 0, 1487 168, 1488 168, 1489 SSL_ALL_CIPHERS, 1490 SSL_ALL_STRENGTHS, 1491 }, 1492 1493 /* Cipher C013 */ 1494 { 1495 1, 1496 TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, 1497 TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, 1498 SSL_kECDHE|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1, 1499 SSL_NOT_EXP|SSL_HIGH, 1500 0, 1501 128, 1502 128, 1503 SSL_ALL_CIPHERS, 1504 SSL_ALL_STRENGTHS, 1505 }, 1506 1507 /* Cipher C014 */ 1508 { 1509 1, 1510 TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, 1511 TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, 1512 SSL_kECDHE|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1, 1513 SSL_NOT_EXP|SSL_HIGH, 1514 0, 1515 256, 1516 256, 1517 SSL_ALL_CIPHERS, 1518 SSL_ALL_STRENGTHS, 1519 }, 1520 1521 /* Cipher C015 */ 1522 { 1523 1, 1524 TLS1_TXT_ECDH_anon_WITH_NULL_SHA, 1525 TLS1_CK_ECDH_anon_WITH_NULL_SHA, 1526 SSL_kECDHE|SSL_aNULL|SSL_eNULL|SSL_SHA|SSL_TLSV1, 1527 SSL_NOT_EXP, 1528 0, 1529 0, 1530 0, 1531 SSL_ALL_CIPHERS, 1532 SSL_ALL_STRENGTHS, 1533 }, 1534 1535 /* Cipher C016 */ 1536 { 1537 1, 1538 TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, 1539 TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, 1540 SSL_kECDHE|SSL_aNULL|SSL_RC4|SSL_SHA|SSL_TLSV1, 1541 SSL_NOT_EXP, 1542 0, 1543 128, 1544 128, 1545 SSL_ALL_CIPHERS, 1546 SSL_ALL_STRENGTHS, 1547 }, 1548 1549 /* Cipher C017 */ 1550 { 1551 1, 1552 TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, 1553 TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, 1554 SSL_kECDHE|SSL_aNULL|SSL_3DES|SSL_SHA|SSL_TLSV1, 1555 SSL_NOT_EXP|SSL_HIGH, 1556 0, 1557 168, 1558 168, 1559 SSL_ALL_CIPHERS, 1560 SSL_ALL_STRENGTHS, 1561 }, 1562 1563 /* Cipher C018 */ 1564 { 1565 1, 1566 TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, 1567 TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, 1568 SSL_kECDHE|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1, 1569 SSL_NOT_EXP|SSL_HIGH, 1570 0, 1571 128, 1572 128, 1573 SSL_ALL_CIPHERS, 1574 SSL_ALL_STRENGTHS, 1575 }, 1576 1577 /* Cipher C019 */ 1578 { 1579 1, 1580 TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, 1581 TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, 1582 SSL_kECDHE|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1, 1583 SSL_NOT_EXP|SSL_HIGH, 1584 0, 1585 256, 1586 256, 1587 SSL_ALL_CIPHERS, 1588 SSL_ALL_STRENGTHS, 1589 }, 1590#endif /* OPENSSL_NO_ECDH */ 1591 1592 1593/* end of list */ 1594 }; 1595 1596SSL3_ENC_METHOD SSLv3_enc_data={ 1597 ssl3_enc, 1598 ssl3_mac, 1599 ssl3_setup_key_block, 1600 ssl3_generate_master_secret, 1601 ssl3_change_cipher_state, 1602 ssl3_final_finish_mac, 1603 MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, 1604 ssl3_cert_verify_mac, 1605 SSL3_MD_CLIENT_FINISHED_CONST,4, 1606 SSL3_MD_SERVER_FINISHED_CONST,4, 1607 ssl3_alert_code, 1608 }; 1609 1610long ssl3_default_timeout(void) 1611 { 1612 /* 2 hours, the 24 hours mentioned in the SSLv3 spec 1613 * is way too long for http, the cache would over fill */ 1614 return(60*60*2); 1615 } 1616 1617IMPLEMENT_ssl3_meth_func(sslv3_base_method, 1618 ssl_undefined_function, 1619 ssl_undefined_function, 1620 ssl_bad_method) 1621 1622int ssl3_num_ciphers(void) 1623 { 1624 return(SSL3_NUM_CIPHERS); 1625 } 1626 1627SSL_CIPHER *ssl3_get_cipher(unsigned int u) 1628 { 1629 if (u < SSL3_NUM_CIPHERS) 1630 return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u])); 1631 else 1632 return(NULL); 1633 } 1634 1635int ssl3_pending(const SSL *s) 1636 { 1637 if (s->rstate == SSL_ST_READ_BODY) 1638 return 0; 1639 1640 return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; 1641 } 1642 1643int ssl3_new(SSL *s) 1644 { 1645 SSL3_STATE *s3; 1646 1647 if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err; 1648 memset(s3,0,sizeof *s3); 1649 EVP_MD_CTX_init(&s3->finish_dgst1); 1650 EVP_MD_CTX_init(&s3->finish_dgst2); 1651 pq_64bit_init(&(s3->rrec.seq_num)); 1652 pq_64bit_init(&(s3->wrec.seq_num)); 1653 1654 s->s3=s3; 1655 1656 s->method->ssl_clear(s); 1657 return(1); 1658err: 1659 return(0); 1660 } 1661 1662void ssl3_free(SSL *s) 1663 { 1664 if(s == NULL) 1665 return; 1666 1667 ssl3_cleanup_key_block(s); 1668 if (s->s3->rbuf.buf != NULL) 1669 OPENSSL_free(s->s3->rbuf.buf); 1670 if (s->s3->wbuf.buf != NULL) 1671 OPENSSL_free(s->s3->wbuf.buf); 1672 if (s->s3->rrec.comp != NULL) 1673 OPENSSL_free(s->s3->rrec.comp); 1674#ifndef OPENSSL_NO_DH 1675 if (s->s3->tmp.dh != NULL) 1676 DH_free(s->s3->tmp.dh); 1677#endif 1678#ifndef OPENSSL_NO_ECDH 1679 if (s->s3->tmp.ecdh != NULL) 1680 EC_KEY_free(s->s3->tmp.ecdh); 1681#endif 1682 1683 if (s->s3->tmp.ca_names != NULL) 1684 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); 1685 EVP_MD_CTX_cleanup(&s->s3->finish_dgst1); 1686 EVP_MD_CTX_cleanup(&s->s3->finish_dgst2); 1687 pq_64bit_free(&(s->s3->rrec.seq_num)); 1688 pq_64bit_free(&(s->s3->wrec.seq_num)); 1689 1690 OPENSSL_cleanse(s->s3,sizeof *s->s3); 1691 OPENSSL_free(s->s3); 1692 s->s3=NULL; 1693 } 1694 1695void ssl3_clear(SSL *s) 1696 { 1697 unsigned char *rp,*wp; 1698 size_t rlen, wlen; 1699 1700 ssl3_cleanup_key_block(s); 1701 if (s->s3->tmp.ca_names != NULL) 1702 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); 1703 1704 if (s->s3->rrec.comp != NULL) 1705 { 1706 OPENSSL_free(s->s3->rrec.comp); 1707 s->s3->rrec.comp=NULL; 1708 } 1709#ifndef OPENSSL_NO_DH 1710 if (s->s3->tmp.dh != NULL) 1711 { 1712 DH_free(s->s3->tmp.dh); 1713 s->s3->tmp.dh = NULL; 1714 } 1715#endif 1716#ifndef OPENSSL_NO_ECDH 1717 if (s->s3->tmp.ecdh != NULL) 1718 { 1719 EC_KEY_free(s->s3->tmp.ecdh); 1720 s->s3->tmp.ecdh = NULL; 1721 } 1722#endif 1723#ifndef OPENSSL_NO_TLSEXT 1724#ifndef OPENSSL_NO_EC 1725 s->s3->is_probably_safari = 0; 1726#endif /* !OPENSSL_NO_EC */ 1727#endif /* !OPENSSL_NO_TLSEXT */ 1728 1729 rp = s->s3->rbuf.buf; 1730 wp = s->s3->wbuf.buf; 1731 rlen = s->s3->rbuf.len; 1732 wlen = s->s3->wbuf.len; 1733 1734 EVP_MD_CTX_cleanup(&s->s3->finish_dgst1); 1735 EVP_MD_CTX_cleanup(&s->s3->finish_dgst2); 1736 1737 memset(s->s3,0,sizeof *s->s3); 1738 s->s3->rbuf.buf = rp; 1739 s->s3->wbuf.buf = wp; 1740 s->s3->rbuf.len = rlen; 1741 s->s3->wbuf.len = wlen; 1742 1743 ssl_free_wbio_buffer(s); 1744 1745 s->packet_length=0; 1746 s->s3->renegotiate=0; 1747 s->s3->total_renegotiations=0; 1748 s->s3->num_renegotiations=0; 1749 s->s3->in_read_app_data=0; 1750 s->version=SSL3_VERSION; 1751 } 1752 1753long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) 1754 { 1755 int ret=0; 1756 1757#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) 1758 if ( 1759#ifndef OPENSSL_NO_RSA 1760 cmd == SSL_CTRL_SET_TMP_RSA || 1761 cmd == SSL_CTRL_SET_TMP_RSA_CB || 1762#endif 1763#ifndef OPENSSL_NO_DSA 1764 cmd == SSL_CTRL_SET_TMP_DH || 1765 cmd == SSL_CTRL_SET_TMP_DH_CB || 1766#endif 1767 0) 1768 { 1769 if (!ssl_cert_inst(&s->cert)) 1770 { 1771 SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); 1772 return(0); 1773 } 1774 } 1775#endif 1776 1777 switch (cmd) 1778 { 1779 case SSL_CTRL_GET_SESSION_REUSED: 1780 ret=s->hit; 1781 break; 1782 case SSL_CTRL_GET_CLIENT_CERT_REQUEST: 1783 break; 1784 case SSL_CTRL_GET_NUM_RENEGOTIATIONS: 1785 ret=s->s3->num_renegotiations; 1786 break; 1787 case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: 1788 ret=s->s3->num_renegotiations; 1789 s->s3->num_renegotiations=0; 1790 break; 1791 case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: 1792 ret=s->s3->total_renegotiations; 1793 break; 1794 case SSL_CTRL_GET_FLAGS: 1795 ret=(int)(s->s3->flags); 1796 break; 1797#ifndef OPENSSL_NO_RSA 1798 case SSL_CTRL_NEED_TMP_RSA: 1799 if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && 1800 ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || 1801 (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))) 1802 ret = 1; 1803 break; 1804 case SSL_CTRL_SET_TMP_RSA: 1805 { 1806 RSA *rsa = (RSA *)parg; 1807 if (rsa == NULL) 1808 { 1809 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); 1810 return(ret); 1811 } 1812 if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) 1813 { 1814 SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); 1815 return(ret); 1816 } 1817 if (s->cert->rsa_tmp != NULL) 1818 RSA_free(s->cert->rsa_tmp); 1819 s->cert->rsa_tmp = rsa; 1820 ret = 1; 1821 } 1822 break; 1823 case SSL_CTRL_SET_TMP_RSA_CB: 1824 { 1825 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 1826 return(ret); 1827 } 1828 break; 1829#endif 1830#ifndef OPENSSL_NO_DH 1831 case SSL_CTRL_SET_TMP_DH: 1832 { 1833 DH *dh = (DH *)parg; 1834 if (dh == NULL) 1835 { 1836 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); 1837 return(ret); 1838 } 1839 if ((dh = DHparams_dup(dh)) == NULL) 1840 { 1841 SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); 1842 return(ret); 1843 } 1844 if (!(s->options & SSL_OP_SINGLE_DH_USE)) 1845 { 1846 if (!DH_generate_key(dh)) 1847 { 1848 DH_free(dh); 1849 SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); 1850 return(ret); 1851 } 1852 } 1853 if (s->cert->dh_tmp != NULL) 1854 DH_free(s->cert->dh_tmp); 1855 s->cert->dh_tmp = dh; 1856 ret = 1; 1857 } 1858 break; 1859 case SSL_CTRL_SET_TMP_DH_CB: 1860 { 1861 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 1862 return(ret); 1863 } 1864 break; 1865#endif 1866#ifndef OPENSSL_NO_ECDH 1867 case SSL_CTRL_SET_TMP_ECDH: 1868 { 1869 EC_KEY *ecdh = NULL; 1870 1871 if (parg == NULL) 1872 { 1873 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); 1874 return(ret); 1875 } 1876 if (!EC_KEY_up_ref((EC_KEY *)parg)) 1877 { 1878 SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); 1879 return(ret); 1880 } 1881 ecdh = (EC_KEY *)parg; 1882 if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) 1883 { 1884 if (!EC_KEY_generate_key(ecdh)) 1885 { 1886 EC_KEY_free(ecdh); 1887 SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); 1888 return(ret); 1889 } 1890 } 1891 if (s->cert->ecdh_tmp != NULL) 1892 EC_KEY_free(s->cert->ecdh_tmp); 1893 s->cert->ecdh_tmp = ecdh; 1894 ret = 1; 1895 } 1896 break; 1897 case SSL_CTRL_SET_TMP_ECDH_CB: 1898 { 1899 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 1900 return(ret); 1901 } 1902 break; 1903#endif /* !OPENSSL_NO_ECDH */ 1904#ifndef OPENSSL_NO_TLSEXT 1905 case SSL_CTRL_SET_TLSEXT_HOSTNAME: 1906 if (larg == TLSEXT_NAMETYPE_host_name) 1907 { 1908 if (s->tlsext_hostname != NULL) 1909 OPENSSL_free(s->tlsext_hostname); 1910 s->tlsext_hostname = NULL; 1911 1912 ret = 1; 1913 if (parg == NULL) 1914 break; 1915 if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) 1916 { 1917 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); 1918 return 0; 1919 } 1920 if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) 1921 { 1922 SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); 1923 return 0; 1924 } 1925 } 1926 else 1927 { 1928 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); 1929 return 0; 1930 } 1931 break; 1932 case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: 1933 s->tlsext_debug_arg=parg; 1934 ret = 1; 1935 break; 1936 1937 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: 1938 s->tlsext_status_type=larg; 1939 ret = 1; 1940 break; 1941 1942 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS: 1943 *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts; 1944 ret = 1; 1945 break; 1946 1947 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS: 1948 s->tlsext_ocsp_exts = parg; 1949 ret = 1; 1950 break; 1951 1952 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS: 1953 *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids; 1954 ret = 1; 1955 break; 1956 1957 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS: 1958 s->tlsext_ocsp_ids = parg; 1959 ret = 1; 1960 break; 1961 1962 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: 1963 *(unsigned char **)parg = s->tlsext_ocsp_resp; 1964 return s->tlsext_ocsp_resplen; 1965 1966 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: 1967 if (s->tlsext_ocsp_resp) 1968 OPENSSL_free(s->tlsext_ocsp_resp); 1969 s->tlsext_ocsp_resp = parg; 1970 s->tlsext_ocsp_resplen = larg; 1971 ret = 1; 1972 break; 1973 1974#endif /* !OPENSSL_NO_TLSEXT */ 1975 default: 1976 break; 1977 } 1978 return(ret); 1979 } 1980 1981long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) 1982 { 1983 int ret=0; 1984 1985#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) 1986 if ( 1987#ifndef OPENSSL_NO_RSA 1988 cmd == SSL_CTRL_SET_TMP_RSA_CB || 1989#endif 1990#ifndef OPENSSL_NO_DSA 1991 cmd == SSL_CTRL_SET_TMP_DH_CB || 1992#endif 1993 0) 1994 { 1995 if (!ssl_cert_inst(&s->cert)) 1996 { 1997 SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); 1998 return(0); 1999 } 2000 } 2001#endif 2002 2003 switch (cmd) 2004 { 2005#ifndef OPENSSL_NO_RSA 2006 case SSL_CTRL_SET_TMP_RSA_CB: 2007 { 2008 s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; 2009 } 2010 break; 2011#endif 2012#ifndef OPENSSL_NO_DH 2013 case SSL_CTRL_SET_TMP_DH_CB: 2014 { 2015 s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; 2016 } 2017 break; 2018#endif 2019#ifndef OPENSSL_NO_ECDH 2020 case SSL_CTRL_SET_TMP_ECDH_CB: 2021 { 2022 s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; 2023 } 2024 break; 2025#endif 2026#ifndef OPENSSL_NO_TLSEXT 2027 case SSL_CTRL_SET_TLSEXT_DEBUG_CB: 2028 s->tlsext_debug_cb=(void (*)(SSL *,int ,int, 2029 unsigned char *, int, void *))fp; 2030 break; 2031#endif 2032 default: 2033 break; 2034 } 2035 return(ret); 2036 } 2037 2038long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) 2039 { 2040 CERT *cert; 2041 2042 cert=ctx->cert; 2043 2044 switch (cmd) 2045 { 2046#ifndef OPENSSL_NO_RSA 2047 case SSL_CTRL_NEED_TMP_RSA: 2048 if ( (cert->rsa_tmp == NULL) && 2049 ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || 2050 (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))) 2051 ) 2052 return(1); 2053 else 2054 return(0); 2055 /* break; */ 2056 case SSL_CTRL_SET_TMP_RSA: 2057 { 2058 RSA *rsa; 2059 int i; 2060 2061 rsa=(RSA *)parg; 2062 i=1; 2063 if (rsa == NULL) 2064 i=0; 2065 else 2066 { 2067 if ((rsa=RSAPrivateKey_dup(rsa)) == NULL) 2068 i=0; 2069 } 2070 if (!i) 2071 { 2072 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB); 2073 return(0); 2074 } 2075 else 2076 { 2077 if (cert->rsa_tmp != NULL) 2078 RSA_free(cert->rsa_tmp); 2079 cert->rsa_tmp=rsa; 2080 return(1); 2081 } 2082 } 2083 /* break; */ 2084 case SSL_CTRL_SET_TMP_RSA_CB: 2085 { 2086 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2087 return(0); 2088 } 2089 break; 2090#endif 2091#ifndef OPENSSL_NO_DH 2092 case SSL_CTRL_SET_TMP_DH: 2093 { 2094 DH *new=NULL,*dh; 2095 2096 dh=(DH *)parg; 2097 if ((new=DHparams_dup(dh)) == NULL) 2098 { 2099 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); 2100 return 0; 2101 } 2102 if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) 2103 { 2104 if (!DH_generate_key(new)) 2105 { 2106 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); 2107 DH_free(new); 2108 return 0; 2109 } 2110 } 2111 if (cert->dh_tmp != NULL) 2112 DH_free(cert->dh_tmp); 2113 cert->dh_tmp=new; 2114 return 1; 2115 } 2116 /*break; */ 2117 case SSL_CTRL_SET_TMP_DH_CB: 2118 { 2119 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2120 return(0); 2121 } 2122 break; 2123#endif 2124#ifndef OPENSSL_NO_ECDH 2125 case SSL_CTRL_SET_TMP_ECDH: 2126 { 2127 EC_KEY *ecdh = NULL; 2128 2129 if (parg == NULL) 2130 { 2131 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); 2132 return 0; 2133 } 2134 ecdh = EC_KEY_dup((EC_KEY *)parg); 2135 if (ecdh == NULL) 2136 { 2137 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB); 2138 return 0; 2139 } 2140 if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) 2141 { 2142 if (!EC_KEY_generate_key(ecdh)) 2143 { 2144 EC_KEY_free(ecdh); 2145 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); 2146 return 0; 2147 } 2148 } 2149 2150 if (cert->ecdh_tmp != NULL) 2151 { 2152 EC_KEY_free(cert->ecdh_tmp); 2153 } 2154 cert->ecdh_tmp = ecdh; 2155 return 1; 2156 } 2157 /* break; */ 2158 case SSL_CTRL_SET_TMP_ECDH_CB: 2159 { 2160 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2161 return(0); 2162 } 2163 break; 2164#endif /* !OPENSSL_NO_ECDH */ 2165#ifndef OPENSSL_NO_TLSEXT 2166 case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: 2167 ctx->tlsext_servername_arg=parg; 2168 break; 2169 case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: 2170 case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: 2171 { 2172 unsigned char *keys = parg; 2173 if (!keys) 2174 return 48; 2175 if (larg != 48) 2176 { 2177 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); 2178 return 0; 2179 } 2180 if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) 2181 { 2182 memcpy(ctx->tlsext_tick_key_name, keys, 16); 2183 memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); 2184 memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); 2185 } 2186 else 2187 { 2188 memcpy(keys, ctx->tlsext_tick_key_name, 16); 2189 memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); 2190 memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); 2191 } 2192 return 1; 2193 } 2194 2195 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: 2196 ctx->tlsext_status_arg=parg; 2197 return 1; 2198 break; 2199 2200#endif /* !OPENSSL_NO_TLSEXT */ 2201 /* A Thawte special :-) */ 2202 case SSL_CTRL_EXTRA_CHAIN_CERT: 2203 if (ctx->extra_certs == NULL) 2204 { 2205 if ((ctx->extra_certs=sk_X509_new_null()) == NULL) 2206 return(0); 2207 } 2208 sk_X509_push(ctx->extra_certs,(X509 *)parg); 2209 break; 2210 2211 default: 2212 return(0); 2213 } 2214 return(1); 2215 } 2216 2217long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) 2218 { 2219 CERT *cert; 2220 2221 cert=ctx->cert; 2222 2223 switch (cmd) 2224 { 2225#ifndef OPENSSL_NO_RSA 2226 case SSL_CTRL_SET_TMP_RSA_CB: 2227 { 2228 cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; 2229 } 2230 break; 2231#endif 2232#ifndef OPENSSL_NO_DH 2233 case SSL_CTRL_SET_TMP_DH_CB: 2234 { 2235 cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; 2236 } 2237 break; 2238#endif 2239#ifndef OPENSSL_NO_ECDH 2240 case SSL_CTRL_SET_TMP_ECDH_CB: 2241 { 2242 cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; 2243 } 2244 break; 2245#endif 2246#ifndef OPENSSL_NO_TLSEXT 2247 case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: 2248 ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp; 2249 break; 2250 2251 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: 2252 ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp; 2253 break; 2254 2255 case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: 2256 ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *, 2257 unsigned char *, 2258 EVP_CIPHER_CTX *, 2259 HMAC_CTX *, int))fp; 2260 break; 2261 2262#endif 2263 default: 2264 return(0); 2265 } 2266 return(1); 2267 } 2268 2269/* This function needs to check if the ciphers required are actually 2270 * available */ 2271SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p) 2272 { 2273 SSL_CIPHER c,*cp; 2274 unsigned long id; 2275 2276 id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1]; 2277 c.id=id; 2278 cp = (SSL_CIPHER *)OBJ_bsearch((char *)&c, 2279 (char *)ssl3_ciphers, 2280 SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER), 2281 FP_ICC ssl_cipher_id_cmp); 2282 if (cp == NULL || cp->valid == 0) 2283 return NULL; 2284 else 2285 return cp; 2286 } 2287 2288int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) 2289 { 2290 long l; 2291 2292 if (p != NULL) 2293 { 2294 l=c->id; 2295 if ((l & 0xff000000) != 0x03000000) return(0); 2296 p[0]=((unsigned char)(l>> 8L))&0xFF; 2297 p[1]=((unsigned char)(l ))&0xFF; 2298 } 2299 return(2); 2300 } 2301 2302SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, 2303 STACK_OF(SSL_CIPHER) *srvr) 2304 { 2305 SSL_CIPHER *c,*ret=NULL; 2306 STACK_OF(SSL_CIPHER) *prio, *allow; 2307 int i,j,ok; 2308 2309 CERT *cert; 2310 unsigned long alg,mask,emask; 2311 2312 /* Let's see which ciphers we can support */ 2313 cert=s->cert; 2314 2315#if 0 2316 /* Do not set the compare functions, because this may lead to a 2317 * reordering by "id". We want to keep the original ordering. 2318 * We may pay a price in performance during sk_SSL_CIPHER_find(), 2319 * but would have to pay with the price of sk_SSL_CIPHER_dup(). 2320 */ 2321 sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp); 2322 sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp); 2323#endif 2324 2325#ifdef CIPHER_DEBUG 2326 printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), srvr); 2327 for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i) 2328 { 2329 c=sk_SSL_CIPHER_value(srvr,i); 2330 printf("%p:%s\n",c,c->name); 2331 } 2332 printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), clnt); 2333 for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i) 2334 { 2335 c=sk_SSL_CIPHER_value(clnt,i); 2336 printf("%p:%s\n",c,c->name); 2337 } 2338#endif 2339 2340 if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) 2341 { 2342 prio = srvr; 2343 allow = clnt; 2344 } 2345 else 2346 { 2347 prio = clnt; 2348 allow = srvr; 2349 } 2350 2351 for (i=0; i<sk_SSL_CIPHER_num(prio); i++) 2352 { 2353 c=sk_SSL_CIPHER_value(prio,i); 2354 2355 ssl_set_cert_masks(cert,c); 2356 mask=cert->mask; 2357 emask=cert->export_mask; 2358 2359#ifdef KSSL_DEBUG 2360 printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms); 2361#endif /* KSSL_DEBUG */ 2362 2363 alg=c->algorithms&(SSL_MKEY_MASK|SSL_AUTH_MASK); 2364#ifndef OPENSSL_NO_KRB5 2365 if (alg & SSL_KRB5) 2366 { 2367 if ( !kssl_keytab_is_available(s->kssl_ctx) ) 2368 continue; 2369 } 2370#endif /* OPENSSL_NO_KRB5 */ 2371 if (SSL_C_IS_EXPORT(c)) 2372 { 2373 ok=((alg & emask) == alg)?1:0; 2374#ifdef CIPHER_DEBUG 2375 printf("%d:[%08lX:%08lX]%p:%s (export)\n",ok,alg,emask, 2376 c,c->name); 2377#endif 2378 } 2379 else 2380 { 2381 ok=((alg & mask) == alg)?1:0; 2382#ifdef CIPHER_DEBUG 2383 printf("%d:[%08lX:%08lX]%p:%s\n",ok,alg,mask,c, 2384 c->name); 2385#endif 2386 } 2387 2388 if (!ok) continue; 2389 j=sk_SSL_CIPHER_find(allow,c); 2390 if (j >= 0) 2391 { 2392#if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) 2393 if ((alg & SSL_kECDHE) && (alg & SSL_aECDSA) && s->s3->is_probably_safari) 2394 { 2395 if (!ret) ret=sk_SSL_CIPHER_value(allow,j); 2396 continue; 2397 } 2398#endif 2399 ret=sk_SSL_CIPHER_value(allow,j); 2400 break; 2401 } 2402 } 2403 return(ret); 2404 } 2405 2406int ssl3_get_req_cert_type(SSL *s, unsigned char *p) 2407 { 2408 int ret=0; 2409 unsigned long alg; 2410 2411 alg=s->s3->tmp.new_cipher->algorithms; 2412 2413#ifndef OPENSSL_NO_DH 2414 if (alg & (SSL_kDHr|SSL_kEDH)) 2415 { 2416# ifndef OPENSSL_NO_RSA 2417 p[ret++]=SSL3_CT_RSA_FIXED_DH; 2418# endif 2419# ifndef OPENSSL_NO_DSA 2420 p[ret++]=SSL3_CT_DSS_FIXED_DH; 2421# endif 2422 } 2423 if ((s->version == SSL3_VERSION) && 2424 (alg & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) 2425 { 2426# ifndef OPENSSL_NO_RSA 2427 p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH; 2428# endif 2429# ifndef OPENSSL_NO_DSA 2430 p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH; 2431# endif 2432 } 2433#endif /* !OPENSSL_NO_DH */ 2434#ifndef OPENSSL_NO_RSA 2435 p[ret++]=SSL3_CT_RSA_SIGN; 2436#endif 2437#ifndef OPENSSL_NO_DSA 2438 p[ret++]=SSL3_CT_DSS_SIGN; 2439#endif 2440#ifndef OPENSSL_NO_ECDH 2441 /* We should ask for fixed ECDH certificates only 2442 * for SSL_kECDH (and not SSL_kECDHE) 2443 */ 2444 if ((alg & SSL_kECDH) && (s->version >= TLS1_VERSION)) 2445 { 2446 p[ret++]=TLS_CT_RSA_FIXED_ECDH; 2447 p[ret++]=TLS_CT_ECDSA_FIXED_ECDH; 2448 } 2449#endif 2450 2451#ifndef OPENSSL_NO_ECDSA 2452 /* ECDSA certs can be used with RSA cipher suites as well 2453 * so we don't need to check for SSL_kECDH or SSL_kECDHE 2454 */ 2455 if (s->version >= TLS1_VERSION) 2456 { 2457 p[ret++]=TLS_CT_ECDSA_SIGN; 2458 } 2459#endif 2460 return(ret); 2461 } 2462 2463int ssl3_shutdown(SSL *s) 2464 { 2465 int ret; 2466 2467 /* Don't do anything much if we have not done the handshake or 2468 * we don't want to send messages :-) */ 2469 if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) 2470 { 2471 s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); 2472 return(1); 2473 } 2474 2475 if (!(s->shutdown & SSL_SENT_SHUTDOWN)) 2476 { 2477 s->shutdown|=SSL_SENT_SHUTDOWN; 2478#if 1 2479 ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY); 2480#endif 2481 /* our shutdown alert has been sent now, and if it still needs 2482 * to be written, s->s3->alert_dispatch will be true */ 2483 if (s->s3->alert_dispatch) 2484 return(-1); /* return WANT_WRITE */ 2485 } 2486 else if (s->s3->alert_dispatch) 2487 { 2488 /* resend it if not sent */ 2489#if 1 2490 ret=s->method->ssl_dispatch_alert(s); 2491 if(ret == -1) 2492 { 2493 /* we only get to return -1 here the 2nd/Nth 2494 * invocation, we must have already signalled 2495 * return 0 upon a previous invoation, 2496 * return WANT_WRITE */ 2497 return(ret); 2498 } 2499#endif 2500 } 2501 else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) 2502 { 2503 /* If we are waiting for a close from our peer, we are closed */ 2504 s->method->ssl_read_bytes(s,0,NULL,0,0); 2505 if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) 2506 { 2507 return(-1); /* return WANT_READ */ 2508 } 2509 } 2510 2511 if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && 2512 !s->s3->alert_dispatch) 2513 return(1); 2514 else 2515 return(0); 2516 } 2517 2518int ssl3_write(SSL *s, const void *buf, int len) 2519 { 2520 int ret,n; 2521 2522#if 0 2523 if (s->shutdown & SSL_SEND_SHUTDOWN) 2524 { 2525 s->rwstate=SSL_NOTHING; 2526 return(0); 2527 } 2528#endif 2529 clear_sys_error(); 2530 if (s->s3->renegotiate) ssl3_renegotiate_check(s); 2531 2532 /* This is an experimental flag that sends the 2533 * last handshake message in the same packet as the first 2534 * use data - used to see if it helps the TCP protocol during 2535 * session-id reuse */ 2536 /* The second test is because the buffer may have been removed */ 2537 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) 2538 { 2539 /* First time through, we write into the buffer */ 2540 if (s->s3->delay_buf_pop_ret == 0) 2541 { 2542 ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA, 2543 buf,len); 2544 if (ret <= 0) return(ret); 2545 2546 s->s3->delay_buf_pop_ret=ret; 2547 } 2548 2549 s->rwstate=SSL_WRITING; 2550 n=BIO_flush(s->wbio); 2551 if (n <= 0) return(n); 2552 s->rwstate=SSL_NOTHING; 2553 2554 /* We have flushed the buffer, so remove it */ 2555 ssl_free_wbio_buffer(s); 2556 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; 2557 2558 ret=s->s3->delay_buf_pop_ret; 2559 s->s3->delay_buf_pop_ret=0; 2560 } 2561 else 2562 { 2563 ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA, 2564 buf,len); 2565 if (ret <= 0) return(ret); 2566 } 2567 2568 return(ret); 2569 } 2570 2571static int ssl3_read_internal(SSL *s, void *buf, int len, int peek) 2572 { 2573 int ret; 2574 2575 clear_sys_error(); 2576 if (s->s3->renegotiate) ssl3_renegotiate_check(s); 2577 s->s3->in_read_app_data=1; 2578 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); 2579 if ((ret == -1) && (s->s3->in_read_app_data == 2)) 2580 { 2581 /* ssl3_read_bytes decided to call s->handshake_func, which 2582 * called ssl3_read_bytes to read handshake data. 2583 * However, ssl3_read_bytes actually found application data 2584 * and thinks that application data makes sense here; so disable 2585 * handshake processing and try to read application data again. */ 2586 s->in_handshake++; 2587 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); 2588 s->in_handshake--; 2589 } 2590 else 2591 s->s3->in_read_app_data=0; 2592 2593 return(ret); 2594 } 2595 2596int ssl3_read(SSL *s, void *buf, int len) 2597 { 2598 return ssl3_read_internal(s, buf, len, 0); 2599 } 2600 2601int ssl3_peek(SSL *s, void *buf, int len) 2602 { 2603 return ssl3_read_internal(s, buf, len, 1); 2604 } 2605 2606int ssl3_renegotiate(SSL *s) 2607 { 2608 if (s->handshake_func == NULL) 2609 return(1); 2610 2611 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) 2612 return(0); 2613 2614 s->s3->renegotiate=1; 2615 return(1); 2616 } 2617 2618int ssl3_renegotiate_check(SSL *s) 2619 { 2620 int ret=0; 2621 2622 if (s->s3->renegotiate) 2623 { 2624 if ( (s->s3->rbuf.left == 0) && 2625 (s->s3->wbuf.left == 0) && 2626 !SSL_in_init(s)) 2627 { 2628/* 2629if we are the server, and we have sent a 'RENEGOTIATE' message, we 2630need to go to SSL_ST_ACCEPT. 2631*/ 2632 /* SSL_ST_ACCEPT */ 2633 s->state=SSL_ST_RENEGOTIATE; 2634 s->s3->renegotiate=0; 2635 s->s3->num_renegotiations++; 2636 s->s3->total_renegotiations++; 2637 ret=1; 2638 } 2639 } 2640 return(ret); 2641 } 2642