Coverage Report

Created: 2022-11-30 06:20

/src/openssl/ssl/ssl_stat.c
Line
Count
Source (jump to first uncovered line)
1
/* ssl/ssl_stat.c */
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
#include "ssl_locl.h"
87
88
const char *SSL_state_string_long(const SSL *s)
89
0
{
90
0
    const char *str;
91
92
0
    switch (s->state) {
93
0
    case SSL_ST_BEFORE:
94
0
        str = "before SSL initialization";
95
0
        break;
96
0
    case SSL_ST_ACCEPT:
97
0
        str = "before accept initialization";
98
0
        break;
99
0
    case SSL_ST_CONNECT:
100
0
        str = "before connect initialization";
101
0
        break;
102
0
    case SSL_ST_OK:
103
0
        str = "SSL negotiation finished successfully";
104
0
        break;
105
0
    case SSL_ST_RENEGOTIATE:
106
0
        str = "SSL renegotiate ciphers";
107
0
        break;
108
0
    case SSL_ST_BEFORE | SSL_ST_CONNECT:
109
0
        str = "before/connect initialization";
110
0
        break;
111
0
    case SSL_ST_OK | SSL_ST_CONNECT:
112
0
        str = "ok/connect SSL initialization";
113
0
        break;
114
0
    case SSL_ST_BEFORE | SSL_ST_ACCEPT:
115
0
        str = "before/accept initialization";
116
0
        break;
117
0
    case SSL_ST_OK | SSL_ST_ACCEPT:
118
0
        str = "ok/accept SSL initialization";
119
0
        break;
120
0
    case SSL_ST_ERR:
121
0
        str = "error";
122
0
        break;
123
#ifndef OPENSSL_NO_SSL2
124
    case SSL2_ST_CLIENT_START_ENCRYPTION:
125
        str = "SSLv2 client start encryption";
126
        break;
127
    case SSL2_ST_SERVER_START_ENCRYPTION:
128
        str = "SSLv2 server start encryption";
129
        break;
130
    case SSL2_ST_SEND_CLIENT_HELLO_A:
131
        str = "SSLv2 write client hello A";
132
        break;
133
    case SSL2_ST_SEND_CLIENT_HELLO_B:
134
        str = "SSLv2 write client hello B";
135
        break;
136
    case SSL2_ST_GET_SERVER_HELLO_A:
137
        str = "SSLv2 read server hello A";
138
        break;
139
    case SSL2_ST_GET_SERVER_HELLO_B:
140
        str = "SSLv2 read server hello B";
141
        break;
142
    case SSL2_ST_SEND_CLIENT_MASTER_KEY_A:
143
        str = "SSLv2 write client master key A";
144
        break;
145
    case SSL2_ST_SEND_CLIENT_MASTER_KEY_B:
146
        str = "SSLv2 write client master key B";
147
        break;
148
    case SSL2_ST_SEND_CLIENT_FINISHED_A:
149
        str = "SSLv2 write client finished A";
150
        break;
151
    case SSL2_ST_SEND_CLIENT_FINISHED_B:
152
        str = "SSLv2 write client finished B";
153
        break;
154
    case SSL2_ST_SEND_CLIENT_CERTIFICATE_A:
155
        str = "SSLv2 write client certificate A";
156
        break;
157
    case SSL2_ST_SEND_CLIENT_CERTIFICATE_B:
158
        str = "SSLv2 write client certificate B";
159
        break;
160
    case SSL2_ST_SEND_CLIENT_CERTIFICATE_C:
161
        str = "SSLv2 write client certificate C";
162
        break;
163
    case SSL2_ST_SEND_CLIENT_CERTIFICATE_D:
164
        str = "SSLv2 write client certificate D";
165
        break;
166
    case SSL2_ST_GET_SERVER_VERIFY_A:
167
        str = "SSLv2 read server verify A";
168
        break;
169
    case SSL2_ST_GET_SERVER_VERIFY_B:
170
        str = "SSLv2 read server verify B";
171
        break;
172
    case SSL2_ST_GET_SERVER_FINISHED_A:
173
        str = "SSLv2 read server finished A";
174
        break;
175
    case SSL2_ST_GET_SERVER_FINISHED_B:
176
        str = "SSLv2 read server finished B";
177
        break;
178
    case SSL2_ST_GET_CLIENT_HELLO_A:
179
        str = "SSLv2 read client hello A";
180
        break;
181
    case SSL2_ST_GET_CLIENT_HELLO_B:
182
        str = "SSLv2 read client hello B";
183
        break;
184
    case SSL2_ST_GET_CLIENT_HELLO_C:
185
        str = "SSLv2 read client hello C";
186
        break;
187
    case SSL2_ST_SEND_SERVER_HELLO_A:
188
        str = "SSLv2 write server hello A";
189
        break;
190
    case SSL2_ST_SEND_SERVER_HELLO_B:
191
        str = "SSLv2 write server hello B";
192
        break;
193
    case SSL2_ST_GET_CLIENT_MASTER_KEY_A:
194
        str = "SSLv2 read client master key A";
195
        break;
196
    case SSL2_ST_GET_CLIENT_MASTER_KEY_B:
197
        str = "SSLv2 read client master key B";
198
        break;
199
    case SSL2_ST_SEND_SERVER_VERIFY_A:
200
        str = "SSLv2 write server verify A";
201
        break;
202
    case SSL2_ST_SEND_SERVER_VERIFY_B:
203
        str = "SSLv2 write server verify B";
204
        break;
205
    case SSL2_ST_SEND_SERVER_VERIFY_C:
206
        str = "SSLv2 write server verify C";
207
        break;
208
    case SSL2_ST_GET_CLIENT_FINISHED_A:
209
        str = "SSLv2 read client finished A";
210
        break;
211
    case SSL2_ST_GET_CLIENT_FINISHED_B:
212
        str = "SSLv2 read client finished B";
213
        break;
214
    case SSL2_ST_SEND_SERVER_FINISHED_A:
215
        str = "SSLv2 write server finished A";
216
        break;
217
    case SSL2_ST_SEND_SERVER_FINISHED_B:
218
        str = "SSLv2 write server finished B";
219
        break;
220
    case SSL2_ST_SEND_REQUEST_CERTIFICATE_A:
221
        str = "SSLv2 write request certificate A";
222
        break;
223
    case SSL2_ST_SEND_REQUEST_CERTIFICATE_B:
224
        str = "SSLv2 write request certificate B";
225
        break;
226
    case SSL2_ST_SEND_REQUEST_CERTIFICATE_C:
227
        str = "SSLv2 write request certificate C";
228
        break;
229
    case SSL2_ST_SEND_REQUEST_CERTIFICATE_D:
230
        str = "SSLv2 write request certificate D";
231
        break;
232
    case SSL2_ST_X509_GET_SERVER_CERTIFICATE:
233
        str = "SSLv2 X509 read server certificate";
234
        break;
235
    case SSL2_ST_X509_GET_CLIENT_CERTIFICATE:
236
        str = "SSLv2 X509 read client certificate";
237
        break;
238
#endif
239
240
0
#ifndef OPENSSL_NO_SSL3
241
/* SSLv3 additions */
242
0
    case SSL3_ST_CW_CLNT_HELLO_A:
243
0
        str = "SSLv3 write client hello A";
244
0
        break;
245
0
    case SSL3_ST_CW_CLNT_HELLO_B:
246
0
        str = "SSLv3 write client hello B";
247
0
        break;
248
0
    case SSL3_ST_CR_SRVR_HELLO_A:
249
0
        str = "SSLv3 read server hello A";
250
0
        break;
251
0
    case SSL3_ST_CR_SRVR_HELLO_B:
252
0
        str = "SSLv3 read server hello B";
253
0
        break;
254
0
    case SSL3_ST_CR_CERT_A:
255
0
        str = "SSLv3 read server certificate A";
256
0
        break;
257
0
    case SSL3_ST_CR_CERT_B:
258
0
        str = "SSLv3 read server certificate B";
259
0
        break;
260
0
    case SSL3_ST_CR_KEY_EXCH_A:
261
0
        str = "SSLv3 read server key exchange A";
262
0
        break;
263
0
    case SSL3_ST_CR_KEY_EXCH_B:
264
0
        str = "SSLv3 read server key exchange B";
265
0
        break;
266
0
    case SSL3_ST_CR_CERT_REQ_A:
267
0
        str = "SSLv3 read server certificate request A";
268
0
        break;
269
0
    case SSL3_ST_CR_CERT_REQ_B:
270
0
        str = "SSLv3 read server certificate request B";
271
0
        break;
272
0
    case SSL3_ST_CR_SESSION_TICKET_A:
273
0
        str = "SSLv3 read server session ticket A";
274
0
        break;
275
0
    case SSL3_ST_CR_SESSION_TICKET_B:
276
0
        str = "SSLv3 read server session ticket B";
277
0
        break;
278
0
    case SSL3_ST_CR_SRVR_DONE_A:
279
0
        str = "SSLv3 read server done A";
280
0
        break;
281
0
    case SSL3_ST_CR_SRVR_DONE_B:
282
0
        str = "SSLv3 read server done B";
283
0
        break;
284
0
    case SSL3_ST_CW_CERT_A:
285
0
        str = "SSLv3 write client certificate A";
286
0
        break;
287
0
    case SSL3_ST_CW_CERT_B:
288
0
        str = "SSLv3 write client certificate B";
289
0
        break;
290
0
    case SSL3_ST_CW_CERT_C:
291
0
        str = "SSLv3 write client certificate C";
292
0
        break;
293
0
    case SSL3_ST_CW_CERT_D:
294
0
        str = "SSLv3 write client certificate D";
295
0
        break;
296
0
    case SSL3_ST_CW_KEY_EXCH_A:
297
0
        str = "SSLv3 write client key exchange A";
298
0
        break;
299
0
    case SSL3_ST_CW_KEY_EXCH_B:
300
0
        str = "SSLv3 write client key exchange B";
301
0
        break;
302
0
    case SSL3_ST_CW_CERT_VRFY_A:
303
0
        str = "SSLv3 write certificate verify A";
304
0
        break;
305
0
    case SSL3_ST_CW_CERT_VRFY_B:
306
0
        str = "SSLv3 write certificate verify B";
307
0
        break;
308
309
0
    case SSL3_ST_CW_CHANGE_A:
310
0
    case SSL3_ST_SW_CHANGE_A:
311
0
        str = "SSLv3 write change cipher spec A";
312
0
        break;
313
0
    case SSL3_ST_CW_CHANGE_B:
314
0
    case SSL3_ST_SW_CHANGE_B:
315
0
        str = "SSLv3 write change cipher spec B";
316
0
        break;
317
0
    case SSL3_ST_CW_FINISHED_A:
318
0
    case SSL3_ST_SW_FINISHED_A:
319
0
        str = "SSLv3 write finished A";
320
0
        break;
321
0
    case SSL3_ST_CW_FINISHED_B:
322
0
    case SSL3_ST_SW_FINISHED_B:
323
0
        str = "SSLv3 write finished B";
324
0
        break;
325
0
    case SSL3_ST_CR_CHANGE_A:
326
0
    case SSL3_ST_SR_CHANGE_A:
327
0
        str = "SSLv3 read change cipher spec A";
328
0
        break;
329
0
    case SSL3_ST_CR_CHANGE_B:
330
0
    case SSL3_ST_SR_CHANGE_B:
331
0
        str = "SSLv3 read change cipher spec B";
332
0
        break;
333
0
    case SSL3_ST_CR_FINISHED_A:
334
0
    case SSL3_ST_SR_FINISHED_A:
335
0
        str = "SSLv3 read finished A";
336
0
        break;
337
0
    case SSL3_ST_CR_FINISHED_B:
338
0
    case SSL3_ST_SR_FINISHED_B:
339
0
        str = "SSLv3 read finished B";
340
0
        break;
341
342
0
    case SSL3_ST_CW_FLUSH:
343
0
    case SSL3_ST_SW_FLUSH:
344
0
        str = "SSLv3 flush data";
345
0
        break;
346
347
0
    case SSL3_ST_SR_CLNT_HELLO_A:
348
0
        str = "SSLv3 read client hello A";
349
0
        break;
350
0
    case SSL3_ST_SR_CLNT_HELLO_B:
351
0
        str = "SSLv3 read client hello B";
352
0
        break;
353
0
    case SSL3_ST_SR_CLNT_HELLO_C:
354
0
        str = "SSLv3 read client hello C";
355
0
        break;
356
0
    case SSL3_ST_SW_HELLO_REQ_A:
357
0
        str = "SSLv3 write hello request A";
358
0
        break;
359
0
    case SSL3_ST_SW_HELLO_REQ_B:
360
0
        str = "SSLv3 write hello request B";
361
0
        break;
362
0
    case SSL3_ST_SW_HELLO_REQ_C:
363
0
        str = "SSLv3 write hello request C";
364
0
        break;
365
0
    case SSL3_ST_SW_SRVR_HELLO_A:
366
0
        str = "SSLv3 write server hello A";
367
0
        break;
368
0
    case SSL3_ST_SW_SRVR_HELLO_B:
369
0
        str = "SSLv3 write server hello B";
370
0
        break;
371
0
    case SSL3_ST_SW_CERT_A:
372
0
        str = "SSLv3 write certificate A";
373
0
        break;
374
0
    case SSL3_ST_SW_CERT_B:
375
0
        str = "SSLv3 write certificate B";
376
0
        break;
377
0
    case SSL3_ST_SW_KEY_EXCH_A:
378
0
        str = "SSLv3 write key exchange A";
379
0
        break;
380
0
    case SSL3_ST_SW_KEY_EXCH_B:
381
0
        str = "SSLv3 write key exchange B";
382
0
        break;
383
0
    case SSL3_ST_SW_CERT_REQ_A:
384
0
        str = "SSLv3 write certificate request A";
385
0
        break;
386
0
    case SSL3_ST_SW_CERT_REQ_B:
387
0
        str = "SSLv3 write certificate request B";
388
0
        break;
389
0
    case SSL3_ST_SW_SESSION_TICKET_A:
390
0
        str = "SSLv3 write session ticket A";
391
0
        break;
392
0
    case SSL3_ST_SW_SESSION_TICKET_B:
393
0
        str = "SSLv3 write session ticket B";
394
0
        break;
395
0
    case SSL3_ST_SW_SRVR_DONE_A:
396
0
        str = "SSLv3 write server done A";
397
0
        break;
398
0
    case SSL3_ST_SW_SRVR_DONE_B:
399
0
        str = "SSLv3 write server done B";
400
0
        break;
401
0
    case SSL3_ST_SR_CERT_A:
402
0
        str = "SSLv3 read client certificate A";
403
0
        break;
404
0
    case SSL3_ST_SR_CERT_B:
405
0
        str = "SSLv3 read client certificate B";
406
0
        break;
407
0
    case SSL3_ST_SR_KEY_EXCH_A:
408
0
        str = "SSLv3 read client key exchange A";
409
0
        break;
410
0
    case SSL3_ST_SR_KEY_EXCH_B:
411
0
        str = "SSLv3 read client key exchange B";
412
0
        break;
413
0
    case SSL3_ST_SR_CERT_VRFY_A:
414
0
        str = "SSLv3 read certificate verify A";
415
0
        break;
416
0
    case SSL3_ST_SR_CERT_VRFY_B:
417
0
        str = "SSLv3 read certificate verify B";
418
0
        break;
419
0
#endif
420
421
/* SSLv2/v3 compatibility states */
422
/* client */
423
0
    case SSL23_ST_CW_CLNT_HELLO_A:
424
0
        str = "SSLv2/v3 write client hello A";
425
0
        break;
426
0
    case SSL23_ST_CW_CLNT_HELLO_B:
427
0
        str = "SSLv2/v3 write client hello B";
428
0
        break;
429
0
    case SSL23_ST_CR_SRVR_HELLO_A:
430
0
        str = "SSLv2/v3 read server hello A";
431
0
        break;
432
0
    case SSL23_ST_CR_SRVR_HELLO_B:
433
0
        str = "SSLv2/v3 read server hello B";
434
0
        break;
435
/* server */
436
0
    case SSL23_ST_SR_CLNT_HELLO_A:
437
0
        str = "SSLv2/v3 read client hello A";
438
0
        break;
439
0
    case SSL23_ST_SR_CLNT_HELLO_B:
440
0
        str = "SSLv2/v3 read client hello B";
441
0
        break;
442
443
/* DTLS */
444
0
    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
445
0
        str = "DTLS1 read hello verify request A";
446
0
        break;
447
0
    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
448
0
        str = "DTLS1 read hello verify request B";
449
0
        break;
450
0
    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
451
0
        str = "DTLS1 write hello verify request A";
452
0
        break;
453
0
    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B:
454
0
        str = "DTLS1 write hello verify request B";
455
0
        break;
456
457
0
    default:
458
0
        str = "unknown state";
459
0
        break;
460
0
    }
461
0
    return (str);
462
0
}
463
464
const char *SSL_rstate_string_long(const SSL *s)
465
0
{
466
0
    const char *str;
467
468
0
    switch (s->rstate) {
469
0
    case SSL_ST_READ_HEADER:
470
0
        str = "read header";
471
0
        break;
472
0
    case SSL_ST_READ_BODY:
473
0
        str = "read body";
474
0
        break;
475
0
    case SSL_ST_READ_DONE:
476
0
        str = "read done";
477
0
        break;
478
0
    default:
479
0
        str = "unknown";
480
0
        break;
481
0
    }
482
0
    return (str);
483
0
}
484
485
const char *SSL_state_string(const SSL *s)
486
0
{
487
0
    const char *str;
488
489
0
    switch (s->state) {
490
0
    case SSL_ST_BEFORE:
491
0
        str = "PINIT ";
492
0
        break;
493
0
    case SSL_ST_ACCEPT:
494
0
        str = "AINIT ";
495
0
        break;
496
0
    case SSL_ST_CONNECT:
497
0
        str = "CINIT ";
498
0
        break;
499
0
    case SSL_ST_OK:
500
0
        str = "SSLOK ";
501
0
        break;
502
0
    case SSL_ST_ERR:
503
0
        str = "SSLERR";
504
0
        break;
505
#ifndef OPENSSL_NO_SSL2
506
    case SSL2_ST_CLIENT_START_ENCRYPTION:
507
        str = "2CSENC";
508
        break;
509
    case SSL2_ST_SERVER_START_ENCRYPTION:
510
        str = "2SSENC";
511
        break;
512
    case SSL2_ST_SEND_CLIENT_HELLO_A:
513
        str = "2SCH_A";
514
        break;
515
    case SSL2_ST_SEND_CLIENT_HELLO_B:
516
        str = "2SCH_B";
517
        break;
518
    case SSL2_ST_GET_SERVER_HELLO_A:
519
        str = "2GSH_A";
520
        break;
521
    case SSL2_ST_GET_SERVER_HELLO_B:
522
        str = "2GSH_B";
523
        break;
524
    case SSL2_ST_SEND_CLIENT_MASTER_KEY_A:
525
        str = "2SCMKA";
526
        break;
527
    case SSL2_ST_SEND_CLIENT_MASTER_KEY_B:
528
        str = "2SCMKB";
529
        break;
530
    case SSL2_ST_SEND_CLIENT_FINISHED_A:
531
        str = "2SCF_A";
532
        break;
533
    case SSL2_ST_SEND_CLIENT_FINISHED_B:
534
        str = "2SCF_B";
535
        break;
536
    case SSL2_ST_SEND_CLIENT_CERTIFICATE_A:
537
        str = "2SCC_A";
538
        break;
539
    case SSL2_ST_SEND_CLIENT_CERTIFICATE_B:
540
        str = "2SCC_B";
541
        break;
542
    case SSL2_ST_SEND_CLIENT_CERTIFICATE_C:
543
        str = "2SCC_C";
544
        break;
545
    case SSL2_ST_SEND_CLIENT_CERTIFICATE_D:
546
        str = "2SCC_D";
547
        break;
548
    case SSL2_ST_GET_SERVER_VERIFY_A:
549
        str = "2GSV_A";
550
        break;
551
    case SSL2_ST_GET_SERVER_VERIFY_B:
552
        str = "2GSV_B";
553
        break;
554
    case SSL2_ST_GET_SERVER_FINISHED_A:
555
        str = "2GSF_A";
556
        break;
557
    case SSL2_ST_GET_SERVER_FINISHED_B:
558
        str = "2GSF_B";
559
        break;
560
    case SSL2_ST_GET_CLIENT_HELLO_A:
561
        str = "2GCH_A";
562
        break;
563
    case SSL2_ST_GET_CLIENT_HELLO_B:
564
        str = "2GCH_B";
565
        break;
566
    case SSL2_ST_GET_CLIENT_HELLO_C:
567
        str = "2GCH_C";
568
        break;
569
    case SSL2_ST_SEND_SERVER_HELLO_A:
570
        str = "2SSH_A";
571
        break;
572
    case SSL2_ST_SEND_SERVER_HELLO_B:
573
        str = "2SSH_B";
574
        break;
575
    case SSL2_ST_GET_CLIENT_MASTER_KEY_A:
576
        str = "2GCMKA";
577
        break;
578
    case SSL2_ST_GET_CLIENT_MASTER_KEY_B:
579
        str = "2GCMKA";
580
        break;
581
    case SSL2_ST_SEND_SERVER_VERIFY_A:
582
        str = "2SSV_A";
583
        break;
584
    case SSL2_ST_SEND_SERVER_VERIFY_B:
585
        str = "2SSV_B";
586
        break;
587
    case SSL2_ST_SEND_SERVER_VERIFY_C:
588
        str = "2SSV_C";
589
        break;
590
    case SSL2_ST_GET_CLIENT_FINISHED_A:
591
        str = "2GCF_A";
592
        break;
593
    case SSL2_ST_GET_CLIENT_FINISHED_B:
594
        str = "2GCF_B";
595
        break;
596
    case SSL2_ST_SEND_SERVER_FINISHED_A:
597
        str = "2SSF_A";
598
        break;
599
    case SSL2_ST_SEND_SERVER_FINISHED_B:
600
        str = "2SSF_B";
601
        break;
602
    case SSL2_ST_SEND_REQUEST_CERTIFICATE_A:
603
        str = "2SRC_A";
604
        break;
605
    case SSL2_ST_SEND_REQUEST_CERTIFICATE_B:
606
        str = "2SRC_B";
607
        break;
608
    case SSL2_ST_SEND_REQUEST_CERTIFICATE_C:
609
        str = "2SRC_C";
610
        break;
611
    case SSL2_ST_SEND_REQUEST_CERTIFICATE_D:
612
        str = "2SRC_D";
613
        break;
614
    case SSL2_ST_X509_GET_SERVER_CERTIFICATE:
615
        str = "2X9GSC";
616
        break;
617
    case SSL2_ST_X509_GET_CLIENT_CERTIFICATE:
618
        str = "2X9GCC";
619
        break;
620
#endif
621
622
0
#ifndef OPENSSL_NO_SSL3
623
/* SSLv3 additions */
624
0
    case SSL3_ST_SW_FLUSH:
625
0
    case SSL3_ST_CW_FLUSH:
626
0
        str = "3FLUSH";
627
0
        break;
628
0
    case SSL3_ST_CW_CLNT_HELLO_A:
629
0
        str = "3WCH_A";
630
0
        break;
631
0
    case SSL3_ST_CW_CLNT_HELLO_B:
632
0
        str = "3WCH_B";
633
0
        break;
634
0
    case SSL3_ST_CR_SRVR_HELLO_A:
635
0
        str = "3RSH_A";
636
0
        break;
637
0
    case SSL3_ST_CR_SRVR_HELLO_B:
638
0
        str = "3RSH_B";
639
0
        break;
640
0
    case SSL3_ST_CR_CERT_A:
641
0
        str = "3RSC_A";
642
0
        break;
643
0
    case SSL3_ST_CR_CERT_B:
644
0
        str = "3RSC_B";
645
0
        break;
646
0
    case SSL3_ST_CR_KEY_EXCH_A:
647
0
        str = "3RSKEA";
648
0
        break;
649
0
    case SSL3_ST_CR_KEY_EXCH_B:
650
0
        str = "3RSKEB";
651
0
        break;
652
0
    case SSL3_ST_CR_CERT_REQ_A:
653
0
        str = "3RCR_A";
654
0
        break;
655
0
    case SSL3_ST_CR_CERT_REQ_B:
656
0
        str = "3RCR_B";
657
0
        break;
658
0
    case SSL3_ST_CR_SRVR_DONE_A:
659
0
        str = "3RSD_A";
660
0
        break;
661
0
    case SSL3_ST_CR_SRVR_DONE_B:
662
0
        str = "3RSD_B";
663
0
        break;
664
0
    case SSL3_ST_CW_CERT_A:
665
0
        str = "3WCC_A";
666
0
        break;
667
0
    case SSL3_ST_CW_CERT_B:
668
0
        str = "3WCC_B";
669
0
        break;
670
0
    case SSL3_ST_CW_CERT_C:
671
0
        str = "3WCC_C";
672
0
        break;
673
0
    case SSL3_ST_CW_CERT_D:
674
0
        str = "3WCC_D";
675
0
        break;
676
0
    case SSL3_ST_CW_KEY_EXCH_A:
677
0
        str = "3WCKEA";
678
0
        break;
679
0
    case SSL3_ST_CW_KEY_EXCH_B:
680
0
        str = "3WCKEB";
681
0
        break;
682
0
    case SSL3_ST_CW_CERT_VRFY_A:
683
0
        str = "3WCV_A";
684
0
        break;
685
0
    case SSL3_ST_CW_CERT_VRFY_B:
686
0
        str = "3WCV_B";
687
0
        break;
688
689
0
    case SSL3_ST_SW_CHANGE_A:
690
0
    case SSL3_ST_CW_CHANGE_A:
691
0
        str = "3WCCSA";
692
0
        break;
693
0
    case SSL3_ST_SW_CHANGE_B:
694
0
    case SSL3_ST_CW_CHANGE_B:
695
0
        str = "3WCCSB";
696
0
        break;
697
0
    case SSL3_ST_SW_FINISHED_A:
698
0
    case SSL3_ST_CW_FINISHED_A:
699
0
        str = "3WFINA";
700
0
        break;
701
0
    case SSL3_ST_SW_FINISHED_B:
702
0
    case SSL3_ST_CW_FINISHED_B:
703
0
        str = "3WFINB";
704
0
        break;
705
0
    case SSL3_ST_SR_CHANGE_A:
706
0
    case SSL3_ST_CR_CHANGE_A:
707
0
        str = "3RCCSA";
708
0
        break;
709
0
    case SSL3_ST_SR_CHANGE_B:
710
0
    case SSL3_ST_CR_CHANGE_B:
711
0
        str = "3RCCSB";
712
0
        break;
713
0
    case SSL3_ST_SR_FINISHED_A:
714
0
    case SSL3_ST_CR_FINISHED_A:
715
0
        str = "3RFINA";
716
0
        break;
717
0
    case SSL3_ST_SR_FINISHED_B:
718
0
    case SSL3_ST_CR_FINISHED_B:
719
0
        str = "3RFINB";
720
0
        break;
721
722
0
    case SSL3_ST_SW_HELLO_REQ_A:
723
0
        str = "3WHR_A";
724
0
        break;
725
0
    case SSL3_ST_SW_HELLO_REQ_B:
726
0
        str = "3WHR_B";
727
0
        break;
728
0
    case SSL3_ST_SW_HELLO_REQ_C:
729
0
        str = "3WHR_C";
730
0
        break;
731
0
    case SSL3_ST_SR_CLNT_HELLO_A:
732
0
        str = "3RCH_A";
733
0
        break;
734
0
    case SSL3_ST_SR_CLNT_HELLO_B:
735
0
        str = "3RCH_B";
736
0
        break;
737
0
    case SSL3_ST_SR_CLNT_HELLO_C:
738
0
        str = "3RCH_C";
739
0
        break;
740
0
    case SSL3_ST_SW_SRVR_HELLO_A:
741
0
        str = "3WSH_A";
742
0
        break;
743
0
    case SSL3_ST_SW_SRVR_HELLO_B:
744
0
        str = "3WSH_B";
745
0
        break;
746
0
    case SSL3_ST_SW_CERT_A:
747
0
        str = "3WSC_A";
748
0
        break;
749
0
    case SSL3_ST_SW_CERT_B:
750
0
        str = "3WSC_B";
751
0
        break;
752
0
    case SSL3_ST_SW_KEY_EXCH_A:
753
0
        str = "3WSKEA";
754
0
        break;
755
0
    case SSL3_ST_SW_KEY_EXCH_B:
756
0
        str = "3WSKEB";
757
0
        break;
758
0
    case SSL3_ST_SW_CERT_REQ_A:
759
0
        str = "3WCR_A";
760
0
        break;
761
0
    case SSL3_ST_SW_CERT_REQ_B:
762
0
        str = "3WCR_B";
763
0
        break;
764
0
    case SSL3_ST_SW_SRVR_DONE_A:
765
0
        str = "3WSD_A";
766
0
        break;
767
0
    case SSL3_ST_SW_SRVR_DONE_B:
768
0
        str = "3WSD_B";
769
0
        break;
770
0
    case SSL3_ST_SR_CERT_A:
771
0
        str = "3RCC_A";
772
0
        break;
773
0
    case SSL3_ST_SR_CERT_B:
774
0
        str = "3RCC_B";
775
0
        break;
776
0
    case SSL3_ST_SR_KEY_EXCH_A:
777
0
        str = "3RCKEA";
778
0
        break;
779
0
    case SSL3_ST_SR_KEY_EXCH_B:
780
0
        str = "3RCKEB";
781
0
        break;
782
0
    case SSL3_ST_SR_CERT_VRFY_A:
783
0
        str = "3RCV_A";
784
0
        break;
785
0
    case SSL3_ST_SR_CERT_VRFY_B:
786
0
        str = "3RCV_B";
787
0
        break;
788
0
#endif
789
790
/* SSLv2/v3 compatibility states */
791
/* client */
792
0
    case SSL23_ST_CW_CLNT_HELLO_A:
793
0
        str = "23WCHA";
794
0
        break;
795
0
    case SSL23_ST_CW_CLNT_HELLO_B:
796
0
        str = "23WCHB";
797
0
        break;
798
0
    case SSL23_ST_CR_SRVR_HELLO_A:
799
0
        str = "23RSHA";
800
0
        break;
801
0
    case SSL23_ST_CR_SRVR_HELLO_B:
802
0
        str = "23RSHA";
803
0
        break;
804
/* server */
805
0
    case SSL23_ST_SR_CLNT_HELLO_A:
806
0
        str = "23RCHA";
807
0
        break;
808
0
    case SSL23_ST_SR_CLNT_HELLO_B:
809
0
        str = "23RCHB";
810
0
        break;
811
812
/* DTLS */
813
0
    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
814
0
        str = "DRCHVA";
815
0
        break;
816
0
    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
817
0
        str = "DRCHVB";
818
0
        break;
819
0
    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
820
0
        str = "DWCHVA";
821
0
        break;
822
0
    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B:
823
0
        str = "DWCHVB";
824
0
        break;
825
826
0
    default:
827
0
        str = "UNKWN ";
828
0
        break;
829
0
    }
830
0
    return (str);
831
0
}
832
833
const char *SSL_alert_type_string_long(int value)
834
0
{
835
0
    value >>= 8;
836
0
    if (value == SSL3_AL_WARNING)
837
0
        return ("warning");
838
0
    else if (value == SSL3_AL_FATAL)
839
0
        return ("fatal");
840
0
    else
841
0
        return ("unknown");
842
0
}
843
844
const char *SSL_alert_type_string(int value)
845
0
{
846
0
    value >>= 8;
847
0
    if (value == SSL3_AL_WARNING)
848
0
        return ("W");
849
0
    else if (value == SSL3_AL_FATAL)
850
0
        return ("F");
851
0
    else
852
0
        return ("U");
853
0
}
854
855
const char *SSL_alert_desc_string(int value)
856
0
{
857
0
    const char *str;
858
859
0
    switch (value & 0xff) {
860
0
    case SSL3_AD_CLOSE_NOTIFY:
861
0
        str = "CN";
862
0
        break;
863
0
    case SSL3_AD_UNEXPECTED_MESSAGE:
864
0
        str = "UM";
865
0
        break;
866
0
    case SSL3_AD_BAD_RECORD_MAC:
867
0
        str = "BM";
868
0
        break;
869
0
    case SSL3_AD_DECOMPRESSION_FAILURE:
870
0
        str = "DF";
871
0
        break;
872
0
    case SSL3_AD_HANDSHAKE_FAILURE:
873
0
        str = "HF";
874
0
        break;
875
0
    case SSL3_AD_NO_CERTIFICATE:
876
0
        str = "NC";
877
0
        break;
878
0
    case SSL3_AD_BAD_CERTIFICATE:
879
0
        str = "BC";
880
0
        break;
881
0
    case SSL3_AD_UNSUPPORTED_CERTIFICATE:
882
0
        str = "UC";
883
0
        break;
884
0
    case SSL3_AD_CERTIFICATE_REVOKED:
885
0
        str = "CR";
886
0
        break;
887
0
    case SSL3_AD_CERTIFICATE_EXPIRED:
888
0
        str = "CE";
889
0
        break;
890
0
    case SSL3_AD_CERTIFICATE_UNKNOWN:
891
0
        str = "CU";
892
0
        break;
893
0
    case SSL3_AD_ILLEGAL_PARAMETER:
894
0
        str = "IP";
895
0
        break;
896
0
    case TLS1_AD_DECRYPTION_FAILED:
897
0
        str = "DC";
898
0
        break;
899
0
    case TLS1_AD_RECORD_OVERFLOW:
900
0
        str = "RO";
901
0
        break;
902
0
    case TLS1_AD_UNKNOWN_CA:
903
0
        str = "CA";
904
0
        break;
905
0
    case TLS1_AD_ACCESS_DENIED:
906
0
        str = "AD";
907
0
        break;
908
0
    case TLS1_AD_DECODE_ERROR:
909
0
        str = "DE";
910
0
        break;
911
0
    case TLS1_AD_DECRYPT_ERROR:
912
0
        str = "CY";
913
0
        break;
914
0
    case TLS1_AD_EXPORT_RESTRICTION:
915
0
        str = "ER";
916
0
        break;
917
0
    case TLS1_AD_PROTOCOL_VERSION:
918
0
        str = "PV";
919
0
        break;
920
0
    case TLS1_AD_INSUFFICIENT_SECURITY:
921
0
        str = "IS";
922
0
        break;
923
0
    case TLS1_AD_INTERNAL_ERROR:
924
0
        str = "IE";
925
0
        break;
926
0
    case TLS1_AD_USER_CANCELLED:
927
0
        str = "US";
928
0
        break;
929
0
    case TLS1_AD_NO_RENEGOTIATION:
930
0
        str = "NR";
931
0
        break;
932
0
    case TLS1_AD_UNSUPPORTED_EXTENSION:
933
0
        str = "UE";
934
0
        break;
935
0
    case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
936
0
        str = "CO";
937
0
        break;
938
0
    case TLS1_AD_UNRECOGNIZED_NAME:
939
0
        str = "UN";
940
0
        break;
941
0
    case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
942
0
        str = "BR";
943
0
        break;
944
0
    case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
945
0
        str = "BH";
946
0
        break;
947
0
    case TLS1_AD_UNKNOWN_PSK_IDENTITY:
948
0
        str = "UP";
949
0
        break;
950
0
    default:
951
0
        str = "UK";
952
0
        break;
953
0
    }
954
0
    return (str);
955
0
}
956
957
const char *SSL_alert_desc_string_long(int value)
958
0
{
959
0
    const char *str;
960
961
0
    switch (value & 0xff) {
962
0
    case SSL3_AD_CLOSE_NOTIFY:
963
0
        str = "close notify";
964
0
        break;
965
0
    case SSL3_AD_UNEXPECTED_MESSAGE:
966
0
        str = "unexpected_message";
967
0
        break;
968
0
    case SSL3_AD_BAD_RECORD_MAC:
969
0
        str = "bad record mac";
970
0
        break;
971
0
    case SSL3_AD_DECOMPRESSION_FAILURE:
972
0
        str = "decompression failure";
973
0
        break;
974
0
    case SSL3_AD_HANDSHAKE_FAILURE:
975
0
        str = "handshake failure";
976
0
        break;
977
0
    case SSL3_AD_NO_CERTIFICATE:
978
0
        str = "no certificate";
979
0
        break;
980
0
    case SSL3_AD_BAD_CERTIFICATE:
981
0
        str = "bad certificate";
982
0
        break;
983
0
    case SSL3_AD_UNSUPPORTED_CERTIFICATE:
984
0
        str = "unsupported certificate";
985
0
        break;
986
0
    case SSL3_AD_CERTIFICATE_REVOKED:
987
0
        str = "certificate revoked";
988
0
        break;
989
0
    case SSL3_AD_CERTIFICATE_EXPIRED:
990
0
        str = "certificate expired";
991
0
        break;
992
0
    case SSL3_AD_CERTIFICATE_UNKNOWN:
993
0
        str = "certificate unknown";
994
0
        break;
995
0
    case SSL3_AD_ILLEGAL_PARAMETER:
996
0
        str = "illegal parameter";
997
0
        break;
998
0
    case TLS1_AD_DECRYPTION_FAILED:
999
0
        str = "decryption failed";
1000
0
        break;
1001
0
    case TLS1_AD_RECORD_OVERFLOW:
1002
0
        str = "record overflow";
1003
0
        break;
1004
0
    case TLS1_AD_UNKNOWN_CA:
1005
0
        str = "unknown CA";
1006
0
        break;
1007
0
    case TLS1_AD_ACCESS_DENIED:
1008
0
        str = "access denied";
1009
0
        break;
1010
0
    case TLS1_AD_DECODE_ERROR:
1011
0
        str = "decode error";
1012
0
        break;
1013
0
    case TLS1_AD_DECRYPT_ERROR:
1014
0
        str = "decrypt error";
1015
0
        break;
1016
0
    case TLS1_AD_EXPORT_RESTRICTION:
1017
0
        str = "export restriction";
1018
0
        break;
1019
0
    case TLS1_AD_PROTOCOL_VERSION:
1020
0
        str = "protocol version";
1021
0
        break;
1022
0
    case TLS1_AD_INSUFFICIENT_SECURITY:
1023
0
        str = "insufficient security";
1024
0
        break;
1025
0
    case TLS1_AD_INTERNAL_ERROR:
1026
0
        str = "internal error";
1027
0
        break;
1028
0
    case TLS1_AD_USER_CANCELLED:
1029
0
        str = "user canceled";
1030
0
        break;
1031
0
    case TLS1_AD_NO_RENEGOTIATION:
1032
0
        str = "no renegotiation";
1033
0
        break;
1034
0
    case TLS1_AD_UNSUPPORTED_EXTENSION:
1035
0
        str = "unsupported extension";
1036
0
        break;
1037
0
    case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
1038
0
        str = "certificate unobtainable";
1039
0
        break;
1040
0
    case TLS1_AD_UNRECOGNIZED_NAME:
1041
0
        str = "unrecognized name";
1042
0
        break;
1043
0
    case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
1044
0
        str = "bad certificate status response";
1045
0
        break;
1046
0
    case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
1047
0
        str = "bad certificate hash value";
1048
0
        break;
1049
0
    case TLS1_AD_UNKNOWN_PSK_IDENTITY:
1050
0
        str = "unknown PSK identity";
1051
0
        break;
1052
0
    default:
1053
0
        str = "unknown";
1054
0
        break;
1055
0
    }
1056
0
    return (str);
1057
0
}
1058
1059
const char *SSL_rstate_string(const SSL *s)
1060
0
{
1061
0
    const char *str;
1062
1063
0
    switch (s->rstate) {
1064
0
    case SSL_ST_READ_HEADER:
1065
0
        str = "RH";
1066
0
        break;
1067
0
    case SSL_ST_READ_BODY:
1068
0
        str = "RB";
1069
0
        break;
1070
0
    case SSL_ST_READ_DONE:
1071
0
        str = "RD";
1072
0
        break;
1073
0
    default:
1074
0
        str = "unknown";
1075
0
        break;
1076
0
    }
1077
0
    return (str);
1078
0
}