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