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