1 /* 2 * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. 3 * Copyright 2005 Nokia. All rights reserved. 4 * 5 * Licensed under the OpenSSL license (the "License"). You may not use 6 * this file except in compliance with the License. You can obtain a copy 7 * in the file LICENSE in the source distribution or at 8 * https://www.openssl.org/source/license.html 9 */ 10 11 #include <stdio.h> 12 #include "ssl_locl.h" 13 14 const char *SSL_state_string_long(const SSL *s) 15 { 16 if (ossl_statem_in_error(s)) 17 return "error"; 18 19 switch (SSL_get_state(s)) { 20 case TLS_ST_CR_CERT_STATUS: 21 return "SSLv3/TLS read certificate status"; 22 case TLS_ST_CW_NEXT_PROTO: 23 return "SSLv3/TLS write next proto"; 24 case TLS_ST_SR_NEXT_PROTO: 25 return "SSLv3/TLS read next proto"; 26 case TLS_ST_SW_CERT_STATUS: 27 return "SSLv3/TLS write certificate status"; 28 case TLS_ST_BEFORE: 29 return "before SSL initialization"; 30 case TLS_ST_OK: 31 return "SSL negotiation finished successfully"; 32 case TLS_ST_CW_CLNT_HELLO: 33 return "SSLv3/TLS write client hello"; 34 case TLS_ST_CR_SRVR_HELLO: 35 return "SSLv3/TLS read server hello"; 36 case TLS_ST_CR_CERT: 37 return "SSLv3/TLS read server certificate"; 38 case TLS_ST_CR_KEY_EXCH: 39 return "SSLv3/TLS read server key exchange"; 40 case TLS_ST_CR_CERT_REQ: 41 return "SSLv3/TLS read server certificate request"; 42 case TLS_ST_CR_SESSION_TICKET: 43 return "SSLv3/TLS read server session ticket"; 44 case TLS_ST_CR_SRVR_DONE: 45 return "SSLv3/TLS read server done"; 46 case TLS_ST_CW_CERT: 47 return "SSLv3/TLS write client certificate"; 48 case TLS_ST_CW_KEY_EXCH: 49 return "SSLv3/TLS write client key exchange"; 50 case TLS_ST_CW_CERT_VRFY: 51 return "SSLv3/TLS write certificate verify"; 52 case TLS_ST_CW_CHANGE: 53 case TLS_ST_SW_CHANGE: 54 return "SSLv3/TLS write change cipher spec"; 55 case TLS_ST_CW_FINISHED: 56 case TLS_ST_SW_FINISHED: 57 return "SSLv3/TLS write finished"; 58 case TLS_ST_CR_CHANGE: 59 case TLS_ST_SR_CHANGE: 60 return "SSLv3/TLS read change cipher spec"; 61 case TLS_ST_CR_FINISHED: 62 case TLS_ST_SR_FINISHED: 63 return "SSLv3/TLS read finished"; 64 case TLS_ST_SR_CLNT_HELLO: 65 return "SSLv3/TLS read client hello"; 66 case TLS_ST_SW_HELLO_REQ: 67 return "SSLv3/TLS write hello request"; 68 case TLS_ST_SW_SRVR_HELLO: 69 return "SSLv3/TLS write server hello"; 70 case TLS_ST_SW_CERT: 71 return "SSLv3/TLS write certificate"; 72 case TLS_ST_SW_KEY_EXCH: 73 return "SSLv3/TLS write key exchange"; 74 case TLS_ST_SW_CERT_REQ: 75 return "SSLv3/TLS write certificate request"; 76 case TLS_ST_SW_SESSION_TICKET: 77 return "SSLv3/TLS write session ticket"; 78 case TLS_ST_SW_SRVR_DONE: 79 return "SSLv3/TLS write server done"; 80 case TLS_ST_SR_CERT: 81 return "SSLv3/TLS read client certificate"; 82 case TLS_ST_SR_KEY_EXCH: 83 return "SSLv3/TLS read client key exchange"; 84 case TLS_ST_SR_CERT_VRFY: 85 return "SSLv3/TLS read certificate verify"; 86 case DTLS_ST_CR_HELLO_VERIFY_REQUEST: 87 return "DTLS1 read hello verify request"; 88 case DTLS_ST_SW_HELLO_VERIFY_REQUEST: 89 return "DTLS1 write hello verify request"; 90 case TLS_ST_SW_ENCRYPTED_EXTENSIONS: 91 return "TLSv1.3 write encrypted extensions"; 92 case TLS_ST_CR_ENCRYPTED_EXTENSIONS: 93 return "TLSv1.3 read encrypted extensions"; 94 case TLS_ST_CR_CERT_VRFY: 95 return "TLSv1.3 read server certificate verify"; 96 case TLS_ST_SW_CERT_VRFY: 97 return "TLSv1.3 write server certificate verify"; 98 case TLS_ST_CR_HELLO_REQ: 99 return "SSLv3/TLS read hello request"; 100 case TLS_ST_SW_KEY_UPDATE: 101 return "TLSv1.3 write server key update"; 102 case TLS_ST_CW_KEY_UPDATE: 103 return "TLSv1.3 write client key update"; 104 case TLS_ST_SR_KEY_UPDATE: 105 return "TLSv1.3 read client key update"; 106 case TLS_ST_CR_KEY_UPDATE: 107 return "TLSv1.3 read server key update"; 108 case TLS_ST_EARLY_DATA: 109 return "TLSv1.3 early data"; 110 case TLS_ST_PENDING_EARLY_DATA_END: 111 return "TLSv1.3 pending early data end"; 112 case TLS_ST_CW_END_OF_EARLY_DATA: 113 return "TLSv1.3 write end of early data"; 114 case TLS_ST_SR_END_OF_EARLY_DATA: 115 return "TLSv1.3 read end of early data"; 116 default: 117 return "unknown state"; 118 } 119 } 120 121 const char *SSL_state_string(const SSL *s) 122 { 123 if (ossl_statem_in_error(s)) 124 return "SSLERR"; 125 126 switch (SSL_get_state(s)) { 127 case TLS_ST_SR_NEXT_PROTO: 128 return "TRNP"; 129 case TLS_ST_SW_SESSION_TICKET: 130 return "TWST"; 131 case TLS_ST_SW_CERT_STATUS: 132 return "TWCS"; 133 case TLS_ST_CR_CERT_STATUS: 134 return "TRCS"; 135 case TLS_ST_CR_SESSION_TICKET: 136 return "TRST"; 137 case TLS_ST_CW_NEXT_PROTO: 138 return "TWNP"; 139 case TLS_ST_BEFORE: 140 return "PINIT "; 141 case TLS_ST_OK: 142 return "SSLOK "; 143 case TLS_ST_CW_CLNT_HELLO: 144 return "TWCH"; 145 case TLS_ST_CR_SRVR_HELLO: 146 return "TRSH"; 147 case TLS_ST_CR_CERT: 148 return "TRSC"; 149 case TLS_ST_CR_KEY_EXCH: 150 return "TRSKE"; 151 case TLS_ST_CR_CERT_REQ: 152 return "TRCR"; 153 case TLS_ST_CR_SRVR_DONE: 154 return "TRSD"; 155 case TLS_ST_CW_CERT: 156 return "TWCC"; 157 case TLS_ST_CW_KEY_EXCH: 158 return "TWCKE"; 159 case TLS_ST_CW_CERT_VRFY: 160 return "TWCV"; 161 case TLS_ST_SW_CHANGE: 162 case TLS_ST_CW_CHANGE: 163 return "TWCCS"; 164 case TLS_ST_SW_FINISHED: 165 case TLS_ST_CW_FINISHED: 166 return "TWFIN"; 167 case TLS_ST_SR_CHANGE: 168 case TLS_ST_CR_CHANGE: 169 return "TRCCS"; 170 case TLS_ST_SR_FINISHED: 171 case TLS_ST_CR_FINISHED: 172 return "TRFIN"; 173 case TLS_ST_SW_HELLO_REQ: 174 return "TWHR"; 175 case TLS_ST_SR_CLNT_HELLO: 176 return "TRCH"; 177 case TLS_ST_SW_SRVR_HELLO: 178 return "TWSH"; 179 case TLS_ST_SW_CERT: 180 return "TWSC"; 181 case TLS_ST_SW_KEY_EXCH: 182 return "TWSKE"; 183 case TLS_ST_SW_CERT_REQ: 184 return "TWCR"; 185 case TLS_ST_SW_SRVR_DONE: 186 return "TWSD"; 187 case TLS_ST_SR_CERT: 188 return "TRCC"; 189 case TLS_ST_SR_KEY_EXCH: 190 return "TRCKE"; 191 case TLS_ST_SR_CERT_VRFY: 192 return "TRCV"; 193 case DTLS_ST_CR_HELLO_VERIFY_REQUEST: 194 return "DRCHV"; 195 case DTLS_ST_SW_HELLO_VERIFY_REQUEST: 196 return "DWCHV"; 197 case TLS_ST_SW_ENCRYPTED_EXTENSIONS: 198 return "TWEE"; 199 case TLS_ST_CR_ENCRYPTED_EXTENSIONS: 200 return "TREE"; 201 case TLS_ST_CR_CERT_VRFY: 202 return "TRSCV"; 203 case TLS_ST_SW_CERT_VRFY: 204 return "TRSCV"; 205 case TLS_ST_CR_HELLO_REQ: 206 return "TRHR"; 207 case TLS_ST_SW_KEY_UPDATE: 208 return "TWSKU"; 209 case TLS_ST_CW_KEY_UPDATE: 210 return "TWCKU"; 211 case TLS_ST_SR_KEY_UPDATE: 212 return "TRCKU"; 213 case TLS_ST_CR_KEY_UPDATE: 214 return "TRSKU"; 215 case TLS_ST_EARLY_DATA: 216 return "TED"; 217 case TLS_ST_PENDING_EARLY_DATA_END: 218 return "TPEDE"; 219 case TLS_ST_CW_END_OF_EARLY_DATA: 220 return "TWEOED"; 221 case TLS_ST_SR_END_OF_EARLY_DATA: 222 return "TWEOED"; 223 default: 224 return "UNKWN "; 225 } 226 } 227 228 const char *SSL_alert_type_string_long(int value) 229 { 230 switch (value >> 8) { 231 case SSL3_AL_WARNING: 232 return "warning"; 233 case SSL3_AL_FATAL: 234 return "fatal"; 235 default: 236 return "unknown"; 237 } 238 } 239 240 const char *SSL_alert_type_string(int value) 241 { 242 switch (value >> 8) { 243 case SSL3_AL_WARNING: 244 return "W"; 245 case SSL3_AL_FATAL: 246 return "F"; 247 default: 248 return "U"; 249 } 250 } 251 252 const char *SSL_alert_desc_string(int value) 253 { 254 switch (value & 0xff) { 255 case SSL3_AD_CLOSE_NOTIFY: 256 return "CN"; 257 case SSL3_AD_UNEXPECTED_MESSAGE: 258 return "UM"; 259 case SSL3_AD_BAD_RECORD_MAC: 260 return "BM"; 261 case SSL3_AD_DECOMPRESSION_FAILURE: 262 return "DF"; 263 case SSL3_AD_HANDSHAKE_FAILURE: 264 return "HF"; 265 case SSL3_AD_NO_CERTIFICATE: 266 return "NC"; 267 case SSL3_AD_BAD_CERTIFICATE: 268 return "BC"; 269 case SSL3_AD_UNSUPPORTED_CERTIFICATE: 270 return "UC"; 271 case SSL3_AD_CERTIFICATE_REVOKED: 272 return "CR"; 273 case SSL3_AD_CERTIFICATE_EXPIRED: 274 return "CE"; 275 case SSL3_AD_CERTIFICATE_UNKNOWN: 276 return "CU"; 277 case SSL3_AD_ILLEGAL_PARAMETER: 278 return "IP"; 279 case TLS1_AD_DECRYPTION_FAILED: 280 return "DC"; 281 case TLS1_AD_RECORD_OVERFLOW: 282 return "RO"; 283 case TLS1_AD_UNKNOWN_CA: 284 return "CA"; 285 case TLS1_AD_ACCESS_DENIED: 286 return "AD"; 287 case TLS1_AD_DECODE_ERROR: 288 return "DE"; 289 case TLS1_AD_DECRYPT_ERROR: 290 return "CY"; 291 case TLS1_AD_EXPORT_RESTRICTION: 292 return "ER"; 293 case TLS1_AD_PROTOCOL_VERSION: 294 return "PV"; 295 case TLS1_AD_INSUFFICIENT_SECURITY: 296 return "IS"; 297 case TLS1_AD_INTERNAL_ERROR: 298 return "IE"; 299 case TLS1_AD_USER_CANCELLED: 300 return "US"; 301 case TLS1_AD_NO_RENEGOTIATION: 302 return "NR"; 303 case TLS1_AD_UNSUPPORTED_EXTENSION: 304 return "UE"; 305 case TLS1_AD_CERTIFICATE_UNOBTAINABLE: 306 return "CO"; 307 case TLS1_AD_UNRECOGNIZED_NAME: 308 return "UN"; 309 case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 310 return "BR"; 311 case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 312 return "BH"; 313 case TLS1_AD_UNKNOWN_PSK_IDENTITY: 314 return "UP"; 315 default: 316 return "UK"; 317 } 318 } 319 320 const char *SSL_alert_desc_string_long(int value) 321 { 322 switch (value & 0xff) { 323 case SSL3_AD_CLOSE_NOTIFY: 324 return "close notify"; 325 case SSL3_AD_UNEXPECTED_MESSAGE: 326 return "unexpected_message"; 327 case SSL3_AD_BAD_RECORD_MAC: 328 return "bad record mac"; 329 case SSL3_AD_DECOMPRESSION_FAILURE: 330 return "decompression failure"; 331 case SSL3_AD_HANDSHAKE_FAILURE: 332 return "handshake failure"; 333 case SSL3_AD_NO_CERTIFICATE: 334 return "no certificate"; 335 case SSL3_AD_BAD_CERTIFICATE: 336 return "bad certificate"; 337 case SSL3_AD_UNSUPPORTED_CERTIFICATE: 338 return "unsupported certificate"; 339 case SSL3_AD_CERTIFICATE_REVOKED: 340 return "certificate revoked"; 341 case SSL3_AD_CERTIFICATE_EXPIRED: 342 return "certificate expired"; 343 case SSL3_AD_CERTIFICATE_UNKNOWN: 344 return "certificate unknown"; 345 case SSL3_AD_ILLEGAL_PARAMETER: 346 return "illegal parameter"; 347 case TLS1_AD_DECRYPTION_FAILED: 348 return "decryption failed"; 349 case TLS1_AD_RECORD_OVERFLOW: 350 return "record overflow"; 351 case TLS1_AD_UNKNOWN_CA: 352 return "unknown CA"; 353 case TLS1_AD_ACCESS_DENIED: 354 return "access denied"; 355 case TLS1_AD_DECODE_ERROR: 356 return "decode error"; 357 case TLS1_AD_DECRYPT_ERROR: 358 return "decrypt error"; 359 case TLS1_AD_EXPORT_RESTRICTION: 360 return "export restriction"; 361 case TLS1_AD_PROTOCOL_VERSION: 362 return "protocol version"; 363 case TLS1_AD_INSUFFICIENT_SECURITY: 364 return "insufficient security"; 365 case TLS1_AD_INTERNAL_ERROR: 366 return "internal error"; 367 case TLS1_AD_USER_CANCELLED: 368 return "user canceled"; 369 case TLS1_AD_NO_RENEGOTIATION: 370 return "no renegotiation"; 371 case TLS1_AD_UNSUPPORTED_EXTENSION: 372 return "unsupported extension"; 373 case TLS1_AD_CERTIFICATE_UNOBTAINABLE: 374 return "certificate unobtainable"; 375 case TLS1_AD_UNRECOGNIZED_NAME: 376 return "unrecognized name"; 377 case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 378 return "bad certificate status response"; 379 case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 380 return "bad certificate hash value"; 381 case TLS1_AD_UNKNOWN_PSK_IDENTITY: 382 return "unknown PSK identity"; 383 case TLS1_AD_NO_APPLICATION_PROTOCOL: 384 return "no application protocol"; 385 default: 386 return "unknown"; 387 } 388 } 389