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