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-2007 The OpenSSL Project. All rights reserved. 60 * 61 * Redistribution and use in source and binary forms, with or without 62 * modification, are permitted provided that the following conditions 63 * are met: 64 * 65 * 1. Redistributions of source code must retain the above copyright 66 * notice, this list of conditions and the following disclaimer. 67 * 68 * 2. Redistributions in binary form must reproduce the above copyright 69 * notice, this list of conditions and the following disclaimer in 70 * the documentation and/or other materials provided with the 71 * distribution. 72 * 73 * 3. All advertising materials mentioning features or use of this 74 * software must display the following acknowledgment: 75 * "This product includes software developed by the OpenSSL Project 76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 77 * 78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 79 * endorse or promote products derived from this software without 80 * prior written permission. For written permission, please contact 81 * openssl-core@openssl.org. 82 * 83 * 5. Products derived from this software may not be called "OpenSSL" 84 * nor may "OpenSSL" appear in their names without prior written 85 * permission of the OpenSSL Project. 86 * 87 * 6. Redistributions of any form whatsoever must retain the following 88 * acknowledgment: 89 * "This product includes software developed by the OpenSSL Project 90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)" 91 * 92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 103 * OF THE POSSIBILITY OF SUCH DAMAGE. 104 * ==================================================================== 105 * 106 * This product includes cryptographic software written by Eric Young 107 * (eay@cryptsoft.com). This product includes software written by Tim 108 * Hudson (tjh@cryptsoft.com). 109 * 110 */ 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 * Copyright 2005 Nokia. All rights reserved. 126 * 127 * The portions of the attached software ("Contribution") is developed by 128 * Nokia Corporation and is licensed pursuant to the OpenSSL open source 129 * license. 130 * 131 * The Contribution, originally written by Mika Kousa and Pasi Eronen of 132 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites 133 * support (see RFC 4279) to OpenSSL. 134 * 135 * No patent licenses or other rights except those expressly stated in 136 * the OpenSSL open source license shall be deemed granted or received 137 * expressly, by implication, estoppel, or otherwise. 138 * 139 * No assurances are provided by Nokia that the Contribution does not 140 * infringe the patent or other intellectual property rights of any third 141 * party or that the license provides you with all the necessary rights 142 * to make use of the Contribution. 143 * 144 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN 145 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA 146 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY 147 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR 148 * OTHERWISE. 149 */ 150 151 #include <stdio.h> 152 #include <openssl/objects.h> 153 #include "ssl_locl.h" 154 #include "kssl_lcl.h" 155 #include <openssl/md5.h> 156 #ifndef OPENSSL_NO_DH 157 # include <openssl/dh.h> 158 #endif 159 160 const char ssl3_version_str[] = "SSLv3" OPENSSL_VERSION_PTEXT; 161 162 #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER)) 163 164 /* list of available SSLv3 ciphers (sorted by id) */ 165 OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = { 166 167 /* The RSA ciphers */ 168 /* Cipher 01 */ 169 { 170 1, 171 SSL3_TXT_RSA_NULL_MD5, 172 SSL3_CK_RSA_NULL_MD5, 173 SSL_kRSA, 174 SSL_aRSA, 175 SSL_eNULL, 176 SSL_MD5, 177 SSL_SSLV3, 178 SSL_NOT_EXP | SSL_STRONG_NONE, 179 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 180 0, 181 0, 182 }, 183 184 /* Cipher 02 */ 185 { 186 1, 187 SSL3_TXT_RSA_NULL_SHA, 188 SSL3_CK_RSA_NULL_SHA, 189 SSL_kRSA, 190 SSL_aRSA, 191 SSL_eNULL, 192 SSL_SHA1, 193 SSL_SSLV3, 194 SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS, 195 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 196 0, 197 0, 198 }, 199 200 /* Cipher 03 */ 201 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 202 { 203 1, 204 SSL3_TXT_RSA_RC4_40_MD5, 205 SSL3_CK_RSA_RC4_40_MD5, 206 SSL_kRSA, 207 SSL_aRSA, 208 SSL_RC4, 209 SSL_MD5, 210 SSL_SSLV3, 211 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 212 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 213 40, 214 128, 215 }, 216 #endif 217 218 /* Cipher 04 */ 219 { 220 1, 221 SSL3_TXT_RSA_RC4_128_MD5, 222 SSL3_CK_RSA_RC4_128_MD5, 223 SSL_kRSA, 224 SSL_aRSA, 225 SSL_RC4, 226 SSL_MD5, 227 SSL_SSLV3, 228 SSL_NOT_EXP | SSL_MEDIUM, 229 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 230 128, 231 128, 232 }, 233 234 /* Cipher 05 */ 235 { 236 1, 237 SSL3_TXT_RSA_RC4_128_SHA, 238 SSL3_CK_RSA_RC4_128_SHA, 239 SSL_kRSA, 240 SSL_aRSA, 241 SSL_RC4, 242 SSL_SHA1, 243 SSL_SSLV3, 244 SSL_NOT_EXP | SSL_MEDIUM, 245 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 246 128, 247 128, 248 }, 249 250 /* Cipher 06 */ 251 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 252 { 253 1, 254 SSL3_TXT_RSA_RC2_40_MD5, 255 SSL3_CK_RSA_RC2_40_MD5, 256 SSL_kRSA, 257 SSL_aRSA, 258 SSL_RC2, 259 SSL_MD5, 260 SSL_SSLV3, 261 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 262 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 263 40, 264 128, 265 }, 266 #endif 267 268 /* Cipher 07 */ 269 #ifndef OPENSSL_NO_IDEA 270 { 271 1, 272 SSL3_TXT_RSA_IDEA_128_SHA, 273 SSL3_CK_RSA_IDEA_128_SHA, 274 SSL_kRSA, 275 SSL_aRSA, 276 SSL_IDEA, 277 SSL_SHA1, 278 SSL_SSLV3, 279 SSL_NOT_EXP | SSL_MEDIUM, 280 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 281 128, 282 128, 283 }, 284 #endif 285 286 /* Cipher 08 */ 287 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 288 { 289 1, 290 SSL3_TXT_RSA_DES_40_CBC_SHA, 291 SSL3_CK_RSA_DES_40_CBC_SHA, 292 SSL_kRSA, 293 SSL_aRSA, 294 SSL_DES, 295 SSL_SHA1, 296 SSL_SSLV3, 297 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 298 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 299 40, 300 56, 301 }, 302 #endif 303 304 /* Cipher 09 */ 305 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 306 { 307 1, 308 SSL3_TXT_RSA_DES_64_CBC_SHA, 309 SSL3_CK_RSA_DES_64_CBC_SHA, 310 SSL_kRSA, 311 SSL_aRSA, 312 SSL_DES, 313 SSL_SHA1, 314 SSL_SSLV3, 315 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW, 316 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 317 56, 318 56, 319 }, 320 #endif 321 322 /* Cipher 0A */ 323 { 324 1, 325 SSL3_TXT_RSA_DES_192_CBC3_SHA, 326 SSL3_CK_RSA_DES_192_CBC3_SHA, 327 SSL_kRSA, 328 SSL_aRSA, 329 SSL_3DES, 330 SSL_SHA1, 331 SSL_SSLV3, 332 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 333 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 334 112, 335 168, 336 }, 337 338 /* The DH ciphers */ 339 /* Cipher 0B */ 340 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 341 { 342 0, 343 SSL3_TXT_DH_DSS_DES_40_CBC_SHA, 344 SSL3_CK_DH_DSS_DES_40_CBC_SHA, 345 SSL_kDHd, 346 SSL_aDH, 347 SSL_DES, 348 SSL_SHA1, 349 SSL_SSLV3, 350 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 351 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 352 40, 353 56, 354 }, 355 #endif 356 357 /* Cipher 0C */ 358 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 359 { 360 1, 361 SSL3_TXT_DH_DSS_DES_64_CBC_SHA, 362 SSL3_CK_DH_DSS_DES_64_CBC_SHA, 363 SSL_kDHd, 364 SSL_aDH, 365 SSL_DES, 366 SSL_SHA1, 367 SSL_SSLV3, 368 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW, 369 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 370 56, 371 56, 372 }, 373 #endif 374 375 /* Cipher 0D */ 376 { 377 1, 378 SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, 379 SSL3_CK_DH_DSS_DES_192_CBC3_SHA, 380 SSL_kDHd, 381 SSL_aDH, 382 SSL_3DES, 383 SSL_SHA1, 384 SSL_SSLV3, 385 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 386 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 387 112, 388 168, 389 }, 390 391 /* Cipher 0E */ 392 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 393 { 394 0, 395 SSL3_TXT_DH_RSA_DES_40_CBC_SHA, 396 SSL3_CK_DH_RSA_DES_40_CBC_SHA, 397 SSL_kDHr, 398 SSL_aDH, 399 SSL_DES, 400 SSL_SHA1, 401 SSL_SSLV3, 402 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 403 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 404 40, 405 56, 406 }, 407 #endif 408 409 /* Cipher 0F */ 410 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 411 { 412 1, 413 SSL3_TXT_DH_RSA_DES_64_CBC_SHA, 414 SSL3_CK_DH_RSA_DES_64_CBC_SHA, 415 SSL_kDHr, 416 SSL_aDH, 417 SSL_DES, 418 SSL_SHA1, 419 SSL_SSLV3, 420 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW, 421 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 422 56, 423 56, 424 }, 425 #endif 426 427 /* Cipher 10 */ 428 { 429 1, 430 SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, 431 SSL3_CK_DH_RSA_DES_192_CBC3_SHA, 432 SSL_kDHr, 433 SSL_aDH, 434 SSL_3DES, 435 SSL_SHA1, 436 SSL_SSLV3, 437 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 438 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 439 112, 440 168, 441 }, 442 443 /* The Ephemeral DH ciphers */ 444 /* Cipher 11 */ 445 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 446 { 447 1, 448 SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, 449 SSL3_CK_EDH_DSS_DES_40_CBC_SHA, 450 SSL_kEDH, 451 SSL_aDSS, 452 SSL_DES, 453 SSL_SHA1, 454 SSL_SSLV3, 455 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 456 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 457 40, 458 56, 459 }, 460 #endif 461 462 /* Cipher 12 */ 463 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 464 { 465 1, 466 SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, 467 SSL3_CK_EDH_DSS_DES_64_CBC_SHA, 468 SSL_kEDH, 469 SSL_aDSS, 470 SSL_DES, 471 SSL_SHA1, 472 SSL_SSLV3, 473 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW, 474 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 475 56, 476 56, 477 }, 478 #endif 479 480 /* Cipher 13 */ 481 { 482 1, 483 SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, 484 SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, 485 SSL_kEDH, 486 SSL_aDSS, 487 SSL_3DES, 488 SSL_SHA1, 489 SSL_SSLV3, 490 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 491 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 492 112, 493 168, 494 }, 495 496 /* Cipher 14 */ 497 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 498 { 499 1, 500 SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, 501 SSL3_CK_EDH_RSA_DES_40_CBC_SHA, 502 SSL_kEDH, 503 SSL_aRSA, 504 SSL_DES, 505 SSL_SHA1, 506 SSL_SSLV3, 507 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 508 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 509 40, 510 56, 511 }, 512 #endif 513 514 /* Cipher 15 */ 515 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 516 { 517 1, 518 SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, 519 SSL3_CK_EDH_RSA_DES_64_CBC_SHA, 520 SSL_kEDH, 521 SSL_aRSA, 522 SSL_DES, 523 SSL_SHA1, 524 SSL_SSLV3, 525 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW, 526 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 527 56, 528 56, 529 }, 530 #endif 531 532 /* Cipher 16 */ 533 { 534 1, 535 SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, 536 SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, 537 SSL_kEDH, 538 SSL_aRSA, 539 SSL_3DES, 540 SSL_SHA1, 541 SSL_SSLV3, 542 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 543 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 544 112, 545 168, 546 }, 547 548 /* Cipher 17 */ 549 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 550 { 551 1, 552 SSL3_TXT_ADH_RC4_40_MD5, 553 SSL3_CK_ADH_RC4_40_MD5, 554 SSL_kEDH, 555 SSL_aNULL, 556 SSL_RC4, 557 SSL_MD5, 558 SSL_SSLV3, 559 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 560 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 561 40, 562 128, 563 }, 564 #endif 565 566 /* Cipher 18 */ 567 { 568 1, 569 SSL3_TXT_ADH_RC4_128_MD5, 570 SSL3_CK_ADH_RC4_128_MD5, 571 SSL_kEDH, 572 SSL_aNULL, 573 SSL_RC4, 574 SSL_MD5, 575 SSL_SSLV3, 576 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM, 577 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 578 128, 579 128, 580 }, 581 582 /* Cipher 19 */ 583 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 584 { 585 1, 586 SSL3_TXT_ADH_DES_40_CBC_SHA, 587 SSL3_CK_ADH_DES_40_CBC_SHA, 588 SSL_kEDH, 589 SSL_aNULL, 590 SSL_DES, 591 SSL_SHA1, 592 SSL_SSLV3, 593 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 594 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 595 40, 596 128, 597 }, 598 #endif 599 600 /* Cipher 1A */ 601 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 602 { 603 1, 604 SSL3_TXT_ADH_DES_64_CBC_SHA, 605 SSL3_CK_ADH_DES_64_CBC_SHA, 606 SSL_kEDH, 607 SSL_aNULL, 608 SSL_DES, 609 SSL_SHA1, 610 SSL_SSLV3, 611 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW, 612 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 613 56, 614 56, 615 }, 616 #endif 617 618 /* Cipher 1B */ 619 { 620 1, 621 SSL3_TXT_ADH_DES_192_CBC_SHA, 622 SSL3_CK_ADH_DES_192_CBC_SHA, 623 SSL_kEDH, 624 SSL_aNULL, 625 SSL_3DES, 626 SSL_SHA1, 627 SSL_SSLV3, 628 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 629 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 630 112, 631 168, 632 }, 633 634 /* Fortezza ciphersuite from SSL 3.0 spec */ 635 #if 0 636 /* Cipher 1C */ 637 { 638 0, 639 SSL3_TXT_FZA_DMS_NULL_SHA, 640 SSL3_CK_FZA_DMS_NULL_SHA, 641 SSL_kFZA, 642 SSL_aFZA, 643 SSL_eNULL, 644 SSL_SHA1, 645 SSL_SSLV3, 646 SSL_NOT_EXP | SSL_STRONG_NONE, 647 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 648 0, 649 0, 650 }, 651 652 /* Cipher 1D */ 653 { 654 0, 655 SSL3_TXT_FZA_DMS_FZA_SHA, 656 SSL3_CK_FZA_DMS_FZA_SHA, 657 SSL_kFZA, 658 SSL_aFZA, 659 SSL_eFZA, 660 SSL_SHA1, 661 SSL_SSLV3, 662 SSL_NOT_EXP | SSL_STRONG_NONE, 663 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 664 0, 665 0, 666 }, 667 668 /* Cipher 1E */ 669 { 670 0, 671 SSL3_TXT_FZA_DMS_RC4_SHA, 672 SSL3_CK_FZA_DMS_RC4_SHA, 673 SSL_kFZA, 674 SSL_aFZA, 675 SSL_RC4, 676 SSL_SHA1, 677 SSL_SSLV3, 678 SSL_NOT_EXP | SSL_MEDIUM, 679 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 680 128, 681 128, 682 }, 683 #endif 684 685 #ifndef OPENSSL_NO_KRB5 686 /* The Kerberos ciphers*/ 687 /* Cipher 1E */ 688 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 689 { 690 1, 691 SSL3_TXT_KRB5_DES_64_CBC_SHA, 692 SSL3_CK_KRB5_DES_64_CBC_SHA, 693 SSL_kKRB5, 694 SSL_aKRB5, 695 SSL_DES, 696 SSL_SHA1, 697 SSL_SSLV3, 698 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW, 699 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 700 56, 701 56, 702 }, 703 # endif 704 705 /* Cipher 1F */ 706 { 707 1, 708 SSL3_TXT_KRB5_DES_192_CBC3_SHA, 709 SSL3_CK_KRB5_DES_192_CBC3_SHA, 710 SSL_kKRB5, 711 SSL_aKRB5, 712 SSL_3DES, 713 SSL_SHA1, 714 SSL_SSLV3, 715 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 716 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 717 112, 718 168, 719 }, 720 721 /* Cipher 20 */ 722 { 723 1, 724 SSL3_TXT_KRB5_RC4_128_SHA, 725 SSL3_CK_KRB5_RC4_128_SHA, 726 SSL_kKRB5, 727 SSL_aKRB5, 728 SSL_RC4, 729 SSL_SHA1, 730 SSL_SSLV3, 731 SSL_NOT_EXP | SSL_MEDIUM, 732 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 733 128, 734 128, 735 }, 736 737 /* Cipher 21 */ 738 { 739 1, 740 SSL3_TXT_KRB5_IDEA_128_CBC_SHA, 741 SSL3_CK_KRB5_IDEA_128_CBC_SHA, 742 SSL_kKRB5, 743 SSL_aKRB5, 744 SSL_IDEA, 745 SSL_SHA1, 746 SSL_SSLV3, 747 SSL_NOT_EXP | SSL_MEDIUM, 748 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 749 128, 750 128, 751 }, 752 753 /* Cipher 22 */ 754 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 755 { 756 1, 757 SSL3_TXT_KRB5_DES_64_CBC_MD5, 758 SSL3_CK_KRB5_DES_64_CBC_MD5, 759 SSL_kKRB5, 760 SSL_aKRB5, 761 SSL_DES, 762 SSL_MD5, 763 SSL_SSLV3, 764 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW, 765 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 766 56, 767 56, 768 }, 769 # endif 770 771 /* Cipher 23 */ 772 { 773 1, 774 SSL3_TXT_KRB5_DES_192_CBC3_MD5, 775 SSL3_CK_KRB5_DES_192_CBC3_MD5, 776 SSL_kKRB5, 777 SSL_aKRB5, 778 SSL_3DES, 779 SSL_MD5, 780 SSL_SSLV3, 781 SSL_NOT_EXP | SSL_MEDIUM, 782 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 783 112, 784 168, 785 }, 786 787 /* Cipher 24 */ 788 { 789 1, 790 SSL3_TXT_KRB5_RC4_128_MD5, 791 SSL3_CK_KRB5_RC4_128_MD5, 792 SSL_kKRB5, 793 SSL_aKRB5, 794 SSL_RC4, 795 SSL_MD5, 796 SSL_SSLV3, 797 SSL_NOT_EXP | SSL_MEDIUM, 798 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 799 128, 800 128, 801 }, 802 803 /* Cipher 25 */ 804 { 805 1, 806 SSL3_TXT_KRB5_IDEA_128_CBC_MD5, 807 SSL3_CK_KRB5_IDEA_128_CBC_MD5, 808 SSL_kKRB5, 809 SSL_aKRB5, 810 SSL_IDEA, 811 SSL_MD5, 812 SSL_SSLV3, 813 SSL_NOT_EXP | SSL_MEDIUM, 814 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 815 128, 816 128, 817 }, 818 819 /* Cipher 26 */ 820 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 821 { 822 1, 823 SSL3_TXT_KRB5_DES_40_CBC_SHA, 824 SSL3_CK_KRB5_DES_40_CBC_SHA, 825 SSL_kKRB5, 826 SSL_aKRB5, 827 SSL_DES, 828 SSL_SHA1, 829 SSL_SSLV3, 830 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 831 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 832 40, 833 56, 834 }, 835 # endif 836 837 /* Cipher 27 */ 838 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 839 { 840 1, 841 SSL3_TXT_KRB5_RC2_40_CBC_SHA, 842 SSL3_CK_KRB5_RC2_40_CBC_SHA, 843 SSL_kKRB5, 844 SSL_aKRB5, 845 SSL_RC2, 846 SSL_SHA1, 847 SSL_SSLV3, 848 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 849 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 850 40, 851 128, 852 }, 853 # endif 854 855 /* Cipher 28 */ 856 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 857 { 858 1, 859 SSL3_TXT_KRB5_RC4_40_SHA, 860 SSL3_CK_KRB5_RC4_40_SHA, 861 SSL_kKRB5, 862 SSL_aKRB5, 863 SSL_RC4, 864 SSL_SHA1, 865 SSL_SSLV3, 866 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 867 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 868 40, 869 128, 870 }, 871 # endif 872 873 /* Cipher 29 */ 874 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 875 { 876 1, 877 SSL3_TXT_KRB5_DES_40_CBC_MD5, 878 SSL3_CK_KRB5_DES_40_CBC_MD5, 879 SSL_kKRB5, 880 SSL_aKRB5, 881 SSL_DES, 882 SSL_MD5, 883 SSL_SSLV3, 884 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 885 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 886 40, 887 56, 888 }, 889 # endif 890 891 /* Cipher 2A */ 892 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 893 { 894 1, 895 SSL3_TXT_KRB5_RC2_40_CBC_MD5, 896 SSL3_CK_KRB5_RC2_40_CBC_MD5, 897 SSL_kKRB5, 898 SSL_aKRB5, 899 SSL_RC2, 900 SSL_MD5, 901 SSL_SSLV3, 902 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 903 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 904 40, 905 128, 906 }, 907 # endif 908 909 /* Cipher 2B */ 910 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 911 { 912 1, 913 SSL3_TXT_KRB5_RC4_40_MD5, 914 SSL3_CK_KRB5_RC4_40_MD5, 915 SSL_kKRB5, 916 SSL_aKRB5, 917 SSL_RC4, 918 SSL_MD5, 919 SSL_SSLV3, 920 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40, 921 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 922 40, 923 128, 924 }, 925 # endif 926 #endif /* OPENSSL_NO_KRB5 */ 927 928 /* New AES ciphersuites */ 929 /* Cipher 2F */ 930 { 931 1, 932 TLS1_TXT_RSA_WITH_AES_128_SHA, 933 TLS1_CK_RSA_WITH_AES_128_SHA, 934 SSL_kRSA, 935 SSL_aRSA, 936 SSL_AES128, 937 SSL_SHA1, 938 SSL_TLSV1, 939 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 940 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 941 128, 942 128, 943 }, 944 /* Cipher 30 */ 945 { 946 1, 947 TLS1_TXT_DH_DSS_WITH_AES_128_SHA, 948 TLS1_CK_DH_DSS_WITH_AES_128_SHA, 949 SSL_kDHd, 950 SSL_aDH, 951 SSL_AES128, 952 SSL_SHA1, 953 SSL_TLSV1, 954 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 955 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 956 128, 957 128, 958 }, 959 /* Cipher 31 */ 960 { 961 1, 962 TLS1_TXT_DH_RSA_WITH_AES_128_SHA, 963 TLS1_CK_DH_RSA_WITH_AES_128_SHA, 964 SSL_kDHr, 965 SSL_aDH, 966 SSL_AES128, 967 SSL_SHA1, 968 SSL_TLSV1, 969 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 970 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 971 128, 972 128, 973 }, 974 /* Cipher 32 */ 975 { 976 1, 977 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, 978 TLS1_CK_DHE_DSS_WITH_AES_128_SHA, 979 SSL_kEDH, 980 SSL_aDSS, 981 SSL_AES128, 982 SSL_SHA1, 983 SSL_TLSV1, 984 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 985 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 986 128, 987 128, 988 }, 989 /* Cipher 33 */ 990 { 991 1, 992 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, 993 TLS1_CK_DHE_RSA_WITH_AES_128_SHA, 994 SSL_kEDH, 995 SSL_aRSA, 996 SSL_AES128, 997 SSL_SHA1, 998 SSL_TLSV1, 999 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1000 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1001 128, 1002 128, 1003 }, 1004 /* Cipher 34 */ 1005 { 1006 1, 1007 TLS1_TXT_ADH_WITH_AES_128_SHA, 1008 TLS1_CK_ADH_WITH_AES_128_SHA, 1009 SSL_kEDH, 1010 SSL_aNULL, 1011 SSL_AES128, 1012 SSL_SHA1, 1013 SSL_TLSV1, 1014 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1015 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1016 128, 1017 128, 1018 }, 1019 1020 /* Cipher 35 */ 1021 { 1022 1, 1023 TLS1_TXT_RSA_WITH_AES_256_SHA, 1024 TLS1_CK_RSA_WITH_AES_256_SHA, 1025 SSL_kRSA, 1026 SSL_aRSA, 1027 SSL_AES256, 1028 SSL_SHA1, 1029 SSL_TLSV1, 1030 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1031 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1032 256, 1033 256, 1034 }, 1035 /* Cipher 36 */ 1036 { 1037 1, 1038 TLS1_TXT_DH_DSS_WITH_AES_256_SHA, 1039 TLS1_CK_DH_DSS_WITH_AES_256_SHA, 1040 SSL_kDHd, 1041 SSL_aDH, 1042 SSL_AES256, 1043 SSL_SHA1, 1044 SSL_TLSV1, 1045 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1046 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1047 256, 1048 256, 1049 }, 1050 1051 /* Cipher 37 */ 1052 { 1053 1, 1054 TLS1_TXT_DH_RSA_WITH_AES_256_SHA, 1055 TLS1_CK_DH_RSA_WITH_AES_256_SHA, 1056 SSL_kDHr, 1057 SSL_aDH, 1058 SSL_AES256, 1059 SSL_SHA1, 1060 SSL_TLSV1, 1061 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1062 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1063 256, 1064 256, 1065 }, 1066 1067 /* Cipher 38 */ 1068 { 1069 1, 1070 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, 1071 TLS1_CK_DHE_DSS_WITH_AES_256_SHA, 1072 SSL_kEDH, 1073 SSL_aDSS, 1074 SSL_AES256, 1075 SSL_SHA1, 1076 SSL_TLSV1, 1077 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1078 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1079 256, 1080 256, 1081 }, 1082 1083 /* Cipher 39 */ 1084 { 1085 1, 1086 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, 1087 TLS1_CK_DHE_RSA_WITH_AES_256_SHA, 1088 SSL_kEDH, 1089 SSL_aRSA, 1090 SSL_AES256, 1091 SSL_SHA1, 1092 SSL_TLSV1, 1093 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1094 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1095 256, 1096 256, 1097 }, 1098 1099 /* Cipher 3A */ 1100 { 1101 1, 1102 TLS1_TXT_ADH_WITH_AES_256_SHA, 1103 TLS1_CK_ADH_WITH_AES_256_SHA, 1104 SSL_kEDH, 1105 SSL_aNULL, 1106 SSL_AES256, 1107 SSL_SHA1, 1108 SSL_TLSV1, 1109 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1110 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1111 256, 1112 256, 1113 }, 1114 1115 /* TLS v1.2 ciphersuites */ 1116 /* Cipher 3B */ 1117 { 1118 1, 1119 TLS1_TXT_RSA_WITH_NULL_SHA256, 1120 TLS1_CK_RSA_WITH_NULL_SHA256, 1121 SSL_kRSA, 1122 SSL_aRSA, 1123 SSL_eNULL, 1124 SSL_SHA256, 1125 SSL_TLSV1_2, 1126 SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS, 1127 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1128 0, 1129 0, 1130 }, 1131 1132 /* Cipher 3C */ 1133 { 1134 1, 1135 TLS1_TXT_RSA_WITH_AES_128_SHA256, 1136 TLS1_CK_RSA_WITH_AES_128_SHA256, 1137 SSL_kRSA, 1138 SSL_aRSA, 1139 SSL_AES128, 1140 SSL_SHA256, 1141 SSL_TLSV1_2, 1142 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1143 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1144 128, 1145 128, 1146 }, 1147 1148 /* Cipher 3D */ 1149 { 1150 1, 1151 TLS1_TXT_RSA_WITH_AES_256_SHA256, 1152 TLS1_CK_RSA_WITH_AES_256_SHA256, 1153 SSL_kRSA, 1154 SSL_aRSA, 1155 SSL_AES256, 1156 SSL_SHA256, 1157 SSL_TLSV1_2, 1158 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1159 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1160 256, 1161 256, 1162 }, 1163 1164 /* Cipher 3E */ 1165 { 1166 1, 1167 TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, 1168 TLS1_CK_DH_DSS_WITH_AES_128_SHA256, 1169 SSL_kDHd, 1170 SSL_aDH, 1171 SSL_AES128, 1172 SSL_SHA256, 1173 SSL_TLSV1_2, 1174 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1175 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1176 128, 1177 128, 1178 }, 1179 1180 /* Cipher 3F */ 1181 { 1182 1, 1183 TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, 1184 TLS1_CK_DH_RSA_WITH_AES_128_SHA256, 1185 SSL_kDHr, 1186 SSL_aDH, 1187 SSL_AES128, 1188 SSL_SHA256, 1189 SSL_TLSV1_2, 1190 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1191 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1192 128, 1193 128, 1194 }, 1195 1196 /* Cipher 40 */ 1197 { 1198 1, 1199 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, 1200 TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, 1201 SSL_kEDH, 1202 SSL_aDSS, 1203 SSL_AES128, 1204 SSL_SHA256, 1205 SSL_TLSV1_2, 1206 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1207 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1208 128, 1209 128, 1210 }, 1211 1212 #ifndef OPENSSL_NO_CAMELLIA 1213 /* Camellia ciphersuites from RFC4132 (128-bit portion) */ 1214 1215 /* Cipher 41 */ 1216 { 1217 1, 1218 TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, 1219 TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, 1220 SSL_kRSA, 1221 SSL_aRSA, 1222 SSL_CAMELLIA128, 1223 SSL_SHA1, 1224 SSL_TLSV1, 1225 SSL_NOT_EXP | SSL_HIGH, 1226 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1227 128, 1228 128, 1229 }, 1230 1231 /* Cipher 42 */ 1232 { 1233 1, 1234 TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, 1235 TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, 1236 SSL_kDHd, 1237 SSL_aDH, 1238 SSL_CAMELLIA128, 1239 SSL_SHA1, 1240 SSL_TLSV1, 1241 SSL_NOT_EXP | SSL_HIGH, 1242 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1243 128, 1244 128, 1245 }, 1246 1247 /* Cipher 43 */ 1248 { 1249 1, 1250 TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, 1251 TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, 1252 SSL_kDHr, 1253 SSL_aDH, 1254 SSL_CAMELLIA128, 1255 SSL_SHA1, 1256 SSL_TLSV1, 1257 SSL_NOT_EXP | SSL_HIGH, 1258 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1259 128, 1260 128, 1261 }, 1262 1263 /* Cipher 44 */ 1264 { 1265 1, 1266 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, 1267 TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, 1268 SSL_kEDH, 1269 SSL_aDSS, 1270 SSL_CAMELLIA128, 1271 SSL_SHA1, 1272 SSL_TLSV1, 1273 SSL_NOT_EXP | SSL_HIGH, 1274 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1275 128, 1276 128, 1277 }, 1278 1279 /* Cipher 45 */ 1280 { 1281 1, 1282 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, 1283 TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, 1284 SSL_kEDH, 1285 SSL_aRSA, 1286 SSL_CAMELLIA128, 1287 SSL_SHA1, 1288 SSL_TLSV1, 1289 SSL_NOT_EXP | SSL_HIGH, 1290 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1291 128, 1292 128, 1293 }, 1294 1295 /* Cipher 46 */ 1296 { 1297 1, 1298 TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, 1299 TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, 1300 SSL_kEDH, 1301 SSL_aNULL, 1302 SSL_CAMELLIA128, 1303 SSL_SHA1, 1304 SSL_TLSV1, 1305 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH, 1306 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1307 128, 1308 128, 1309 }, 1310 #endif /* OPENSSL_NO_CAMELLIA */ 1311 1312 #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 1313 /* New TLS Export CipherSuites from expired ID */ 1314 # if 0 1315 /* Cipher 60 */ 1316 { 1317 1, 1318 TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, 1319 TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, 1320 SSL_kRSA, 1321 SSL_aRSA, 1322 SSL_RC4, 1323 SSL_MD5, 1324 SSL_TLSV1, 1325 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56, 1326 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1327 56, 1328 128, 1329 }, 1330 1331 /* Cipher 61 */ 1332 { 1333 1, 1334 TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, 1335 TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, 1336 SSL_kRSA, 1337 SSL_aRSA, 1338 SSL_RC2, 1339 SSL_MD5, 1340 SSL_TLSV1, 1341 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56, 1342 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1343 56, 1344 128, 1345 }, 1346 # endif 1347 1348 /* Cipher 62 */ 1349 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 1350 { 1351 1, 1352 TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, 1353 TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, 1354 SSL_kRSA, 1355 SSL_aRSA, 1356 SSL_DES, 1357 SSL_SHA1, 1358 SSL_TLSV1, 1359 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56, 1360 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1361 56, 1362 56, 1363 }, 1364 # endif 1365 1366 /* Cipher 63 */ 1367 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 1368 { 1369 1, 1370 TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, 1371 TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, 1372 SSL_kEDH, 1373 SSL_aDSS, 1374 SSL_DES, 1375 SSL_SHA1, 1376 SSL_TLSV1, 1377 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56, 1378 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1379 56, 1380 56, 1381 }, 1382 # endif 1383 1384 /* Cipher 64 */ 1385 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 1386 { 1387 1, 1388 TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, 1389 TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, 1390 SSL_kRSA, 1391 SSL_aRSA, 1392 SSL_RC4, 1393 SSL_SHA1, 1394 SSL_TLSV1, 1395 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56, 1396 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1397 56, 1398 128, 1399 }, 1400 # endif 1401 1402 /* Cipher 65 */ 1403 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS 1404 { 1405 1, 1406 TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, 1407 TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, 1408 SSL_kEDH, 1409 SSL_aDSS, 1410 SSL_RC4, 1411 SSL_SHA1, 1412 SSL_TLSV1, 1413 SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56, 1414 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1415 56, 1416 128, 1417 }, 1418 # endif 1419 1420 /* Cipher 66 */ 1421 { 1422 1, 1423 TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, 1424 TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, 1425 SSL_kEDH, 1426 SSL_aDSS, 1427 SSL_RC4, 1428 SSL_SHA1, 1429 SSL_TLSV1, 1430 SSL_NOT_EXP | SSL_MEDIUM, 1431 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1432 128, 1433 128, 1434 }, 1435 #endif 1436 1437 /* TLS v1.2 ciphersuites */ 1438 /* Cipher 67 */ 1439 { 1440 1, 1441 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, 1442 TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, 1443 SSL_kEDH, 1444 SSL_aRSA, 1445 SSL_AES128, 1446 SSL_SHA256, 1447 SSL_TLSV1_2, 1448 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1449 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1450 128, 1451 128, 1452 }, 1453 1454 /* Cipher 68 */ 1455 { 1456 1, 1457 TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, 1458 TLS1_CK_DH_DSS_WITH_AES_256_SHA256, 1459 SSL_kDHd, 1460 SSL_aDH, 1461 SSL_AES256, 1462 SSL_SHA256, 1463 SSL_TLSV1_2, 1464 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1465 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1466 256, 1467 256, 1468 }, 1469 1470 /* Cipher 69 */ 1471 { 1472 1, 1473 TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, 1474 TLS1_CK_DH_RSA_WITH_AES_256_SHA256, 1475 SSL_kDHr, 1476 SSL_aDH, 1477 SSL_AES256, 1478 SSL_SHA256, 1479 SSL_TLSV1_2, 1480 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1481 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1482 256, 1483 256, 1484 }, 1485 1486 /* Cipher 6A */ 1487 { 1488 1, 1489 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, 1490 TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, 1491 SSL_kEDH, 1492 SSL_aDSS, 1493 SSL_AES256, 1494 SSL_SHA256, 1495 SSL_TLSV1_2, 1496 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1497 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1498 256, 1499 256, 1500 }, 1501 1502 /* Cipher 6B */ 1503 { 1504 1, 1505 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, 1506 TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, 1507 SSL_kEDH, 1508 SSL_aRSA, 1509 SSL_AES256, 1510 SSL_SHA256, 1511 SSL_TLSV1_2, 1512 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1513 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1514 256, 1515 256, 1516 }, 1517 1518 /* Cipher 6C */ 1519 { 1520 1, 1521 TLS1_TXT_ADH_WITH_AES_128_SHA256, 1522 TLS1_CK_ADH_WITH_AES_128_SHA256, 1523 SSL_kEDH, 1524 SSL_aNULL, 1525 SSL_AES128, 1526 SSL_SHA256, 1527 SSL_TLSV1_2, 1528 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1529 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1530 128, 1531 128, 1532 }, 1533 1534 /* Cipher 6D */ 1535 { 1536 1, 1537 TLS1_TXT_ADH_WITH_AES_256_SHA256, 1538 TLS1_CK_ADH_WITH_AES_256_SHA256, 1539 SSL_kEDH, 1540 SSL_aNULL, 1541 SSL_AES256, 1542 SSL_SHA256, 1543 SSL_TLSV1_2, 1544 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1545 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1546 256, 1547 256, 1548 }, 1549 1550 /* GOST Ciphersuites */ 1551 1552 { 1553 1, 1554 "GOST94-GOST89-GOST89", 1555 0x3000080, 1556 SSL_kGOST, 1557 SSL_aGOST94, 1558 SSL_eGOST2814789CNT, 1559 SSL_GOST89MAC, 1560 SSL_TLSV1, 1561 SSL_NOT_EXP | SSL_HIGH, 1562 SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC, 1563 256, 1564 256}, 1565 { 1566 1, 1567 "GOST2001-GOST89-GOST89", 1568 0x3000081, 1569 SSL_kGOST, 1570 SSL_aGOST01, 1571 SSL_eGOST2814789CNT, 1572 SSL_GOST89MAC, 1573 SSL_TLSV1, 1574 SSL_NOT_EXP | SSL_HIGH, 1575 SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC, 1576 256, 1577 256}, 1578 { 1579 1, 1580 "GOST94-NULL-GOST94", 1581 0x3000082, 1582 SSL_kGOST, 1583 SSL_aGOST94, 1584 SSL_eNULL, 1585 SSL_GOST94, 1586 SSL_TLSV1, 1587 SSL_NOT_EXP | SSL_STRONG_NONE, 1588 SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94, 1589 0, 1590 0}, 1591 { 1592 1, 1593 "GOST2001-NULL-GOST94", 1594 0x3000083, 1595 SSL_kGOST, 1596 SSL_aGOST01, 1597 SSL_eNULL, 1598 SSL_GOST94, 1599 SSL_TLSV1, 1600 SSL_NOT_EXP | SSL_STRONG_NONE, 1601 SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94, 1602 0, 1603 0}, 1604 1605 #ifndef OPENSSL_NO_CAMELLIA 1606 /* Camellia ciphersuites from RFC4132 (256-bit portion) */ 1607 1608 /* Cipher 84 */ 1609 { 1610 1, 1611 TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, 1612 TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, 1613 SSL_kRSA, 1614 SSL_aRSA, 1615 SSL_CAMELLIA256, 1616 SSL_SHA1, 1617 SSL_TLSV1, 1618 SSL_NOT_EXP | SSL_HIGH, 1619 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1620 256, 1621 256, 1622 }, 1623 /* Cipher 85 */ 1624 { 1625 1, 1626 TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, 1627 TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, 1628 SSL_kDHd, 1629 SSL_aDH, 1630 SSL_CAMELLIA256, 1631 SSL_SHA1, 1632 SSL_TLSV1, 1633 SSL_NOT_EXP | SSL_HIGH, 1634 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1635 256, 1636 256, 1637 }, 1638 1639 /* Cipher 86 */ 1640 { 1641 1, 1642 TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, 1643 TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, 1644 SSL_kDHr, 1645 SSL_aDH, 1646 SSL_CAMELLIA256, 1647 SSL_SHA1, 1648 SSL_TLSV1, 1649 SSL_NOT_EXP | SSL_HIGH, 1650 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1651 256, 1652 256, 1653 }, 1654 1655 /* Cipher 87 */ 1656 { 1657 1, 1658 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, 1659 TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, 1660 SSL_kEDH, 1661 SSL_aDSS, 1662 SSL_CAMELLIA256, 1663 SSL_SHA1, 1664 SSL_TLSV1, 1665 SSL_NOT_EXP | SSL_HIGH, 1666 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1667 256, 1668 256, 1669 }, 1670 1671 /* Cipher 88 */ 1672 { 1673 1, 1674 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, 1675 TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, 1676 SSL_kEDH, 1677 SSL_aRSA, 1678 SSL_CAMELLIA256, 1679 SSL_SHA1, 1680 SSL_TLSV1, 1681 SSL_NOT_EXP | SSL_HIGH, 1682 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1683 256, 1684 256, 1685 }, 1686 1687 /* Cipher 89 */ 1688 { 1689 1, 1690 TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, 1691 TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, 1692 SSL_kEDH, 1693 SSL_aNULL, 1694 SSL_CAMELLIA256, 1695 SSL_SHA1, 1696 SSL_TLSV1, 1697 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH, 1698 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1699 256, 1700 256, 1701 }, 1702 #endif /* OPENSSL_NO_CAMELLIA */ 1703 1704 #ifndef OPENSSL_NO_PSK 1705 /* Cipher 8A */ 1706 { 1707 1, 1708 TLS1_TXT_PSK_WITH_RC4_128_SHA, 1709 TLS1_CK_PSK_WITH_RC4_128_SHA, 1710 SSL_kPSK, 1711 SSL_aPSK, 1712 SSL_RC4, 1713 SSL_SHA1, 1714 SSL_TLSV1, 1715 SSL_NOT_EXP | SSL_MEDIUM, 1716 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1717 128, 1718 128, 1719 }, 1720 1721 /* Cipher 8B */ 1722 { 1723 1, 1724 TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, 1725 TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, 1726 SSL_kPSK, 1727 SSL_aPSK, 1728 SSL_3DES, 1729 SSL_SHA1, 1730 SSL_TLSV1, 1731 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 1732 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1733 112, 1734 168, 1735 }, 1736 1737 /* Cipher 8C */ 1738 { 1739 1, 1740 TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, 1741 TLS1_CK_PSK_WITH_AES_128_CBC_SHA, 1742 SSL_kPSK, 1743 SSL_aPSK, 1744 SSL_AES128, 1745 SSL_SHA1, 1746 SSL_TLSV1, 1747 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1748 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1749 128, 1750 128, 1751 }, 1752 1753 /* Cipher 8D */ 1754 { 1755 1, 1756 TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, 1757 TLS1_CK_PSK_WITH_AES_256_CBC_SHA, 1758 SSL_kPSK, 1759 SSL_aPSK, 1760 SSL_AES256, 1761 SSL_SHA1, 1762 SSL_TLSV1, 1763 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1764 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1765 256, 1766 256, 1767 }, 1768 #endif /* OPENSSL_NO_PSK */ 1769 1770 #ifndef OPENSSL_NO_SEED 1771 /* SEED ciphersuites from RFC4162 */ 1772 1773 /* Cipher 96 */ 1774 { 1775 1, 1776 TLS1_TXT_RSA_WITH_SEED_SHA, 1777 TLS1_CK_RSA_WITH_SEED_SHA, 1778 SSL_kRSA, 1779 SSL_aRSA, 1780 SSL_SEED, 1781 SSL_SHA1, 1782 SSL_TLSV1, 1783 SSL_NOT_EXP | SSL_MEDIUM, 1784 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1785 128, 1786 128, 1787 }, 1788 1789 /* Cipher 97 */ 1790 { 1791 1, 1792 TLS1_TXT_DH_DSS_WITH_SEED_SHA, 1793 TLS1_CK_DH_DSS_WITH_SEED_SHA, 1794 SSL_kDHd, 1795 SSL_aDH, 1796 SSL_SEED, 1797 SSL_SHA1, 1798 SSL_TLSV1, 1799 SSL_NOT_EXP | SSL_MEDIUM, 1800 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1801 128, 1802 128, 1803 }, 1804 1805 /* Cipher 98 */ 1806 { 1807 1, 1808 TLS1_TXT_DH_RSA_WITH_SEED_SHA, 1809 TLS1_CK_DH_RSA_WITH_SEED_SHA, 1810 SSL_kDHr, 1811 SSL_aDH, 1812 SSL_SEED, 1813 SSL_SHA1, 1814 SSL_TLSV1, 1815 SSL_NOT_EXP | SSL_MEDIUM, 1816 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1817 128, 1818 128, 1819 }, 1820 1821 /* Cipher 99 */ 1822 { 1823 1, 1824 TLS1_TXT_DHE_DSS_WITH_SEED_SHA, 1825 TLS1_CK_DHE_DSS_WITH_SEED_SHA, 1826 SSL_kEDH, 1827 SSL_aDSS, 1828 SSL_SEED, 1829 SSL_SHA1, 1830 SSL_TLSV1, 1831 SSL_NOT_EXP | SSL_MEDIUM, 1832 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1833 128, 1834 128, 1835 }, 1836 1837 /* Cipher 9A */ 1838 { 1839 1, 1840 TLS1_TXT_DHE_RSA_WITH_SEED_SHA, 1841 TLS1_CK_DHE_RSA_WITH_SEED_SHA, 1842 SSL_kEDH, 1843 SSL_aRSA, 1844 SSL_SEED, 1845 SSL_SHA1, 1846 SSL_TLSV1, 1847 SSL_NOT_EXP | SSL_MEDIUM, 1848 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1849 128, 1850 128, 1851 }, 1852 1853 /* Cipher 9B */ 1854 { 1855 1, 1856 TLS1_TXT_ADH_WITH_SEED_SHA, 1857 TLS1_CK_ADH_WITH_SEED_SHA, 1858 SSL_kEDH, 1859 SSL_aNULL, 1860 SSL_SEED, 1861 SSL_SHA1, 1862 SSL_TLSV1, 1863 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM, 1864 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 1865 128, 1866 128, 1867 }, 1868 1869 #endif /* OPENSSL_NO_SEED */ 1870 1871 /* GCM ciphersuites from RFC5288 */ 1872 1873 /* Cipher 9C */ 1874 { 1875 1, 1876 TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, 1877 TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 1878 SSL_kRSA, 1879 SSL_aRSA, 1880 SSL_AES128GCM, 1881 SSL_AEAD, 1882 SSL_TLSV1_2, 1883 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1884 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 1885 128, 1886 128, 1887 }, 1888 1889 /* Cipher 9D */ 1890 { 1891 1, 1892 TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, 1893 TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, 1894 SSL_kRSA, 1895 SSL_aRSA, 1896 SSL_AES256GCM, 1897 SSL_AEAD, 1898 SSL_TLSV1_2, 1899 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1900 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 1901 256, 1902 256, 1903 }, 1904 1905 /* Cipher 9E */ 1906 { 1907 1, 1908 TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, 1909 TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, 1910 SSL_kEDH, 1911 SSL_aRSA, 1912 SSL_AES128GCM, 1913 SSL_AEAD, 1914 SSL_TLSV1_2, 1915 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1916 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 1917 128, 1918 128, 1919 }, 1920 1921 /* Cipher 9F */ 1922 { 1923 1, 1924 TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, 1925 TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, 1926 SSL_kEDH, 1927 SSL_aRSA, 1928 SSL_AES256GCM, 1929 SSL_AEAD, 1930 SSL_TLSV1_2, 1931 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1932 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 1933 256, 1934 256, 1935 }, 1936 1937 /* Cipher A0 */ 1938 { 1939 1, 1940 TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, 1941 TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, 1942 SSL_kDHr, 1943 SSL_aDH, 1944 SSL_AES128GCM, 1945 SSL_AEAD, 1946 SSL_TLSV1_2, 1947 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1948 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 1949 128, 1950 128, 1951 }, 1952 1953 /* Cipher A1 */ 1954 { 1955 1, 1956 TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, 1957 TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, 1958 SSL_kDHr, 1959 SSL_aDH, 1960 SSL_AES256GCM, 1961 SSL_AEAD, 1962 SSL_TLSV1_2, 1963 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1964 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 1965 256, 1966 256, 1967 }, 1968 1969 /* Cipher A2 */ 1970 { 1971 1, 1972 TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, 1973 TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, 1974 SSL_kEDH, 1975 SSL_aDSS, 1976 SSL_AES128GCM, 1977 SSL_AEAD, 1978 SSL_TLSV1_2, 1979 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1980 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 1981 128, 1982 128, 1983 }, 1984 1985 /* Cipher A3 */ 1986 { 1987 1, 1988 TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, 1989 TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, 1990 SSL_kEDH, 1991 SSL_aDSS, 1992 SSL_AES256GCM, 1993 SSL_AEAD, 1994 SSL_TLSV1_2, 1995 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 1996 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 1997 256, 1998 256, 1999 }, 2000 2001 /* Cipher A4 */ 2002 { 2003 1, 2004 TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, 2005 TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, 2006 SSL_kDHd, 2007 SSL_aDH, 2008 SSL_AES128GCM, 2009 SSL_AEAD, 2010 SSL_TLSV1_2, 2011 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2012 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2013 128, 2014 128, 2015 }, 2016 2017 /* Cipher A5 */ 2018 { 2019 1, 2020 TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, 2021 TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, 2022 SSL_kDHd, 2023 SSL_aDH, 2024 SSL_AES256GCM, 2025 SSL_AEAD, 2026 SSL_TLSV1_2, 2027 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2028 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2029 256, 2030 256, 2031 }, 2032 2033 /* Cipher A6 */ 2034 { 2035 1, 2036 TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, 2037 TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, 2038 SSL_kEDH, 2039 SSL_aNULL, 2040 SSL_AES128GCM, 2041 SSL_AEAD, 2042 SSL_TLSV1_2, 2043 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2044 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2045 128, 2046 128, 2047 }, 2048 2049 /* Cipher A7 */ 2050 { 2051 1, 2052 TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, 2053 TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, 2054 SSL_kEDH, 2055 SSL_aNULL, 2056 SSL_AES256GCM, 2057 SSL_AEAD, 2058 SSL_TLSV1_2, 2059 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2060 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2061 256, 2062 256, 2063 }, 2064 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL 2065 { 2066 1, 2067 "SCSV", 2068 SSL3_CK_SCSV, 2069 0, 2070 0, 2071 0, 2072 0, 2073 0, 2074 0, 2075 0, 2076 0, 2077 0}, 2078 #endif 2079 2080 #ifndef OPENSSL_NO_ECDH 2081 /* Cipher C001 */ 2082 { 2083 1, 2084 TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, 2085 TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, 2086 SSL_kECDHe, 2087 SSL_aECDH, 2088 SSL_eNULL, 2089 SSL_SHA1, 2090 SSL_TLSV1, 2091 SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS, 2092 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2093 0, 2094 0, 2095 }, 2096 2097 /* Cipher C002 */ 2098 { 2099 1, 2100 TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, 2101 TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, 2102 SSL_kECDHe, 2103 SSL_aECDH, 2104 SSL_RC4, 2105 SSL_SHA1, 2106 SSL_TLSV1, 2107 SSL_NOT_EXP | SSL_MEDIUM, 2108 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2109 128, 2110 128, 2111 }, 2112 2113 /* Cipher C003 */ 2114 { 2115 1, 2116 TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, 2117 TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, 2118 SSL_kECDHe, 2119 SSL_aECDH, 2120 SSL_3DES, 2121 SSL_SHA1, 2122 SSL_TLSV1, 2123 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 2124 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2125 112, 2126 168, 2127 }, 2128 2129 /* Cipher C004 */ 2130 { 2131 1, 2132 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, 2133 TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, 2134 SSL_kECDHe, 2135 SSL_aECDH, 2136 SSL_AES128, 2137 SSL_SHA1, 2138 SSL_TLSV1, 2139 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2140 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2141 128, 2142 128, 2143 }, 2144 2145 /* Cipher C005 */ 2146 { 2147 1, 2148 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, 2149 TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, 2150 SSL_kECDHe, 2151 SSL_aECDH, 2152 SSL_AES256, 2153 SSL_SHA1, 2154 SSL_TLSV1, 2155 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2156 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2157 256, 2158 256, 2159 }, 2160 2161 /* Cipher C006 */ 2162 { 2163 1, 2164 TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, 2165 TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, 2166 SSL_kEECDH, 2167 SSL_aECDSA, 2168 SSL_eNULL, 2169 SSL_SHA1, 2170 SSL_TLSV1, 2171 SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS, 2172 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2173 0, 2174 0, 2175 }, 2176 2177 /* Cipher C007 */ 2178 { 2179 1, 2180 TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, 2181 TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, 2182 SSL_kEECDH, 2183 SSL_aECDSA, 2184 SSL_RC4, 2185 SSL_SHA1, 2186 SSL_TLSV1, 2187 SSL_NOT_EXP | SSL_MEDIUM, 2188 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2189 128, 2190 128, 2191 }, 2192 2193 /* Cipher C008 */ 2194 { 2195 1, 2196 TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, 2197 TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, 2198 SSL_kEECDH, 2199 SSL_aECDSA, 2200 SSL_3DES, 2201 SSL_SHA1, 2202 SSL_TLSV1, 2203 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 2204 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2205 112, 2206 168, 2207 }, 2208 2209 /* Cipher C009 */ 2210 { 2211 1, 2212 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 2213 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 2214 SSL_kEECDH, 2215 SSL_aECDSA, 2216 SSL_AES128, 2217 SSL_SHA1, 2218 SSL_TLSV1, 2219 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2220 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2221 128, 2222 128, 2223 }, 2224 2225 /* Cipher C00A */ 2226 { 2227 1, 2228 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 2229 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 2230 SSL_kEECDH, 2231 SSL_aECDSA, 2232 SSL_AES256, 2233 SSL_SHA1, 2234 SSL_TLSV1, 2235 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2236 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2237 256, 2238 256, 2239 }, 2240 2241 /* Cipher C00B */ 2242 { 2243 1, 2244 TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, 2245 TLS1_CK_ECDH_RSA_WITH_NULL_SHA, 2246 SSL_kECDHr, 2247 SSL_aECDH, 2248 SSL_eNULL, 2249 SSL_SHA1, 2250 SSL_TLSV1, 2251 SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS, 2252 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2253 0, 2254 0, 2255 }, 2256 2257 /* Cipher C00C */ 2258 { 2259 1, 2260 TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, 2261 TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, 2262 SSL_kECDHr, 2263 SSL_aECDH, 2264 SSL_RC4, 2265 SSL_SHA1, 2266 SSL_TLSV1, 2267 SSL_NOT_EXP | SSL_MEDIUM, 2268 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2269 128, 2270 128, 2271 }, 2272 2273 /* Cipher C00D */ 2274 { 2275 1, 2276 TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, 2277 TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, 2278 SSL_kECDHr, 2279 SSL_aECDH, 2280 SSL_3DES, 2281 SSL_SHA1, 2282 SSL_TLSV1, 2283 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 2284 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2285 112, 2286 168, 2287 }, 2288 2289 /* Cipher C00E */ 2290 { 2291 1, 2292 TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, 2293 TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, 2294 SSL_kECDHr, 2295 SSL_aECDH, 2296 SSL_AES128, 2297 SSL_SHA1, 2298 SSL_TLSV1, 2299 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2300 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2301 128, 2302 128, 2303 }, 2304 2305 /* Cipher C00F */ 2306 { 2307 1, 2308 TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, 2309 TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, 2310 SSL_kECDHr, 2311 SSL_aECDH, 2312 SSL_AES256, 2313 SSL_SHA1, 2314 SSL_TLSV1, 2315 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2316 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2317 256, 2318 256, 2319 }, 2320 2321 /* Cipher C010 */ 2322 { 2323 1, 2324 TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, 2325 TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, 2326 SSL_kEECDH, 2327 SSL_aRSA, 2328 SSL_eNULL, 2329 SSL_SHA1, 2330 SSL_TLSV1, 2331 SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS, 2332 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2333 0, 2334 0, 2335 }, 2336 2337 /* Cipher C011 */ 2338 { 2339 1, 2340 TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, 2341 TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, 2342 SSL_kEECDH, 2343 SSL_aRSA, 2344 SSL_RC4, 2345 SSL_SHA1, 2346 SSL_TLSV1, 2347 SSL_NOT_EXP | SSL_MEDIUM, 2348 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2349 128, 2350 128, 2351 }, 2352 2353 /* Cipher C012 */ 2354 { 2355 1, 2356 TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, 2357 TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, 2358 SSL_kEECDH, 2359 SSL_aRSA, 2360 SSL_3DES, 2361 SSL_SHA1, 2362 SSL_TLSV1, 2363 SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 2364 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2365 112, 2366 168, 2367 }, 2368 2369 /* Cipher C013 */ 2370 { 2371 1, 2372 TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, 2373 TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, 2374 SSL_kEECDH, 2375 SSL_aRSA, 2376 SSL_AES128, 2377 SSL_SHA1, 2378 SSL_TLSV1, 2379 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2380 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2381 128, 2382 128, 2383 }, 2384 2385 /* Cipher C014 */ 2386 { 2387 1, 2388 TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, 2389 TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, 2390 SSL_kEECDH, 2391 SSL_aRSA, 2392 SSL_AES256, 2393 SSL_SHA1, 2394 SSL_TLSV1, 2395 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2396 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2397 256, 2398 256, 2399 }, 2400 2401 /* Cipher C015 */ 2402 { 2403 1, 2404 TLS1_TXT_ECDH_anon_WITH_NULL_SHA, 2405 TLS1_CK_ECDH_anon_WITH_NULL_SHA, 2406 SSL_kEECDH, 2407 SSL_aNULL, 2408 SSL_eNULL, 2409 SSL_SHA1, 2410 SSL_TLSV1, 2411 SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS, 2412 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2413 0, 2414 0, 2415 }, 2416 2417 /* Cipher C016 */ 2418 { 2419 1, 2420 TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, 2421 TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, 2422 SSL_kEECDH, 2423 SSL_aNULL, 2424 SSL_RC4, 2425 SSL_SHA1, 2426 SSL_TLSV1, 2427 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM, 2428 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2429 128, 2430 128, 2431 }, 2432 2433 /* Cipher C017 */ 2434 { 2435 1, 2436 TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, 2437 TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, 2438 SSL_kEECDH, 2439 SSL_aNULL, 2440 SSL_3DES, 2441 SSL_SHA1, 2442 SSL_TLSV1, 2443 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS, 2444 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2445 112, 2446 168, 2447 }, 2448 2449 /* Cipher C018 */ 2450 { 2451 1, 2452 TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, 2453 TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, 2454 SSL_kEECDH, 2455 SSL_aNULL, 2456 SSL_AES128, 2457 SSL_SHA1, 2458 SSL_TLSV1, 2459 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2460 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2461 128, 2462 128, 2463 }, 2464 2465 /* Cipher C019 */ 2466 { 2467 1, 2468 TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, 2469 TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, 2470 SSL_kEECDH, 2471 SSL_aNULL, 2472 SSL_AES256, 2473 SSL_SHA1, 2474 SSL_TLSV1, 2475 SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2476 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2477 256, 2478 256, 2479 }, 2480 #endif /* OPENSSL_NO_ECDH */ 2481 2482 #ifndef OPENSSL_NO_SRP 2483 /* Cipher C01A */ 2484 { 2485 1, 2486 TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, 2487 TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, 2488 SSL_kSRP, 2489 SSL_aSRP, 2490 SSL_3DES, 2491 SSL_SHA1, 2492 SSL_TLSV1, 2493 SSL_NOT_EXP | SSL_MEDIUM, 2494 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2495 112, 2496 168, 2497 }, 2498 2499 /* Cipher C01B */ 2500 { 2501 1, 2502 TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, 2503 TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, 2504 SSL_kSRP, 2505 SSL_aRSA, 2506 SSL_3DES, 2507 SSL_SHA1, 2508 SSL_TLSV1, 2509 SSL_NOT_EXP | SSL_MEDIUM, 2510 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2511 112, 2512 168, 2513 }, 2514 2515 /* Cipher C01C */ 2516 { 2517 1, 2518 TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, 2519 TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, 2520 SSL_kSRP, 2521 SSL_aDSS, 2522 SSL_3DES, 2523 SSL_SHA1, 2524 SSL_TLSV1, 2525 SSL_NOT_EXP | SSL_MEDIUM, 2526 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2527 112, 2528 168, 2529 }, 2530 2531 /* Cipher C01D */ 2532 { 2533 1, 2534 TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, 2535 TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, 2536 SSL_kSRP, 2537 SSL_aSRP, 2538 SSL_AES128, 2539 SSL_SHA1, 2540 SSL_TLSV1, 2541 SSL_NOT_EXP | SSL_HIGH, 2542 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2543 128, 2544 128, 2545 }, 2546 2547 /* Cipher C01E */ 2548 { 2549 1, 2550 TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, 2551 TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, 2552 SSL_kSRP, 2553 SSL_aRSA, 2554 SSL_AES128, 2555 SSL_SHA1, 2556 SSL_TLSV1, 2557 SSL_NOT_EXP | SSL_HIGH, 2558 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2559 128, 2560 128, 2561 }, 2562 2563 /* Cipher C01F */ 2564 { 2565 1, 2566 TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, 2567 TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, 2568 SSL_kSRP, 2569 SSL_aDSS, 2570 SSL_AES128, 2571 SSL_SHA1, 2572 SSL_TLSV1, 2573 SSL_NOT_EXP | SSL_HIGH, 2574 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2575 128, 2576 128, 2577 }, 2578 2579 /* Cipher C020 */ 2580 { 2581 1, 2582 TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, 2583 TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, 2584 SSL_kSRP, 2585 SSL_aSRP, 2586 SSL_AES256, 2587 SSL_SHA1, 2588 SSL_TLSV1, 2589 SSL_NOT_EXP | SSL_HIGH, 2590 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2591 256, 2592 256, 2593 }, 2594 2595 /* Cipher C021 */ 2596 { 2597 1, 2598 TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, 2599 TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, 2600 SSL_kSRP, 2601 SSL_aRSA, 2602 SSL_AES256, 2603 SSL_SHA1, 2604 SSL_TLSV1, 2605 SSL_NOT_EXP | SSL_HIGH, 2606 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2607 256, 2608 256, 2609 }, 2610 2611 /* Cipher C022 */ 2612 { 2613 1, 2614 TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, 2615 TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, 2616 SSL_kSRP, 2617 SSL_aDSS, 2618 SSL_AES256, 2619 SSL_SHA1, 2620 SSL_TLSV1, 2621 SSL_NOT_EXP | SSL_HIGH, 2622 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2623 256, 2624 256, 2625 }, 2626 #endif /* OPENSSL_NO_SRP */ 2627 #ifndef OPENSSL_NO_ECDH 2628 2629 /* HMAC based TLS v1.2 ciphersuites from RFC5289 */ 2630 2631 /* Cipher C023 */ 2632 { 2633 1, 2634 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, 2635 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, 2636 SSL_kEECDH, 2637 SSL_aECDSA, 2638 SSL_AES128, 2639 SSL_SHA256, 2640 SSL_TLSV1_2, 2641 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2642 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2643 128, 2644 128, 2645 }, 2646 2647 /* Cipher C024 */ 2648 { 2649 1, 2650 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, 2651 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, 2652 SSL_kEECDH, 2653 SSL_aECDSA, 2654 SSL_AES256, 2655 SSL_SHA384, 2656 SSL_TLSV1_2, 2657 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2658 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2659 256, 2660 256, 2661 }, 2662 2663 /* Cipher C025 */ 2664 { 2665 1, 2666 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, 2667 TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, 2668 SSL_kECDHe, 2669 SSL_aECDH, 2670 SSL_AES128, 2671 SSL_SHA256, 2672 SSL_TLSV1_2, 2673 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2674 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2675 128, 2676 128, 2677 }, 2678 2679 /* Cipher C026 */ 2680 { 2681 1, 2682 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, 2683 TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, 2684 SSL_kECDHe, 2685 SSL_aECDH, 2686 SSL_AES256, 2687 SSL_SHA384, 2688 SSL_TLSV1_2, 2689 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2690 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2691 256, 2692 256, 2693 }, 2694 2695 /* Cipher C027 */ 2696 { 2697 1, 2698 TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, 2699 TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, 2700 SSL_kEECDH, 2701 SSL_aRSA, 2702 SSL_AES128, 2703 SSL_SHA256, 2704 SSL_TLSV1_2, 2705 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2706 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2707 128, 2708 128, 2709 }, 2710 2711 /* Cipher C028 */ 2712 { 2713 1, 2714 TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, 2715 TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, 2716 SSL_kEECDH, 2717 SSL_aRSA, 2718 SSL_AES256, 2719 SSL_SHA384, 2720 SSL_TLSV1_2, 2721 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2722 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2723 256, 2724 256, 2725 }, 2726 2727 /* Cipher C029 */ 2728 { 2729 1, 2730 TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, 2731 TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, 2732 SSL_kECDHr, 2733 SSL_aECDH, 2734 SSL_AES128, 2735 SSL_SHA256, 2736 SSL_TLSV1_2, 2737 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2738 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2739 128, 2740 128, 2741 }, 2742 2743 /* Cipher C02A */ 2744 { 2745 1, 2746 TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, 2747 TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, 2748 SSL_kECDHr, 2749 SSL_aECDH, 2750 SSL_AES256, 2751 SSL_SHA384, 2752 SSL_TLSV1_2, 2753 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2754 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2755 256, 2756 256, 2757 }, 2758 2759 /* GCM based TLS v1.2 ciphersuites from RFC5289 */ 2760 2761 /* Cipher C02B */ 2762 { 2763 1, 2764 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 2765 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 2766 SSL_kEECDH, 2767 SSL_aECDSA, 2768 SSL_AES128GCM, 2769 SSL_AEAD, 2770 SSL_TLSV1_2, 2771 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2772 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2773 128, 2774 128, 2775 }, 2776 2777 /* Cipher C02C */ 2778 { 2779 1, 2780 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 2781 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 2782 SSL_kEECDH, 2783 SSL_aECDSA, 2784 SSL_AES256GCM, 2785 SSL_AEAD, 2786 SSL_TLSV1_2, 2787 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2788 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2789 256, 2790 256, 2791 }, 2792 2793 /* Cipher C02D */ 2794 { 2795 1, 2796 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, 2797 TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, 2798 SSL_kECDHe, 2799 SSL_aECDH, 2800 SSL_AES128GCM, 2801 SSL_AEAD, 2802 SSL_TLSV1_2, 2803 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2804 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2805 128, 2806 128, 2807 }, 2808 2809 /* Cipher C02E */ 2810 { 2811 1, 2812 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, 2813 TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, 2814 SSL_kECDHe, 2815 SSL_aECDH, 2816 SSL_AES256GCM, 2817 SSL_AEAD, 2818 SSL_TLSV1_2, 2819 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2820 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2821 256, 2822 256, 2823 }, 2824 2825 /* Cipher C02F */ 2826 { 2827 1, 2828 TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 2829 TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 2830 SSL_kEECDH, 2831 SSL_aRSA, 2832 SSL_AES128GCM, 2833 SSL_AEAD, 2834 SSL_TLSV1_2, 2835 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2836 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2837 128, 2838 128, 2839 }, 2840 2841 /* Cipher C030 */ 2842 { 2843 1, 2844 TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 2845 TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 2846 SSL_kEECDH, 2847 SSL_aRSA, 2848 SSL_AES256GCM, 2849 SSL_AEAD, 2850 SSL_TLSV1_2, 2851 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2852 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2853 256, 2854 256, 2855 }, 2856 2857 /* Cipher C031 */ 2858 { 2859 1, 2860 TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, 2861 TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, 2862 SSL_kECDHr, 2863 SSL_aECDH, 2864 SSL_AES128GCM, 2865 SSL_AEAD, 2866 SSL_TLSV1_2, 2867 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2868 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256, 2869 128, 2870 128, 2871 }, 2872 2873 /* Cipher C032 */ 2874 { 2875 1, 2876 TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, 2877 TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, 2878 SSL_kECDHr, 2879 SSL_aECDH, 2880 SSL_AES256GCM, 2881 SSL_AEAD, 2882 SSL_TLSV1_2, 2883 SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 2884 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384, 2885 256, 2886 256, 2887 }, 2888 2889 #endif /* OPENSSL_NO_ECDH */ 2890 2891 #ifdef TEMP_GOST_TLS 2892 /* Cipher FF00 */ 2893 { 2894 1, 2895 "GOST-MD5", 2896 0x0300ff00, 2897 SSL_kRSA, 2898 SSL_aRSA, 2899 SSL_eGOST2814789CNT, 2900 SSL_MD5, 2901 SSL_TLSV1, 2902 SSL_NOT_EXP | SSL_HIGH, 2903 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2904 256, 2905 256, 2906 }, 2907 { 2908 1, 2909 "GOST-GOST94", 2910 0x0300ff01, 2911 SSL_kRSA, 2912 SSL_aRSA, 2913 SSL_eGOST2814789CNT, 2914 SSL_GOST94, 2915 SSL_TLSV1, 2916 SSL_NOT_EXP | SSL_HIGH, 2917 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2918 256, 2919 256}, 2920 { 2921 1, 2922 "GOST-GOST89MAC", 2923 0x0300ff02, 2924 SSL_kRSA, 2925 SSL_aRSA, 2926 SSL_eGOST2814789CNT, 2927 SSL_GOST89MAC, 2928 SSL_TLSV1, 2929 SSL_NOT_EXP | SSL_HIGH, 2930 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF, 2931 256, 2932 256}, 2933 { 2934 1, 2935 "GOST-GOST89STREAM", 2936 0x0300ff03, 2937 SSL_kRSA, 2938 SSL_aRSA, 2939 SSL_eGOST2814789CNT, 2940 SSL_GOST89MAC, 2941 SSL_TLSV1, 2942 SSL_NOT_EXP | SSL_HIGH, 2943 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF | TLS1_STREAM_MAC, 2944 256, 2945 256}, 2946 #endif 2947 2948 /* end of list */ 2949 }; 2950 2951 SSL3_ENC_METHOD SSLv3_enc_data = { 2952 ssl3_enc, 2953 n_ssl3_mac, 2954 ssl3_setup_key_block, 2955 ssl3_generate_master_secret, 2956 ssl3_change_cipher_state, 2957 ssl3_final_finish_mac, 2958 MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH, 2959 ssl3_cert_verify_mac, 2960 SSL3_MD_CLIENT_FINISHED_CONST, 4, 2961 SSL3_MD_SERVER_FINISHED_CONST, 4, 2962 ssl3_alert_code, 2963 (int (*)(SSL *, unsigned char *, size_t, const char *, 2964 size_t, const unsigned char *, size_t, 2965 int use_context))ssl_undefined_function, 2966 0, 2967 SSL3_HM_HEADER_LENGTH, 2968 ssl3_set_handshake_header, 2969 ssl3_handshake_write 2970 }; 2971 2972 long ssl3_default_timeout(void) 2973 { 2974 /* 2975 * 2 hours, the 24 hours mentioned in the SSLv3 spec is way too long for 2976 * http, the cache would over fill 2977 */ 2978 return (60 * 60 * 2); 2979 } 2980 2981 int ssl3_num_ciphers(void) 2982 { 2983 return (SSL3_NUM_CIPHERS); 2984 } 2985 2986 const SSL_CIPHER *ssl3_get_cipher(unsigned int u) 2987 { 2988 if (u < SSL3_NUM_CIPHERS) 2989 return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u])); 2990 else 2991 return (NULL); 2992 } 2993 2994 int ssl3_pending(const SSL *s) 2995 { 2996 if (s->rstate == SSL_ST_READ_BODY) 2997 return 0; 2998 2999 return (s->s3->rrec.type == 3000 SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; 3001 } 3002 3003 void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len) 3004 { 3005 unsigned char *p = (unsigned char *)s->init_buf->data; 3006 *(p++) = htype; 3007 l2n3(len, p); 3008 s->init_num = (int)len + SSL3_HM_HEADER_LENGTH; 3009 s->init_off = 0; 3010 } 3011 3012 int ssl3_handshake_write(SSL *s) 3013 { 3014 return ssl3_do_write(s, SSL3_RT_HANDSHAKE); 3015 } 3016 3017 int ssl3_new(SSL *s) 3018 { 3019 SSL3_STATE *s3; 3020 3021 if ((s3 = OPENSSL_malloc(sizeof(*s3))) == NULL) 3022 goto err; 3023 memset(s3, 0, sizeof(*s3)); 3024 memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); 3025 memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); 3026 3027 s->s3 = s3; 3028 3029 #ifndef OPENSSL_NO_SRP 3030 SSL_SRP_CTX_init(s); 3031 #endif 3032 s->method->ssl_clear(s); 3033 return (1); 3034 err: 3035 return (0); 3036 } 3037 3038 void ssl3_free(SSL *s) 3039 { 3040 if (s == NULL || s->s3 == NULL) 3041 return; 3042 3043 #ifdef TLSEXT_TYPE_opaque_prf_input 3044 if (s->s3->client_opaque_prf_input != NULL) 3045 OPENSSL_free(s->s3->client_opaque_prf_input); 3046 if (s->s3->server_opaque_prf_input != NULL) 3047 OPENSSL_free(s->s3->server_opaque_prf_input); 3048 #endif 3049 3050 ssl3_cleanup_key_block(s); 3051 if (s->s3->rbuf.buf != NULL) 3052 ssl3_release_read_buffer(s); 3053 if (s->s3->wbuf.buf != NULL) 3054 ssl3_release_write_buffer(s); 3055 if (s->s3->rrec.comp != NULL) 3056 OPENSSL_free(s->s3->rrec.comp); 3057 #ifndef OPENSSL_NO_DH 3058 if (s->s3->tmp.dh != NULL) 3059 DH_free(s->s3->tmp.dh); 3060 #endif 3061 #ifndef OPENSSL_NO_ECDH 3062 if (s->s3->tmp.ecdh != NULL) 3063 EC_KEY_free(s->s3->tmp.ecdh); 3064 #endif 3065 3066 if (s->s3->tmp.ca_names != NULL) 3067 sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); 3068 if (s->s3->handshake_buffer) { 3069 BIO_free(s->s3->handshake_buffer); 3070 } 3071 if (s->s3->handshake_dgst) 3072 ssl3_free_digest_list(s); 3073 #ifndef OPENSSL_NO_TLSEXT 3074 if (s->s3->alpn_selected) 3075 OPENSSL_free(s->s3->alpn_selected); 3076 #endif 3077 3078 #ifndef OPENSSL_NO_SRP 3079 SSL_SRP_CTX_free(s); 3080 #endif 3081 OPENSSL_cleanse(s->s3, sizeof(*s->s3)); 3082 OPENSSL_free(s->s3); 3083 s->s3 = NULL; 3084 } 3085 3086 void ssl3_clear(SSL *s) 3087 { 3088 unsigned char *rp, *wp; 3089 size_t rlen, wlen; 3090 int init_extra; 3091 3092 #ifdef TLSEXT_TYPE_opaque_prf_input 3093 if (s->s3->client_opaque_prf_input != NULL) 3094 OPENSSL_free(s->s3->client_opaque_prf_input); 3095 s->s3->client_opaque_prf_input = NULL; 3096 if (s->s3->server_opaque_prf_input != NULL) 3097 OPENSSL_free(s->s3->server_opaque_prf_input); 3098 s->s3->server_opaque_prf_input = NULL; 3099 #endif 3100 3101 ssl3_cleanup_key_block(s); 3102 if (s->s3->tmp.ca_names != NULL) 3103 sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); 3104 3105 if (s->s3->rrec.comp != NULL) { 3106 OPENSSL_free(s->s3->rrec.comp); 3107 s->s3->rrec.comp = NULL; 3108 } 3109 #ifndef OPENSSL_NO_DH 3110 if (s->s3->tmp.dh != NULL) { 3111 DH_free(s->s3->tmp.dh); 3112 s->s3->tmp.dh = NULL; 3113 } 3114 #endif 3115 #ifndef OPENSSL_NO_ECDH 3116 if (s->s3->tmp.ecdh != NULL) { 3117 EC_KEY_free(s->s3->tmp.ecdh); 3118 s->s3->tmp.ecdh = NULL; 3119 } 3120 #endif 3121 #ifndef OPENSSL_NO_TLSEXT 3122 # ifndef OPENSSL_NO_EC 3123 s->s3->is_probably_safari = 0; 3124 # endif /* !OPENSSL_NO_EC */ 3125 #endif /* !OPENSSL_NO_TLSEXT */ 3126 3127 rp = s->s3->rbuf.buf; 3128 wp = s->s3->wbuf.buf; 3129 rlen = s->s3->rbuf.len; 3130 wlen = s->s3->wbuf.len; 3131 init_extra = s->s3->init_extra; 3132 if (s->s3->handshake_buffer) { 3133 BIO_free(s->s3->handshake_buffer); 3134 s->s3->handshake_buffer = NULL; 3135 } 3136 if (s->s3->handshake_dgst) { 3137 ssl3_free_digest_list(s); 3138 } 3139 #if !defined(OPENSSL_NO_TLSEXT) 3140 if (s->s3->alpn_selected) { 3141 OPENSSL_free(s->s3->alpn_selected); 3142 s->s3->alpn_selected = NULL; 3143 } 3144 #endif 3145 memset(s->s3, 0, sizeof(*s->s3)); 3146 s->s3->rbuf.buf = rp; 3147 s->s3->wbuf.buf = wp; 3148 s->s3->rbuf.len = rlen; 3149 s->s3->wbuf.len = wlen; 3150 s->s3->init_extra = init_extra; 3151 3152 ssl_free_wbio_buffer(s); 3153 3154 s->packet_length = 0; 3155 s->s3->renegotiate = 0; 3156 s->s3->total_renegotiations = 0; 3157 s->s3->num_renegotiations = 0; 3158 s->s3->in_read_app_data = 0; 3159 s->version = SSL3_VERSION; 3160 3161 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) 3162 if (s->next_proto_negotiated) { 3163 OPENSSL_free(s->next_proto_negotiated); 3164 s->next_proto_negotiated = NULL; 3165 s->next_proto_negotiated_len = 0; 3166 } 3167 #endif 3168 } 3169 3170 #ifndef OPENSSL_NO_SRP 3171 static char *MS_CALLBACK srp_password_from_info_cb(SSL *s, void *arg) 3172 { 3173 return BUF_strdup(s->srp_ctx.info); 3174 } 3175 #endif 3176 3177 static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, 3178 size_t len); 3179 3180 long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) 3181 { 3182 int ret = 0; 3183 3184 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) 3185 if ( 3186 # ifndef OPENSSL_NO_RSA 3187 cmd == SSL_CTRL_SET_TMP_RSA || cmd == SSL_CTRL_SET_TMP_RSA_CB || 3188 # endif 3189 # ifndef OPENSSL_NO_DSA 3190 cmd == SSL_CTRL_SET_TMP_DH || cmd == SSL_CTRL_SET_TMP_DH_CB || 3191 # endif 3192 0) { 3193 if (!ssl_cert_inst(&s->cert)) { 3194 SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); 3195 return (0); 3196 } 3197 } 3198 #endif 3199 3200 switch (cmd) { 3201 case SSL_CTRL_GET_SESSION_REUSED: 3202 ret = s->hit; 3203 break; 3204 case SSL_CTRL_GET_CLIENT_CERT_REQUEST: 3205 break; 3206 case SSL_CTRL_GET_NUM_RENEGOTIATIONS: 3207 ret = s->s3->num_renegotiations; 3208 break; 3209 case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: 3210 ret = s->s3->num_renegotiations; 3211 s->s3->num_renegotiations = 0; 3212 break; 3213 case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: 3214 ret = s->s3->total_renegotiations; 3215 break; 3216 case SSL_CTRL_GET_FLAGS: 3217 ret = (int)(s->s3->flags); 3218 break; 3219 #ifndef OPENSSL_NO_RSA 3220 case SSL_CTRL_NEED_TMP_RSA: 3221 if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && 3222 ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || 3223 (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > 3224 (512 / 8)))) 3225 ret = 1; 3226 break; 3227 case SSL_CTRL_SET_TMP_RSA: 3228 { 3229 RSA *rsa = (RSA *)parg; 3230 if (rsa == NULL) { 3231 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); 3232 return (ret); 3233 } 3234 if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) { 3235 SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); 3236 return (ret); 3237 } 3238 if (s->cert->rsa_tmp != NULL) 3239 RSA_free(s->cert->rsa_tmp); 3240 s->cert->rsa_tmp = rsa; 3241 ret = 1; 3242 } 3243 break; 3244 case SSL_CTRL_SET_TMP_RSA_CB: 3245 { 3246 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 3247 return (ret); 3248 } 3249 break; 3250 #endif 3251 #ifndef OPENSSL_NO_DH 3252 case SSL_CTRL_SET_TMP_DH: 3253 { 3254 DH *dh = (DH *)parg; 3255 if (dh == NULL) { 3256 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); 3257 return (ret); 3258 } 3259 if ((dh = DHparams_dup(dh)) == NULL) { 3260 SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); 3261 return (ret); 3262 } 3263 if (s->cert->dh_tmp != NULL) 3264 DH_free(s->cert->dh_tmp); 3265 s->cert->dh_tmp = dh; 3266 ret = 1; 3267 } 3268 break; 3269 case SSL_CTRL_SET_TMP_DH_CB: 3270 { 3271 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 3272 return (ret); 3273 } 3274 break; 3275 #endif 3276 #ifndef OPENSSL_NO_ECDH 3277 case SSL_CTRL_SET_TMP_ECDH: 3278 { 3279 EC_KEY *ecdh = NULL; 3280 3281 if (parg == NULL) { 3282 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); 3283 return (ret); 3284 } 3285 if (!EC_KEY_up_ref((EC_KEY *)parg)) { 3286 SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); 3287 return (ret); 3288 } 3289 ecdh = (EC_KEY *)parg; 3290 if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) { 3291 if (!EC_KEY_generate_key(ecdh)) { 3292 EC_KEY_free(ecdh); 3293 SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); 3294 return (ret); 3295 } 3296 } 3297 if (s->cert->ecdh_tmp != NULL) 3298 EC_KEY_free(s->cert->ecdh_tmp); 3299 s->cert->ecdh_tmp = ecdh; 3300 ret = 1; 3301 } 3302 break; 3303 case SSL_CTRL_SET_TMP_ECDH_CB: 3304 { 3305 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 3306 return (ret); 3307 } 3308 break; 3309 #endif /* !OPENSSL_NO_ECDH */ 3310 #ifndef OPENSSL_NO_TLSEXT 3311 case SSL_CTRL_SET_TLSEXT_HOSTNAME: 3312 if (larg == TLSEXT_NAMETYPE_host_name) { 3313 size_t len; 3314 3315 if (s->tlsext_hostname != NULL) 3316 OPENSSL_free(s->tlsext_hostname); 3317 s->tlsext_hostname = NULL; 3318 3319 ret = 1; 3320 if (parg == NULL) 3321 break; 3322 len = strlen((char *)parg); 3323 if (len == 0 || len > TLSEXT_MAXLEN_host_name) { 3324 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); 3325 return 0; 3326 } 3327 if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) { 3328 SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); 3329 return 0; 3330 } 3331 } else { 3332 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); 3333 return 0; 3334 } 3335 break; 3336 case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: 3337 s->tlsext_debug_arg = parg; 3338 ret = 1; 3339 break; 3340 3341 # ifdef TLSEXT_TYPE_opaque_prf_input 3342 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: 3343 if (larg > 12288) { /* actual internal limit is 2^16 for the 3344 * complete hello message * (including the 3345 * cert chain and everything) */ 3346 SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); 3347 break; 3348 } 3349 if (s->tlsext_opaque_prf_input != NULL) 3350 OPENSSL_free(s->tlsext_opaque_prf_input); 3351 if ((size_t)larg == 0) 3352 s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte 3353 * just to get 3354 * non-NULL */ 3355 else 3356 s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); 3357 if (s->tlsext_opaque_prf_input != NULL) { 3358 s->tlsext_opaque_prf_input_len = (size_t)larg; 3359 ret = 1; 3360 } else 3361 s->tlsext_opaque_prf_input_len = 0; 3362 break; 3363 # endif 3364 3365 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: 3366 s->tlsext_status_type = larg; 3367 ret = 1; 3368 break; 3369 3370 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS: 3371 *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts; 3372 ret = 1; 3373 break; 3374 3375 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS: 3376 s->tlsext_ocsp_exts = parg; 3377 ret = 1; 3378 break; 3379 3380 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS: 3381 *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids; 3382 ret = 1; 3383 break; 3384 3385 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS: 3386 s->tlsext_ocsp_ids = parg; 3387 ret = 1; 3388 break; 3389 3390 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: 3391 *(unsigned char **)parg = s->tlsext_ocsp_resp; 3392 return s->tlsext_ocsp_resplen; 3393 3394 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: 3395 if (s->tlsext_ocsp_resp) 3396 OPENSSL_free(s->tlsext_ocsp_resp); 3397 s->tlsext_ocsp_resp = parg; 3398 s->tlsext_ocsp_resplen = larg; 3399 ret = 1; 3400 break; 3401 3402 # ifndef OPENSSL_NO_HEARTBEATS 3403 case SSL_CTRL_TLS_EXT_SEND_HEARTBEAT: 3404 if (SSL_IS_DTLS(s)) 3405 ret = dtls1_heartbeat(s); 3406 else 3407 ret = tls1_heartbeat(s); 3408 break; 3409 3410 case SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING: 3411 ret = s->tlsext_hb_pending; 3412 break; 3413 3414 case SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS: 3415 if (larg) 3416 s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_RECV_REQUESTS; 3417 else 3418 s->tlsext_heartbeat &= ~SSL_TLSEXT_HB_DONT_RECV_REQUESTS; 3419 ret = 1; 3420 break; 3421 # endif 3422 3423 #endif /* !OPENSSL_NO_TLSEXT */ 3424 3425 case SSL_CTRL_CHAIN: 3426 if (larg) 3427 return ssl_cert_set1_chain(s->cert, (STACK_OF(X509) *)parg); 3428 else 3429 return ssl_cert_set0_chain(s->cert, (STACK_OF(X509) *)parg); 3430 3431 case SSL_CTRL_CHAIN_CERT: 3432 if (larg) 3433 return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg); 3434 else 3435 return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg); 3436 3437 case SSL_CTRL_GET_CHAIN_CERTS: 3438 *(STACK_OF(X509) **)parg = s->cert->key->chain; 3439 break; 3440 3441 case SSL_CTRL_SELECT_CURRENT_CERT: 3442 return ssl_cert_select_current(s->cert, (X509 *)parg); 3443 3444 case SSL_CTRL_SET_CURRENT_CERT: 3445 if (larg == SSL_CERT_SET_SERVER) { 3446 CERT_PKEY *cpk; 3447 const SSL_CIPHER *cipher; 3448 if (!s->server) 3449 return 0; 3450 cipher = s->s3->tmp.new_cipher; 3451 if (!cipher) 3452 return 0; 3453 /* 3454 * No certificate for unauthenticated ciphersuites or using SRP 3455 * authentication 3456 */ 3457 if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP)) 3458 return 2; 3459 cpk = ssl_get_server_send_pkey(s); 3460 if (!cpk) 3461 return 0; 3462 s->cert->key = cpk; 3463 return 1; 3464 } 3465 return ssl_cert_set_current(s->cert, larg); 3466 3467 #ifndef OPENSSL_NO_EC 3468 case SSL_CTRL_GET_CURVES: 3469 { 3470 unsigned char *clist; 3471 size_t clistlen; 3472 if (!s->session) 3473 return 0; 3474 clist = s->session->tlsext_ellipticcurvelist; 3475 clistlen = s->session->tlsext_ellipticcurvelist_length / 2; 3476 if (parg) { 3477 size_t i; 3478 int *cptr = parg; 3479 unsigned int cid, nid; 3480 for (i = 0; i < clistlen; i++) { 3481 n2s(clist, cid); 3482 nid = tls1_ec_curve_id2nid(cid); 3483 if (nid != 0) 3484 cptr[i] = nid; 3485 else 3486 cptr[i] = TLSEXT_nid_unknown | cid; 3487 } 3488 } 3489 return (int)clistlen; 3490 } 3491 3492 case SSL_CTRL_SET_CURVES: 3493 return tls1_set_curves(&s->tlsext_ellipticcurvelist, 3494 &s->tlsext_ellipticcurvelist_length, 3495 parg, larg); 3496 3497 case SSL_CTRL_SET_CURVES_LIST: 3498 return tls1_set_curves_list(&s->tlsext_ellipticcurvelist, 3499 &s->tlsext_ellipticcurvelist_length, 3500 parg); 3501 3502 case SSL_CTRL_GET_SHARED_CURVE: 3503 return tls1_shared_curve(s, larg); 3504 3505 # ifndef OPENSSL_NO_ECDH 3506 case SSL_CTRL_SET_ECDH_AUTO: 3507 s->cert->ecdh_tmp_auto = larg; 3508 return 1; 3509 # endif 3510 #endif 3511 case SSL_CTRL_SET_SIGALGS: 3512 return tls1_set_sigalgs(s->cert, parg, larg, 0); 3513 3514 case SSL_CTRL_SET_SIGALGS_LIST: 3515 return tls1_set_sigalgs_list(s->cert, parg, 0); 3516 3517 case SSL_CTRL_SET_CLIENT_SIGALGS: 3518 return tls1_set_sigalgs(s->cert, parg, larg, 1); 3519 3520 case SSL_CTRL_SET_CLIENT_SIGALGS_LIST: 3521 return tls1_set_sigalgs_list(s->cert, parg, 1); 3522 3523 case SSL_CTRL_GET_CLIENT_CERT_TYPES: 3524 { 3525 const unsigned char **pctype = parg; 3526 if (s->server || !s->s3->tmp.cert_req) 3527 return 0; 3528 if (s->cert->ctypes) { 3529 if (pctype) 3530 *pctype = s->cert->ctypes; 3531 return (int)s->cert->ctype_num; 3532 } 3533 if (pctype) 3534 *pctype = (unsigned char *)s->s3->tmp.ctype; 3535 return s->s3->tmp.ctype_num; 3536 } 3537 3538 case SSL_CTRL_SET_CLIENT_CERT_TYPES: 3539 if (!s->server) 3540 return 0; 3541 return ssl3_set_req_cert_type(s->cert, parg, larg); 3542 3543 case SSL_CTRL_BUILD_CERT_CHAIN: 3544 return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg); 3545 3546 case SSL_CTRL_SET_VERIFY_CERT_STORE: 3547 return ssl_cert_set_cert_store(s->cert, parg, 0, larg); 3548 3549 case SSL_CTRL_SET_CHAIN_CERT_STORE: 3550 return ssl_cert_set_cert_store(s->cert, parg, 1, larg); 3551 3552 case SSL_CTRL_GET_PEER_SIGNATURE_NID: 3553 if (SSL_USE_SIGALGS(s)) { 3554 if (s->session && s->session->sess_cert) { 3555 const EVP_MD *sig; 3556 sig = s->session->sess_cert->peer_key->digest; 3557 if (sig) { 3558 *(int *)parg = EVP_MD_type(sig); 3559 return 1; 3560 } 3561 } 3562 return 0; 3563 } 3564 /* Might want to do something here for other versions */ 3565 else 3566 return 0; 3567 3568 case SSL_CTRL_GET_SERVER_TMP_KEY: 3569 if (s->server || !s->session || !s->session->sess_cert) 3570 return 0; 3571 else { 3572 SESS_CERT *sc; 3573 EVP_PKEY *ptmp; 3574 int rv = 0; 3575 sc = s->session->sess_cert; 3576 #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_ECDH) 3577 if (!sc->peer_rsa_tmp && !sc->peer_dh_tmp && !sc->peer_ecdh_tmp) 3578 return 0; 3579 #endif 3580 ptmp = EVP_PKEY_new(); 3581 if (!ptmp) 3582 return 0; 3583 if (0) ; 3584 #ifndef OPENSSL_NO_RSA 3585 else if (sc->peer_rsa_tmp) 3586 rv = EVP_PKEY_set1_RSA(ptmp, sc->peer_rsa_tmp); 3587 #endif 3588 #ifndef OPENSSL_NO_DH 3589 else if (sc->peer_dh_tmp) 3590 rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp); 3591 #endif 3592 #ifndef OPENSSL_NO_ECDH 3593 else if (sc->peer_ecdh_tmp) 3594 rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp); 3595 #endif 3596 if (rv) { 3597 *(EVP_PKEY **)parg = ptmp; 3598 return 1; 3599 } 3600 EVP_PKEY_free(ptmp); 3601 return 0; 3602 } 3603 #ifndef OPENSSL_NO_EC 3604 case SSL_CTRL_GET_EC_POINT_FORMATS: 3605 { 3606 SSL_SESSION *sess = s->session; 3607 const unsigned char **pformat = parg; 3608 if (!sess || !sess->tlsext_ecpointformatlist) 3609 return 0; 3610 *pformat = sess->tlsext_ecpointformatlist; 3611 return (int)sess->tlsext_ecpointformatlist_length; 3612 } 3613 #endif 3614 3615 case SSL_CTRL_CHECK_PROTO_VERSION: 3616 /* 3617 * For library-internal use; checks that the current protocol is the 3618 * highest enabled version (according to s->ctx->method, as version 3619 * negotiation may have changed s->method). 3620 */ 3621 if (s->version == s->ctx->method->version) 3622 return 1; 3623 /* 3624 * Apparently we're using a version-flexible SSL_METHOD (not at its 3625 * highest protocol version). 3626 */ 3627 if (s->ctx->method->version == SSLv23_method()->version) { 3628 #if TLS_MAX_VERSION != TLS1_2_VERSION 3629 # error Code needs update for SSLv23_method() support beyond TLS1_2_VERSION. 3630 #endif 3631 if (!(s->options & SSL_OP_NO_TLSv1_2)) 3632 return s->version == TLS1_2_VERSION; 3633 if (!(s->options & SSL_OP_NO_TLSv1_1)) 3634 return s->version == TLS1_1_VERSION; 3635 if (!(s->options & SSL_OP_NO_TLSv1)) 3636 return s->version == TLS1_VERSION; 3637 if (!(s->options & SSL_OP_NO_SSLv3)) 3638 return s->version == SSL3_VERSION; 3639 if (!(s->options & SSL_OP_NO_SSLv2)) 3640 return s->version == SSL2_VERSION; 3641 } 3642 return 0; /* Unexpected state; fail closed. */ 3643 3644 default: 3645 break; 3646 } 3647 return (ret); 3648 } 3649 3650 long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void)) 3651 { 3652 int ret = 0; 3653 3654 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) 3655 if ( 3656 # ifndef OPENSSL_NO_RSA 3657 cmd == SSL_CTRL_SET_TMP_RSA_CB || 3658 # endif 3659 # ifndef OPENSSL_NO_DSA 3660 cmd == SSL_CTRL_SET_TMP_DH_CB || 3661 # endif 3662 0) { 3663 if (!ssl_cert_inst(&s->cert)) { 3664 SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); 3665 return (0); 3666 } 3667 } 3668 #endif 3669 3670 switch (cmd) { 3671 #ifndef OPENSSL_NO_RSA 3672 case SSL_CTRL_SET_TMP_RSA_CB: 3673 { 3674 s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; 3675 } 3676 break; 3677 #endif 3678 #ifndef OPENSSL_NO_DH 3679 case SSL_CTRL_SET_TMP_DH_CB: 3680 { 3681 s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; 3682 } 3683 break; 3684 #endif 3685 #ifndef OPENSSL_NO_ECDH 3686 case SSL_CTRL_SET_TMP_ECDH_CB: 3687 { 3688 s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; 3689 } 3690 break; 3691 #endif 3692 #ifndef OPENSSL_NO_TLSEXT 3693 case SSL_CTRL_SET_TLSEXT_DEBUG_CB: 3694 s->tlsext_debug_cb = (void (*)(SSL *, int, int, 3695 unsigned char *, int, void *))fp; 3696 break; 3697 #endif 3698 default: 3699 break; 3700 } 3701 return (ret); 3702 } 3703 3704 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) 3705 { 3706 CERT *cert; 3707 3708 cert = ctx->cert; 3709 3710 switch (cmd) { 3711 #ifndef OPENSSL_NO_RSA 3712 case SSL_CTRL_NEED_TMP_RSA: 3713 if ((cert->rsa_tmp == NULL) && 3714 ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || 3715 (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > 3716 (512 / 8))) 3717 ) 3718 return (1); 3719 else 3720 return (0); 3721 /* break; */ 3722 case SSL_CTRL_SET_TMP_RSA: 3723 { 3724 RSA *rsa; 3725 int i; 3726 3727 rsa = (RSA *)parg; 3728 i = 1; 3729 if (rsa == NULL) 3730 i = 0; 3731 else { 3732 if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) 3733 i = 0; 3734 } 3735 if (!i) { 3736 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_RSA_LIB); 3737 return (0); 3738 } else { 3739 if (cert->rsa_tmp != NULL) 3740 RSA_free(cert->rsa_tmp); 3741 cert->rsa_tmp = rsa; 3742 return (1); 3743 } 3744 } 3745 /* break; */ 3746 case SSL_CTRL_SET_TMP_RSA_CB: 3747 { 3748 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 3749 return (0); 3750 } 3751 break; 3752 #endif 3753 #ifndef OPENSSL_NO_DH 3754 case SSL_CTRL_SET_TMP_DH: 3755 { 3756 DH *new = NULL, *dh; 3757 3758 dh = (DH *)parg; 3759 if ((new = DHparams_dup(dh)) == NULL) { 3760 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); 3761 return 0; 3762 } 3763 if (cert->dh_tmp != NULL) 3764 DH_free(cert->dh_tmp); 3765 cert->dh_tmp = new; 3766 return 1; 3767 } 3768 /* 3769 * break; 3770 */ 3771 case SSL_CTRL_SET_TMP_DH_CB: 3772 { 3773 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 3774 return (0); 3775 } 3776 break; 3777 #endif 3778 #ifndef OPENSSL_NO_ECDH 3779 case SSL_CTRL_SET_TMP_ECDH: 3780 { 3781 EC_KEY *ecdh = NULL; 3782 3783 if (parg == NULL) { 3784 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); 3785 return 0; 3786 } 3787 ecdh = EC_KEY_dup((EC_KEY *)parg); 3788 if (ecdh == NULL) { 3789 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_EC_LIB); 3790 return 0; 3791 } 3792 if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) { 3793 if (!EC_KEY_generate_key(ecdh)) { 3794 EC_KEY_free(ecdh); 3795 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); 3796 return 0; 3797 } 3798 } 3799 3800 if (cert->ecdh_tmp != NULL) { 3801 EC_KEY_free(cert->ecdh_tmp); 3802 } 3803 cert->ecdh_tmp = ecdh; 3804 return 1; 3805 } 3806 /* break; */ 3807 case SSL_CTRL_SET_TMP_ECDH_CB: 3808 { 3809 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 3810 return (0); 3811 } 3812 break; 3813 #endif /* !OPENSSL_NO_ECDH */ 3814 #ifndef OPENSSL_NO_TLSEXT 3815 case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: 3816 ctx->tlsext_servername_arg = parg; 3817 break; 3818 case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: 3819 case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: 3820 { 3821 unsigned char *keys = parg; 3822 if (!keys) 3823 return 48; 3824 if (larg != 48) { 3825 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); 3826 return 0; 3827 } 3828 if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) { 3829 memcpy(ctx->tlsext_tick_key_name, keys, 16); 3830 memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); 3831 memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); 3832 } else { 3833 memcpy(keys, ctx->tlsext_tick_key_name, 16); 3834 memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); 3835 memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); 3836 } 3837 return 1; 3838 } 3839 3840 # ifdef TLSEXT_TYPE_opaque_prf_input 3841 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG: 3842 ctx->tlsext_opaque_prf_input_callback_arg = parg; 3843 return 1; 3844 # endif 3845 3846 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: 3847 ctx->tlsext_status_arg = parg; 3848 return 1; 3849 break; 3850 3851 # ifndef OPENSSL_NO_SRP 3852 case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME: 3853 ctx->srp_ctx.srp_Mask |= SSL_kSRP; 3854 if (ctx->srp_ctx.login != NULL) 3855 OPENSSL_free(ctx->srp_ctx.login); 3856 ctx->srp_ctx.login = NULL; 3857 if (parg == NULL) 3858 break; 3859 if (strlen((const char *)parg) > 255 3860 || strlen((const char *)parg) < 1) { 3861 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); 3862 return 0; 3863 } 3864 if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) { 3865 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); 3866 return 0; 3867 } 3868 break; 3869 case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: 3870 ctx->srp_ctx.SRP_give_srp_client_pwd_callback = 3871 srp_password_from_info_cb; 3872 ctx->srp_ctx.info = parg; 3873 break; 3874 case SSL_CTRL_SET_SRP_ARG: 3875 ctx->srp_ctx.srp_Mask |= SSL_kSRP; 3876 ctx->srp_ctx.SRP_cb_arg = parg; 3877 break; 3878 3879 case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: 3880 ctx->srp_ctx.strength = larg; 3881 break; 3882 # endif 3883 3884 # ifndef OPENSSL_NO_EC 3885 case SSL_CTRL_SET_CURVES: 3886 return tls1_set_curves(&ctx->tlsext_ellipticcurvelist, 3887 &ctx->tlsext_ellipticcurvelist_length, 3888 parg, larg); 3889 3890 case SSL_CTRL_SET_CURVES_LIST: 3891 return tls1_set_curves_list(&ctx->tlsext_ellipticcurvelist, 3892 &ctx->tlsext_ellipticcurvelist_length, 3893 parg); 3894 # ifndef OPENSSL_NO_ECDH 3895 case SSL_CTRL_SET_ECDH_AUTO: 3896 ctx->cert->ecdh_tmp_auto = larg; 3897 return 1; 3898 # endif 3899 # endif 3900 case SSL_CTRL_SET_SIGALGS: 3901 return tls1_set_sigalgs(ctx->cert, parg, larg, 0); 3902 3903 case SSL_CTRL_SET_SIGALGS_LIST: 3904 return tls1_set_sigalgs_list(ctx->cert, parg, 0); 3905 3906 case SSL_CTRL_SET_CLIENT_SIGALGS: 3907 return tls1_set_sigalgs(ctx->cert, parg, larg, 1); 3908 3909 case SSL_CTRL_SET_CLIENT_SIGALGS_LIST: 3910 return tls1_set_sigalgs_list(ctx->cert, parg, 1); 3911 3912 case SSL_CTRL_SET_CLIENT_CERT_TYPES: 3913 return ssl3_set_req_cert_type(ctx->cert, parg, larg); 3914 3915 case SSL_CTRL_BUILD_CERT_CHAIN: 3916 return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg); 3917 3918 case SSL_CTRL_SET_VERIFY_CERT_STORE: 3919 return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg); 3920 3921 case SSL_CTRL_SET_CHAIN_CERT_STORE: 3922 return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg); 3923 3924 #endif /* !OPENSSL_NO_TLSEXT */ 3925 3926 /* A Thawte special :-) */ 3927 case SSL_CTRL_EXTRA_CHAIN_CERT: 3928 if (ctx->extra_certs == NULL) { 3929 if ((ctx->extra_certs = sk_X509_new_null()) == NULL) 3930 return (0); 3931 } 3932 sk_X509_push(ctx->extra_certs, (X509 *)parg); 3933 break; 3934 3935 case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: 3936 if (ctx->extra_certs == NULL && larg == 0) 3937 *(STACK_OF(X509) **)parg = ctx->cert->key->chain; 3938 else 3939 *(STACK_OF(X509) **)parg = ctx->extra_certs; 3940 break; 3941 3942 case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: 3943 if (ctx->extra_certs) { 3944 sk_X509_pop_free(ctx->extra_certs, X509_free); 3945 ctx->extra_certs = NULL; 3946 } 3947 break; 3948 3949 case SSL_CTRL_CHAIN: 3950 if (larg) 3951 return ssl_cert_set1_chain(ctx->cert, (STACK_OF(X509) *)parg); 3952 else 3953 return ssl_cert_set0_chain(ctx->cert, (STACK_OF(X509) *)parg); 3954 3955 case SSL_CTRL_CHAIN_CERT: 3956 if (larg) 3957 return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg); 3958 else 3959 return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg); 3960 3961 case SSL_CTRL_GET_CHAIN_CERTS: 3962 *(STACK_OF(X509) **)parg = ctx->cert->key->chain; 3963 break; 3964 3965 case SSL_CTRL_SELECT_CURRENT_CERT: 3966 return ssl_cert_select_current(ctx->cert, (X509 *)parg); 3967 3968 case SSL_CTRL_SET_CURRENT_CERT: 3969 return ssl_cert_set_current(ctx->cert, larg); 3970 3971 default: 3972 return (0); 3973 } 3974 return (1); 3975 } 3976 3977 long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void)) 3978 { 3979 CERT *cert; 3980 3981 cert = ctx->cert; 3982 3983 switch (cmd) { 3984 #ifndef OPENSSL_NO_RSA 3985 case SSL_CTRL_SET_TMP_RSA_CB: 3986 { 3987 cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; 3988 } 3989 break; 3990 #endif 3991 #ifndef OPENSSL_NO_DH 3992 case SSL_CTRL_SET_TMP_DH_CB: 3993 { 3994 cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; 3995 } 3996 break; 3997 #endif 3998 #ifndef OPENSSL_NO_ECDH 3999 case SSL_CTRL_SET_TMP_ECDH_CB: 4000 { 4001 cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; 4002 } 4003 break; 4004 #endif 4005 #ifndef OPENSSL_NO_TLSEXT 4006 case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: 4007 ctx->tlsext_servername_callback = (int (*)(SSL *, int *, void *))fp; 4008 break; 4009 4010 # ifdef TLSEXT_TYPE_opaque_prf_input 4011 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: 4012 ctx->tlsext_opaque_prf_input_callback = 4013 (int (*)(SSL *, void *, size_t, void *))fp; 4014 break; 4015 # endif 4016 4017 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: 4018 ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; 4019 break; 4020 4021 case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: 4022 ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *, 4023 unsigned char *, 4024 EVP_CIPHER_CTX *, 4025 HMAC_CTX *, int))fp; 4026 break; 4027 4028 # ifndef OPENSSL_NO_SRP 4029 case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: 4030 ctx->srp_ctx.srp_Mask |= SSL_kSRP; 4031 ctx->srp_ctx.SRP_verify_param_callback = (int (*)(SSL *, void *))fp; 4032 break; 4033 case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: 4034 ctx->srp_ctx.srp_Mask |= SSL_kSRP; 4035 ctx->srp_ctx.TLS_ext_srp_username_callback = 4036 (int (*)(SSL *, int *, void *))fp; 4037 break; 4038 case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: 4039 ctx->srp_ctx.srp_Mask |= SSL_kSRP; 4040 ctx->srp_ctx.SRP_give_srp_client_pwd_callback = 4041 (char *(*)(SSL *, void *))fp; 4042 break; 4043 # endif 4044 #endif 4045 default: 4046 return (0); 4047 } 4048 return (1); 4049 } 4050 4051 /* 4052 * This function needs to check if the ciphers required are actually 4053 * available 4054 */ 4055 const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p) 4056 { 4057 SSL_CIPHER c; 4058 const SSL_CIPHER *cp; 4059 unsigned long id; 4060 4061 id = 0x03000000L | ((unsigned long)p[0] << 8L) | (unsigned long)p[1]; 4062 c.id = id; 4063 cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); 4064 #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES 4065 if (cp == NULL) 4066 fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); 4067 #endif 4068 return cp; 4069 } 4070 4071 int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) 4072 { 4073 long l; 4074 4075 if (p != NULL) { 4076 l = c->id; 4077 if ((l & 0xff000000) != 0x03000000) 4078 return (0); 4079 p[0] = ((unsigned char)(l >> 8L)) & 0xFF; 4080 p[1] = ((unsigned char)(l)) & 0xFF; 4081 } 4082 return (2); 4083 } 4084 4085 SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, 4086 STACK_OF(SSL_CIPHER) *srvr) 4087 { 4088 SSL_CIPHER *c, *ret = NULL; 4089 STACK_OF(SSL_CIPHER) *prio, *allow; 4090 int i, ii, ok; 4091 CERT *cert; 4092 unsigned long alg_k, alg_a, mask_k, mask_a, emask_k, emask_a; 4093 4094 /* Let's see which ciphers we can support */ 4095 cert = s->cert; 4096 4097 #if 0 4098 /* 4099 * Do not set the compare functions, because this may lead to a 4100 * reordering by "id". We want to keep the original ordering. We may pay 4101 * a price in performance during sk_SSL_CIPHER_find(), but would have to 4102 * pay with the price of sk_SSL_CIPHER_dup(). 4103 */ 4104 sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp); 4105 sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp); 4106 #endif 4107 4108 #ifdef CIPHER_DEBUG 4109 fprintf(stderr, "Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), 4110 (void *)srvr); 4111 for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) { 4112 c = sk_SSL_CIPHER_value(srvr, i); 4113 fprintf(stderr, "%p:%s\n", (void *)c, c->name); 4114 } 4115 fprintf(stderr, "Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), 4116 (void *)clnt); 4117 for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) { 4118 c = sk_SSL_CIPHER_value(clnt, i); 4119 fprintf(stderr, "%p:%s\n", (void *)c, c->name); 4120 } 4121 #endif 4122 4123 if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || tls1_suiteb(s)) { 4124 prio = srvr; 4125 allow = clnt; 4126 } else { 4127 prio = clnt; 4128 allow = srvr; 4129 } 4130 4131 tls1_set_cert_validity(s); 4132 4133 for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) { 4134 c = sk_SSL_CIPHER_value(prio, i); 4135 4136 /* Skip TLS v1.2 only ciphersuites if not supported */ 4137 if ((c->algorithm_ssl & SSL_TLSV1_2) && !SSL_USE_TLS1_2_CIPHERS(s)) 4138 continue; 4139 4140 ssl_set_cert_masks(cert, c); 4141 mask_k = cert->mask_k; 4142 mask_a = cert->mask_a; 4143 emask_k = cert->export_mask_k; 4144 emask_a = cert->export_mask_a; 4145 #ifndef OPENSSL_NO_SRP 4146 if (s->srp_ctx.srp_Mask & SSL_kSRP) { 4147 mask_k |= SSL_kSRP; 4148 emask_k |= SSL_kSRP; 4149 mask_a |= SSL_aSRP; 4150 emask_a |= SSL_aSRP; 4151 } 4152 #endif 4153 4154 #ifdef KSSL_DEBUG 4155 /* 4156 * fprintf(stderr,"ssl3_choose_cipher %d alg= %lx\n", 4157 * i,c->algorithms); 4158 */ 4159 #endif /* KSSL_DEBUG */ 4160 4161 alg_k = c->algorithm_mkey; 4162 alg_a = c->algorithm_auth; 4163 4164 #ifndef OPENSSL_NO_KRB5 4165 if (alg_k & SSL_kKRB5) { 4166 if (!kssl_keytab_is_available(s->kssl_ctx)) 4167 continue; 4168 } 4169 #endif /* OPENSSL_NO_KRB5 */ 4170 #ifndef OPENSSL_NO_PSK 4171 /* with PSK there must be server callback set */ 4172 if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL) 4173 continue; 4174 #endif /* OPENSSL_NO_PSK */ 4175 4176 if (SSL_C_IS_EXPORT(c)) { 4177 ok = (alg_k & emask_k) && (alg_a & emask_a); 4178 #ifdef CIPHER_DEBUG 4179 fprintf(stderr, "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n", 4180 ok, alg_k, alg_a, emask_k, emask_a, (void *)c, c->name); 4181 #endif 4182 } else { 4183 ok = (alg_k & mask_k) && (alg_a & mask_a); 4184 #ifdef CIPHER_DEBUG 4185 fprintf(stderr, "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n", ok, alg_k, 4186 alg_a, mask_k, mask_a, (void *)c, c->name); 4187 #endif 4188 } 4189 4190 #ifndef OPENSSL_NO_TLSEXT 4191 # ifndef OPENSSL_NO_EC 4192 # ifndef OPENSSL_NO_ECDH 4193 /* 4194 * if we are considering an ECC cipher suite that uses an ephemeral 4195 * EC key check it 4196 */ 4197 if (alg_k & SSL_kEECDH) 4198 ok = ok && tls1_check_ec_tmp_key(s, c->id); 4199 # endif /* OPENSSL_NO_ECDH */ 4200 # endif /* OPENSSL_NO_EC */ 4201 #endif /* OPENSSL_NO_TLSEXT */ 4202 4203 if (!ok) 4204 continue; 4205 ii = sk_SSL_CIPHER_find(allow, c); 4206 if (ii >= 0) { 4207 #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) 4208 if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) 4209 && s->s3->is_probably_safari) { 4210 if (!ret) 4211 ret = sk_SSL_CIPHER_value(allow, ii); 4212 continue; 4213 } 4214 #endif 4215 ret = sk_SSL_CIPHER_value(allow, ii); 4216 break; 4217 } 4218 } 4219 return (ret); 4220 } 4221 4222 int ssl3_get_req_cert_type(SSL *s, unsigned char *p) 4223 { 4224 int ret = 0; 4225 const unsigned char *sig; 4226 size_t i, siglen; 4227 int have_rsa_sign = 0, have_dsa_sign = 0; 4228 #ifndef OPENSSL_NO_ECDSA 4229 int have_ecdsa_sign = 0; 4230 #endif 4231 int nostrict = 1; 4232 unsigned long alg_k; 4233 4234 /* If we have custom certificate types set, use them */ 4235 if (s->cert->ctypes) { 4236 memcpy(p, s->cert->ctypes, s->cert->ctype_num); 4237 return (int)s->cert->ctype_num; 4238 } 4239 /* get configured sigalgs */ 4240 siglen = tls12_get_psigalgs(s, 1, &sig); 4241 if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT) 4242 nostrict = 0; 4243 for (i = 0; i < siglen; i += 2, sig += 2) { 4244 switch (sig[1]) { 4245 case TLSEXT_signature_rsa: 4246 have_rsa_sign = 1; 4247 break; 4248 4249 case TLSEXT_signature_dsa: 4250 have_dsa_sign = 1; 4251 break; 4252 #ifndef OPENSSL_NO_ECDSA 4253 case TLSEXT_signature_ecdsa: 4254 have_ecdsa_sign = 1; 4255 break; 4256 #endif 4257 } 4258 } 4259 4260 alg_k = s->s3->tmp.new_cipher->algorithm_mkey; 4261 4262 #ifndef OPENSSL_NO_GOST 4263 if (s->version >= TLS1_VERSION) { 4264 if (alg_k & SSL_kGOST) { 4265 p[ret++] = TLS_CT_GOST94_SIGN; 4266 p[ret++] = TLS_CT_GOST01_SIGN; 4267 return (ret); 4268 } 4269 } 4270 #endif 4271 4272 #ifndef OPENSSL_NO_DH 4273 if (alg_k & (SSL_kDHr | SSL_kEDH)) { 4274 # ifndef OPENSSL_NO_RSA 4275 /* 4276 * Since this refers to a certificate signed with an RSA algorithm, 4277 * only check for rsa signing in strict mode. 4278 */ 4279 if (nostrict || have_rsa_sign) 4280 p[ret++] = SSL3_CT_RSA_FIXED_DH; 4281 # endif 4282 # ifndef OPENSSL_NO_DSA 4283 if (nostrict || have_dsa_sign) 4284 p[ret++] = SSL3_CT_DSS_FIXED_DH; 4285 # endif 4286 } 4287 if ((s->version == SSL3_VERSION) && 4288 (alg_k & (SSL_kEDH | SSL_kDHd | SSL_kDHr))) { 4289 # ifndef OPENSSL_NO_RSA 4290 p[ret++] = SSL3_CT_RSA_EPHEMERAL_DH; 4291 # endif 4292 # ifndef OPENSSL_NO_DSA 4293 p[ret++] = SSL3_CT_DSS_EPHEMERAL_DH; 4294 # endif 4295 } 4296 #endif /* !OPENSSL_NO_DH */ 4297 #ifndef OPENSSL_NO_RSA 4298 if (have_rsa_sign) 4299 p[ret++] = SSL3_CT_RSA_SIGN; 4300 #endif 4301 #ifndef OPENSSL_NO_DSA 4302 if (have_dsa_sign) 4303 p[ret++] = SSL3_CT_DSS_SIGN; 4304 #endif 4305 #ifndef OPENSSL_NO_ECDH 4306 if ((alg_k & (SSL_kECDHr | SSL_kECDHe)) && (s->version >= TLS1_VERSION)) { 4307 if (nostrict || have_rsa_sign) 4308 p[ret++] = TLS_CT_RSA_FIXED_ECDH; 4309 if (nostrict || have_ecdsa_sign) 4310 p[ret++] = TLS_CT_ECDSA_FIXED_ECDH; 4311 } 4312 #endif 4313 4314 #ifndef OPENSSL_NO_ECDSA 4315 /* 4316 * ECDSA certs can be used with RSA cipher suites as well so we don't 4317 * need to check for SSL_kECDH or SSL_kEECDH 4318 */ 4319 if (s->version >= TLS1_VERSION) { 4320 if (have_ecdsa_sign) 4321 p[ret++] = TLS_CT_ECDSA_SIGN; 4322 } 4323 #endif 4324 return (ret); 4325 } 4326 4327 static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len) 4328 { 4329 if (c->ctypes) { 4330 OPENSSL_free(c->ctypes); 4331 c->ctypes = NULL; 4332 } 4333 if (!p || !len) 4334 return 1; 4335 if (len > 0xff) 4336 return 0; 4337 c->ctypes = OPENSSL_malloc(len); 4338 if (!c->ctypes) 4339 return 0; 4340 memcpy(c->ctypes, p, len); 4341 c->ctype_num = len; 4342 return 1; 4343 } 4344 4345 int ssl3_shutdown(SSL *s) 4346 { 4347 int ret; 4348 4349 /* 4350 * Don't do anything much if we have not done the handshake or we don't 4351 * want to send messages :-) 4352 */ 4353 if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) { 4354 s->shutdown = (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); 4355 return (1); 4356 } 4357 4358 if (!(s->shutdown & SSL_SENT_SHUTDOWN)) { 4359 s->shutdown |= SSL_SENT_SHUTDOWN; 4360 #if 1 4361 ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY); 4362 #endif 4363 /* 4364 * our shutdown alert has been sent now, and if it still needs to be 4365 * written, s->s3->alert_dispatch will be true 4366 */ 4367 if (s->s3->alert_dispatch) 4368 return (-1); /* return WANT_WRITE */ 4369 } else if (s->s3->alert_dispatch) { 4370 /* resend it if not sent */ 4371 #if 1 4372 ret = s->method->ssl_dispatch_alert(s); 4373 if (ret == -1) { 4374 /* 4375 * we only get to return -1 here the 2nd/Nth invocation, we must 4376 * have already signalled return 0 upon a previous invoation, 4377 * return WANT_WRITE 4378 */ 4379 return (ret); 4380 } 4381 #endif 4382 } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { 4383 /* 4384 * If we are waiting for a close from our peer, we are closed 4385 */ 4386 s->method->ssl_read_bytes(s, 0, NULL, 0, 0); 4387 if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { 4388 return (-1); /* return WANT_READ */ 4389 } 4390 } 4391 4392 if ((s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN)) && 4393 !s->s3->alert_dispatch) 4394 return (1); 4395 else 4396 return (0); 4397 } 4398 4399 int ssl3_write(SSL *s, const void *buf, int len) 4400 { 4401 int ret, n; 4402 4403 #if 0 4404 if (s->shutdown & SSL_SEND_SHUTDOWN) { 4405 s->rwstate = SSL_NOTHING; 4406 return (0); 4407 } 4408 #endif 4409 clear_sys_error(); 4410 if (s->s3->renegotiate) 4411 ssl3_renegotiate_check(s); 4412 4413 /* 4414 * This is an experimental flag that sends the last handshake message in 4415 * the same packet as the first use data - used to see if it helps the 4416 * TCP protocol during session-id reuse 4417 */ 4418 /* The second test is because the buffer may have been removed */ 4419 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) { 4420 /* First time through, we write into the buffer */ 4421 if (s->s3->delay_buf_pop_ret == 0) { 4422 ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len); 4423 if (ret <= 0) 4424 return (ret); 4425 4426 s->s3->delay_buf_pop_ret = ret; 4427 } 4428 4429 s->rwstate = SSL_WRITING; 4430 n = BIO_flush(s->wbio); 4431 if (n <= 0) 4432 return (n); 4433 s->rwstate = SSL_NOTHING; 4434 4435 /* We have flushed the buffer, so remove it */ 4436 ssl_free_wbio_buffer(s); 4437 s->s3->flags &= ~SSL3_FLAGS_POP_BUFFER; 4438 4439 ret = s->s3->delay_buf_pop_ret; 4440 s->s3->delay_buf_pop_ret = 0; 4441 } else { 4442 ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, 4443 buf, len); 4444 if (ret <= 0) 4445 return (ret); 4446 } 4447 4448 return (ret); 4449 } 4450 4451 static int ssl3_read_internal(SSL *s, void *buf, int len, int peek) 4452 { 4453 int ret; 4454 4455 clear_sys_error(); 4456 if (s->s3->renegotiate) 4457 ssl3_renegotiate_check(s); 4458 s->s3->in_read_app_data = 1; 4459 ret = 4460 s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, 4461 peek); 4462 if ((ret == -1) && (s->s3->in_read_app_data == 2)) { 4463 /* 4464 * ssl3_read_bytes decided to call s->handshake_func, which called 4465 * ssl3_read_bytes to read handshake data. However, ssl3_read_bytes 4466 * actually found application data and thinks that application data 4467 * makes sense here; so disable handshake processing and try to read 4468 * application data again. 4469 */ 4470 s->in_handshake++; 4471 ret = 4472 s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, 4473 peek); 4474 s->in_handshake--; 4475 } else 4476 s->s3->in_read_app_data = 0; 4477 4478 return (ret); 4479 } 4480 4481 int ssl3_read(SSL *s, void *buf, int len) 4482 { 4483 return ssl3_read_internal(s, buf, len, 0); 4484 } 4485 4486 int ssl3_peek(SSL *s, void *buf, int len) 4487 { 4488 return ssl3_read_internal(s, buf, len, 1); 4489 } 4490 4491 int ssl3_renegotiate(SSL *s) 4492 { 4493 if (s->handshake_func == NULL) 4494 return (1); 4495 4496 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) 4497 return (0); 4498 4499 s->s3->renegotiate = 1; 4500 return (1); 4501 } 4502 4503 int ssl3_renegotiate_check(SSL *s) 4504 { 4505 int ret = 0; 4506 4507 if (s->s3->renegotiate) { 4508 if ((s->s3->rbuf.left == 0) && 4509 (s->s3->wbuf.left == 0) && !SSL_in_init(s)) { 4510 /* 4511 * if we are the server, and we have sent a 'RENEGOTIATE' 4512 * message, we need to go to SSL_ST_ACCEPT. 4513 */ 4514 /* SSL_ST_ACCEPT */ 4515 s->state = SSL_ST_RENEGOTIATE; 4516 s->s3->renegotiate = 0; 4517 s->s3->num_renegotiations++; 4518 s->s3->total_renegotiations++; 4519 ret = 1; 4520 } 4521 } 4522 return (ret); 4523 } 4524 4525 /* 4526 * If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF and 4527 * handshake macs if required. 4528 */ 4529 long ssl_get_algorithm2(SSL *s) 4530 { 4531 long alg2; 4532 if (s->s3 == NULL || s->s3->tmp.new_cipher == NULL) 4533 return -1; 4534 alg2 = s->s3->tmp.new_cipher->algorithm2; 4535 if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF 4536 && alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF)) 4537 return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; 4538 return alg2; 4539 } 4540