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