xref: /dragonfly/crypto/libressl/ssl/ssl_stat.c (revision a3127495)
1 /* $OpenBSD: ssl_stat.c,v 1.11 2014/07/13 00:08:44 jsing Exp $ */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3  * All rights reserved.
4  *
5  * This package is an SSL implementation written
6  * by Eric Young (eay@cryptsoft.com).
7  * The implementation was written so as to conform with Netscapes SSL.
8  *
9  * This library is free for commercial and non-commercial use as long as
10  * the following conditions are aheared to.  The following conditions
11  * apply to all code found in this distribution, be it the RC4, RSA,
12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13  * included with this distribution is covered by the same copyright terms
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15  *
16  * Copyright remains Eric Young's, and as such any Copyright notices in
17  * the code are not to be removed.
18  * If this package is used in a product, Eric Young should be given attribution
19  * as the author of the parts of the library used.
20  * This can be in the form of a textual message at program startup or
21  * in documentation (online or textual) provided with the package.
22  *
23  * Redistribution and use in source and binary forms, with or without
24  * modification, are permitted provided that the following conditions
25  * are met:
26  * 1. Redistributions of source code must retain the copyright
27  *    notice, this list of conditions and the following disclaimer.
28  * 2. Redistributions in binary form must reproduce the above copyright
29  *    notice, this list of conditions and the following disclaimer in the
30  *    documentation and/or other materials provided with the distribution.
31  * 3. All advertising materials mentioning features or use of this software
32  *    must display the following acknowledgement:
33  *    "This product includes cryptographic software written by
34  *     Eric Young (eay@cryptsoft.com)"
35  *    The word 'cryptographic' can be left out if the rouines from the library
36  *    being used are not cryptographic related :-).
37  * 4. If you include any Windows specific code (or a derivative thereof) from
38  *    the apps directory (application code) you must include an acknowledgement:
39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40  *
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  *
53  * The licence and distribution terms for any publically available version or
54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
55  * copied and put under another distribution licence
56  * [including the GNU Public Licence.]
57  */
58 /* ====================================================================
59  * Copyright 2005 Nokia. All rights reserved.
60  *
61  * The portions of the attached software ("Contribution") is developed by
62  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
63  * license.
64  *
65  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
66  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
67  * support (see RFC 4279) to OpenSSL.
68  *
69  * No patent licenses or other rights except those expressly stated in
70  * the OpenSSL open source license shall be deemed granted or received
71  * expressly, by implication, estoppel, or otherwise.
72  *
73  * No assurances are provided by Nokia that the Contribution does not
74  * infringe the patent or other intellectual property rights of any third
75  * party or that the license provides you with all the necessary rights
76  * to make use of the Contribution.
77  *
78  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
79  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
80  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
81  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
82  * OTHERWISE.
83  */
84 
85 #include <stdio.h>
86 
87 #include "ssl_locl.h"
88 
89 const char *
90 SSL_state_string_long(const SSL *s)
91 {
92 	const char *str;
93 
94 	switch (s->state) {
95 	case SSL_ST_BEFORE:
96 		str = "before SSL initialization";
97 		break;
98 	case SSL_ST_ACCEPT:
99 		str = "before accept initialization";
100 		break;
101 	case SSL_ST_CONNECT:
102 		str = "before connect initialization";
103 		break;
104 	case SSL_ST_OK:
105 		str = "SSL negotiation finished successfully";
106 		break;
107 	case SSL_ST_RENEGOTIATE:
108 		str = "SSL renegotiate ciphers";
109 		break;
110 	case SSL_ST_BEFORE|SSL_ST_CONNECT:
111 		str = "before/connect initialization";
112 		break;
113 	case SSL_ST_OK|SSL_ST_CONNECT:
114 		str = "ok/connect SSL initialization";
115 		break;
116 	case SSL_ST_BEFORE|SSL_ST_ACCEPT:
117 		str = "before/accept initialization";
118 		break;
119 	case SSL_ST_OK|SSL_ST_ACCEPT:
120 		str = "ok/accept SSL initialization";
121 		break;
122 
123 	/* SSLv3 additions */
124 	case SSL3_ST_CW_CLNT_HELLO_A:
125 		str = "SSLv3 write client hello A";
126 		break;
127 	case SSL3_ST_CW_CLNT_HELLO_B:
128 		str = "SSLv3 write client hello B";
129 		break;
130 	case SSL3_ST_CR_SRVR_HELLO_A:
131 		str = "SSLv3 read server hello A";
132 		break;
133 	case SSL3_ST_CR_SRVR_HELLO_B:
134 		str = "SSLv3 read server hello B";
135 		break;
136 	case SSL3_ST_CR_CERT_A:
137 		str = "SSLv3 read server certificate A";
138 		break;
139 	case SSL3_ST_CR_CERT_B:
140 		str = "SSLv3 read server certificate B";
141 		break;
142 	case SSL3_ST_CR_KEY_EXCH_A:
143 		str = "SSLv3 read server key exchange A";
144 		break;
145 	case SSL3_ST_CR_KEY_EXCH_B:
146 		str = "SSLv3 read server key exchange B";
147 		break;
148 	case SSL3_ST_CR_CERT_REQ_A:
149 		str = "SSLv3 read server certificate request A";
150 		break;
151 	case SSL3_ST_CR_CERT_REQ_B:
152 		str = "SSLv3 read server certificate request B";
153 		break;
154 	case SSL3_ST_CR_SESSION_TICKET_A:
155 		str = "SSLv3 read server session ticket A";
156 		break;
157 	case SSL3_ST_CR_SESSION_TICKET_B:
158 		str = "SSLv3 read server session ticket B";
159 		break;
160 	case SSL3_ST_CR_SRVR_DONE_A:
161 		str = "SSLv3 read server done A";
162 		break;
163 	case SSL3_ST_CR_SRVR_DONE_B:
164 		str = "SSLv3 read server done B";
165 		break;
166 	case SSL3_ST_CW_CERT_A:
167 		str = "SSLv3 write client certificate A";
168 		break;
169 	case SSL3_ST_CW_CERT_B:
170 		str = "SSLv3 write client certificate B";
171 		break;
172 	case SSL3_ST_CW_CERT_C:
173 		str = "SSLv3 write client certificate C";
174 		break;
175 	case SSL3_ST_CW_CERT_D:
176 		str = "SSLv3 write client certificate D";
177 		break;
178 	case SSL3_ST_CW_KEY_EXCH_A:
179 		str = "SSLv3 write client key exchange A";
180 		break;
181 	case SSL3_ST_CW_KEY_EXCH_B:
182 		str = "SSLv3 write client key exchange B";
183 		break;
184 	case SSL3_ST_CW_CERT_VRFY_A:
185 		str = "SSLv3 write certificate verify A";
186 		break;
187 	case SSL3_ST_CW_CERT_VRFY_B:
188 		str = "SSLv3 write certificate verify B";
189 		break;
190 
191 	case SSL3_ST_CW_CHANGE_A:
192 	case SSL3_ST_SW_CHANGE_A:
193 		str = "SSLv3 write change cipher spec A";
194 		break;
195 	case SSL3_ST_CW_CHANGE_B:
196 	case SSL3_ST_SW_CHANGE_B:
197 		str = "SSLv3 write change cipher spec B";
198 		break;
199 	case SSL3_ST_CW_FINISHED_A:
200 	case SSL3_ST_SW_FINISHED_A:
201 		str = "SSLv3 write finished A";
202 		break;
203 	case SSL3_ST_CW_FINISHED_B:
204 	case SSL3_ST_SW_FINISHED_B:
205 		str = "SSLv3 write finished B";
206 		break;
207 	case SSL3_ST_CR_CHANGE_A:
208 	case SSL3_ST_SR_CHANGE_A:
209 		str = "SSLv3 read change cipher spec A";
210 		break;
211 	case SSL3_ST_CR_CHANGE_B:
212 	case SSL3_ST_SR_CHANGE_B:
213 		str = "SSLv3 read change cipher spec B";
214 		break;
215 	case SSL3_ST_CR_FINISHED_A:
216 	case SSL3_ST_SR_FINISHED_A:
217 		str = "SSLv3 read finished A";
218 		break;
219 	case SSL3_ST_CR_FINISHED_B:
220 	case SSL3_ST_SR_FINISHED_B:
221 		str = "SSLv3 read finished B";
222 		break;
223 
224 	case SSL3_ST_CW_FLUSH:
225 	case SSL3_ST_SW_FLUSH:
226 		str = "SSLv3 flush data";
227 		break;
228 
229 	case SSL3_ST_SR_CLNT_HELLO_A:
230 		str = "SSLv3 read client hello A";
231 		break;
232 	case SSL3_ST_SR_CLNT_HELLO_B:
233 		str = "SSLv3 read client hello B";
234 		break;
235 	case SSL3_ST_SR_CLNT_HELLO_C:
236 		str = "SSLv3 read client hello C";
237 		break;
238 	case SSL3_ST_SW_HELLO_REQ_A:
239 		str = "SSLv3 write hello request A";
240 		break;
241 	case SSL3_ST_SW_HELLO_REQ_B:
242 		str = "SSLv3 write hello request B";
243 		break;
244 	case SSL3_ST_SW_HELLO_REQ_C:
245 		str = "SSLv3 write hello request C";
246 		break;
247 	case SSL3_ST_SW_SRVR_HELLO_A:
248 		str = "SSLv3 write server hello A";
249 		break;
250 	case SSL3_ST_SW_SRVR_HELLO_B:
251 		str = "SSLv3 write server hello B";
252 		break;
253 	case SSL3_ST_SW_CERT_A:
254 		str = "SSLv3 write certificate A";
255 		break;
256 	case SSL3_ST_SW_CERT_B:
257 		str = "SSLv3 write certificate B";
258 		break;
259 	case SSL3_ST_SW_KEY_EXCH_A:
260 		str = "SSLv3 write key exchange A";
261 		break;
262 	case SSL3_ST_SW_KEY_EXCH_B:
263 		str = "SSLv3 write key exchange B";
264 		break;
265 	case SSL3_ST_SW_CERT_REQ_A:
266 		str = "SSLv3 write certificate request A";
267 		break;
268 	case SSL3_ST_SW_CERT_REQ_B:
269 		str = "SSLv3 write certificate request B";
270 		break;
271 	case SSL3_ST_SW_SESSION_TICKET_A:
272 		str = "SSLv3 write session ticket A";
273 		break;
274 	case SSL3_ST_SW_SESSION_TICKET_B:
275 		str = "SSLv3 write session ticket B";
276 		break;
277 	case SSL3_ST_SW_SRVR_DONE_A:
278 		str = "SSLv3 write server done A";
279 		break;
280 	case SSL3_ST_SW_SRVR_DONE_B:
281 		str = "SSLv3 write server done B";
282 		break;
283 	case SSL3_ST_SR_CERT_A:
284 		str = "SSLv3 read client certificate A";
285 		break;
286 	case SSL3_ST_SR_CERT_B:
287 		str = "SSLv3 read client certificate B";
288 		break;
289 	case SSL3_ST_SR_KEY_EXCH_A:
290 		str = "SSLv3 read client key exchange A";
291 		break;
292 	case SSL3_ST_SR_KEY_EXCH_B:
293 		str = "SSLv3 read client key exchange B";
294 		break;
295 	case SSL3_ST_SR_CERT_VRFY_A:
296 		str = "SSLv3 read certificate verify A";
297 		break;
298 	case SSL3_ST_SR_CERT_VRFY_B:
299 		str = "SSLv3 read certificate verify B";
300 		break;
301 
302 	/* DTLS */
303 	case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
304 		str = "DTLS1 read hello verify request A";
305 		break;
306 	case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
307 		str = "DTLS1 read hello verify request B";
308 		break;
309 	case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
310 		str = "DTLS1 write hello verify request A";
311 		break;
312 	case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B:
313 		str = "DTLS1 write hello verify request B";
314 		break;
315 
316 	default:
317 		str = "unknown state";
318 		break;
319 	}
320 	return (str);
321 }
322 
323 const char *
324 SSL_rstate_string_long(const SSL *s)
325 {
326 	const char *str;
327 
328 	switch (s->rstate) {
329 	case SSL_ST_READ_HEADER:
330 		str = "read header";
331 		break;
332 	case SSL_ST_READ_BODY:
333 		str = "read body";
334 		break;
335 	case SSL_ST_READ_DONE:
336 		str = "read done";
337 		break;
338 	default:
339 		str = "unknown";
340 		break;
341 	}
342 	return (str);
343 }
344 
345 const char *
346 SSL_state_string(const SSL *s)
347 {
348 	const char *str;
349 
350 	switch (s->state) {
351 	case SSL_ST_BEFORE:
352 		str = "PINIT ";
353 		break;
354 	case SSL_ST_ACCEPT:
355 		str = "AINIT ";
356 		break;
357 	case SSL_ST_CONNECT:
358 		str = "CINIT ";
359 		break;
360 	case SSL_ST_OK:
361 		str = "SSLOK ";
362 		break;
363 
364 	/* SSLv3 additions */
365 	case SSL3_ST_SW_FLUSH:
366 	case SSL3_ST_CW_FLUSH:
367 		str = "3FLUSH";
368 		break;
369 	case SSL3_ST_CW_CLNT_HELLO_A:
370 		str = "3WCH_A";
371 		break;
372 	case SSL3_ST_CW_CLNT_HELLO_B:
373 		str = "3WCH_B";
374 		break;
375 	case SSL3_ST_CR_SRVR_HELLO_A:
376 		str = "3RSH_A";
377 		break;
378 	case SSL3_ST_CR_SRVR_HELLO_B:
379 		str = "3RSH_B";
380 		break;
381 	case SSL3_ST_CR_CERT_A:
382 		str = "3RSC_A";
383 		break;
384 	case SSL3_ST_CR_CERT_B:
385 		str = "3RSC_B";
386 		break;
387 	case SSL3_ST_CR_KEY_EXCH_A:
388 		str = "3RSKEA";
389 		break;
390 	case SSL3_ST_CR_KEY_EXCH_B:
391 		str = "3RSKEB";
392 		break;
393 	case SSL3_ST_CR_CERT_REQ_A:
394 		str = "3RCR_A";
395 		break;
396 	case SSL3_ST_CR_CERT_REQ_B:
397 		str = "3RCR_B";
398 		break;
399 	case SSL3_ST_CR_SRVR_DONE_A:
400 		str = "3RSD_A";
401 		break;
402 	case SSL3_ST_CR_SRVR_DONE_B:
403 		str = "3RSD_B";
404 		break;
405 	case SSL3_ST_CW_CERT_A:
406 		str = "3WCC_A";
407 		break;
408 	case SSL3_ST_CW_CERT_B:
409 		str = "3WCC_B";
410 		break;
411 	case SSL3_ST_CW_CERT_C:
412 		str = "3WCC_C";
413 		break;
414 	case SSL3_ST_CW_CERT_D:
415 		str = "3WCC_D";
416 		break;
417 	case SSL3_ST_CW_KEY_EXCH_A:
418 		str = "3WCKEA";
419 		break;
420 	case SSL3_ST_CW_KEY_EXCH_B:
421 		str = "3WCKEB";
422 		break;
423 	case SSL3_ST_CW_CERT_VRFY_A:
424 		str = "3WCV_A";
425 		break;
426 	case SSL3_ST_CW_CERT_VRFY_B:
427 		str = "3WCV_B";
428 		break;
429 
430 	case SSL3_ST_SW_CHANGE_A:
431 	case SSL3_ST_CW_CHANGE_A:
432 		str = "3WCCSA";
433 		break;
434 	case SSL3_ST_SW_CHANGE_B:
435 	case SSL3_ST_CW_CHANGE_B:
436 		str = "3WCCSB";
437 		break;
438 	case SSL3_ST_SW_FINISHED_A:
439 	case SSL3_ST_CW_FINISHED_A:
440 		str = "3WFINA";
441 		break;
442 	case SSL3_ST_SW_FINISHED_B:
443 	case SSL3_ST_CW_FINISHED_B:
444 		str = "3WFINB";
445 		break;
446 	case SSL3_ST_SR_CHANGE_A:
447 	case SSL3_ST_CR_CHANGE_A:
448 		str = "3RCCSA";
449 		break;
450 	case SSL3_ST_SR_CHANGE_B:
451 	case SSL3_ST_CR_CHANGE_B:
452 		str = "3RCCSB";
453 		break;
454 	case SSL3_ST_SR_FINISHED_A:
455 	case SSL3_ST_CR_FINISHED_A:
456 		str = "3RFINA";
457 		break;
458 	case SSL3_ST_SR_FINISHED_B:
459 	case SSL3_ST_CR_FINISHED_B:
460 		str = "3RFINB";
461 		break;
462 
463 	case SSL3_ST_SW_HELLO_REQ_A:
464 		str = "3WHR_A";
465 		break;
466 	case SSL3_ST_SW_HELLO_REQ_B:
467 		str = "3WHR_B";
468 		break;
469 	case SSL3_ST_SW_HELLO_REQ_C:
470 		str = "3WHR_C";
471 		break;
472 	case SSL3_ST_SR_CLNT_HELLO_A:
473 		str = "3RCH_A";
474 		break;
475 	case SSL3_ST_SR_CLNT_HELLO_B:
476 		str = "3RCH_B";
477 		break;
478 	case SSL3_ST_SR_CLNT_HELLO_C:
479 		str = "3RCH_C";
480 		break;
481 	case SSL3_ST_SW_SRVR_HELLO_A:
482 		str = "3WSH_A";
483 		break;
484 	case SSL3_ST_SW_SRVR_HELLO_B:
485 		str = "3WSH_B";
486 		break;
487 	case SSL3_ST_SW_CERT_A:
488 		str = "3WSC_A";
489 		break;
490 	case SSL3_ST_SW_CERT_B:
491 		str = "3WSC_B";
492 		break;
493 	case SSL3_ST_SW_KEY_EXCH_A:
494 		str = "3WSKEA";
495 		break;
496 	case SSL3_ST_SW_KEY_EXCH_B:
497 		str = "3WSKEB";
498 		break;
499 	case SSL3_ST_SW_CERT_REQ_A:
500 		str = "3WCR_A";
501 		break;
502 	case SSL3_ST_SW_CERT_REQ_B:
503 		str = "3WCR_B";
504 		break;
505 	case SSL3_ST_SW_SRVR_DONE_A:
506 		str = "3WSD_A";
507 		break;
508 	case SSL3_ST_SW_SRVR_DONE_B:
509 		str = "3WSD_B";
510 		break;
511 	case SSL3_ST_SR_CERT_A:
512 		str = "3RCC_A";
513 		break;
514 	case SSL3_ST_SR_CERT_B:
515 		str = "3RCC_B";
516 		break;
517 	case SSL3_ST_SR_KEY_EXCH_A:
518 		str = "3RCKEA";
519 		break;
520 	case SSL3_ST_SR_KEY_EXCH_B:
521 		str = "3RCKEB";
522 		break;
523 	case SSL3_ST_SR_CERT_VRFY_A:
524 		str = "3RCV_A";
525 		break;
526 	case SSL3_ST_SR_CERT_VRFY_B:
527 		str = "3RCV_B";
528 		break;
529 
530 	/* DTLS */
531 	case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
532 		str = "DRCHVA";
533 		break;
534 	case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
535 		str = "DRCHVB";
536 		break;
537 	case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
538 		str = "DWCHVA";
539 		break;
540 	case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B:
541 		str = "DWCHVB";
542 		break;
543 
544 	default:
545 		str = "UNKWN ";
546 		break;
547 	}
548 	return (str);
549 }
550 
551 const char *
552 SSL_alert_type_string_long(int value)
553 {
554 	value >>= 8;
555 	if (value == SSL3_AL_WARNING)
556 		return ("warning");
557 	else if (value == SSL3_AL_FATAL)
558 		return ("fatal");
559 	else
560 		return ("unknown");
561 }
562 
563 const char *
564 SSL_alert_type_string(int value)
565 {
566 	value >>= 8;
567 	if (value == SSL3_AL_WARNING)
568 		return ("W");
569 	else if (value == SSL3_AL_FATAL)
570 		return ("F");
571 	else
572 		return ("U");
573 }
574 
575 const char *
576 SSL_alert_desc_string(int value)
577 {
578 	const char *str;
579 
580 	switch (value & 0xff) {
581 	case SSL3_AD_CLOSE_NOTIFY:
582 		str = "CN";
583 		break;
584 	case SSL3_AD_UNEXPECTED_MESSAGE:
585 		str = "UM";
586 		break;
587 	case SSL3_AD_BAD_RECORD_MAC:
588 		str = "BM";
589 		break;
590 	case SSL3_AD_DECOMPRESSION_FAILURE:
591 		str = "DF";
592 		break;
593 	case SSL3_AD_HANDSHAKE_FAILURE:
594 		str = "HF";
595 		break;
596 	case SSL3_AD_NO_CERTIFICATE:
597 		str = "NC";
598 		break;
599 	case SSL3_AD_BAD_CERTIFICATE:
600 		str = "BC";
601 		break;
602 	case SSL3_AD_UNSUPPORTED_CERTIFICATE:
603 		str = "UC";
604 		break;
605 	case SSL3_AD_CERTIFICATE_REVOKED:
606 		str = "CR";
607 		break;
608 	case SSL3_AD_CERTIFICATE_EXPIRED:
609 		str = "CE";
610 		break;
611 	case SSL3_AD_CERTIFICATE_UNKNOWN:
612 		str = "CU";
613 		break;
614 	case SSL3_AD_ILLEGAL_PARAMETER:
615 		str = "IP";
616 		break;
617 	case TLS1_AD_DECRYPTION_FAILED:
618 		str = "DC";
619 		break;
620 	case TLS1_AD_RECORD_OVERFLOW:
621 		str = "RO";
622 		break;
623 	case TLS1_AD_UNKNOWN_CA:
624 		str = "CA";
625 		break;
626 	case TLS1_AD_ACCESS_DENIED:
627 		str = "AD";
628 		break;
629 	case TLS1_AD_DECODE_ERROR:
630 		str = "DE";
631 		break;
632 	case TLS1_AD_DECRYPT_ERROR:
633 		str = "CY";
634 		break;
635 	case TLS1_AD_EXPORT_RESTRICTION:
636 		str = "ER";
637 		break;
638 	case TLS1_AD_PROTOCOL_VERSION:
639 		str = "PV";
640 		break;
641 	case TLS1_AD_INSUFFICIENT_SECURITY:
642 		str = "IS";
643 		break;
644 	case TLS1_AD_INTERNAL_ERROR:
645 		str = "IE";
646 		break;
647 	case TLS1_AD_USER_CANCELLED:
648 		str = "US";
649 		break;
650 	case TLS1_AD_NO_RENEGOTIATION:
651 		str = "NR";
652 		break;
653 	case TLS1_AD_UNSUPPORTED_EXTENSION:
654 		str = "UE";
655 		break;
656 	case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
657 		str = "CO";
658 		break;
659 	case TLS1_AD_UNRECOGNIZED_NAME:
660 		str = "UN";
661 		break;
662 	case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
663 		str = "BR";
664 		break;
665 	case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
666 		str = "BH";
667 		break;
668 	case TLS1_AD_UNKNOWN_PSK_IDENTITY:
669 		str = "UP";
670 		break;
671 	default:
672 		str = "UK";
673 		break;
674 	}
675 	return (str);
676 }
677 
678 const char *
679 SSL_alert_desc_string_long(int value)
680 {
681 	const char *str;
682 
683 	switch (value & 0xff) {
684 	case SSL3_AD_CLOSE_NOTIFY:
685 		str = "close notify";
686 		break;
687 	case SSL3_AD_UNEXPECTED_MESSAGE:
688 		str = "unexpected_message";
689 		break;
690 	case SSL3_AD_BAD_RECORD_MAC:
691 		str = "bad record mac";
692 		break;
693 	case SSL3_AD_DECOMPRESSION_FAILURE:
694 		str = "decompression failure";
695 		break;
696 	case SSL3_AD_HANDSHAKE_FAILURE:
697 		str = "handshake failure";
698 		break;
699 	case SSL3_AD_NO_CERTIFICATE:
700 		str = "no certificate";
701 		break;
702 	case SSL3_AD_BAD_CERTIFICATE:
703 		str = "bad certificate";
704 		break;
705 	case SSL3_AD_UNSUPPORTED_CERTIFICATE:
706 		str = "unsupported certificate";
707 		break;
708 	case SSL3_AD_CERTIFICATE_REVOKED:
709 		str = "certificate revoked";
710 		break;
711 	case SSL3_AD_CERTIFICATE_EXPIRED:
712 		str = "certificate expired";
713 		break;
714 	case SSL3_AD_CERTIFICATE_UNKNOWN:
715 		str = "certificate unknown";
716 		break;
717 	case SSL3_AD_ILLEGAL_PARAMETER:
718 		str = "illegal parameter";
719 		break;
720 	case TLS1_AD_DECRYPTION_FAILED:
721 		str = "decryption failed";
722 		break;
723 	case TLS1_AD_RECORD_OVERFLOW:
724 		str = "record overflow";
725 		break;
726 	case TLS1_AD_UNKNOWN_CA:
727 		str = "unknown CA";
728 		break;
729 	case TLS1_AD_ACCESS_DENIED:
730 		str = "access denied";
731 		break;
732 	case TLS1_AD_DECODE_ERROR:
733 		str = "decode error";
734 		break;
735 	case TLS1_AD_DECRYPT_ERROR:
736 		str = "decrypt error";
737 		break;
738 	case TLS1_AD_EXPORT_RESTRICTION:
739 		str = "export restriction";
740 		break;
741 	case TLS1_AD_PROTOCOL_VERSION:
742 		str = "protocol version";
743 		break;
744 	case TLS1_AD_INSUFFICIENT_SECURITY:
745 		str = "insufficient security";
746 		break;
747 	case TLS1_AD_INTERNAL_ERROR:
748 		str = "internal error";
749 		break;
750 	case TLS1_AD_USER_CANCELLED:
751 		str = "user canceled";
752 		break;
753 	case TLS1_AD_NO_RENEGOTIATION:
754 		str = "no renegotiation";
755 		break;
756 	case TLS1_AD_UNSUPPORTED_EXTENSION:
757 		str = "unsupported extension";
758 		break;
759 	case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
760 		str = "certificate unobtainable";
761 		break;
762 	case TLS1_AD_UNRECOGNIZED_NAME:
763 		str = "unrecognized name";
764 		break;
765 	case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
766 		str = "bad certificate status response";
767 		break;
768 	case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
769 		str = "bad certificate hash value";
770 		break;
771 	case TLS1_AD_UNKNOWN_PSK_IDENTITY:
772 		str = "unknown PSK identity";
773 		break;
774 	default:
775 		str = "unknown";
776 		break;
777 	}
778 	return (str);
779 }
780 
781 const char *
782 SSL_rstate_string(const SSL *s)
783 {
784 	const char *str;
785 
786 	switch (s->rstate) {
787 	case SSL_ST_READ_HEADER:
788 		str = "RH";
789 		break;
790 	case SSL_ST_READ_BODY:
791 		str = "RB";
792 		break;
793 	case SSL_ST_READ_DONE:
794 		str = "RD";
795 		break;
796 	default:
797 		str = "unknown";
798 		break;
799 	}
800 	return (str);
801 }
802