xref: /freebsd/crypto/openssl/ssl/ssl_stat.c (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1e71b7053SJung-uk Kim /*
2*b077aed3SPierre Pronchery  * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
31f13597dSJung-uk Kim  * Copyright 2005 Nokia. All rights reserved.
41f13597dSJung-uk Kim  *
5*b077aed3SPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
6e71b7053SJung-uk Kim  * this file except in compliance with the License.  You can obtain a copy
7e71b7053SJung-uk Kim  * in the file LICENSE in the source distribution or at
8e71b7053SJung-uk Kim  * https://www.openssl.org/source/license.html
91f13597dSJung-uk Kim  */
1074664626SKris Kennaway 
1174664626SKris Kennaway #include <stdio.h>
1217f01e99SJung-uk Kim #include "ssl_local.h"
1374664626SKris Kennaway 
SSL_state_string_long(const SSL * s)145c87c606SMark Murray const char *SSL_state_string_long(const SSL *s)
1574664626SKris Kennaway {
16e71b7053SJung-uk Kim     if (ossl_statem_in_error(s))
17e71b7053SJung-uk Kim         return "error";
1874664626SKris Kennaway 
19e71b7053SJung-uk Kim     switch (SSL_get_state(s)) {
20e71b7053SJung-uk Kim     case TLS_ST_CR_CERT_STATUS:
21e71b7053SJung-uk Kim         return "SSLv3/TLS read certificate status";
22e71b7053SJung-uk Kim     case TLS_ST_CW_NEXT_PROTO:
23e71b7053SJung-uk Kim         return "SSLv3/TLS write next proto";
24e71b7053SJung-uk Kim     case TLS_ST_SR_NEXT_PROTO:
25e71b7053SJung-uk Kim         return "SSLv3/TLS read next proto";
26e71b7053SJung-uk Kim     case TLS_ST_SW_CERT_STATUS:
27e71b7053SJung-uk Kim         return "SSLv3/TLS write certificate status";
28e71b7053SJung-uk Kim     case TLS_ST_BEFORE:
29e71b7053SJung-uk Kim         return "before SSL initialization";
30e71b7053SJung-uk Kim     case TLS_ST_OK:
31e71b7053SJung-uk Kim         return "SSL negotiation finished successfully";
32e71b7053SJung-uk Kim     case TLS_ST_CW_CLNT_HELLO:
33e71b7053SJung-uk Kim         return "SSLv3/TLS write client hello";
34e71b7053SJung-uk Kim     case TLS_ST_CR_SRVR_HELLO:
35e71b7053SJung-uk Kim         return "SSLv3/TLS read server hello";
36e71b7053SJung-uk Kim     case TLS_ST_CR_CERT:
37e71b7053SJung-uk Kim         return "SSLv3/TLS read server certificate";
38e71b7053SJung-uk Kim     case TLS_ST_CR_KEY_EXCH:
39e71b7053SJung-uk Kim         return "SSLv3/TLS read server key exchange";
40e71b7053SJung-uk Kim     case TLS_ST_CR_CERT_REQ:
41e71b7053SJung-uk Kim         return "SSLv3/TLS read server certificate request";
42e71b7053SJung-uk Kim     case TLS_ST_CR_SESSION_TICKET:
43e71b7053SJung-uk Kim         return "SSLv3/TLS read server session ticket";
44e71b7053SJung-uk Kim     case TLS_ST_CR_SRVR_DONE:
45e71b7053SJung-uk Kim         return "SSLv3/TLS read server done";
46e71b7053SJung-uk Kim     case TLS_ST_CW_CERT:
47e71b7053SJung-uk Kim         return "SSLv3/TLS write client certificate";
48e71b7053SJung-uk Kim     case TLS_ST_CW_KEY_EXCH:
49e71b7053SJung-uk Kim         return "SSLv3/TLS write client key exchange";
50e71b7053SJung-uk Kim     case TLS_ST_CW_CERT_VRFY:
51e71b7053SJung-uk Kim         return "SSLv3/TLS write certificate verify";
52e71b7053SJung-uk Kim     case TLS_ST_CW_CHANGE:
53e71b7053SJung-uk Kim     case TLS_ST_SW_CHANGE:
54e71b7053SJung-uk Kim         return "SSLv3/TLS write change cipher spec";
55e71b7053SJung-uk Kim     case TLS_ST_CW_FINISHED:
56e71b7053SJung-uk Kim     case TLS_ST_SW_FINISHED:
57e71b7053SJung-uk Kim         return "SSLv3/TLS write finished";
58e71b7053SJung-uk Kim     case TLS_ST_CR_CHANGE:
59e71b7053SJung-uk Kim     case TLS_ST_SR_CHANGE:
60e71b7053SJung-uk Kim         return "SSLv3/TLS read change cipher spec";
61e71b7053SJung-uk Kim     case TLS_ST_CR_FINISHED:
62e71b7053SJung-uk Kim     case TLS_ST_SR_FINISHED:
63e71b7053SJung-uk Kim         return "SSLv3/TLS read finished";
64e71b7053SJung-uk Kim     case TLS_ST_SR_CLNT_HELLO:
65e71b7053SJung-uk Kim         return "SSLv3/TLS read client hello";
66e71b7053SJung-uk Kim     case TLS_ST_SW_HELLO_REQ:
67e71b7053SJung-uk Kim         return "SSLv3/TLS write hello request";
68e71b7053SJung-uk Kim     case TLS_ST_SW_SRVR_HELLO:
69e71b7053SJung-uk Kim         return "SSLv3/TLS write server hello";
70e71b7053SJung-uk Kim     case TLS_ST_SW_CERT:
71e71b7053SJung-uk Kim         return "SSLv3/TLS write certificate";
72e71b7053SJung-uk Kim     case TLS_ST_SW_KEY_EXCH:
73e71b7053SJung-uk Kim         return "SSLv3/TLS write key exchange";
74e71b7053SJung-uk Kim     case TLS_ST_SW_CERT_REQ:
75e71b7053SJung-uk Kim         return "SSLv3/TLS write certificate request";
76e71b7053SJung-uk Kim     case TLS_ST_SW_SESSION_TICKET:
77e71b7053SJung-uk Kim         return "SSLv3/TLS write session ticket";
78e71b7053SJung-uk Kim     case TLS_ST_SW_SRVR_DONE:
79e71b7053SJung-uk Kim         return "SSLv3/TLS write server done";
80e71b7053SJung-uk Kim     case TLS_ST_SR_CERT:
81e71b7053SJung-uk Kim         return "SSLv3/TLS read client certificate";
82e71b7053SJung-uk Kim     case TLS_ST_SR_KEY_EXCH:
83e71b7053SJung-uk Kim         return "SSLv3/TLS read client key exchange";
84e71b7053SJung-uk Kim     case TLS_ST_SR_CERT_VRFY:
85e71b7053SJung-uk Kim         return "SSLv3/TLS read certificate verify";
86e71b7053SJung-uk Kim     case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
87e71b7053SJung-uk Kim         return "DTLS1 read hello verify request";
88e71b7053SJung-uk Kim     case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
89e71b7053SJung-uk Kim         return "DTLS1 write hello verify request";
90e71b7053SJung-uk Kim     case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
91e71b7053SJung-uk Kim         return "TLSv1.3 write encrypted extensions";
92e71b7053SJung-uk Kim     case TLS_ST_CR_ENCRYPTED_EXTENSIONS:
93e71b7053SJung-uk Kim         return "TLSv1.3 read encrypted extensions";
94e71b7053SJung-uk Kim     case TLS_ST_CR_CERT_VRFY:
95e71b7053SJung-uk Kim         return "TLSv1.3 read server certificate verify";
96e71b7053SJung-uk Kim     case TLS_ST_SW_CERT_VRFY:
97e71b7053SJung-uk Kim         return "TLSv1.3 write server certificate verify";
98e71b7053SJung-uk Kim     case TLS_ST_CR_HELLO_REQ:
99e71b7053SJung-uk Kim         return "SSLv3/TLS read hello request";
100e71b7053SJung-uk Kim     case TLS_ST_SW_KEY_UPDATE:
101e71b7053SJung-uk Kim         return "TLSv1.3 write server key update";
102e71b7053SJung-uk Kim     case TLS_ST_CW_KEY_UPDATE:
103e71b7053SJung-uk Kim         return "TLSv1.3 write client key update";
104e71b7053SJung-uk Kim     case TLS_ST_SR_KEY_UPDATE:
105e71b7053SJung-uk Kim         return "TLSv1.3 read client key update";
106e71b7053SJung-uk Kim     case TLS_ST_CR_KEY_UPDATE:
107e71b7053SJung-uk Kim         return "TLSv1.3 read server key update";
108e71b7053SJung-uk Kim     case TLS_ST_EARLY_DATA:
109e71b7053SJung-uk Kim         return "TLSv1.3 early data";
110e71b7053SJung-uk Kim     case TLS_ST_PENDING_EARLY_DATA_END:
111e71b7053SJung-uk Kim         return "TLSv1.3 pending early data end";
112e71b7053SJung-uk Kim     case TLS_ST_CW_END_OF_EARLY_DATA:
113e71b7053SJung-uk Kim         return "TLSv1.3 write end of early data";
114e71b7053SJung-uk Kim     case TLS_ST_SR_END_OF_EARLY_DATA:
115e71b7053SJung-uk Kim         return "TLSv1.3 read end of early data";
1166f9291ceSJung-uk Kim     default:
117e71b7053SJung-uk Kim         return "unknown state";
11874664626SKris Kennaway     }
11974664626SKris Kennaway }
12074664626SKris Kennaway 
SSL_state_string(const SSL * s)1215c87c606SMark Murray const char *SSL_state_string(const SSL *s)
12274664626SKris Kennaway {
123e71b7053SJung-uk Kim     if (ossl_statem_in_error(s))
124e71b7053SJung-uk Kim         return "SSLERR";
12574664626SKris Kennaway 
126e71b7053SJung-uk Kim     switch (SSL_get_state(s)) {
127e71b7053SJung-uk Kim     case TLS_ST_SR_NEXT_PROTO:
128e71b7053SJung-uk Kim         return "TRNP";
129e71b7053SJung-uk Kim     case TLS_ST_SW_SESSION_TICKET:
130e71b7053SJung-uk Kim         return "TWST";
131e71b7053SJung-uk Kim     case TLS_ST_SW_CERT_STATUS:
132e71b7053SJung-uk Kim         return "TWCS";
133e71b7053SJung-uk Kim     case TLS_ST_CR_CERT_STATUS:
134e71b7053SJung-uk Kim         return "TRCS";
135e71b7053SJung-uk Kim     case TLS_ST_CR_SESSION_TICKET:
136e71b7053SJung-uk Kim         return "TRST";
137e71b7053SJung-uk Kim     case TLS_ST_CW_NEXT_PROTO:
138e71b7053SJung-uk Kim         return "TWNP";
139e71b7053SJung-uk Kim     case TLS_ST_BEFORE:
140e71b7053SJung-uk Kim         return "PINIT";
141e71b7053SJung-uk Kim     case TLS_ST_OK:
142e71b7053SJung-uk Kim         return "SSLOK";
143e71b7053SJung-uk Kim     case TLS_ST_CW_CLNT_HELLO:
144e71b7053SJung-uk Kim         return "TWCH";
145e71b7053SJung-uk Kim     case TLS_ST_CR_SRVR_HELLO:
146e71b7053SJung-uk Kim         return "TRSH";
147e71b7053SJung-uk Kim     case TLS_ST_CR_CERT:
148e71b7053SJung-uk Kim         return "TRSC";
149e71b7053SJung-uk Kim     case TLS_ST_CR_KEY_EXCH:
150e71b7053SJung-uk Kim         return "TRSKE";
151e71b7053SJung-uk Kim     case TLS_ST_CR_CERT_REQ:
152e71b7053SJung-uk Kim         return "TRCR";
153e71b7053SJung-uk Kim     case TLS_ST_CR_SRVR_DONE:
154e71b7053SJung-uk Kim         return "TRSD";
155e71b7053SJung-uk Kim     case TLS_ST_CW_CERT:
156e71b7053SJung-uk Kim         return "TWCC";
157e71b7053SJung-uk Kim     case TLS_ST_CW_KEY_EXCH:
158e71b7053SJung-uk Kim         return "TWCKE";
159e71b7053SJung-uk Kim     case TLS_ST_CW_CERT_VRFY:
160e71b7053SJung-uk Kim         return "TWCV";
161e71b7053SJung-uk Kim     case TLS_ST_SW_CHANGE:
162e71b7053SJung-uk Kim     case TLS_ST_CW_CHANGE:
163e71b7053SJung-uk Kim         return "TWCCS";
164e71b7053SJung-uk Kim     case TLS_ST_SW_FINISHED:
165e71b7053SJung-uk Kim     case TLS_ST_CW_FINISHED:
166e71b7053SJung-uk Kim         return "TWFIN";
167e71b7053SJung-uk Kim     case TLS_ST_SR_CHANGE:
168e71b7053SJung-uk Kim     case TLS_ST_CR_CHANGE:
169e71b7053SJung-uk Kim         return "TRCCS";
170e71b7053SJung-uk Kim     case TLS_ST_SR_FINISHED:
171e71b7053SJung-uk Kim     case TLS_ST_CR_FINISHED:
172e71b7053SJung-uk Kim         return "TRFIN";
173e71b7053SJung-uk Kim     case TLS_ST_SW_HELLO_REQ:
174e71b7053SJung-uk Kim         return "TWHR";
175e71b7053SJung-uk Kim     case TLS_ST_SR_CLNT_HELLO:
176e71b7053SJung-uk Kim         return "TRCH";
177e71b7053SJung-uk Kim     case TLS_ST_SW_SRVR_HELLO:
178e71b7053SJung-uk Kim         return "TWSH";
179e71b7053SJung-uk Kim     case TLS_ST_SW_CERT:
180e71b7053SJung-uk Kim         return "TWSC";
181e71b7053SJung-uk Kim     case TLS_ST_SW_KEY_EXCH:
182e71b7053SJung-uk Kim         return "TWSKE";
183e71b7053SJung-uk Kim     case TLS_ST_SW_CERT_REQ:
184e71b7053SJung-uk Kim         return "TWCR";
185e71b7053SJung-uk Kim     case TLS_ST_SW_SRVR_DONE:
186e71b7053SJung-uk Kim         return "TWSD";
187e71b7053SJung-uk Kim     case TLS_ST_SR_CERT:
188e71b7053SJung-uk Kim         return "TRCC";
189e71b7053SJung-uk Kim     case TLS_ST_SR_KEY_EXCH:
190e71b7053SJung-uk Kim         return "TRCKE";
191e71b7053SJung-uk Kim     case TLS_ST_SR_CERT_VRFY:
192e71b7053SJung-uk Kim         return "TRCV";
193e71b7053SJung-uk Kim     case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
194e71b7053SJung-uk Kim         return "DRCHV";
195e71b7053SJung-uk Kim     case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
196e71b7053SJung-uk Kim         return "DWCHV";
197e71b7053SJung-uk Kim     case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
198e71b7053SJung-uk Kim         return "TWEE";
199e71b7053SJung-uk Kim     case TLS_ST_CR_ENCRYPTED_EXTENSIONS:
200e71b7053SJung-uk Kim         return "TREE";
201e71b7053SJung-uk Kim     case TLS_ST_CR_CERT_VRFY:
202e71b7053SJung-uk Kim         return "TRSCV";
203e71b7053SJung-uk Kim     case TLS_ST_SW_CERT_VRFY:
204*b077aed3SPierre Pronchery         return "TWSCV";
205e71b7053SJung-uk Kim     case TLS_ST_CR_HELLO_REQ:
206e71b7053SJung-uk Kim         return "TRHR";
207e71b7053SJung-uk Kim     case TLS_ST_SW_KEY_UPDATE:
208e71b7053SJung-uk Kim         return "TWSKU";
209e71b7053SJung-uk Kim     case TLS_ST_CW_KEY_UPDATE:
210e71b7053SJung-uk Kim         return "TWCKU";
211e71b7053SJung-uk Kim     case TLS_ST_SR_KEY_UPDATE:
212e71b7053SJung-uk Kim         return "TRCKU";
213e71b7053SJung-uk Kim     case TLS_ST_CR_KEY_UPDATE:
214e71b7053SJung-uk Kim         return "TRSKU";
215e71b7053SJung-uk Kim     case TLS_ST_EARLY_DATA:
216e71b7053SJung-uk Kim         return "TED";
217e71b7053SJung-uk Kim     case TLS_ST_PENDING_EARLY_DATA_END:
218e71b7053SJung-uk Kim         return "TPEDE";
219e71b7053SJung-uk Kim     case TLS_ST_CW_END_OF_EARLY_DATA:
220e71b7053SJung-uk Kim         return "TWEOED";
221e71b7053SJung-uk Kim     case TLS_ST_SR_END_OF_EARLY_DATA:
222e71b7053SJung-uk Kim         return "TWEOED";
2236f9291ceSJung-uk Kim     default:
224e71b7053SJung-uk Kim         return "UNKWN";
22574664626SKris Kennaway     }
22674664626SKris Kennaway }
22774664626SKris Kennaway 
SSL_alert_type_string_long(int value)2285c87c606SMark Murray const char *SSL_alert_type_string_long(int value)
22974664626SKris Kennaway {
230e71b7053SJung-uk Kim     switch (value >> 8) {
231e71b7053SJung-uk Kim     case SSL3_AL_WARNING:
232e71b7053SJung-uk Kim         return "warning";
233e71b7053SJung-uk Kim     case SSL3_AL_FATAL:
234e71b7053SJung-uk Kim         return "fatal";
235e71b7053SJung-uk Kim     default:
236e71b7053SJung-uk Kim         return "unknown";
237e71b7053SJung-uk Kim     }
23874664626SKris Kennaway }
23974664626SKris Kennaway 
SSL_alert_type_string(int value)2405c87c606SMark Murray const char *SSL_alert_type_string(int value)
24174664626SKris Kennaway {
242e71b7053SJung-uk Kim     switch (value >> 8) {
243e71b7053SJung-uk Kim     case SSL3_AL_WARNING:
244e71b7053SJung-uk Kim         return "W";
245e71b7053SJung-uk Kim     case SSL3_AL_FATAL:
246e71b7053SJung-uk Kim         return "F";
247e71b7053SJung-uk Kim     default:
248e71b7053SJung-uk Kim         return "U";
249e71b7053SJung-uk Kim     }
25074664626SKris Kennaway }
25174664626SKris Kennaway 
SSL_alert_desc_string(int value)2525c87c606SMark Murray const char *SSL_alert_desc_string(int value)
25374664626SKris Kennaway {
2546f9291ceSJung-uk Kim     switch (value & 0xff) {
2556f9291ceSJung-uk Kim     case SSL3_AD_CLOSE_NOTIFY:
256e71b7053SJung-uk Kim         return "CN";
2576f9291ceSJung-uk Kim     case SSL3_AD_UNEXPECTED_MESSAGE:
258e71b7053SJung-uk Kim         return "UM";
2596f9291ceSJung-uk Kim     case SSL3_AD_BAD_RECORD_MAC:
260e71b7053SJung-uk Kim         return "BM";
2616f9291ceSJung-uk Kim     case SSL3_AD_DECOMPRESSION_FAILURE:
262e71b7053SJung-uk Kim         return "DF";
2636f9291ceSJung-uk Kim     case SSL3_AD_HANDSHAKE_FAILURE:
264e71b7053SJung-uk Kim         return "HF";
2656f9291ceSJung-uk Kim     case SSL3_AD_NO_CERTIFICATE:
266e71b7053SJung-uk Kim         return "NC";
2676f9291ceSJung-uk Kim     case SSL3_AD_BAD_CERTIFICATE:
268e71b7053SJung-uk Kim         return "BC";
2696f9291ceSJung-uk Kim     case SSL3_AD_UNSUPPORTED_CERTIFICATE:
270e71b7053SJung-uk Kim         return "UC";
2716f9291ceSJung-uk Kim     case SSL3_AD_CERTIFICATE_REVOKED:
272e71b7053SJung-uk Kim         return "CR";
2736f9291ceSJung-uk Kim     case SSL3_AD_CERTIFICATE_EXPIRED:
274e71b7053SJung-uk Kim         return "CE";
2756f9291ceSJung-uk Kim     case SSL3_AD_CERTIFICATE_UNKNOWN:
276e71b7053SJung-uk Kim         return "CU";
2776f9291ceSJung-uk Kim     case SSL3_AD_ILLEGAL_PARAMETER:
278e71b7053SJung-uk Kim         return "IP";
2796f9291ceSJung-uk Kim     case TLS1_AD_DECRYPTION_FAILED:
280e71b7053SJung-uk Kim         return "DC";
2816f9291ceSJung-uk Kim     case TLS1_AD_RECORD_OVERFLOW:
282e71b7053SJung-uk Kim         return "RO";
2836f9291ceSJung-uk Kim     case TLS1_AD_UNKNOWN_CA:
284e71b7053SJung-uk Kim         return "CA";
2856f9291ceSJung-uk Kim     case TLS1_AD_ACCESS_DENIED:
286e71b7053SJung-uk Kim         return "AD";
2876f9291ceSJung-uk Kim     case TLS1_AD_DECODE_ERROR:
288e71b7053SJung-uk Kim         return "DE";
2896f9291ceSJung-uk Kim     case TLS1_AD_DECRYPT_ERROR:
290e71b7053SJung-uk Kim         return "CY";
2916f9291ceSJung-uk Kim     case TLS1_AD_EXPORT_RESTRICTION:
292e71b7053SJung-uk Kim         return "ER";
2936f9291ceSJung-uk Kim     case TLS1_AD_PROTOCOL_VERSION:
294e71b7053SJung-uk Kim         return "PV";
2956f9291ceSJung-uk Kim     case TLS1_AD_INSUFFICIENT_SECURITY:
296e71b7053SJung-uk Kim         return "IS";
2976f9291ceSJung-uk Kim     case TLS1_AD_INTERNAL_ERROR:
298e71b7053SJung-uk Kim         return "IE";
2996f9291ceSJung-uk Kim     case TLS1_AD_USER_CANCELLED:
300e71b7053SJung-uk Kim         return "US";
3016f9291ceSJung-uk Kim     case TLS1_AD_NO_RENEGOTIATION:
302e71b7053SJung-uk Kim         return "NR";
3036f9291ceSJung-uk Kim     case TLS1_AD_UNSUPPORTED_EXTENSION:
304e71b7053SJung-uk Kim         return "UE";
3056f9291ceSJung-uk Kim     case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
306e71b7053SJung-uk Kim         return "CO";
3076f9291ceSJung-uk Kim     case TLS1_AD_UNRECOGNIZED_NAME:
308e71b7053SJung-uk Kim         return "UN";
3096f9291ceSJung-uk Kim     case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
310e71b7053SJung-uk Kim         return "BR";
3116f9291ceSJung-uk Kim     case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
312e71b7053SJung-uk Kim         return "BH";
3136f9291ceSJung-uk Kim     case TLS1_AD_UNKNOWN_PSK_IDENTITY:
314e71b7053SJung-uk Kim         return "UP";
3156f9291ceSJung-uk Kim     default:
316e71b7053SJung-uk Kim         return "UK";
31774664626SKris Kennaway     }
31874664626SKris Kennaway }
31974664626SKris Kennaway 
SSL_alert_desc_string_long(int value)3205c87c606SMark Murray const char *SSL_alert_desc_string_long(int value)
32174664626SKris Kennaway {
3226f9291ceSJung-uk Kim     switch (value & 0xff) {
32374664626SKris Kennaway     case SSL3_AD_CLOSE_NOTIFY:
324e71b7053SJung-uk Kim         return "close notify";
32574664626SKris Kennaway     case SSL3_AD_UNEXPECTED_MESSAGE:
326e71b7053SJung-uk Kim         return "unexpected_message";
32774664626SKris Kennaway     case SSL3_AD_BAD_RECORD_MAC:
328e71b7053SJung-uk Kim         return "bad record mac";
32974664626SKris Kennaway     case SSL3_AD_DECOMPRESSION_FAILURE:
330e71b7053SJung-uk Kim         return "decompression failure";
33174664626SKris Kennaway     case SSL3_AD_HANDSHAKE_FAILURE:
332e71b7053SJung-uk Kim         return "handshake failure";
33374664626SKris Kennaway     case SSL3_AD_NO_CERTIFICATE:
334e71b7053SJung-uk Kim         return "no certificate";
33574664626SKris Kennaway     case SSL3_AD_BAD_CERTIFICATE:
336e71b7053SJung-uk Kim         return "bad certificate";
33774664626SKris Kennaway     case SSL3_AD_UNSUPPORTED_CERTIFICATE:
338e71b7053SJung-uk Kim         return "unsupported certificate";
33974664626SKris Kennaway     case SSL3_AD_CERTIFICATE_REVOKED:
340e71b7053SJung-uk Kim         return "certificate revoked";
34174664626SKris Kennaway     case SSL3_AD_CERTIFICATE_EXPIRED:
342e71b7053SJung-uk Kim         return "certificate expired";
34374664626SKris Kennaway     case SSL3_AD_CERTIFICATE_UNKNOWN:
344e71b7053SJung-uk Kim         return "certificate unknown";
34574664626SKris Kennaway     case SSL3_AD_ILLEGAL_PARAMETER:
346e71b7053SJung-uk Kim         return "illegal parameter";
347a21b1b38SKris Kennaway     case TLS1_AD_DECRYPTION_FAILED:
348e71b7053SJung-uk Kim         return "decryption failed";
349a21b1b38SKris Kennaway     case TLS1_AD_RECORD_OVERFLOW:
350e71b7053SJung-uk Kim         return "record overflow";
351a21b1b38SKris Kennaway     case TLS1_AD_UNKNOWN_CA:
352e71b7053SJung-uk Kim         return "unknown CA";
353a21b1b38SKris Kennaway     case TLS1_AD_ACCESS_DENIED:
354e71b7053SJung-uk Kim         return "access denied";
355a21b1b38SKris Kennaway     case TLS1_AD_DECODE_ERROR:
356e71b7053SJung-uk Kim         return "decode error";
357a21b1b38SKris Kennaway     case TLS1_AD_DECRYPT_ERROR:
358e71b7053SJung-uk Kim         return "decrypt error";
359a21b1b38SKris Kennaway     case TLS1_AD_EXPORT_RESTRICTION:
360e71b7053SJung-uk Kim         return "export restriction";
361a21b1b38SKris Kennaway     case TLS1_AD_PROTOCOL_VERSION:
362e71b7053SJung-uk Kim         return "protocol version";
363a21b1b38SKris Kennaway     case TLS1_AD_INSUFFICIENT_SECURITY:
364e71b7053SJung-uk Kim         return "insufficient security";
365a21b1b38SKris Kennaway     case TLS1_AD_INTERNAL_ERROR:
366e71b7053SJung-uk Kim         return "internal error";
367a21b1b38SKris Kennaway     case TLS1_AD_USER_CANCELLED:
368e71b7053SJung-uk Kim         return "user canceled";
369a21b1b38SKris Kennaway     case TLS1_AD_NO_RENEGOTIATION:
370e71b7053SJung-uk Kim         return "no renegotiation";
3711f13597dSJung-uk Kim     case TLS1_AD_UNSUPPORTED_EXTENSION:
372e71b7053SJung-uk Kim         return "unsupported extension";
3731f13597dSJung-uk Kim     case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
374e71b7053SJung-uk Kim         return "certificate unobtainable";
3751f13597dSJung-uk Kim     case TLS1_AD_UNRECOGNIZED_NAME:
376e71b7053SJung-uk Kim         return "unrecognized name";
3771f13597dSJung-uk Kim     case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
378e71b7053SJung-uk Kim         return "bad certificate status response";
3791f13597dSJung-uk Kim     case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
380e71b7053SJung-uk Kim         return "bad certificate hash value";
3811f13597dSJung-uk Kim     case TLS1_AD_UNKNOWN_PSK_IDENTITY:
382e71b7053SJung-uk Kim         return "unknown PSK identity";
383e71b7053SJung-uk Kim     case TLS1_AD_NO_APPLICATION_PROTOCOL:
384e71b7053SJung-uk Kim         return "no application protocol";
3856f9291ceSJung-uk Kim     default:
386e71b7053SJung-uk Kim         return "unknown";
38774664626SKris Kennaway     }
38874664626SKris Kennaway }
389