1 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com) 2 * All rights reserved. 3 * 4 * This package is an SSL implementation written 5 * by Eric Young (eay (at) cryptsoft.com). 6 * The implementation was written so as to conform with Netscapes SSL. 7 * 8 * This library is free for commercial and non-commercial use as long as 9 * the following conditions are aheared to. The following conditions 10 * apply to all code found in this distribution, be it the RC4, RSA, 11 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12 * included with this distribution is covered by the same copyright terms 13 * except that the holder is Tim Hudson (tjh (at) cryptsoft.com). 14 * 15 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * the code are not to be removed. 17 * If this package is used in a product, Eric Young should be given attribution 18 * as the author of the parts of the library used. 19 * This can be in the form of a textual message at program startup or 20 * in documentation (online or textual) provided with the package. 21 * 22 * Redistribution and use in source and binary forms, with or without 23 * modification, are permitted provided that the following conditions 24 * are met: 25 * 1. Redistributions of source code must retain the copyright 26 * notice, this list of conditions and the following disclaimer. 27 * 2. Redistributions in binary form must reproduce the above copyright 28 * notice, this list of conditions and the following disclaimer in the 29 * documentation and/or other materials provided with the distribution. 30 * 3. All advertising materials mentioning features or use of this software 31 * must display the following acknowledgement: 32 * "This product includes cryptographic software written by 33 * Eric Young (eay (at) cryptsoft.com)" 34 * The word 'cryptographic' can be left out if the rouines from the library 35 * being used are not cryptographic related :-). 36 * 4. If you include any Windows specific code (or a derivative thereof) from 37 * the apps directory (application code) you must include an acknowledgement: 38 * "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)" 39 * 40 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 44 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 45 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 46 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 48 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 * SUCH DAMAGE. 51 * 52 * The licence and distribution terms for any publically available version or 53 * derivative of this code cannot be changed. i.e. this code cannot simply be 54 * copied and put under another distribution licence 55 * [including the GNU Public Licence.] 56 */ 57 /* ==================================================================== 58 * Copyright 2005 Nokia. All rights reserved. 59 * 60 * The portions of the attached software ("Contribution") is developed by 61 * Nokia Corporation and is licensed pursuant to the OpenSSL open source 62 * license. 63 * 64 * The Contribution, originally written by Mika Kousa and Pasi Eronen of 65 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites 66 * support (see RFC 4279) to OpenSSL. 67 * 68 * No patent licenses or other rights except those expressly stated in 69 * the OpenSSL open source license shall be deemed granted or received 70 * expressly, by implication, estoppel, or otherwise. 71 * 72 * No assurances are provided by Nokia that the Contribution does not 73 * infringe the patent or other intellectual property rights of any third 74 * party or that the license provides you with all the necessary rights 75 * to make use of the Contribution. 76 * 77 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN 78 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA 79 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY 80 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR 81 * OTHERWISE. 82 */ 83 84 #include <openssl/ssl.h> 85 86 #include "internal.h" 87 88 89 const char *SSL_state_string_long(const SSL *ssl) { 90 switch (ssl->state) { 91 case SSL_ST_ACCEPT: 92 return "before accept initialization"; 93 94 case SSL_ST_CONNECT: 95 return "before connect initialization"; 96 97 case SSL_ST_OK: 98 return "SSL negotiation finished successfully"; 99 100 case SSL_ST_RENEGOTIATE: 101 return "SSL renegotiate ciphers"; 102 103 /* SSLv3 additions */ 104 case SSL3_ST_CW_CLNT_HELLO_A: 105 return "SSLv3 write client hello A"; 106 107 case SSL3_ST_CW_CLNT_HELLO_B: 108 return "SSLv3 write client hello B"; 109 110 case SSL3_ST_CR_SRVR_HELLO_A: 111 return "SSLv3 read server hello A"; 112 113 case SSL3_ST_CR_SRVR_HELLO_B: 114 return "SSLv3 read server hello B"; 115 116 case SSL3_ST_CR_CERT_A: 117 return "SSLv3 read server certificate A"; 118 119 case SSL3_ST_CR_CERT_B: 120 return "SSLv3 read server certificate B"; 121 122 case SSL3_ST_CR_KEY_EXCH_A: 123 return "SSLv3 read server key exchange A"; 124 125 case SSL3_ST_CR_KEY_EXCH_B: 126 return "SSLv3 read server key exchange B"; 127 128 case SSL3_ST_CR_CERT_REQ_A: 129 return "SSLv3 read server certificate request A"; 130 131 case SSL3_ST_CR_CERT_REQ_B: 132 return "SSLv3 read server certificate request B"; 133 134 case SSL3_ST_CR_SESSION_TICKET_A: 135 return "SSLv3 read server session ticket A"; 136 137 case SSL3_ST_CR_SESSION_TICKET_B: 138 return "SSLv3 read server session ticket B"; 139 140 case SSL3_ST_CR_SRVR_DONE_A: 141 return "SSLv3 read server done A"; 142 143 case SSL3_ST_CR_SRVR_DONE_B: 144 return "SSLv3 read server done B"; 145 146 case SSL3_ST_CW_CERT_A: 147 return "SSLv3 write client certificate A"; 148 149 case SSL3_ST_CW_CERT_B: 150 return "SSLv3 write client certificate B"; 151 152 case SSL3_ST_CW_CERT_C: 153 return "SSLv3 write client certificate C"; 154 155 case SSL3_ST_CW_CERT_D: 156 return "SSLv3 write client certificate D"; 157 158 case SSL3_ST_CW_KEY_EXCH_A: 159 return "SSLv3 write client key exchange A"; 160 161 case SSL3_ST_CW_KEY_EXCH_B: 162 return "SSLv3 write client key exchange B"; 163 164 case SSL3_ST_CW_CERT_VRFY_A: 165 return "SSLv3 write certificate verify A"; 166 167 case SSL3_ST_CW_CERT_VRFY_B: 168 return "SSLv3 write certificate verify B"; 169 170 case SSL3_ST_CW_CHANGE_A: 171 case SSL3_ST_SW_CHANGE_A: 172 return "SSLv3 write change cipher spec A"; 173 174 case SSL3_ST_CW_CHANGE_B: 175 case SSL3_ST_SW_CHANGE_B: 176 return "SSLv3 write change cipher spec B"; 177 178 case SSL3_ST_CW_FINISHED_A: 179 case SSL3_ST_SW_FINISHED_A: 180 return "SSLv3 write finished A"; 181 182 case SSL3_ST_CW_FINISHED_B: 183 case SSL3_ST_SW_FINISHED_B: 184 return "SSLv3 write finished B"; 185 186 case SSL3_ST_CR_CHANGE: 187 case SSL3_ST_SR_CHANGE: 188 return "SSLv3 read change cipher spec"; 189 190 case SSL3_ST_CR_FINISHED_A: 191 case SSL3_ST_SR_FINISHED_A: 192 return "SSLv3 read finished A"; 193 194 case SSL3_ST_CR_FINISHED_B: 195 case SSL3_ST_SR_FINISHED_B: 196 return "SSLv3 read finished B"; 197 198 case SSL3_ST_CW_FLUSH: 199 case SSL3_ST_SW_FLUSH: 200 return "SSLv3 flush data"; 201 202 case SSL3_ST_SR_CLNT_HELLO_A: 203 return "SSLv3 read client hello A"; 204 205 case SSL3_ST_SR_CLNT_HELLO_B: 206 return "SSLv3 read client hello B"; 207 208 case SSL3_ST_SR_CLNT_HELLO_C: 209 return "SSLv3 read client hello C"; 210 211 case SSL3_ST_SR_CLNT_HELLO_D: 212 return "SSLv3 read client hello D"; 213 214 case SSL3_ST_SW_HELLO_REQ_A: 215 return "SSLv3 write hello request A"; 216 217 case SSL3_ST_SW_HELLO_REQ_B: 218 return "SSLv3 write hello request B"; 219 220 case SSL3_ST_SW_HELLO_REQ_C: 221 return "SSLv3 write hello request C"; 222 223 case SSL3_ST_SW_SRVR_HELLO_A: 224 return "SSLv3 write server hello A"; 225 226 case SSL3_ST_SW_SRVR_HELLO_B: 227 return "SSLv3 write server hello B"; 228 229 case SSL3_ST_SW_CERT_A: 230 return "SSLv3 write certificate A"; 231 232 case SSL3_ST_SW_CERT_B: 233 return "SSLv3 write certificate B"; 234 235 case SSL3_ST_SW_KEY_EXCH_A: 236 return "SSLv3 write key exchange A"; 237 238 case SSL3_ST_SW_KEY_EXCH_B: 239 return "SSLv3 write key exchange B"; 240 241 case SSL3_ST_SW_CERT_REQ_A: 242 return "SSLv3 write certificate request A"; 243 244 case SSL3_ST_SW_CERT_REQ_B: 245 return "SSLv3 write certificate request B"; 246 247 case SSL3_ST_SW_SESSION_TICKET_A: 248 return "SSLv3 write session ticket A"; 249 250 case SSL3_ST_SW_SESSION_TICKET_B: 251 return "SSLv3 write session ticket B"; 252 253 case SSL3_ST_SW_SRVR_DONE_A: 254 return "SSLv3 write server done A"; 255 256 case SSL3_ST_SW_SRVR_DONE_B: 257 return "SSLv3 write server done B"; 258 259 case SSL3_ST_SR_CERT_A: 260 return "SSLv3 read client certificate A"; 261 262 case SSL3_ST_SR_CERT_B: 263 return "SSLv3 read client certificate B"; 264 265 case SSL3_ST_SR_KEY_EXCH_A: 266 return "SSLv3 read client key exchange A"; 267 268 case SSL3_ST_SR_KEY_EXCH_B: 269 return "SSLv3 read client key exchange B"; 270 271 case SSL3_ST_SR_CERT_VRFY_A: 272 return "SSLv3 read certificate verify A"; 273 274 case SSL3_ST_SR_CERT_VRFY_B: 275 return "SSLv3 read certificate verify B"; 276 277 /* DTLS */ 278 case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: 279 return "DTLS1 read hello verify request A"; 280 281 case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: 282 return "DTLS1 read hello verify request B"; 283 284 default: 285 return "unknown state"; 286 } 287 } 288 289 const char *SSL_state_string(const SSL *ssl) { 290 switch (ssl->state) { 291 case SSL_ST_ACCEPT: 292 return "AINIT "; 293 294 case SSL_ST_CONNECT: 295 return "CINIT "; 296 297 case SSL_ST_OK: 298 return "SSLOK "; 299 300 /* SSLv3 additions */ 301 case SSL3_ST_SW_FLUSH: 302 case SSL3_ST_CW_FLUSH: 303 return "3FLUSH"; 304 305 case SSL3_ST_CW_CLNT_HELLO_A: 306 return "3WCH_A"; 307 308 case SSL3_ST_CW_CLNT_HELLO_B: 309 return "3WCH_B"; 310 311 case SSL3_ST_CR_SRVR_HELLO_A: 312 return "3RSH_A"; 313 314 case SSL3_ST_CR_SRVR_HELLO_B: 315 return "3RSH_B"; 316 317 case SSL3_ST_CR_CERT_A: 318 return "3RSC_A"; 319 320 case SSL3_ST_CR_CERT_B: 321 return "3RSC_B"; 322 323 case SSL3_ST_CR_KEY_EXCH_A: 324 return "3RSKEA"; 325 326 case SSL3_ST_CR_KEY_EXCH_B: 327 return "3RSKEB"; 328 329 case SSL3_ST_CR_CERT_REQ_A: 330 return "3RCR_A"; 331 332 case SSL3_ST_CR_CERT_REQ_B: 333 return "3RCR_B"; 334 335 case SSL3_ST_CR_SRVR_DONE_A: 336 return "3RSD_A"; 337 338 case SSL3_ST_CR_SRVR_DONE_B: 339 return "3RSD_B"; 340 341 case SSL3_ST_CW_CERT_A: 342 return "3WCC_A"; 343 344 case SSL3_ST_CW_CERT_B: 345 return "3WCC_B"; 346 347 case SSL3_ST_CW_CERT_C: 348 return "3WCC_C"; 349 350 case SSL3_ST_CW_CERT_D: 351 return "3WCC_D"; 352 353 case SSL3_ST_CW_KEY_EXCH_A: 354 return "3WCKEA"; 355 356 case SSL3_ST_CW_KEY_EXCH_B: 357 return "3WCKEB"; 358 359 case SSL3_ST_CW_CERT_VRFY_A: 360 return "3WCV_A"; 361 362 case SSL3_ST_CW_CERT_VRFY_B: 363 return "3WCV_B"; 364 365 case SSL3_ST_SW_CHANGE_A: 366 case SSL3_ST_CW_CHANGE_A: 367 return "3WCCSA"; 368 369 case SSL3_ST_SW_CHANGE_B: 370 case SSL3_ST_CW_CHANGE_B: 371 return "3WCCSB"; 372 373 case SSL3_ST_SW_FINISHED_A: 374 case SSL3_ST_CW_FINISHED_A: 375 return "3WFINA"; 376 377 case SSL3_ST_SW_FINISHED_B: 378 case SSL3_ST_CW_FINISHED_B: 379 return "3WFINB"; 380 381 case SSL3_ST_CR_CHANGE: 382 case SSL3_ST_SR_CHANGE: 383 return "3RCCS_"; 384 385 case SSL3_ST_SR_FINISHED_A: 386 case SSL3_ST_CR_FINISHED_A: 387 return "3RFINA"; 388 389 case SSL3_ST_SR_FINISHED_B: 390 case SSL3_ST_CR_FINISHED_B: 391 return "3RFINB"; 392 393 case SSL3_ST_SW_HELLO_REQ_A: 394 return "3WHR_A"; 395 396 case SSL3_ST_SW_HELLO_REQ_B: 397 return "3WHR_B"; 398 399 case SSL3_ST_SW_HELLO_REQ_C: 400 return "3WHR_C"; 401 402 case SSL3_ST_SR_CLNT_HELLO_A: 403 return "3RCH_A"; 404 405 case SSL3_ST_SR_CLNT_HELLO_B: 406 return "3RCH_B"; 407 408 case SSL3_ST_SR_CLNT_HELLO_C: 409 return "3RCH_C"; 410 411 case SSL3_ST_SR_CLNT_HELLO_D: 412 return "3RCH_D"; 413 414 case SSL3_ST_SW_SRVR_HELLO_A: 415 return "3WSH_A"; 416 417 case SSL3_ST_SW_SRVR_HELLO_B: 418 return "3WSH_B"; 419 420 case SSL3_ST_SW_CERT_A: 421 return "3WSC_A"; 422 423 case SSL3_ST_SW_CERT_B: 424 return "3WSC_B"; 425 426 case SSL3_ST_SW_KEY_EXCH_A: 427 return "3WSKEA"; 428 429 case SSL3_ST_SW_KEY_EXCH_B: 430 return "3WSKEB"; 431 432 case SSL3_ST_SW_CERT_REQ_A: 433 return "3WCR_A"; 434 435 case SSL3_ST_SW_CERT_REQ_B: 436 return "3WCR_B"; 437 438 case SSL3_ST_SW_SRVR_DONE_A: 439 return "3WSD_A"; 440 441 case SSL3_ST_SW_SRVR_DONE_B: 442 return "3WSD_B"; 443 444 case SSL3_ST_SR_CERT_A: 445 return "3RCC_A"; 446 447 case SSL3_ST_SR_CERT_B: 448 return "3RCC_B"; 449 450 case SSL3_ST_SR_KEY_EXCH_A: 451 return "3RCKEA"; 452 453 case SSL3_ST_SR_KEY_EXCH_B: 454 return "3RCKEB"; 455 456 case SSL3_ST_SR_CERT_VRFY_A: 457 return "3RCV_A"; 458 459 case SSL3_ST_SR_CERT_VRFY_B: 460 return "3RCV_B"; 461 462 /* DTLS */ 463 case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: 464 return "DRCHVA"; 465 466 case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: 467 return "DRCHVB"; 468 469 default: 470 return "UNKWN "; 471 } 472 } 473 474 const char *SSL_alert_type_string_long(int value) { 475 value >>= 8; 476 if (value == SSL3_AL_WARNING) { 477 return "warning"; 478 } else if (value == SSL3_AL_FATAL) { 479 return "fatal"; 480 } 481 482 return "unknown"; 483 } 484 485 const char *SSL_alert_type_string(int value) { 486 return "!"; 487 } 488 489 const char *SSL_alert_desc_string(int value) { 490 return "!!"; 491 } 492 493 const char *SSL_alert_desc_string_long(int value) { 494 switch (value & 0xff) { 495 case SSL3_AD_CLOSE_NOTIFY: 496 return "close notify"; 497 498 case SSL3_AD_UNEXPECTED_MESSAGE: 499 return "unexpected_message"; 500 501 case SSL3_AD_BAD_RECORD_MAC: 502 return "bad record mac"; 503 504 case SSL3_AD_DECOMPRESSION_FAILURE: 505 return "decompression failure"; 506 507 case SSL3_AD_HANDSHAKE_FAILURE: 508 return "handshake failure"; 509 510 case SSL3_AD_NO_CERTIFICATE: 511 return "no certificate"; 512 513 case SSL3_AD_BAD_CERTIFICATE: 514 return "bad certificate"; 515 516 case SSL3_AD_UNSUPPORTED_CERTIFICATE: 517 return "unsupported certificate"; 518 519 case SSL3_AD_CERTIFICATE_REVOKED: 520 return "certificate revoked"; 521 522 case SSL3_AD_CERTIFICATE_EXPIRED: 523 return "certificate expired"; 524 525 case SSL3_AD_CERTIFICATE_UNKNOWN: 526 return "certificate unknown"; 527 528 case SSL3_AD_ILLEGAL_PARAMETER: 529 return "illegal parameter"; 530 531 case TLS1_AD_DECRYPTION_FAILED: 532 return "decryption failed"; 533 534 case TLS1_AD_RECORD_OVERFLOW: 535 return "record overflow"; 536 537 case TLS1_AD_UNKNOWN_CA: 538 return "unknown CA"; 539 540 case TLS1_AD_ACCESS_DENIED: 541 return "access denied"; 542 543 case TLS1_AD_DECODE_ERROR: 544 return "decode error"; 545 546 case TLS1_AD_DECRYPT_ERROR: 547 return "decrypt error"; 548 549 case TLS1_AD_EXPORT_RESTRICTION: 550 return "export restriction"; 551 552 case TLS1_AD_PROTOCOL_VERSION: 553 return "protocol version"; 554 555 case TLS1_AD_INSUFFICIENT_SECURITY: 556 return "insufficient security"; 557 558 case TLS1_AD_INTERNAL_ERROR: 559 return "internal error"; 560 561 case TLS1_AD_USER_CANCELLED: 562 return "user canceled"; 563 564 case TLS1_AD_NO_RENEGOTIATION: 565 return "no renegotiation"; 566 567 case TLS1_AD_UNSUPPORTED_EXTENSION: 568 return "unsupported extension"; 569 570 case TLS1_AD_CERTIFICATE_UNOBTAINABLE: 571 return "certificate unobtainable"; 572 573 case TLS1_AD_UNRECOGNIZED_NAME: 574 return "unrecognized name"; 575 576 case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 577 return "bad certificate status response"; 578 579 case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 580 return "bad certificate hash value"; 581 582 case TLS1_AD_UNKNOWN_PSK_IDENTITY: 583 return "unknown PSK identity"; 584 585 case SSL3_AD_INAPPROPRIATE_FALLBACK: 586 return "inappropriate fallback"; 587 588 default: 589 return "unknown"; 590 } 591 } 592