GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: lib/libssl/ssl_stat.c Lines: 0 223 0.0 %
Date: 2017-11-07 Branches: 0 225 0.0 %

Line Branch Exec Source
1
/* $OpenBSD: ssl_stat.c,v 1.14 2017/05/07 04:22:24 beck 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 (S3I(s)->hs.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->internal->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 (S3I(s)->hs.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->internal->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
}