1/* ssl/ssl_stat.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 2005 Nokia. All rights reserved. 60 * 61 * The portions of the attached software ("Contribution") is developed by 62 * Nokia Corporation and is licensed pursuant to the OpenSSL open source 63 * license. 64 * 65 * The Contribution, originally written by Mika Kousa and Pasi Eronen of 66 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites 67 * support (see RFC 4279) to OpenSSL. 68 * 69 * No patent licenses or other rights except those expressly stated in 70 * the OpenSSL open source license shall be deemed granted or received 71 * expressly, by implication, estoppel, or otherwise. 72 * 73 * No assurances are provided by Nokia that the Contribution does not 74 * infringe the patent or other intellectual property rights of any third 75 * party or that the license provides you with all the necessary rights 76 * to make use of the Contribution. 77 * 78 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN 79 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA 80 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY 81 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR 82 * OTHERWISE. 83 */ 84 85#include <stdio.h> 86#include "internal.h" 87 88const char *SSL_state_string_long(const SSL *s) { 89 const char *str; 90 91 switch (s->state) { 92 case SSL_ST_ACCEPT: 93 str = "before accept initialization"; 94 break; 95 96 case SSL_ST_CONNECT: 97 str = "before connect initialization"; 98 break; 99 100 case SSL_ST_OK: 101 str = "SSL negotiation finished successfully"; 102 break; 103 104 case SSL_ST_RENEGOTIATE: 105 str = "SSL renegotiate ciphers"; 106 break; 107 108 /* SSLv3 additions */ 109 case SSL3_ST_CW_CLNT_HELLO_A: 110 str = "SSLv3 write client hello A"; 111 break; 112 113 case SSL3_ST_CW_CLNT_HELLO_B: 114 str = "SSLv3 write client hello B"; 115 break; 116 117 case SSL3_ST_CR_SRVR_HELLO_A: 118 str = "SSLv3 read server hello A"; 119 break; 120 121 case SSL3_ST_CR_SRVR_HELLO_B: 122 str = "SSLv3 read server hello B"; 123 break; 124 125 case SSL3_ST_CR_CERT_A: 126 str = "SSLv3 read server certificate A"; 127 break; 128 129 case SSL3_ST_CR_CERT_B: 130 str = "SSLv3 read server certificate B"; 131 break; 132 133 case SSL3_ST_CR_KEY_EXCH_A: 134 str = "SSLv3 read server key exchange A"; 135 break; 136 137 case SSL3_ST_CR_KEY_EXCH_B: 138 str = "SSLv3 read server key exchange B"; 139 break; 140 141 case SSL3_ST_CR_CERT_REQ_A: 142 str = "SSLv3 read server certificate request A"; 143 break; 144 145 case SSL3_ST_CR_CERT_REQ_B: 146 str = "SSLv3 read server certificate request B"; 147 break; 148 149 case SSL3_ST_CR_SESSION_TICKET_A: 150 str = "SSLv3 read server session ticket A"; 151 break; 152 153 case SSL3_ST_CR_SESSION_TICKET_B: 154 str = "SSLv3 read server session ticket B"; 155 break; 156 157 case SSL3_ST_CR_SRVR_DONE_A: 158 str = "SSLv3 read server done A"; 159 break; 160 161 case SSL3_ST_CR_SRVR_DONE_B: 162 str = "SSLv3 read server done B"; 163 break; 164 165 case SSL3_ST_CW_CERT_A: 166 str = "SSLv3 write client certificate A"; 167 break; 168 169 case SSL3_ST_CW_CERT_B: 170 str = "SSLv3 write client certificate B"; 171 break; 172 173 case SSL3_ST_CW_CERT_C: 174 str = "SSLv3 write client certificate C"; 175 break; 176 177 case SSL3_ST_CW_CERT_D: 178 str = "SSLv3 write client certificate D"; 179 break; 180 181 case SSL3_ST_CW_KEY_EXCH_A: 182 str = "SSLv3 write client key exchange A"; 183 break; 184 185 case SSL3_ST_CW_KEY_EXCH_B: 186 str = "SSLv3 write client key exchange B"; 187 break; 188 189 case SSL3_ST_CW_CERT_VRFY_A: 190 str = "SSLv3 write certificate verify A"; 191 break; 192 193 case SSL3_ST_CW_CERT_VRFY_B: 194 str = "SSLv3 write certificate verify B"; 195 break; 196 197 case SSL3_ST_CW_CHANGE_A: 198 case SSL3_ST_SW_CHANGE_A: 199 str = "SSLv3 write change cipher spec A"; 200 break; 201 202 case SSL3_ST_CW_CHANGE_B: 203 case SSL3_ST_SW_CHANGE_B: 204 str = "SSLv3 write change cipher spec B"; 205 break; 206 207 case SSL3_ST_CW_FINISHED_A: 208 case SSL3_ST_SW_FINISHED_A: 209 str = "SSLv3 write finished A"; 210 break; 211 212 case SSL3_ST_CW_FINISHED_B: 213 case SSL3_ST_SW_FINISHED_B: 214 str = "SSLv3 write finished B"; 215 break; 216 217 case SSL3_ST_CR_CHANGE: 218 case SSL3_ST_SR_CHANGE: 219 str = "SSLv3 read change cipher spec"; 220 break; 221 222 case SSL3_ST_CR_FINISHED_A: 223 case SSL3_ST_SR_FINISHED_A: 224 str = "SSLv3 read finished A"; 225 break; 226 227 case SSL3_ST_CR_FINISHED_B: 228 case SSL3_ST_SR_FINISHED_B: 229 str = "SSLv3 read finished B"; 230 break; 231 232 case SSL3_ST_CW_FLUSH: 233 case SSL3_ST_SW_FLUSH: 234 str = "SSLv3 flush data"; 235 break; 236 237 case SSL3_ST_SR_CLNT_HELLO_A: 238 str = "SSLv3 read client hello A"; 239 break; 240 241 case SSL3_ST_SR_CLNT_HELLO_B: 242 str = "SSLv3 read client hello B"; 243 break; 244 245 case SSL3_ST_SR_CLNT_HELLO_C: 246 str = "SSLv3 read client hello C"; 247 break; 248 249 case SSL3_ST_SR_CLNT_HELLO_D: 250 str = "SSLv3 read client hello D"; 251 break; 252 253 case SSL3_ST_SW_HELLO_REQ_A: 254 str = "SSLv3 write hello request A"; 255 break; 256 257 case SSL3_ST_SW_HELLO_REQ_B: 258 str = "SSLv3 write hello request B"; 259 break; 260 261 case SSL3_ST_SW_HELLO_REQ_C: 262 str = "SSLv3 write hello request C"; 263 break; 264 265 case SSL3_ST_SW_SRVR_HELLO_A: 266 str = "SSLv3 write server hello A"; 267 break; 268 269 case SSL3_ST_SW_SRVR_HELLO_B: 270 str = "SSLv3 write server hello B"; 271 break; 272 273 case SSL3_ST_SW_CERT_A: 274 str = "SSLv3 write certificate A"; 275 break; 276 277 case SSL3_ST_SW_CERT_B: 278 str = "SSLv3 write certificate B"; 279 break; 280 281 case SSL3_ST_SW_KEY_EXCH_A: 282 str = "SSLv3 write key exchange A"; 283 break; 284 285 case SSL3_ST_SW_KEY_EXCH_B: 286 str = "SSLv3 write key exchange B"; 287 break; 288 289 case SSL3_ST_SW_CERT_REQ_A: 290 str = "SSLv3 write certificate request A"; 291 break; 292 293 case SSL3_ST_SW_CERT_REQ_B: 294 str = "SSLv3 write certificate request B"; 295 break; 296 297 case SSL3_ST_SW_SESSION_TICKET_A: 298 str = "SSLv3 write session ticket A"; 299 break; 300 301 case SSL3_ST_SW_SESSION_TICKET_B: 302 str = "SSLv3 write session ticket B"; 303 break; 304 305 case SSL3_ST_SW_SRVR_DONE_A: 306 str = "SSLv3 write server done A"; 307 break; 308 309 case SSL3_ST_SW_SRVR_DONE_B: 310 str = "SSLv3 write server done B"; 311 break; 312 313 case SSL3_ST_SR_CERT_A: 314 str = "SSLv3 read client certificate A"; 315 break; 316 317 case SSL3_ST_SR_CERT_B: 318 str = "SSLv3 read client certificate B"; 319 break; 320 321 case SSL3_ST_SR_KEY_EXCH_A: 322 str = "SSLv3 read client key exchange A"; 323 break; 324 325 case SSL3_ST_SR_KEY_EXCH_B: 326 str = "SSLv3 read client key exchange B"; 327 break; 328 329 case SSL3_ST_SR_CERT_VRFY_A: 330 str = "SSLv3 read certificate verify A"; 331 break; 332 333 case SSL3_ST_SR_CERT_VRFY_B: 334 str = "SSLv3 read certificate verify B"; 335 break; 336 337 /* SSLv2/v3 compatibility states */ 338 /* client */ 339 case SSL23_ST_CW_CLNT_HELLO_A: 340 str = "SSLv2/v3 write client hello A"; 341 break; 342 343 case SSL23_ST_CW_CLNT_HELLO_B: 344 str = "SSLv2/v3 write client hello B"; 345 break; 346 347 case SSL23_ST_CR_SRVR_HELLO_A: 348 str = "SSLv2/v3 read server hello A"; 349 break; 350 351 case SSL23_ST_CR_SRVR_HELLO_B: 352 str = "SSLv2/v3 read server hello B"; 353 break; 354 355 /* server */ 356 case SSL23_ST_SR_CLNT_HELLO: 357 str = "SSLv2/v3 read client hello"; 358 break; 359 360 case SSL23_ST_SR_V2_CLNT_HELLO: 361 str = "SSLv2/v3 read v2 client hello"; 362 break; 363 364 case SSL23_ST_SR_SWITCH_VERSION: 365 str = "SSLv2/v3 switch version"; 366 break; 367 368 /* DTLS */ 369 case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: 370 str = "DTLS1 read hello verify request A"; 371 break; 372 373 case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: 374 str = "DTLS1 read hello verify request B"; 375 break; 376 377 default: 378 str = "unknown state"; 379 break; 380 } 381 382 return str; 383} 384 385const char *SSL_rstate_string_long(const SSL *s) { 386 const char *str; 387 388 switch (s->rstate) { 389 case SSL_ST_READ_HEADER: 390 str = "read header"; 391 break; 392 393 case SSL_ST_READ_BODY: 394 str = "read body"; 395 break; 396 397 case SSL_ST_READ_DONE: 398 str = "read done"; 399 break; 400 401 default: 402 str = "unknown"; 403 break; 404 } 405 406 return str; 407} 408 409const char *SSL_state_string(const SSL *s) { 410 const char *str; 411 412 switch (s->state) { 413 case SSL_ST_ACCEPT: 414 str = "AINIT "; 415 break; 416 417 case SSL_ST_CONNECT: 418 str = "CINIT "; 419 break; 420 421 case SSL_ST_OK: 422 str = "SSLOK "; 423 break; 424 425 /* SSLv3 additions */ 426 case SSL3_ST_SW_FLUSH: 427 case SSL3_ST_CW_FLUSH: 428 str = "3FLUSH"; 429 break; 430 431 case SSL3_ST_CW_CLNT_HELLO_A: 432 str = "3WCH_A"; 433 break; 434 435 case SSL3_ST_CW_CLNT_HELLO_B: 436 str = "3WCH_B"; 437 break; 438 439 case SSL3_ST_CR_SRVR_HELLO_A: 440 str = "3RSH_A"; 441 break; 442 443 case SSL3_ST_CR_SRVR_HELLO_B: 444 str = "3RSH_B"; 445 break; 446 447 case SSL3_ST_CR_CERT_A: 448 str = "3RSC_A"; 449 break; 450 451 case SSL3_ST_CR_CERT_B: 452 str = "3RSC_B"; 453 break; 454 455 case SSL3_ST_CR_KEY_EXCH_A: 456 str = "3RSKEA"; 457 break; 458 459 case SSL3_ST_CR_KEY_EXCH_B: 460 str = "3RSKEB"; 461 break; 462 463 case SSL3_ST_CR_CERT_REQ_A: 464 str = "3RCR_A"; 465 break; 466 467 case SSL3_ST_CR_CERT_REQ_B: 468 str = "3RCR_B"; 469 break; 470 471 case SSL3_ST_CR_SRVR_DONE_A: 472 str = "3RSD_A"; 473 break; 474 475 case SSL3_ST_CR_SRVR_DONE_B: 476 str = "3RSD_B"; 477 break; 478 479 case SSL3_ST_CW_CERT_A: 480 str = "3WCC_A"; 481 break; 482 483 case SSL3_ST_CW_CERT_B: 484 str = "3WCC_B"; 485 break; 486 487 case SSL3_ST_CW_CERT_C: 488 str = "3WCC_C"; 489 break; 490 491 case SSL3_ST_CW_CERT_D: 492 str = "3WCC_D"; 493 break; 494 495 case SSL3_ST_CW_KEY_EXCH_A: 496 str = "3WCKEA"; 497 break; 498 499 case SSL3_ST_CW_KEY_EXCH_B: 500 str = "3WCKEB"; 501 break; 502 503 case SSL3_ST_CW_CERT_VRFY_A: 504 str = "3WCV_A"; 505 break; 506 507 case SSL3_ST_CW_CERT_VRFY_B: 508 str = "3WCV_B"; 509 break; 510 511 case SSL3_ST_SW_CHANGE_A: 512 case SSL3_ST_CW_CHANGE_A: 513 str = "3WCCSA"; 514 break; 515 516 case SSL3_ST_SW_CHANGE_B: 517 case SSL3_ST_CW_CHANGE_B: 518 str = "3WCCSB"; 519 break; 520 521 case SSL3_ST_SW_FINISHED_A: 522 case SSL3_ST_CW_FINISHED_A: 523 str = "3WFINA"; 524 break; 525 526 case SSL3_ST_SW_FINISHED_B: 527 case SSL3_ST_CW_FINISHED_B: 528 str = "3WFINB"; 529 break; 530 531 case SSL3_ST_CR_CHANGE: 532 case SSL3_ST_SR_CHANGE: 533 str = "3RCCS_"; 534 break; 535 536 case SSL3_ST_SR_FINISHED_A: 537 case SSL3_ST_CR_FINISHED_A: 538 str = "3RFINA"; 539 break; 540 541 case SSL3_ST_SR_FINISHED_B: 542 case SSL3_ST_CR_FINISHED_B: 543 str = "3RFINB"; 544 break; 545 546 case SSL3_ST_SW_HELLO_REQ_A: 547 str = "3WHR_A"; 548 break; 549 550 case SSL3_ST_SW_HELLO_REQ_B: 551 str = "3WHR_B"; 552 break; 553 554 case SSL3_ST_SW_HELLO_REQ_C: 555 str = "3WHR_C"; 556 break; 557 558 case SSL3_ST_SR_CLNT_HELLO_A: 559 str = "3RCH_A"; 560 break; 561 562 case SSL3_ST_SR_CLNT_HELLO_B: 563 str = "3RCH_B"; 564 break; 565 566 case SSL3_ST_SR_CLNT_HELLO_C: 567 str = "3RCH_C"; 568 break; 569 570 case SSL3_ST_SR_CLNT_HELLO_D: 571 str = "3RCH_D"; 572 break; 573 574 case SSL3_ST_SW_SRVR_HELLO_A: 575 str = "3WSH_A"; 576 break; 577 578 case SSL3_ST_SW_SRVR_HELLO_B: 579 str = "3WSH_B"; 580 break; 581 582 case SSL3_ST_SW_CERT_A: 583 str = "3WSC_A"; 584 break; 585 586 case SSL3_ST_SW_CERT_B: 587 str = "3WSC_B"; 588 break; 589 590 case SSL3_ST_SW_KEY_EXCH_A: 591 str = "3WSKEA"; 592 break; 593 594 case SSL3_ST_SW_KEY_EXCH_B: 595 str = "3WSKEB"; 596 break; 597 598 case SSL3_ST_SW_CERT_REQ_A: 599 str = "3WCR_A"; 600 break; 601 602 case SSL3_ST_SW_CERT_REQ_B: 603 str = "3WCR_B"; 604 break; 605 606 case SSL3_ST_SW_SRVR_DONE_A: 607 str = "3WSD_A"; 608 break; 609 610 case SSL3_ST_SW_SRVR_DONE_B: 611 str = "3WSD_B"; 612 break; 613 614 case SSL3_ST_SR_CERT_A: 615 str = "3RCC_A"; 616 break; 617 618 case SSL3_ST_SR_CERT_B: 619 str = "3RCC_B"; 620 break; 621 622 case SSL3_ST_SR_KEY_EXCH_A: 623 str = "3RCKEA"; 624 break; 625 626 case SSL3_ST_SR_KEY_EXCH_B: 627 str = "3RCKEB"; 628 break; 629 630 case SSL3_ST_SR_CERT_VRFY_A: 631 str = "3RCV_A"; 632 break; 633 634 case SSL3_ST_SR_CERT_VRFY_B: 635 str = "3RCV_B"; 636 break; 637 638 /* SSLv2/v3 compatibility states */ 639 /* client */ 640 case SSL23_ST_CW_CLNT_HELLO_A: 641 str = "23WCHA"; 642 break; 643 644 case SSL23_ST_CW_CLNT_HELLO_B: 645 str = "23WCHB"; 646 break; 647 648 case SSL23_ST_CR_SRVR_HELLO_A: 649 str = "23RSHA"; 650 break; 651 652 case SSL23_ST_CR_SRVR_HELLO_B: 653 str = "23RSHA"; 654 break; 655 656 /* server */ 657 case SSL23_ST_SR_CLNT_HELLO: 658 str = "23RCH_"; 659 break; 660 661 case SSL23_ST_SR_V2_CLNT_HELLO: 662 str = "23R2CH"; 663 break; 664 665 case SSL23_ST_SR_SWITCH_VERSION: 666 str = "23RSW_"; 667 break; 668 669 /* DTLS */ 670 case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: 671 str = "DRCHVA"; 672 break; 673 674 case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: 675 str = "DRCHVB"; 676 break; 677 678 default: 679 str = "UNKWN "; 680 break; 681 } 682 683 return str; 684} 685 686const char *SSL_alert_type_string_long(int value) { 687 value >>= 8; 688 if (value == SSL3_AL_WARNING) { 689 return "warning"; 690 } else if (value == SSL3_AL_FATAL) { 691 return "fatal"; 692 } 693 694 return "unknown"; 695} 696 697const char *SSL_alert_type_string(int value) { 698 value >>= 8; 699 if (value == SSL3_AL_WARNING) { 700 return "W"; 701 } else if (value == SSL3_AL_FATAL) { 702 return "F"; 703 } 704 705 return "U"; 706} 707 708const char *SSL_alert_desc_string(int value) { 709 const char *str; 710 711 switch (value & 0xff) { 712 case SSL3_AD_CLOSE_NOTIFY: 713 str = "CN"; 714 break; 715 716 case SSL3_AD_UNEXPECTED_MESSAGE: 717 str = "UM"; 718 break; 719 720 case SSL3_AD_BAD_RECORD_MAC: 721 str = "BM"; 722 break; 723 724 case SSL3_AD_DECOMPRESSION_FAILURE: 725 str = "DF"; 726 break; 727 728 case SSL3_AD_HANDSHAKE_FAILURE: 729 str = "HF"; 730 break; 731 732 case SSL3_AD_NO_CERTIFICATE: 733 str = "NC"; 734 break; 735 736 case SSL3_AD_BAD_CERTIFICATE: 737 str = "BC"; 738 break; 739 740 case SSL3_AD_UNSUPPORTED_CERTIFICATE: 741 str = "UC"; 742 break; 743 744 case SSL3_AD_CERTIFICATE_REVOKED: 745 str = "CR"; 746 break; 747 748 case SSL3_AD_CERTIFICATE_EXPIRED: 749 str = "CE"; 750 break; 751 752 case SSL3_AD_CERTIFICATE_UNKNOWN: 753 str = "CU"; 754 break; 755 756 case SSL3_AD_ILLEGAL_PARAMETER: 757 str = "IP"; 758 break; 759 760 case TLS1_AD_DECRYPTION_FAILED: 761 str = "DC"; 762 break; 763 764 case TLS1_AD_RECORD_OVERFLOW: 765 str = "RO"; 766 break; 767 768 case TLS1_AD_UNKNOWN_CA: 769 str = "CA"; 770 break; 771 772 case TLS1_AD_ACCESS_DENIED: 773 str = "AD"; 774 break; 775 776 case TLS1_AD_DECODE_ERROR: 777 str = "DE"; 778 break; 779 780 case TLS1_AD_DECRYPT_ERROR: 781 str = "CY"; 782 break; 783 784 case TLS1_AD_EXPORT_RESTRICTION: 785 str = "ER"; 786 break; 787 788 case TLS1_AD_PROTOCOL_VERSION: 789 str = "PV"; 790 break; 791 792 case TLS1_AD_INSUFFICIENT_SECURITY: 793 str = "IS"; 794 break; 795 796 case TLS1_AD_INTERNAL_ERROR: 797 str = "IE"; 798 break; 799 800 case TLS1_AD_USER_CANCELLED: 801 str = "US"; 802 break; 803 804 case TLS1_AD_NO_RENEGOTIATION: 805 str = "NR"; 806 break; 807 808 case TLS1_AD_UNSUPPORTED_EXTENSION: 809 str = "UE"; 810 break; 811 812 case TLS1_AD_CERTIFICATE_UNOBTAINABLE: 813 str = "CO"; 814 break; 815 816 case TLS1_AD_UNRECOGNIZED_NAME: 817 str = "UN"; 818 break; 819 820 case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 821 str = "BR"; 822 break; 823 824 case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 825 str = "BH"; 826 break; 827 828 case TLS1_AD_UNKNOWN_PSK_IDENTITY: 829 str = "UP"; 830 break; 831 832 default: 833 str = "UK"; 834 break; 835 } 836 837 return str; 838} 839 840const char *SSL_alert_desc_string_long(int value) { 841 const char *str; 842 843 switch (value & 0xff) { 844 case SSL3_AD_CLOSE_NOTIFY: 845 str = "close notify"; 846 break; 847 848 case SSL3_AD_UNEXPECTED_MESSAGE: 849 str = "unexpected_message"; 850 break; 851 852 case SSL3_AD_BAD_RECORD_MAC: 853 str = "bad record mac"; 854 break; 855 856 case SSL3_AD_DECOMPRESSION_FAILURE: 857 str = "decompression failure"; 858 break; 859 860 case SSL3_AD_HANDSHAKE_FAILURE: 861 str = "handshake failure"; 862 break; 863 864 case SSL3_AD_NO_CERTIFICATE: 865 str = "no certificate"; 866 break; 867 868 case SSL3_AD_BAD_CERTIFICATE: 869 str = "bad certificate"; 870 break; 871 872 case SSL3_AD_UNSUPPORTED_CERTIFICATE: 873 str = "unsupported certificate"; 874 break; 875 876 case SSL3_AD_CERTIFICATE_REVOKED: 877 str = "certificate revoked"; 878 break; 879 880 case SSL3_AD_CERTIFICATE_EXPIRED: 881 str = "certificate expired"; 882 break; 883 884 case SSL3_AD_CERTIFICATE_UNKNOWN: 885 str = "certificate unknown"; 886 break; 887 888 case SSL3_AD_ILLEGAL_PARAMETER: 889 str = "illegal parameter"; 890 break; 891 892 case TLS1_AD_DECRYPTION_FAILED: 893 str = "decryption failed"; 894 break; 895 896 case TLS1_AD_RECORD_OVERFLOW: 897 str = "record overflow"; 898 break; 899 900 case TLS1_AD_UNKNOWN_CA: 901 str = "unknown CA"; 902 break; 903 904 case TLS1_AD_ACCESS_DENIED: 905 str = "access denied"; 906 break; 907 908 case TLS1_AD_DECODE_ERROR: 909 str = "decode error"; 910 break; 911 912 case TLS1_AD_DECRYPT_ERROR: 913 str = "decrypt error"; 914 break; 915 916 case TLS1_AD_EXPORT_RESTRICTION: 917 str = "export restriction"; 918 break; 919 920 case TLS1_AD_PROTOCOL_VERSION: 921 str = "protocol version"; 922 break; 923 924 case TLS1_AD_INSUFFICIENT_SECURITY: 925 str = "insufficient security"; 926 break; 927 928 case TLS1_AD_INTERNAL_ERROR: 929 str = "internal error"; 930 break; 931 932 case TLS1_AD_USER_CANCELLED: 933 str = "user canceled"; 934 break; 935 936 case TLS1_AD_NO_RENEGOTIATION: 937 str = "no renegotiation"; 938 break; 939 940 case TLS1_AD_UNSUPPORTED_EXTENSION: 941 str = "unsupported extension"; 942 break; 943 944 case TLS1_AD_CERTIFICATE_UNOBTAINABLE: 945 str = "certificate unobtainable"; 946 break; 947 948 case TLS1_AD_UNRECOGNIZED_NAME: 949 str = "unrecognized name"; 950 break; 951 952 case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 953 str = "bad certificate status response"; 954 break; 955 956 case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 957 str = "bad certificate hash value"; 958 break; 959 960 case TLS1_AD_UNKNOWN_PSK_IDENTITY: 961 str = "unknown PSK identity"; 962 break; 963 964 default: 965 str = "unknown"; 966 break; 967 } 968 969 return str; 970} 971 972const char *SSL_rstate_string(const SSL *s) { 973 const char *str; 974 975 switch (s->rstate) { 976 case SSL_ST_READ_HEADER: 977 str = "RH"; 978 break; 979 980 case SSL_ST_READ_BODY: 981 str = "RB"; 982 break; 983 984 case SSL_ST_READ_DONE: 985 str = "RD"; 986 break; 987 988 default: 989 str = "unknown"; 990 break; 991 } 992 993 return str; 994} 995