blob: f2316f7c9850757f73a9aed5f90db71a25fc34ee [file] [log] [blame]
Rich Salz846e33c2016-05-17 14:18:30 -04001/*
Richard Levittea8d9bd82021-09-07 13:29:33 +02002 * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
Rich Salzc80149d2017-06-20 10:14:36 -04003 * Copyright 2005 Nokia. All rights reserved.
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00004 *
Richard Levitte2c18d162018-12-06 13:08:51 +01005 * Licensed under the Apache License 2.0 (the "License"). You may not use
Rich Salz846e33c2016-05-17 14:18:30 -04006 * 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
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00009 */
Rich Salz846e33c2016-05-17 14:18:30 -040010
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000011#include <stdio.h>
Dr. Matthias St. Pierre706457b2019-09-28 00:45:40 +020012#include "ssl_local.h"
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000013
Ben Laurie45d87a12002-01-12 15:56:13 +000014const char *SSL_state_string_long(const SSL *s)
Matt Caswell0f113f32015-01-22 03:40:55 +000015{
Rich Salz475965f2016-03-22 10:52:13 -040016 if (ossl_statem_in_error(s))
Matt Caswell49ae7422015-09-08 09:13:50 +010017 return "error";
Matt Caswell49ae7422015-09-08 09:13:50 +010018
Matt Caswell5998e292015-10-05 10:49:15 +010019 switch (SSL_get_state(s)) {
Rich Salz252cfef2016-09-07 15:40:16 -040020 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:
Xiaoyin Liuf978f2b2017-07-31 08:55:37 -040025 return "SSLv3/TLS read next proto";
Rich Salz252cfef2016-09-07 15:40:16 -040026 case TLS_ST_SW_CERT_STATUS:
Xiaoyin Liuf978f2b2017-07-31 08:55:37 -040027 return "SSLv3/TLS write certificate status";
Matt Caswell49ae7422015-09-08 09:13:50 +010028 case TLS_ST_BEFORE:
Rich Salz475965f2016-03-22 10:52:13 -040029 return "before SSL initialization";
Matt Caswell49ae7422015-09-08 09:13:50 +010030 case TLS_ST_OK:
Rich Salz475965f2016-03-22 10:52:13 -040031 return "SSL negotiation finished successfully";
Matt Caswell49ae7422015-09-08 09:13:50 +010032 case TLS_ST_CW_CLNT_HELLO:
Rich Salz475965f2016-03-22 10:52:13 -040033 return "SSLv3/TLS write client hello";
Matt Caswell49ae7422015-09-08 09:13:50 +010034 case TLS_ST_CR_SRVR_HELLO:
Rich Salz475965f2016-03-22 10:52:13 -040035 return "SSLv3/TLS read server hello";
Matt Caswell49ae7422015-09-08 09:13:50 +010036 case TLS_ST_CR_CERT:
Rich Salz475965f2016-03-22 10:52:13 -040037 return "SSLv3/TLS read server certificate";
Matt Caswell49ae7422015-09-08 09:13:50 +010038 case TLS_ST_CR_KEY_EXCH:
Rich Salz475965f2016-03-22 10:52:13 -040039 return "SSLv3/TLS read server key exchange";
Matt Caswell49ae7422015-09-08 09:13:50 +010040 case TLS_ST_CR_CERT_REQ:
Rich Salz475965f2016-03-22 10:52:13 -040041 return "SSLv3/TLS read server certificate request";
Matt Caswell49ae7422015-09-08 09:13:50 +010042 case TLS_ST_CR_SESSION_TICKET:
Rich Salz475965f2016-03-22 10:52:13 -040043 return "SSLv3/TLS read server session ticket";
Matt Caswell49ae7422015-09-08 09:13:50 +010044 case TLS_ST_CR_SRVR_DONE:
Rich Salz475965f2016-03-22 10:52:13 -040045 return "SSLv3/TLS read server done";
Matt Caswell49ae7422015-09-08 09:13:50 +010046 case TLS_ST_CW_CERT:
Rich Salz475965f2016-03-22 10:52:13 -040047 return "SSLv3/TLS write client certificate";
Matt Caswell49ae7422015-09-08 09:13:50 +010048 case TLS_ST_CW_KEY_EXCH:
Rich Salz475965f2016-03-22 10:52:13 -040049 return "SSLv3/TLS write client key exchange";
Matt Caswell49ae7422015-09-08 09:13:50 +010050 case TLS_ST_CW_CERT_VRFY:
Rich Salz475965f2016-03-22 10:52:13 -040051 return "SSLv3/TLS write certificate verify";
Matt Caswell49ae7422015-09-08 09:13:50 +010052 case TLS_ST_CW_CHANGE:
53 case TLS_ST_SW_CHANGE:
Rich Salz475965f2016-03-22 10:52:13 -040054 return "SSLv3/TLS write change cipher spec";
Matt Caswell49ae7422015-09-08 09:13:50 +010055 case TLS_ST_CW_FINISHED:
56 case TLS_ST_SW_FINISHED:
Rich Salz475965f2016-03-22 10:52:13 -040057 return "SSLv3/TLS write finished";
Matt Caswell49ae7422015-09-08 09:13:50 +010058 case TLS_ST_CR_CHANGE:
59 case TLS_ST_SR_CHANGE:
Rich Salz475965f2016-03-22 10:52:13 -040060 return "SSLv3/TLS read change cipher spec";
Matt Caswell49ae7422015-09-08 09:13:50 +010061 case TLS_ST_CR_FINISHED:
62 case TLS_ST_SR_FINISHED:
Rich Salz475965f2016-03-22 10:52:13 -040063 return "SSLv3/TLS read finished";
Matt Caswell49ae7422015-09-08 09:13:50 +010064 case TLS_ST_SR_CLNT_HELLO:
Rich Salz475965f2016-03-22 10:52:13 -040065 return "SSLv3/TLS read client hello";
Matt Caswell49ae7422015-09-08 09:13:50 +010066 case TLS_ST_SW_HELLO_REQ:
Rich Salz475965f2016-03-22 10:52:13 -040067 return "SSLv3/TLS write hello request";
Matt Caswell49ae7422015-09-08 09:13:50 +010068 case TLS_ST_SW_SRVR_HELLO:
Rich Salz475965f2016-03-22 10:52:13 -040069 return "SSLv3/TLS write server hello";
Matt Caswell49ae7422015-09-08 09:13:50 +010070 case TLS_ST_SW_CERT:
Rich Salz475965f2016-03-22 10:52:13 -040071 return "SSLv3/TLS write certificate";
Matt Caswell49ae7422015-09-08 09:13:50 +010072 case TLS_ST_SW_KEY_EXCH:
Rich Salz475965f2016-03-22 10:52:13 -040073 return "SSLv3/TLS write key exchange";
Matt Caswell49ae7422015-09-08 09:13:50 +010074 case TLS_ST_SW_CERT_REQ:
Rich Salz475965f2016-03-22 10:52:13 -040075 return "SSLv3/TLS write certificate request";
Matt Caswell49ae7422015-09-08 09:13:50 +010076 case TLS_ST_SW_SESSION_TICKET:
Rich Salz475965f2016-03-22 10:52:13 -040077 return "SSLv3/TLS write session ticket";
Matt Caswell49ae7422015-09-08 09:13:50 +010078 case TLS_ST_SW_SRVR_DONE:
Rich Salz475965f2016-03-22 10:52:13 -040079 return "SSLv3/TLS write server done";
Matt Caswell49ae7422015-09-08 09:13:50 +010080 case TLS_ST_SR_CERT:
Rich Salz475965f2016-03-22 10:52:13 -040081 return "SSLv3/TLS read client certificate";
Matt Caswell49ae7422015-09-08 09:13:50 +010082 case TLS_ST_SR_KEY_EXCH:
Rich Salz475965f2016-03-22 10:52:13 -040083 return "SSLv3/TLS read client key exchange";
Matt Caswell49ae7422015-09-08 09:13:50 +010084 case TLS_ST_SR_CERT_VRFY:
Rich Salz475965f2016-03-22 10:52:13 -040085 return "SSLv3/TLS read certificate verify";
Matt Caswell49ae7422015-09-08 09:13:50 +010086 case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
Rich Salz475965f2016-03-22 10:52:13 -040087 return "DTLS1 read hello verify request";
Matt Caswell49ae7422015-09-08 09:13:50 +010088 case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
Rich Salz475965f2016-03-22 10:52:13 -040089 return "DTLS1 write hello verify request";
Matt Caswell881dfed2017-11-27 12:35:15 +000090 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";
Matt Caswell881dfed2017-11-27 12:35:15 +0000100 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";
Matt Caswell0f113f32015-01-22 03:40:55 +0000116 default:
Rich Salz475965f2016-03-22 10:52:13 -0400117 return "unknown state";
Matt Caswell0f113f32015-01-22 03:40:55 +0000118 }
Matt Caswell0f113f32015-01-22 03:40:55 +0000119}
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000120
Ben Laurie45d87a12002-01-12 15:56:13 +0000121const char *SSL_state_string(const SSL *s)
Matt Caswell0f113f32015-01-22 03:40:55 +0000122{
Rich Salz475965f2016-03-22 10:52:13 -0400123 if (ossl_statem_in_error(s))
Matt Caswell49ae7422015-09-08 09:13:50 +0100124 return "SSLERR";
Matt Caswell49ae7422015-09-08 09:13:50 +0100125
Matt Caswell5998e292015-10-05 10:49:15 +0100126 switch (SSL_get_state(s)) {
Rich Salz252cfef2016-09-07 15:40:16 -0400127 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";
Matt Caswell49ae7422015-09-08 09:13:50 +0100139 case TLS_ST_BEFORE:
Todd Shorte0f69c32021-08-16 16:37:10 -0400140 return "PINIT";
Matt Caswell49ae7422015-09-08 09:13:50 +0100141 case TLS_ST_OK:
Todd Shorte0f69c32021-08-16 16:37:10 -0400142 return "SSLOK";
Matt Caswell49ae7422015-09-08 09:13:50 +0100143 case TLS_ST_CW_CLNT_HELLO:
Rich Salz475965f2016-03-22 10:52:13 -0400144 return "TWCH";
Matt Caswell49ae7422015-09-08 09:13:50 +0100145 case TLS_ST_CR_SRVR_HELLO:
Rich Salz475965f2016-03-22 10:52:13 -0400146 return "TRSH";
Matt Caswell49ae7422015-09-08 09:13:50 +0100147 case TLS_ST_CR_CERT:
Rich Salz475965f2016-03-22 10:52:13 -0400148 return "TRSC";
Matt Caswell49ae7422015-09-08 09:13:50 +0100149 case TLS_ST_CR_KEY_EXCH:
Rich Salz475965f2016-03-22 10:52:13 -0400150 return "TRSKE";
Matt Caswell49ae7422015-09-08 09:13:50 +0100151 case TLS_ST_CR_CERT_REQ:
Rich Salz475965f2016-03-22 10:52:13 -0400152 return "TRCR";
Matt Caswell49ae7422015-09-08 09:13:50 +0100153 case TLS_ST_CR_SRVR_DONE:
Rich Salz475965f2016-03-22 10:52:13 -0400154 return "TRSD";
Matt Caswell49ae7422015-09-08 09:13:50 +0100155 case TLS_ST_CW_CERT:
Rich Salz475965f2016-03-22 10:52:13 -0400156 return "TWCC";
Matt Caswell49ae7422015-09-08 09:13:50 +0100157 case TLS_ST_CW_KEY_EXCH:
Rich Salz475965f2016-03-22 10:52:13 -0400158 return "TWCKE";
Matt Caswell49ae7422015-09-08 09:13:50 +0100159 case TLS_ST_CW_CERT_VRFY:
Rich Salz475965f2016-03-22 10:52:13 -0400160 return "TWCV";
Matt Caswell49ae7422015-09-08 09:13:50 +0100161 case TLS_ST_SW_CHANGE:
162 case TLS_ST_CW_CHANGE:
Rich Salz475965f2016-03-22 10:52:13 -0400163 return "TWCCS";
Matt Caswell49ae7422015-09-08 09:13:50 +0100164 case TLS_ST_SW_FINISHED:
165 case TLS_ST_CW_FINISHED:
Rich Salz475965f2016-03-22 10:52:13 -0400166 return "TWFIN";
Matt Caswell49ae7422015-09-08 09:13:50 +0100167 case TLS_ST_SR_CHANGE:
168 case TLS_ST_CR_CHANGE:
Rich Salz475965f2016-03-22 10:52:13 -0400169 return "TRCCS";
Matt Caswell49ae7422015-09-08 09:13:50 +0100170 case TLS_ST_SR_FINISHED:
171 case TLS_ST_CR_FINISHED:
Rich Salz475965f2016-03-22 10:52:13 -0400172 return "TRFIN";
Matt Caswell49ae7422015-09-08 09:13:50 +0100173 case TLS_ST_SW_HELLO_REQ:
Rich Salz475965f2016-03-22 10:52:13 -0400174 return "TWHR";
Matt Caswell49ae7422015-09-08 09:13:50 +0100175 case TLS_ST_SR_CLNT_HELLO:
Rich Salz475965f2016-03-22 10:52:13 -0400176 return "TRCH";
Matt Caswell49ae7422015-09-08 09:13:50 +0100177 case TLS_ST_SW_SRVR_HELLO:
Rich Salz475965f2016-03-22 10:52:13 -0400178 return "TWSH";
Matt Caswell49ae7422015-09-08 09:13:50 +0100179 case TLS_ST_SW_CERT:
Rich Salz475965f2016-03-22 10:52:13 -0400180 return "TWSC";
Matt Caswell49ae7422015-09-08 09:13:50 +0100181 case TLS_ST_SW_KEY_EXCH:
Rich Salz475965f2016-03-22 10:52:13 -0400182 return "TWSKE";
Matt Caswell49ae7422015-09-08 09:13:50 +0100183 case TLS_ST_SW_CERT_REQ:
Rich Salz475965f2016-03-22 10:52:13 -0400184 return "TWCR";
Matt Caswell49ae7422015-09-08 09:13:50 +0100185 case TLS_ST_SW_SRVR_DONE:
Rich Salz475965f2016-03-22 10:52:13 -0400186 return "TWSD";
Matt Caswell49ae7422015-09-08 09:13:50 +0100187 case TLS_ST_SR_CERT:
Rich Salz475965f2016-03-22 10:52:13 -0400188 return "TRCC";
Matt Caswell49ae7422015-09-08 09:13:50 +0100189 case TLS_ST_SR_KEY_EXCH:
Rich Salz475965f2016-03-22 10:52:13 -0400190 return "TRCKE";
Matt Caswell49ae7422015-09-08 09:13:50 +0100191 case TLS_ST_SR_CERT_VRFY:
Rich Salz475965f2016-03-22 10:52:13 -0400192 return "TRCV";
Matt Caswell49ae7422015-09-08 09:13:50 +0100193 case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
Rich Salz475965f2016-03-22 10:52:13 -0400194 return "DRCHV";
Matt Caswell49ae7422015-09-08 09:13:50 +0100195 case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
Rich Salz475965f2016-03-22 10:52:13 -0400196 return "DWCHV";
Matt Caswell881dfed2017-11-27 12:35:15 +0000197 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:
Todd Shorte0f69c32021-08-16 16:37:10 -0400204 return "TWSCV";
Matt Caswell881dfed2017-11-27 12:35:15 +0000205 case TLS_ST_CR_HELLO_REQ:
206 return "TRHR";
Matt Caswell881dfed2017-11-27 12:35:15 +0000207 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";
Matt Caswell0f113f32015-01-22 03:40:55 +0000223 default:
Todd Shorte0f69c32021-08-16 16:37:10 -0400224 return "UNKWN";
Matt Caswell0f113f32015-01-22 03:40:55 +0000225 }
Matt Caswell0f113f32015-01-22 03:40:55 +0000226}
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000227
Lutz Jänicke11c8f0b2001-08-23 17:22:43 +0000228const char *SSL_alert_type_string_long(int value)
Matt Caswell0f113f32015-01-22 03:40:55 +0000229{
Rich Salz475965f2016-03-22 10:52:13 -0400230 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 }
Matt Caswell0f113f32015-01-22 03:40:55 +0000238}
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000239
Lutz Jänicke11c8f0b2001-08-23 17:22:43 +0000240const char *SSL_alert_type_string(int value)
Matt Caswell0f113f32015-01-22 03:40:55 +0000241{
Rich Salz475965f2016-03-22 10:52:13 -0400242 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 }
Matt Caswell0f113f32015-01-22 03:40:55 +0000250}
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000251
Lutz Jänicke11c8f0b2001-08-23 17:22:43 +0000252const char *SSL_alert_desc_string(int value)
Matt Caswell0f113f32015-01-22 03:40:55 +0000253{
Matt Caswell0f113f32015-01-22 03:40:55 +0000254 switch (value & 0xff) {
255 case SSL3_AD_CLOSE_NOTIFY:
Rich Salz475965f2016-03-22 10:52:13 -0400256 return "CN";
Matt Caswell0f113f32015-01-22 03:40:55 +0000257 case SSL3_AD_UNEXPECTED_MESSAGE:
Rich Salz475965f2016-03-22 10:52:13 -0400258 return "UM";
Matt Caswell0f113f32015-01-22 03:40:55 +0000259 case SSL3_AD_BAD_RECORD_MAC:
Rich Salz475965f2016-03-22 10:52:13 -0400260 return "BM";
Matt Caswell0f113f32015-01-22 03:40:55 +0000261 case SSL3_AD_DECOMPRESSION_FAILURE:
Rich Salz475965f2016-03-22 10:52:13 -0400262 return "DF";
Matt Caswell0f113f32015-01-22 03:40:55 +0000263 case SSL3_AD_HANDSHAKE_FAILURE:
Rich Salz475965f2016-03-22 10:52:13 -0400264 return "HF";
Matt Caswell0f113f32015-01-22 03:40:55 +0000265 case SSL3_AD_NO_CERTIFICATE:
Rich Salz475965f2016-03-22 10:52:13 -0400266 return "NC";
Matt Caswell0f113f32015-01-22 03:40:55 +0000267 case SSL3_AD_BAD_CERTIFICATE:
Rich Salz475965f2016-03-22 10:52:13 -0400268 return "BC";
Matt Caswell0f113f32015-01-22 03:40:55 +0000269 case SSL3_AD_UNSUPPORTED_CERTIFICATE:
Rich Salz475965f2016-03-22 10:52:13 -0400270 return "UC";
Matt Caswell0f113f32015-01-22 03:40:55 +0000271 case SSL3_AD_CERTIFICATE_REVOKED:
Rich Salz475965f2016-03-22 10:52:13 -0400272 return "CR";
Matt Caswell0f113f32015-01-22 03:40:55 +0000273 case SSL3_AD_CERTIFICATE_EXPIRED:
Rich Salz475965f2016-03-22 10:52:13 -0400274 return "CE";
Matt Caswell0f113f32015-01-22 03:40:55 +0000275 case SSL3_AD_CERTIFICATE_UNKNOWN:
Rich Salz475965f2016-03-22 10:52:13 -0400276 return "CU";
Matt Caswell0f113f32015-01-22 03:40:55 +0000277 case SSL3_AD_ILLEGAL_PARAMETER:
Rich Salz475965f2016-03-22 10:52:13 -0400278 return "IP";
Matt Caswell0f113f32015-01-22 03:40:55 +0000279 case TLS1_AD_DECRYPTION_FAILED:
Rich Salz475965f2016-03-22 10:52:13 -0400280 return "DC";
Matt Caswell0f113f32015-01-22 03:40:55 +0000281 case TLS1_AD_RECORD_OVERFLOW:
Rich Salz475965f2016-03-22 10:52:13 -0400282 return "RO";
Matt Caswell0f113f32015-01-22 03:40:55 +0000283 case TLS1_AD_UNKNOWN_CA:
Rich Salz475965f2016-03-22 10:52:13 -0400284 return "CA";
Matt Caswell0f113f32015-01-22 03:40:55 +0000285 case TLS1_AD_ACCESS_DENIED:
Rich Salz475965f2016-03-22 10:52:13 -0400286 return "AD";
Matt Caswell0f113f32015-01-22 03:40:55 +0000287 case TLS1_AD_DECODE_ERROR:
Rich Salz475965f2016-03-22 10:52:13 -0400288 return "DE";
Matt Caswell0f113f32015-01-22 03:40:55 +0000289 case TLS1_AD_DECRYPT_ERROR:
Rich Salz475965f2016-03-22 10:52:13 -0400290 return "CY";
Matt Caswell0f113f32015-01-22 03:40:55 +0000291 case TLS1_AD_EXPORT_RESTRICTION:
Rich Salz475965f2016-03-22 10:52:13 -0400292 return "ER";
Matt Caswell0f113f32015-01-22 03:40:55 +0000293 case TLS1_AD_PROTOCOL_VERSION:
Rich Salz475965f2016-03-22 10:52:13 -0400294 return "PV";
Matt Caswell0f113f32015-01-22 03:40:55 +0000295 case TLS1_AD_INSUFFICIENT_SECURITY:
Rich Salz475965f2016-03-22 10:52:13 -0400296 return "IS";
Matt Caswell0f113f32015-01-22 03:40:55 +0000297 case TLS1_AD_INTERNAL_ERROR:
Rich Salz475965f2016-03-22 10:52:13 -0400298 return "IE";
Matt Caswell0f113f32015-01-22 03:40:55 +0000299 case TLS1_AD_USER_CANCELLED:
Rich Salz475965f2016-03-22 10:52:13 -0400300 return "US";
Matt Caswell0f113f32015-01-22 03:40:55 +0000301 case TLS1_AD_NO_RENEGOTIATION:
Rich Salz475965f2016-03-22 10:52:13 -0400302 return "NR";
Matt Caswell0f113f32015-01-22 03:40:55 +0000303 case TLS1_AD_UNSUPPORTED_EXTENSION:
Rich Salz475965f2016-03-22 10:52:13 -0400304 return "UE";
Matt Caswell0f113f32015-01-22 03:40:55 +0000305 case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
Rich Salz475965f2016-03-22 10:52:13 -0400306 return "CO";
Matt Caswell0f113f32015-01-22 03:40:55 +0000307 case TLS1_AD_UNRECOGNIZED_NAME:
Rich Salz475965f2016-03-22 10:52:13 -0400308 return "UN";
Matt Caswell0f113f32015-01-22 03:40:55 +0000309 case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
Rich Salz475965f2016-03-22 10:52:13 -0400310 return "BR";
Matt Caswell0f113f32015-01-22 03:40:55 +0000311 case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
Rich Salz475965f2016-03-22 10:52:13 -0400312 return "BH";
Matt Caswell0f113f32015-01-22 03:40:55 +0000313 case TLS1_AD_UNKNOWN_PSK_IDENTITY:
Rich Salz475965f2016-03-22 10:52:13 -0400314 return "UP";
Matt Caswell0f113f32015-01-22 03:40:55 +0000315 default:
Rich Salz475965f2016-03-22 10:52:13 -0400316 return "UK";
Matt Caswell0f113f32015-01-22 03:40:55 +0000317 }
Matt Caswell0f113f32015-01-22 03:40:55 +0000318}
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000319
Lutz Jänicke11c8f0b2001-08-23 17:22:43 +0000320const char *SSL_alert_desc_string_long(int value)
Matt Caswell0f113f32015-01-22 03:40:55 +0000321{
Matt Caswell0f113f32015-01-22 03:40:55 +0000322 switch (value & 0xff) {
323 case SSL3_AD_CLOSE_NOTIFY:
Rich Salz475965f2016-03-22 10:52:13 -0400324 return "close notify";
Matt Caswell0f113f32015-01-22 03:40:55 +0000325 case SSL3_AD_UNEXPECTED_MESSAGE:
Rich Salz475965f2016-03-22 10:52:13 -0400326 return "unexpected_message";
Matt Caswell0f113f32015-01-22 03:40:55 +0000327 case SSL3_AD_BAD_RECORD_MAC:
Rich Salz475965f2016-03-22 10:52:13 -0400328 return "bad record mac";
Matt Caswell0f113f32015-01-22 03:40:55 +0000329 case SSL3_AD_DECOMPRESSION_FAILURE:
Rich Salz475965f2016-03-22 10:52:13 -0400330 return "decompression failure";
Matt Caswell0f113f32015-01-22 03:40:55 +0000331 case SSL3_AD_HANDSHAKE_FAILURE:
Rich Salz475965f2016-03-22 10:52:13 -0400332 return "handshake failure";
Matt Caswell0f113f32015-01-22 03:40:55 +0000333 case SSL3_AD_NO_CERTIFICATE:
Rich Salz475965f2016-03-22 10:52:13 -0400334 return "no certificate";
Matt Caswell0f113f32015-01-22 03:40:55 +0000335 case SSL3_AD_BAD_CERTIFICATE:
Rich Salz475965f2016-03-22 10:52:13 -0400336 return "bad certificate";
Matt Caswell0f113f32015-01-22 03:40:55 +0000337 case SSL3_AD_UNSUPPORTED_CERTIFICATE:
Rich Salz475965f2016-03-22 10:52:13 -0400338 return "unsupported certificate";
Matt Caswell0f113f32015-01-22 03:40:55 +0000339 case SSL3_AD_CERTIFICATE_REVOKED:
Rich Salz475965f2016-03-22 10:52:13 -0400340 return "certificate revoked";
Matt Caswell0f113f32015-01-22 03:40:55 +0000341 case SSL3_AD_CERTIFICATE_EXPIRED:
Rich Salz475965f2016-03-22 10:52:13 -0400342 return "certificate expired";
Matt Caswell0f113f32015-01-22 03:40:55 +0000343 case SSL3_AD_CERTIFICATE_UNKNOWN:
Rich Salz475965f2016-03-22 10:52:13 -0400344 return "certificate unknown";
Matt Caswell0f113f32015-01-22 03:40:55 +0000345 case SSL3_AD_ILLEGAL_PARAMETER:
Rich Salz475965f2016-03-22 10:52:13 -0400346 return "illegal parameter";
Matt Caswell0f113f32015-01-22 03:40:55 +0000347 case TLS1_AD_DECRYPTION_FAILED:
Rich Salz475965f2016-03-22 10:52:13 -0400348 return "decryption failed";
Matt Caswell0f113f32015-01-22 03:40:55 +0000349 case TLS1_AD_RECORD_OVERFLOW:
Rich Salz475965f2016-03-22 10:52:13 -0400350 return "record overflow";
Matt Caswell0f113f32015-01-22 03:40:55 +0000351 case TLS1_AD_UNKNOWN_CA:
Rich Salz475965f2016-03-22 10:52:13 -0400352 return "unknown CA";
Matt Caswell0f113f32015-01-22 03:40:55 +0000353 case TLS1_AD_ACCESS_DENIED:
Rich Salz475965f2016-03-22 10:52:13 -0400354 return "access denied";
Matt Caswell0f113f32015-01-22 03:40:55 +0000355 case TLS1_AD_DECODE_ERROR:
Rich Salz475965f2016-03-22 10:52:13 -0400356 return "decode error";
Matt Caswell0f113f32015-01-22 03:40:55 +0000357 case TLS1_AD_DECRYPT_ERROR:
Rich Salz475965f2016-03-22 10:52:13 -0400358 return "decrypt error";
Matt Caswell0f113f32015-01-22 03:40:55 +0000359 case TLS1_AD_EXPORT_RESTRICTION:
Rich Salz475965f2016-03-22 10:52:13 -0400360 return "export restriction";
Matt Caswell0f113f32015-01-22 03:40:55 +0000361 case TLS1_AD_PROTOCOL_VERSION:
Rich Salz475965f2016-03-22 10:52:13 -0400362 return "protocol version";
Matt Caswell0f113f32015-01-22 03:40:55 +0000363 case TLS1_AD_INSUFFICIENT_SECURITY:
Rich Salz475965f2016-03-22 10:52:13 -0400364 return "insufficient security";
Matt Caswell0f113f32015-01-22 03:40:55 +0000365 case TLS1_AD_INTERNAL_ERROR:
Rich Salz475965f2016-03-22 10:52:13 -0400366 return "internal error";
Matt Caswell0f113f32015-01-22 03:40:55 +0000367 case TLS1_AD_USER_CANCELLED:
Rich Salz475965f2016-03-22 10:52:13 -0400368 return "user canceled";
Matt Caswell0f113f32015-01-22 03:40:55 +0000369 case TLS1_AD_NO_RENEGOTIATION:
Rich Salz475965f2016-03-22 10:52:13 -0400370 return "no renegotiation";
Matt Caswell0f113f32015-01-22 03:40:55 +0000371 case TLS1_AD_UNSUPPORTED_EXTENSION:
Rich Salz475965f2016-03-22 10:52:13 -0400372 return "unsupported extension";
Matt Caswell0f113f32015-01-22 03:40:55 +0000373 case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
Rich Salz475965f2016-03-22 10:52:13 -0400374 return "certificate unobtainable";
Matt Caswell0f113f32015-01-22 03:40:55 +0000375 case TLS1_AD_UNRECOGNIZED_NAME:
Rich Salz475965f2016-03-22 10:52:13 -0400376 return "unrecognized name";
Matt Caswell0f113f32015-01-22 03:40:55 +0000377 case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
Rich Salz475965f2016-03-22 10:52:13 -0400378 return "bad certificate status response";
Matt Caswell0f113f32015-01-22 03:40:55 +0000379 case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
Rich Salz475965f2016-03-22 10:52:13 -0400380 return "bad certificate hash value";
Matt Caswell0f113f32015-01-22 03:40:55 +0000381 case TLS1_AD_UNKNOWN_PSK_IDENTITY:
Rich Salz475965f2016-03-22 10:52:13 -0400382 return "unknown PSK identity";
Emilia Kaspera230b262016-08-05 19:03:17 +0200383 case TLS1_AD_NO_APPLICATION_PROTOCOL:
Emilia Kasperce2cdac2016-07-04 20:16:14 +0200384 return "no application protocol";
Matt Caswell0f113f32015-01-22 03:40:55 +0000385 default:
Rich Salz475965f2016-03-22 10:52:13 -0400386 return "unknown";
Matt Caswell0f113f32015-01-22 03:40:55 +0000387 }
Matt Caswell0f113f32015-01-22 03:40:55 +0000388}