155714Skris/* ssl/ssl_stat.c */
255714Skris/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
355714Skris * All rights reserved.
455714Skris *
555714Skris * This package is an SSL implementation written
655714Skris * by Eric Young (eay@cryptsoft.com).
755714Skris * The implementation was written so as to conform with Netscapes SSL.
8296465Sdelphij *
955714Skris * This library is free for commercial and non-commercial use as long as
1055714Skris * the following conditions are aheared to.  The following conditions
1155714Skris * apply to all code found in this distribution, be it the RC4, RSA,
1255714Skris * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
1355714Skris * included with this distribution is covered by the same copyright terms
1455714Skris * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15296465Sdelphij *
1655714Skris * Copyright remains Eric Young's, and as such any Copyright notices in
1755714Skris * the code are not to be removed.
1855714Skris * If this package is used in a product, Eric Young should be given attribution
1955714Skris * as the author of the parts of the library used.
2055714Skris * This can be in the form of a textual message at program startup or
2155714Skris * in documentation (online or textual) provided with the package.
22296465Sdelphij *
2355714Skris * Redistribution and use in source and binary forms, with or without
2455714Skris * modification, are permitted provided that the following conditions
2555714Skris * are met:
2655714Skris * 1. Redistributions of source code must retain the copyright
2755714Skris *    notice, this list of conditions and the following disclaimer.
2855714Skris * 2. Redistributions in binary form must reproduce the above copyright
2955714Skris *    notice, this list of conditions and the following disclaimer in the
3055714Skris *    documentation and/or other materials provided with the distribution.
3155714Skris * 3. All advertising materials mentioning features or use of this software
3255714Skris *    must display the following acknowledgement:
3355714Skris *    "This product includes cryptographic software written by
3455714Skris *     Eric Young (eay@cryptsoft.com)"
3555714Skris *    The word 'cryptographic' can be left out if the rouines from the library
3655714Skris *    being used are not cryptographic related :-).
37296465Sdelphij * 4. If you include any Windows specific code (or a derivative thereof) from
3855714Skris *    the apps directory (application code) you must include an acknowledgement:
3955714Skris *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40296465Sdelphij *
4155714Skris * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
4255714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4355714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4455714Skris * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
4555714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
4655714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
4755714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4855714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
4955714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5055714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
5155714Skris * SUCH DAMAGE.
52296465Sdelphij *
5355714Skris * The licence and distribution terms for any publically available version or
5455714Skris * derivative of this code cannot be changed.  i.e. this code cannot simply be
5555714Skris * copied and put under another distribution licence
5655714Skris * [including the GNU Public Licence.]
5755714Skris */
5855714Skris
5955714Skris#include <stdio.h>
6055714Skris#include "ssl_locl.h"
6155714Skris
62109998Smarkmconst char *SSL_state_string_long(const SSL *s)
63296465Sdelphij{
64296465Sdelphij    const char *str;
6555714Skris
66296465Sdelphij    switch (s->state) {
67296465Sdelphij    case SSL_ST_BEFORE:
68296465Sdelphij        str = "before SSL initialization";
69296465Sdelphij        break;
70296465Sdelphij    case SSL_ST_ACCEPT:
71296465Sdelphij        str = "before accept initialization";
72296465Sdelphij        break;
73296465Sdelphij    case SSL_ST_CONNECT:
74296465Sdelphij        str = "before connect initialization";
75296465Sdelphij        break;
76296465Sdelphij    case SSL_ST_OK:
77296465Sdelphij        str = "SSL negotiation finished successfully";
78296465Sdelphij        break;
79296465Sdelphij    case SSL_ST_RENEGOTIATE:
80296465Sdelphij        str = "SSL renegotiate ciphers";
81296465Sdelphij        break;
82296465Sdelphij    case SSL_ST_BEFORE | SSL_ST_CONNECT:
83296465Sdelphij        str = "before/connect initialization";
84296465Sdelphij        break;
85296465Sdelphij    case SSL_ST_OK | SSL_ST_CONNECT:
86296465Sdelphij        str = "ok/connect SSL initialization";
87296465Sdelphij        break;
88296465Sdelphij    case SSL_ST_BEFORE | SSL_ST_ACCEPT:
89296465Sdelphij        str = "before/accept initialization";
90296465Sdelphij        break;
91296465Sdelphij    case SSL_ST_OK | SSL_ST_ACCEPT:
92296465Sdelphij        str = "ok/accept SSL initialization";
93296465Sdelphij        break;
94109998Smarkm#ifndef OPENSSL_NO_SSL2
95296465Sdelphij    case SSL2_ST_CLIENT_START_ENCRYPTION:
96296465Sdelphij        str = "SSLv2 client start encryption";
97296465Sdelphij        break;
98296465Sdelphij    case SSL2_ST_SERVER_START_ENCRYPTION:
99296465Sdelphij        str = "SSLv2 server start encryption";
100296465Sdelphij        break;
101296465Sdelphij    case SSL2_ST_SEND_CLIENT_HELLO_A:
102296465Sdelphij        str = "SSLv2 write client hello A";
103296465Sdelphij        break;
104296465Sdelphij    case SSL2_ST_SEND_CLIENT_HELLO_B:
105296465Sdelphij        str = "SSLv2 write client hello B";
106296465Sdelphij        break;
107296465Sdelphij    case SSL2_ST_GET_SERVER_HELLO_A:
108296465Sdelphij        str = "SSLv2 read server hello A";
109296465Sdelphij        break;
110296465Sdelphij    case SSL2_ST_GET_SERVER_HELLO_B:
111296465Sdelphij        str = "SSLv2 read server hello B";
112296465Sdelphij        break;
113296465Sdelphij    case SSL2_ST_SEND_CLIENT_MASTER_KEY_A:
114296465Sdelphij        str = "SSLv2 write client master key A";
115296465Sdelphij        break;
116296465Sdelphij    case SSL2_ST_SEND_CLIENT_MASTER_KEY_B:
117296465Sdelphij        str = "SSLv2 write client master key B";
118296465Sdelphij        break;
119296465Sdelphij    case SSL2_ST_SEND_CLIENT_FINISHED_A:
120296465Sdelphij        str = "SSLv2 write client finished A";
121296465Sdelphij        break;
122296465Sdelphij    case SSL2_ST_SEND_CLIENT_FINISHED_B:
123296465Sdelphij        str = "SSLv2 write client finished B";
124296465Sdelphij        break;
125296465Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_A:
126296465Sdelphij        str = "SSLv2 write client certificate A";
127296465Sdelphij        break;
128296465Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_B:
129296465Sdelphij        str = "SSLv2 write client certificate B";
130296465Sdelphij        break;
131296465Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_C:
132296465Sdelphij        str = "SSLv2 write client certificate C";
133296465Sdelphij        break;
134296465Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_D:
135296465Sdelphij        str = "SSLv2 write client certificate D";
136296465Sdelphij        break;
137296465Sdelphij    case SSL2_ST_GET_SERVER_VERIFY_A:
138296465Sdelphij        str = "SSLv2 read server verify A";
139296465Sdelphij        break;
140296465Sdelphij    case SSL2_ST_GET_SERVER_VERIFY_B:
141296465Sdelphij        str = "SSLv2 read server verify B";
142296465Sdelphij        break;
143296465Sdelphij    case SSL2_ST_GET_SERVER_FINISHED_A:
144296465Sdelphij        str = "SSLv2 read server finished A";
145296465Sdelphij        break;
146296465Sdelphij    case SSL2_ST_GET_SERVER_FINISHED_B:
147296465Sdelphij        str = "SSLv2 read server finished B";
148296465Sdelphij        break;
149296465Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_A:
150296465Sdelphij        str = "SSLv2 read client hello A";
151296465Sdelphij        break;
152296465Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_B:
153296465Sdelphij        str = "SSLv2 read client hello B";
154296465Sdelphij        break;
155296465Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_C:
156296465Sdelphij        str = "SSLv2 read client hello C";
157296465Sdelphij        break;
158296465Sdelphij    case SSL2_ST_SEND_SERVER_HELLO_A:
159296465Sdelphij        str = "SSLv2 write server hello A";
160296465Sdelphij        break;
161296465Sdelphij    case SSL2_ST_SEND_SERVER_HELLO_B:
162296465Sdelphij        str = "SSLv2 write server hello B";
163296465Sdelphij        break;
164296465Sdelphij    case SSL2_ST_GET_CLIENT_MASTER_KEY_A:
165296465Sdelphij        str = "SSLv2 read client master key A";
166296465Sdelphij        break;
167296465Sdelphij    case SSL2_ST_GET_CLIENT_MASTER_KEY_B:
168296465Sdelphij        str = "SSLv2 read client master key B";
169296465Sdelphij        break;
170296465Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_A:
171296465Sdelphij        str = "SSLv2 write server verify A";
172296465Sdelphij        break;
173296465Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_B:
174296465Sdelphij        str = "SSLv2 write server verify B";
175296465Sdelphij        break;
176296465Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_C:
177296465Sdelphij        str = "SSLv2 write server verify C";
178296465Sdelphij        break;
179296465Sdelphij    case SSL2_ST_GET_CLIENT_FINISHED_A:
180296465Sdelphij        str = "SSLv2 read client finished A";
181296465Sdelphij        break;
182296465Sdelphij    case SSL2_ST_GET_CLIENT_FINISHED_B:
183296465Sdelphij        str = "SSLv2 read client finished B";
184296465Sdelphij        break;
185296465Sdelphij    case SSL2_ST_SEND_SERVER_FINISHED_A:
186296465Sdelphij        str = "SSLv2 write server finished A";
187296465Sdelphij        break;
188296465Sdelphij    case SSL2_ST_SEND_SERVER_FINISHED_B:
189296465Sdelphij        str = "SSLv2 write server finished B";
190296465Sdelphij        break;
191296465Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_A:
192296465Sdelphij        str = "SSLv2 write request certificate A";
193296465Sdelphij        break;
194296465Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_B:
195296465Sdelphij        str = "SSLv2 write request certificate B";
196296465Sdelphij        break;
197296465Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_C:
198296465Sdelphij        str = "SSLv2 write request certificate C";
199296465Sdelphij        break;
200296465Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_D:
201296465Sdelphij        str = "SSLv2 write request certificate D";
202296465Sdelphij        break;
203296465Sdelphij    case SSL2_ST_X509_GET_SERVER_CERTIFICATE:
204296465Sdelphij        str = "SSLv2 X509 read server certificate";
205296465Sdelphij        break;
206296465Sdelphij    case SSL2_ST_X509_GET_CLIENT_CERTIFICATE:
207296465Sdelphij        str = "SSLv2 X509 read client certificate";
208296465Sdelphij        break;
20955714Skris#endif
21055714Skris
211109998Smarkm#ifndef OPENSSL_NO_SSL3
21255714Skris/* SSLv3 additions */
213296465Sdelphij    case SSL3_ST_CW_CLNT_HELLO_A:
214296465Sdelphij        str = "SSLv3 write client hello A";
215296465Sdelphij        break;
216296465Sdelphij    case SSL3_ST_CW_CLNT_HELLO_B:
217296465Sdelphij        str = "SSLv3 write client hello B";
218296465Sdelphij        break;
219296465Sdelphij    case SSL3_ST_CR_SRVR_HELLO_A:
220296465Sdelphij        str = "SSLv3 read server hello A";
221296465Sdelphij        break;
222296465Sdelphij    case SSL3_ST_CR_SRVR_HELLO_B:
223296465Sdelphij        str = "SSLv3 read server hello B";
224296465Sdelphij        break;
225296465Sdelphij    case SSL3_ST_CR_CERT_A:
226296465Sdelphij        str = "SSLv3 read server certificate A";
227296465Sdelphij        break;
228296465Sdelphij    case SSL3_ST_CR_CERT_B:
229296465Sdelphij        str = "SSLv3 read server certificate B";
230296465Sdelphij        break;
231296465Sdelphij    case SSL3_ST_CR_KEY_EXCH_A:
232296465Sdelphij        str = "SSLv3 read server key exchange A";
233296465Sdelphij        break;
234296465Sdelphij    case SSL3_ST_CR_KEY_EXCH_B:
235296465Sdelphij        str = "SSLv3 read server key exchange B";
236296465Sdelphij        break;
237296465Sdelphij    case SSL3_ST_CR_CERT_REQ_A:
238296465Sdelphij        str = "SSLv3 read server certificate request A";
239296465Sdelphij        break;
240296465Sdelphij    case SSL3_ST_CR_CERT_REQ_B:
241296465Sdelphij        str = "SSLv3 read server certificate request B";
242296465Sdelphij        break;
243296465Sdelphij    case SSL3_ST_CR_SESSION_TICKET_A:
244296465Sdelphij        str = "SSLv3 read server session ticket A";
245296465Sdelphij        break;
246296465Sdelphij    case SSL3_ST_CR_SESSION_TICKET_B:
247296465Sdelphij        str = "SSLv3 read server session ticket B";
248296465Sdelphij        break;
249296465Sdelphij    case SSL3_ST_CR_SRVR_DONE_A:
250296465Sdelphij        str = "SSLv3 read server done A";
251296465Sdelphij        break;
252296465Sdelphij    case SSL3_ST_CR_SRVR_DONE_B:
253296465Sdelphij        str = "SSLv3 read server done B";
254296465Sdelphij        break;
255296465Sdelphij    case SSL3_ST_CW_CERT_A:
256296465Sdelphij        str = "SSLv3 write client certificate A";
257296465Sdelphij        break;
258296465Sdelphij    case SSL3_ST_CW_CERT_B:
259296465Sdelphij        str = "SSLv3 write client certificate B";
260296465Sdelphij        break;
261296465Sdelphij    case SSL3_ST_CW_CERT_C:
262296465Sdelphij        str = "SSLv3 write client certificate C";
263296465Sdelphij        break;
264296465Sdelphij    case SSL3_ST_CW_CERT_D:
265296465Sdelphij        str = "SSLv3 write client certificate D";
266296465Sdelphij        break;
267296465Sdelphij    case SSL3_ST_CW_KEY_EXCH_A:
268296465Sdelphij        str = "SSLv3 write client key exchange A";
269296465Sdelphij        break;
270296465Sdelphij    case SSL3_ST_CW_KEY_EXCH_B:
271296465Sdelphij        str = "SSLv3 write client key exchange B";
272296465Sdelphij        break;
273296465Sdelphij    case SSL3_ST_CW_CERT_VRFY_A:
274296465Sdelphij        str = "SSLv3 write certificate verify A";
275296465Sdelphij        break;
276296465Sdelphij    case SSL3_ST_CW_CERT_VRFY_B:
277296465Sdelphij        str = "SSLv3 write certificate verify B";
278296465Sdelphij        break;
27955714Skris
280296465Sdelphij    case SSL3_ST_CW_CHANGE_A:
281296465Sdelphij    case SSL3_ST_SW_CHANGE_A:
282296465Sdelphij        str = "SSLv3 write change cipher spec A";
283296465Sdelphij        break;
284296465Sdelphij    case SSL3_ST_CW_CHANGE_B:
285296465Sdelphij    case SSL3_ST_SW_CHANGE_B:
286296465Sdelphij        str = "SSLv3 write change cipher spec B";
287296465Sdelphij        break;
288296465Sdelphij    case SSL3_ST_CW_FINISHED_A:
289296465Sdelphij    case SSL3_ST_SW_FINISHED_A:
290296465Sdelphij        str = "SSLv3 write finished A";
291296465Sdelphij        break;
292296465Sdelphij    case SSL3_ST_CW_FINISHED_B:
293296465Sdelphij    case SSL3_ST_SW_FINISHED_B:
294296465Sdelphij        str = "SSLv3 write finished B";
295296465Sdelphij        break;
296296465Sdelphij    case SSL3_ST_CR_CHANGE_A:
297296465Sdelphij    case SSL3_ST_SR_CHANGE_A:
298296465Sdelphij        str = "SSLv3 read change cipher spec A";
299296465Sdelphij        break;
300296465Sdelphij    case SSL3_ST_CR_CHANGE_B:
301296465Sdelphij    case SSL3_ST_SR_CHANGE_B:
302296465Sdelphij        str = "SSLv3 read change cipher spec B";
303296465Sdelphij        break;
304296465Sdelphij    case SSL3_ST_CR_FINISHED_A:
305296465Sdelphij    case SSL3_ST_SR_FINISHED_A:
306296465Sdelphij        str = "SSLv3 read finished A";
307296465Sdelphij        break;
308296465Sdelphij    case SSL3_ST_CR_FINISHED_B:
309296465Sdelphij    case SSL3_ST_SR_FINISHED_B:
310296465Sdelphij        str = "SSLv3 read finished B";
311296465Sdelphij        break;
31255714Skris
313296465Sdelphij    case SSL3_ST_CW_FLUSH:
314296465Sdelphij    case SSL3_ST_SW_FLUSH:
315296465Sdelphij        str = "SSLv3 flush data";
316296465Sdelphij        break;
31755714Skris
318296465Sdelphij    case SSL3_ST_SR_CLNT_HELLO_A:
319296465Sdelphij        str = "SSLv3 read client hello A";
320296465Sdelphij        break;
321296465Sdelphij    case SSL3_ST_SR_CLNT_HELLO_B:
322296465Sdelphij        str = "SSLv3 read client hello B";
323296465Sdelphij        break;
324296465Sdelphij    case SSL3_ST_SR_CLNT_HELLO_C:
325296465Sdelphij        str = "SSLv3 read client hello C";
326296465Sdelphij        break;
327296465Sdelphij    case SSL3_ST_SW_HELLO_REQ_A:
328296465Sdelphij        str = "SSLv3 write hello request A";
329296465Sdelphij        break;
330296465Sdelphij    case SSL3_ST_SW_HELLO_REQ_B:
331296465Sdelphij        str = "SSLv3 write hello request B";
332296465Sdelphij        break;
333296465Sdelphij    case SSL3_ST_SW_HELLO_REQ_C:
334296465Sdelphij        str = "SSLv3 write hello request C";
335296465Sdelphij        break;
336296465Sdelphij    case SSL3_ST_SW_SRVR_HELLO_A:
337296465Sdelphij        str = "SSLv3 write server hello A";
338296465Sdelphij        break;
339296465Sdelphij    case SSL3_ST_SW_SRVR_HELLO_B:
340296465Sdelphij        str = "SSLv3 write server hello B";
341296465Sdelphij        break;
342296465Sdelphij    case SSL3_ST_SW_CERT_A:
343296465Sdelphij        str = "SSLv3 write certificate A";
344296465Sdelphij        break;
345296465Sdelphij    case SSL3_ST_SW_CERT_B:
346296465Sdelphij        str = "SSLv3 write certificate B";
347296465Sdelphij        break;
348296465Sdelphij    case SSL3_ST_SW_KEY_EXCH_A:
349296465Sdelphij        str = "SSLv3 write key exchange A";
350296465Sdelphij        break;
351296465Sdelphij    case SSL3_ST_SW_KEY_EXCH_B:
352296465Sdelphij        str = "SSLv3 write key exchange B";
353296465Sdelphij        break;
354296465Sdelphij    case SSL3_ST_SW_CERT_REQ_A:
355296465Sdelphij        str = "SSLv3 write certificate request A";
356296465Sdelphij        break;
357296465Sdelphij    case SSL3_ST_SW_CERT_REQ_B:
358296465Sdelphij        str = "SSLv3 write certificate request B";
359296465Sdelphij        break;
360296465Sdelphij    case SSL3_ST_SW_SESSION_TICKET_A:
361296465Sdelphij        str = "SSLv3 write session ticket A";
362296465Sdelphij        break;
363296465Sdelphij    case SSL3_ST_SW_SESSION_TICKET_B:
364296465Sdelphij        str = "SSLv3 write session ticket B";
365296465Sdelphij        break;
366296465Sdelphij    case SSL3_ST_SW_SRVR_DONE_A:
367296465Sdelphij        str = "SSLv3 write server done A";
368296465Sdelphij        break;
369296465Sdelphij    case SSL3_ST_SW_SRVR_DONE_B:
370296465Sdelphij        str = "SSLv3 write server done B";
371296465Sdelphij        break;
372296465Sdelphij    case SSL3_ST_SR_CERT_A:
373296465Sdelphij        str = "SSLv3 read client certificate A";
374296465Sdelphij        break;
375296465Sdelphij    case SSL3_ST_SR_CERT_B:
376296465Sdelphij        str = "SSLv3 read client certificate B";
377296465Sdelphij        break;
378296465Sdelphij    case SSL3_ST_SR_KEY_EXCH_A:
379296465Sdelphij        str = "SSLv3 read client key exchange A";
380296465Sdelphij        break;
381296465Sdelphij    case SSL3_ST_SR_KEY_EXCH_B:
382296465Sdelphij        str = "SSLv3 read client key exchange B";
383296465Sdelphij        break;
384296465Sdelphij    case SSL3_ST_SR_CERT_VRFY_A:
385296465Sdelphij        str = "SSLv3 read certificate verify A";
386296465Sdelphij        break;
387296465Sdelphij    case SSL3_ST_SR_CERT_VRFY_B:
388296465Sdelphij        str = "SSLv3 read certificate verify B";
389296465Sdelphij        break;
39055714Skris#endif
39155714Skris
39259191Skris/* SSLv2/v3 compatibility states */
39355714Skris/* client */
394296465Sdelphij    case SSL23_ST_CW_CLNT_HELLO_A:
395296465Sdelphij        str = "SSLv2/v3 write client hello A";
396296465Sdelphij        break;
397296465Sdelphij    case SSL23_ST_CW_CLNT_HELLO_B:
398296465Sdelphij        str = "SSLv2/v3 write client hello B";
399296465Sdelphij        break;
400296465Sdelphij    case SSL23_ST_CR_SRVR_HELLO_A:
401296465Sdelphij        str = "SSLv2/v3 read server hello A";
402296465Sdelphij        break;
403296465Sdelphij    case SSL23_ST_CR_SRVR_HELLO_B:
404296465Sdelphij        str = "SSLv2/v3 read server hello B";
405296465Sdelphij        break;
40655714Skris/* server */
407296465Sdelphij    case SSL23_ST_SR_CLNT_HELLO_A:
408296465Sdelphij        str = "SSLv2/v3 read client hello A";
409296465Sdelphij        break;
410296465Sdelphij    case SSL23_ST_SR_CLNT_HELLO_B:
411296465Sdelphij        str = "SSLv2/v3 read client hello B";
412296465Sdelphij        break;
41355714Skris
414205128Ssimon/* DTLS */
415296465Sdelphij    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
416296465Sdelphij        str = "DTLS1 read hello verify request A";
417296465Sdelphij        break;
418296465Sdelphij    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
419296465Sdelphij        str = "DTLS1 read hello verify request B";
420296465Sdelphij        break;
421296465Sdelphij    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
422296465Sdelphij        str = "DTLS1 write hello verify request A";
423296465Sdelphij        break;
424296465Sdelphij    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B:
425296465Sdelphij        str = "DTLS1 write hello verify request B";
426296465Sdelphij        break;
427205128Ssimon
428296465Sdelphij    default:
429296465Sdelphij        str = "unknown state";
430296465Sdelphij        break;
431296465Sdelphij    }
432296465Sdelphij    return (str);
433296465Sdelphij}
43455714Skris
435109998Smarkmconst char *SSL_rstate_string_long(const SSL *s)
436296465Sdelphij{
437296465Sdelphij    const char *str;
43855714Skris
439296465Sdelphij    switch (s->rstate) {
440296465Sdelphij    case SSL_ST_READ_HEADER:
441296465Sdelphij        str = "read header";
442296465Sdelphij        break;
443296465Sdelphij    case SSL_ST_READ_BODY:
444296465Sdelphij        str = "read body";
445296465Sdelphij        break;
446296465Sdelphij    case SSL_ST_READ_DONE:
447296465Sdelphij        str = "read done";
448296465Sdelphij        break;
449296465Sdelphij    default:
450296465Sdelphij        str = "unknown";
451296465Sdelphij        break;
452296465Sdelphij    }
453296465Sdelphij    return (str);
454296465Sdelphij}
45555714Skris
456109998Smarkmconst char *SSL_state_string(const SSL *s)
457296465Sdelphij{
458296465Sdelphij    const char *str;
45955714Skris
460296465Sdelphij    switch (s->state) {
461296465Sdelphij    case SSL_ST_BEFORE:
462296465Sdelphij        str = "PINIT ";
463296465Sdelphij        break;
464296465Sdelphij    case SSL_ST_ACCEPT:
465296465Sdelphij        str = "AINIT ";
466296465Sdelphij        break;
467296465Sdelphij    case SSL_ST_CONNECT:
468296465Sdelphij        str = "CINIT ";
469296465Sdelphij        break;
470296465Sdelphij    case SSL_ST_OK:
471296465Sdelphij        str = "SSLOK ";
472296465Sdelphij        break;
473109998Smarkm#ifndef OPENSSL_NO_SSL2
474296465Sdelphij    case SSL2_ST_CLIENT_START_ENCRYPTION:
475296465Sdelphij        str = "2CSENC";
476296465Sdelphij        break;
477296465Sdelphij    case SSL2_ST_SERVER_START_ENCRYPTION:
478296465Sdelphij        str = "2SSENC";
479296465Sdelphij        break;
480296465Sdelphij    case SSL2_ST_SEND_CLIENT_HELLO_A:
481296465Sdelphij        str = "2SCH_A";
482296465Sdelphij        break;
483296465Sdelphij    case SSL2_ST_SEND_CLIENT_HELLO_B:
484296465Sdelphij        str = "2SCH_B";
485296465Sdelphij        break;
486296465Sdelphij    case SSL2_ST_GET_SERVER_HELLO_A:
487296465Sdelphij        str = "2GSH_A";
488296465Sdelphij        break;
489296465Sdelphij    case SSL2_ST_GET_SERVER_HELLO_B:
490296465Sdelphij        str = "2GSH_B";
491296465Sdelphij        break;
492296465Sdelphij    case SSL2_ST_SEND_CLIENT_MASTER_KEY_A:
493296465Sdelphij        str = "2SCMKA";
494296465Sdelphij        break;
495296465Sdelphij    case SSL2_ST_SEND_CLIENT_MASTER_KEY_B:
496296465Sdelphij        str = "2SCMKB";
497296465Sdelphij        break;
498296465Sdelphij    case SSL2_ST_SEND_CLIENT_FINISHED_A:
499296465Sdelphij        str = "2SCF_A";
500296465Sdelphij        break;
501296465Sdelphij    case SSL2_ST_SEND_CLIENT_FINISHED_B:
502296465Sdelphij        str = "2SCF_B";
503296465Sdelphij        break;
504296465Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_A:
505296465Sdelphij        str = "2SCC_A";
506296465Sdelphij        break;
507296465Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_B:
508296465Sdelphij        str = "2SCC_B";
509296465Sdelphij        break;
510296465Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_C:
511296465Sdelphij        str = "2SCC_C";
512296465Sdelphij        break;
513296465Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_D:
514296465Sdelphij        str = "2SCC_D";
515296465Sdelphij        break;
516296465Sdelphij    case SSL2_ST_GET_SERVER_VERIFY_A:
517296465Sdelphij        str = "2GSV_A";
518296465Sdelphij        break;
519296465Sdelphij    case SSL2_ST_GET_SERVER_VERIFY_B:
520296465Sdelphij        str = "2GSV_B";
521296465Sdelphij        break;
522296465Sdelphij    case SSL2_ST_GET_SERVER_FINISHED_A:
523296465Sdelphij        str = "2GSF_A";
524296465Sdelphij        break;
525296465Sdelphij    case SSL2_ST_GET_SERVER_FINISHED_B:
526296465Sdelphij        str = "2GSF_B";
527296465Sdelphij        break;
528296465Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_A:
529296465Sdelphij        str = "2GCH_A";
530296465Sdelphij        break;
531296465Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_B:
532296465Sdelphij        str = "2GCH_B";
533296465Sdelphij        break;
534296465Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_C:
535296465Sdelphij        str = "2GCH_C";
536296465Sdelphij        break;
537296465Sdelphij    case SSL2_ST_SEND_SERVER_HELLO_A:
538296465Sdelphij        str = "2SSH_A";
539296465Sdelphij        break;
540296465Sdelphij    case SSL2_ST_SEND_SERVER_HELLO_B:
541296465Sdelphij        str = "2SSH_B";
542296465Sdelphij        break;
543296465Sdelphij    case SSL2_ST_GET_CLIENT_MASTER_KEY_A:
544296465Sdelphij        str = "2GCMKA";
545296465Sdelphij        break;
546296465Sdelphij    case SSL2_ST_GET_CLIENT_MASTER_KEY_B:
547296465Sdelphij        str = "2GCMKA";
548296465Sdelphij        break;
549296465Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_A:
550296465Sdelphij        str = "2SSV_A";
551296465Sdelphij        break;
552296465Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_B:
553296465Sdelphij        str = "2SSV_B";
554296465Sdelphij        break;
555296465Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_C:
556296465Sdelphij        str = "2SSV_C";
557296465Sdelphij        break;
558296465Sdelphij    case SSL2_ST_GET_CLIENT_FINISHED_A:
559296465Sdelphij        str = "2GCF_A";
560296465Sdelphij        break;
561296465Sdelphij    case SSL2_ST_GET_CLIENT_FINISHED_B:
562296465Sdelphij        str = "2GCF_B";
563296465Sdelphij        break;
564296465Sdelphij    case SSL2_ST_SEND_SERVER_FINISHED_A:
565296465Sdelphij        str = "2SSF_A";
566296465Sdelphij        break;
567296465Sdelphij    case SSL2_ST_SEND_SERVER_FINISHED_B:
568296465Sdelphij        str = "2SSF_B";
569296465Sdelphij        break;
570296465Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_A:
571296465Sdelphij        str = "2SRC_A";
572296465Sdelphij        break;
573296465Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_B:
574296465Sdelphij        str = "2SRC_B";
575296465Sdelphij        break;
576296465Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_C:
577296465Sdelphij        str = "2SRC_C";
578296465Sdelphij        break;
579296465Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_D:
580296465Sdelphij        str = "2SRC_D";
581296465Sdelphij        break;
582296465Sdelphij    case SSL2_ST_X509_GET_SERVER_CERTIFICATE:
583296465Sdelphij        str = "2X9GSC";
584296465Sdelphij        break;
585296465Sdelphij    case SSL2_ST_X509_GET_CLIENT_CERTIFICATE:
586296465Sdelphij        str = "2X9GCC";
587296465Sdelphij        break;
58855714Skris#endif
58955714Skris
590109998Smarkm#ifndef OPENSSL_NO_SSL3
59155714Skris/* SSLv3 additions */
592296465Sdelphij    case SSL3_ST_SW_FLUSH:
593296465Sdelphij    case SSL3_ST_CW_FLUSH:
594296465Sdelphij        str = "3FLUSH";
595296465Sdelphij        break;
596296465Sdelphij    case SSL3_ST_CW_CLNT_HELLO_A:
597296465Sdelphij        str = "3WCH_A";
598296465Sdelphij        break;
599296465Sdelphij    case SSL3_ST_CW_CLNT_HELLO_B:
600296465Sdelphij        str = "3WCH_B";
601296465Sdelphij        break;
602296465Sdelphij    case SSL3_ST_CR_SRVR_HELLO_A:
603296465Sdelphij        str = "3RSH_A";
604296465Sdelphij        break;
605296465Sdelphij    case SSL3_ST_CR_SRVR_HELLO_B:
606296465Sdelphij        str = "3RSH_B";
607296465Sdelphij        break;
608296465Sdelphij    case SSL3_ST_CR_CERT_A:
609296465Sdelphij        str = "3RSC_A";
610296465Sdelphij        break;
611296465Sdelphij    case SSL3_ST_CR_CERT_B:
612296465Sdelphij        str = "3RSC_B";
613296465Sdelphij        break;
614296465Sdelphij    case SSL3_ST_CR_KEY_EXCH_A:
615296465Sdelphij        str = "3RSKEA";
616296465Sdelphij        break;
617296465Sdelphij    case SSL3_ST_CR_KEY_EXCH_B:
618296465Sdelphij        str = "3RSKEB";
619296465Sdelphij        break;
620296465Sdelphij    case SSL3_ST_CR_CERT_REQ_A:
621296465Sdelphij        str = "3RCR_A";
622296465Sdelphij        break;
623296465Sdelphij    case SSL3_ST_CR_CERT_REQ_B:
624296465Sdelphij        str = "3RCR_B";
625296465Sdelphij        break;
626296465Sdelphij    case SSL3_ST_CR_SRVR_DONE_A:
627296465Sdelphij        str = "3RSD_A";
628296465Sdelphij        break;
629296465Sdelphij    case SSL3_ST_CR_SRVR_DONE_B:
630296465Sdelphij        str = "3RSD_B";
631296465Sdelphij        break;
632296465Sdelphij    case SSL3_ST_CW_CERT_A:
633296465Sdelphij        str = "3WCC_A";
634296465Sdelphij        break;
635296465Sdelphij    case SSL3_ST_CW_CERT_B:
636296465Sdelphij        str = "3WCC_B";
637296465Sdelphij        break;
638296465Sdelphij    case SSL3_ST_CW_CERT_C:
639296465Sdelphij        str = "3WCC_C";
640296465Sdelphij        break;
641296465Sdelphij    case SSL3_ST_CW_CERT_D:
642296465Sdelphij        str = "3WCC_D";
643296465Sdelphij        break;
644296465Sdelphij    case SSL3_ST_CW_KEY_EXCH_A:
645296465Sdelphij        str = "3WCKEA";
646296465Sdelphij        break;
647296465Sdelphij    case SSL3_ST_CW_KEY_EXCH_B:
648296465Sdelphij        str = "3WCKEB";
649296465Sdelphij        break;
650296465Sdelphij    case SSL3_ST_CW_CERT_VRFY_A:
651296465Sdelphij        str = "3WCV_A";
652296465Sdelphij        break;
653296465Sdelphij    case SSL3_ST_CW_CERT_VRFY_B:
654296465Sdelphij        str = "3WCV_B";
655296465Sdelphij        break;
65655714Skris
657296465Sdelphij    case SSL3_ST_SW_CHANGE_A:
658296465Sdelphij    case SSL3_ST_CW_CHANGE_A:
659296465Sdelphij        str = "3WCCSA";
660296465Sdelphij        break;
661296465Sdelphij    case SSL3_ST_SW_CHANGE_B:
662296465Sdelphij    case SSL3_ST_CW_CHANGE_B:
663296465Sdelphij        str = "3WCCSB";
664296465Sdelphij        break;
665296465Sdelphij    case SSL3_ST_SW_FINISHED_A:
666296465Sdelphij    case SSL3_ST_CW_FINISHED_A:
667296465Sdelphij        str = "3WFINA";
668296465Sdelphij        break;
669296465Sdelphij    case SSL3_ST_SW_FINISHED_B:
670296465Sdelphij    case SSL3_ST_CW_FINISHED_B:
671296465Sdelphij        str = "3WFINB";
672296465Sdelphij        break;
673296465Sdelphij    case SSL3_ST_SR_CHANGE_A:
674296465Sdelphij    case SSL3_ST_CR_CHANGE_A:
675296465Sdelphij        str = "3RCCSA";
676296465Sdelphij        break;
677296465Sdelphij    case SSL3_ST_SR_CHANGE_B:
678296465Sdelphij    case SSL3_ST_CR_CHANGE_B:
679296465Sdelphij        str = "3RCCSB";
680296465Sdelphij        break;
681296465Sdelphij    case SSL3_ST_SR_FINISHED_A:
682296465Sdelphij    case SSL3_ST_CR_FINISHED_A:
683296465Sdelphij        str = "3RFINA";
684296465Sdelphij        break;
685296465Sdelphij    case SSL3_ST_SR_FINISHED_B:
686296465Sdelphij    case SSL3_ST_CR_FINISHED_B:
687296465Sdelphij        str = "3RFINB";
688296465Sdelphij        break;
68955714Skris
690296465Sdelphij    case SSL3_ST_SW_HELLO_REQ_A:
691296465Sdelphij        str = "3WHR_A";
692296465Sdelphij        break;
693296465Sdelphij    case SSL3_ST_SW_HELLO_REQ_B:
694296465Sdelphij        str = "3WHR_B";
695296465Sdelphij        break;
696296465Sdelphij    case SSL3_ST_SW_HELLO_REQ_C:
697296465Sdelphij        str = "3WHR_C";
698296465Sdelphij        break;
699296465Sdelphij    case SSL3_ST_SR_CLNT_HELLO_A:
700296465Sdelphij        str = "3RCH_A";
701296465Sdelphij        break;
702296465Sdelphij    case SSL3_ST_SR_CLNT_HELLO_B:
703296465Sdelphij        str = "3RCH_B";
704296465Sdelphij        break;
705296465Sdelphij    case SSL3_ST_SR_CLNT_HELLO_C:
706296465Sdelphij        str = "3RCH_C";
707296465Sdelphij        break;
708296465Sdelphij    case SSL3_ST_SW_SRVR_HELLO_A:
709296465Sdelphij        str = "3WSH_A";
710296465Sdelphij        break;
711296465Sdelphij    case SSL3_ST_SW_SRVR_HELLO_B:
712296465Sdelphij        str = "3WSH_B";
713296465Sdelphij        break;
714296465Sdelphij    case SSL3_ST_SW_CERT_A:
715296465Sdelphij        str = "3WSC_A";
716296465Sdelphij        break;
717296465Sdelphij    case SSL3_ST_SW_CERT_B:
718296465Sdelphij        str = "3WSC_B";
719296465Sdelphij        break;
720296465Sdelphij    case SSL3_ST_SW_KEY_EXCH_A:
721296465Sdelphij        str = "3WSKEA";
722296465Sdelphij        break;
723296465Sdelphij    case SSL3_ST_SW_KEY_EXCH_B:
724296465Sdelphij        str = "3WSKEB";
725296465Sdelphij        break;
726296465Sdelphij    case SSL3_ST_SW_CERT_REQ_A:
727296465Sdelphij        str = "3WCR_A";
728296465Sdelphij        break;
729296465Sdelphij    case SSL3_ST_SW_CERT_REQ_B:
730296465Sdelphij        str = "3WCR_B";
731296465Sdelphij        break;
732296465Sdelphij    case SSL3_ST_SW_SRVR_DONE_A:
733296465Sdelphij        str = "3WSD_A";
734296465Sdelphij        break;
735296465Sdelphij    case SSL3_ST_SW_SRVR_DONE_B:
736296465Sdelphij        str = "3WSD_B";
737296465Sdelphij        break;
738296465Sdelphij    case SSL3_ST_SR_CERT_A:
739296465Sdelphij        str = "3RCC_A";
740296465Sdelphij        break;
741296465Sdelphij    case SSL3_ST_SR_CERT_B:
742296465Sdelphij        str = "3RCC_B";
743296465Sdelphij        break;
744296465Sdelphij    case SSL3_ST_SR_KEY_EXCH_A:
745296465Sdelphij        str = "3RCKEA";
746296465Sdelphij        break;
747296465Sdelphij    case SSL3_ST_SR_KEY_EXCH_B:
748296465Sdelphij        str = "3RCKEB";
749296465Sdelphij        break;
750296465Sdelphij    case SSL3_ST_SR_CERT_VRFY_A:
751296465Sdelphij        str = "3RCV_A";
752296465Sdelphij        break;
753296465Sdelphij    case SSL3_ST_SR_CERT_VRFY_B:
754296465Sdelphij        str = "3RCV_B";
755296465Sdelphij        break;
75655714Skris#endif
75755714Skris
75859191Skris/* SSLv2/v3 compatibility states */
75955714Skris/* client */
760296465Sdelphij    case SSL23_ST_CW_CLNT_HELLO_A:
761296465Sdelphij        str = "23WCHA";
762296465Sdelphij        break;
763296465Sdelphij    case SSL23_ST_CW_CLNT_HELLO_B:
764296465Sdelphij        str = "23WCHB";
765296465Sdelphij        break;
766296465Sdelphij    case SSL23_ST_CR_SRVR_HELLO_A:
767296465Sdelphij        str = "23RSHA";
768296465Sdelphij        break;
769296465Sdelphij    case SSL23_ST_CR_SRVR_HELLO_B:
770296465Sdelphij        str = "23RSHA";
771296465Sdelphij        break;
77255714Skris/* server */
773296465Sdelphij    case SSL23_ST_SR_CLNT_HELLO_A:
774296465Sdelphij        str = "23RCHA";
775296465Sdelphij        break;
776296465Sdelphij    case SSL23_ST_SR_CLNT_HELLO_B:
777296465Sdelphij        str = "23RCHB";
778296465Sdelphij        break;
779279265Sdelphij
780205128Ssimon/* DTLS */
781296465Sdelphij    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
782296465Sdelphij        str = "DRCHVA";
783296465Sdelphij        break;
784296465Sdelphij    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
785296465Sdelphij        str = "DRCHVB";
786296465Sdelphij        break;
787296465Sdelphij    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
788296465Sdelphij        str = "DWCHVA";
789296465Sdelphij        break;
790296465Sdelphij    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B:
791296465Sdelphij        str = "DWCHVB";
792296465Sdelphij        break;
79355714Skris
794296465Sdelphij    default:
795296465Sdelphij        str = "UNKWN ";
796296465Sdelphij        break;
797296465Sdelphij    }
798296465Sdelphij    return (str);
799296465Sdelphij}
80055714Skris
801109998Smarkmconst char *SSL_alert_type_string_long(int value)
802296465Sdelphij{
803296465Sdelphij    value >>= 8;
804296465Sdelphij    if (value == SSL3_AL_WARNING)
805296465Sdelphij        return ("warning");
806296465Sdelphij    else if (value == SSL3_AL_FATAL)
807296465Sdelphij        return ("fatal");
808296465Sdelphij    else
809296465Sdelphij        return ("unknown");
810296465Sdelphij}
81155714Skris
812109998Smarkmconst char *SSL_alert_type_string(int value)
813296465Sdelphij{
814296465Sdelphij    value >>= 8;
815296465Sdelphij    if (value == SSL3_AL_WARNING)
816296465Sdelphij        return ("W");
817296465Sdelphij    else if (value == SSL3_AL_FATAL)
818296465Sdelphij        return ("F");
819296465Sdelphij    else
820296465Sdelphij        return ("U");
821296465Sdelphij}
82255714Skris
823109998Smarkmconst char *SSL_alert_desc_string(int value)
824296465Sdelphij{
825296465Sdelphij    const char *str;
82655714Skris
827296465Sdelphij    switch (value & 0xff) {
828296465Sdelphij    case SSL3_AD_CLOSE_NOTIFY:
829296465Sdelphij        str = "CN";
830296465Sdelphij        break;
831296465Sdelphij    case SSL3_AD_UNEXPECTED_MESSAGE:
832296465Sdelphij        str = "UM";
833296465Sdelphij        break;
834296465Sdelphij    case SSL3_AD_BAD_RECORD_MAC:
835296465Sdelphij        str = "BM";
836296465Sdelphij        break;
837296465Sdelphij    case SSL3_AD_DECOMPRESSION_FAILURE:
838296465Sdelphij        str = "DF";
839296465Sdelphij        break;
840296465Sdelphij    case SSL3_AD_HANDSHAKE_FAILURE:
841296465Sdelphij        str = "HF";
842296465Sdelphij        break;
843296465Sdelphij    case SSL3_AD_NO_CERTIFICATE:
844296465Sdelphij        str = "NC";
845296465Sdelphij        break;
846296465Sdelphij    case SSL3_AD_BAD_CERTIFICATE:
847296465Sdelphij        str = "BC";
848296465Sdelphij        break;
849296465Sdelphij    case SSL3_AD_UNSUPPORTED_CERTIFICATE:
850296465Sdelphij        str = "UC";
851296465Sdelphij        break;
852296465Sdelphij    case SSL3_AD_CERTIFICATE_REVOKED:
853296465Sdelphij        str = "CR";
854296465Sdelphij        break;
855296465Sdelphij    case SSL3_AD_CERTIFICATE_EXPIRED:
856296465Sdelphij        str = "CE";
857296465Sdelphij        break;
858296465Sdelphij    case SSL3_AD_CERTIFICATE_UNKNOWN:
859296465Sdelphij        str = "CU";
860296465Sdelphij        break;
861296465Sdelphij    case SSL3_AD_ILLEGAL_PARAMETER:
862296465Sdelphij        str = "IP";
863296465Sdelphij        break;
864296465Sdelphij    case TLS1_AD_DECRYPTION_FAILED:
865296465Sdelphij        str = "DC";
866296465Sdelphij        break;
867296465Sdelphij    case TLS1_AD_RECORD_OVERFLOW:
868296465Sdelphij        str = "RO";
869296465Sdelphij        break;
870296465Sdelphij    case TLS1_AD_UNKNOWN_CA:
871296465Sdelphij        str = "CA";
872296465Sdelphij        break;
873296465Sdelphij    case TLS1_AD_ACCESS_DENIED:
874296465Sdelphij        str = "AD";
875296465Sdelphij        break;
876296465Sdelphij    case TLS1_AD_DECODE_ERROR:
877296465Sdelphij        str = "DE";
878296465Sdelphij        break;
879296465Sdelphij    case TLS1_AD_DECRYPT_ERROR:
880296465Sdelphij        str = "CY";
881296465Sdelphij        break;
882296465Sdelphij    case TLS1_AD_EXPORT_RESTRICTION:
883296465Sdelphij        str = "ER";
884296465Sdelphij        break;
885296465Sdelphij    case TLS1_AD_PROTOCOL_VERSION:
886296465Sdelphij        str = "PV";
887296465Sdelphij        break;
888296465Sdelphij    case TLS1_AD_INSUFFICIENT_SECURITY:
889296465Sdelphij        str = "IS";
890296465Sdelphij        break;
891296465Sdelphij    case TLS1_AD_INTERNAL_ERROR:
892296465Sdelphij        str = "IE";
893296465Sdelphij        break;
894296465Sdelphij    case TLS1_AD_USER_CANCELLED:
895296465Sdelphij        str = "US";
896296465Sdelphij        break;
897296465Sdelphij    case TLS1_AD_NO_RENEGOTIATION:
898296465Sdelphij        str = "NR";
899296465Sdelphij        break;
900296465Sdelphij    case TLS1_AD_UNSUPPORTED_EXTENSION:
901296465Sdelphij        str = "UE";
902296465Sdelphij        break;
903296465Sdelphij    case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
904296465Sdelphij        str = "CO";
905296465Sdelphij        break;
906296465Sdelphij    case TLS1_AD_UNRECOGNIZED_NAME:
907296465Sdelphij        str = "UN";
908296465Sdelphij        break;
909296465Sdelphij    case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
910296465Sdelphij        str = "BR";
911296465Sdelphij        break;
912296465Sdelphij    case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
913296465Sdelphij        str = "BH";
914296465Sdelphij        break;
915296465Sdelphij    case TLS1_AD_UNKNOWN_PSK_IDENTITY:
916296465Sdelphij        str = "UP";
917296465Sdelphij        break;
918296465Sdelphij    default:
919296465Sdelphij        str = "UK";
920296465Sdelphij        break;
921296465Sdelphij    }
922296465Sdelphij    return (str);
923296465Sdelphij}
92455714Skris
925109998Smarkmconst char *SSL_alert_desc_string_long(int value)
926296465Sdelphij{
927296465Sdelphij    const char *str;
92855714Skris
929296465Sdelphij    switch (value & 0xff) {
930296465Sdelphij    case SSL3_AD_CLOSE_NOTIFY:
931296465Sdelphij        str = "close notify";
932296465Sdelphij        break;
933296465Sdelphij    case SSL3_AD_UNEXPECTED_MESSAGE:
934296465Sdelphij        str = "unexpected_message";
935296465Sdelphij        break;
936296465Sdelphij    case SSL3_AD_BAD_RECORD_MAC:
937296465Sdelphij        str = "bad record mac";
938296465Sdelphij        break;
939296465Sdelphij    case SSL3_AD_DECOMPRESSION_FAILURE:
940296465Sdelphij        str = "decompression failure";
941296465Sdelphij        break;
942296465Sdelphij    case SSL3_AD_HANDSHAKE_FAILURE:
943296465Sdelphij        str = "handshake failure";
944296465Sdelphij        break;
945296465Sdelphij    case SSL3_AD_NO_CERTIFICATE:
946296465Sdelphij        str = "no certificate";
947296465Sdelphij        break;
948296465Sdelphij    case SSL3_AD_BAD_CERTIFICATE:
949296465Sdelphij        str = "bad certificate";
950296465Sdelphij        break;
951296465Sdelphij    case SSL3_AD_UNSUPPORTED_CERTIFICATE:
952296465Sdelphij        str = "unsupported certificate";
953296465Sdelphij        break;
954296465Sdelphij    case SSL3_AD_CERTIFICATE_REVOKED:
955296465Sdelphij        str = "certificate revoked";
956296465Sdelphij        break;
957296465Sdelphij    case SSL3_AD_CERTIFICATE_EXPIRED:
958296465Sdelphij        str = "certificate expired";
959296465Sdelphij        break;
960296465Sdelphij    case SSL3_AD_CERTIFICATE_UNKNOWN:
961296465Sdelphij        str = "certificate unknown";
962296465Sdelphij        break;
963296465Sdelphij    case SSL3_AD_ILLEGAL_PARAMETER:
964296465Sdelphij        str = "illegal parameter";
965296465Sdelphij        break;
966296465Sdelphij    case TLS1_AD_DECRYPTION_FAILED:
967296465Sdelphij        str = "decryption failed";
968296465Sdelphij        break;
969296465Sdelphij    case TLS1_AD_RECORD_OVERFLOW:
970296465Sdelphij        str = "record overflow";
971296465Sdelphij        break;
972296465Sdelphij    case TLS1_AD_UNKNOWN_CA:
973296465Sdelphij        str = "unknown CA";
974296465Sdelphij        break;
975296465Sdelphij    case TLS1_AD_ACCESS_DENIED:
976296465Sdelphij        str = "access denied";
977296465Sdelphij        break;
978296465Sdelphij    case TLS1_AD_DECODE_ERROR:
979296465Sdelphij        str = "decode error";
980296465Sdelphij        break;
981296465Sdelphij    case TLS1_AD_DECRYPT_ERROR:
982296465Sdelphij        str = "decrypt error";
983296465Sdelphij        break;
984296465Sdelphij    case TLS1_AD_EXPORT_RESTRICTION:
985296465Sdelphij        str = "export restriction";
986296465Sdelphij        break;
987296465Sdelphij    case TLS1_AD_PROTOCOL_VERSION:
988296465Sdelphij        str = "protocol version";
989296465Sdelphij        break;
990296465Sdelphij    case TLS1_AD_INSUFFICIENT_SECURITY:
991296465Sdelphij        str = "insufficient security";
992296465Sdelphij        break;
993296465Sdelphij    case TLS1_AD_INTERNAL_ERROR:
994296465Sdelphij        str = "internal error";
995296465Sdelphij        break;
996296465Sdelphij    case TLS1_AD_USER_CANCELLED:
997296465Sdelphij        str = "user canceled";
998296465Sdelphij        break;
999296465Sdelphij    case TLS1_AD_NO_RENEGOTIATION:
1000296465Sdelphij        str = "no renegotiation";
1001296465Sdelphij        break;
1002296465Sdelphij    case TLS1_AD_UNSUPPORTED_EXTENSION:
1003296465Sdelphij        str = "unsupported extension";
1004296465Sdelphij        break;
1005296465Sdelphij    case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
1006296465Sdelphij        str = "certificate unobtainable";
1007296465Sdelphij        break;
1008296465Sdelphij    case TLS1_AD_UNRECOGNIZED_NAME:
1009296465Sdelphij        str = "unrecognized name";
1010296465Sdelphij        break;
1011296465Sdelphij    case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
1012296465Sdelphij        str = "bad certificate status response";
1013296465Sdelphij        break;
1014296465Sdelphij    case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
1015296465Sdelphij        str = "bad certificate hash value";
1016296465Sdelphij        break;
1017296465Sdelphij    case TLS1_AD_UNKNOWN_PSK_IDENTITY:
1018296465Sdelphij        str = "unknown PSK identity";
1019296465Sdelphij        break;
1020296465Sdelphij    default:
1021296465Sdelphij        str = "unknown";
1022296465Sdelphij        break;
1023296465Sdelphij    }
1024296465Sdelphij    return (str);
1025296465Sdelphij}
102655714Skris
1027109998Smarkmconst char *SSL_rstate_string(const SSL *s)
1028296465Sdelphij{
1029296465Sdelphij    const char *str;
103055714Skris
1031296465Sdelphij    switch (s->rstate) {
1032296465Sdelphij    case SSL_ST_READ_HEADER:
1033296465Sdelphij        str = "RH";
1034296465Sdelphij        break;
1035296465Sdelphij    case SSL_ST_READ_BODY:
1036296465Sdelphij        str = "RB";
1037296465Sdelphij        break;
1038296465Sdelphij    case SSL_ST_READ_DONE:
1039296465Sdelphij        str = "RD";
1040296465Sdelphij        break;
1041296465Sdelphij    default:
1042296465Sdelphij        str = "unknown";
1043296465Sdelphij        break;
1044296465Sdelphij    }
1045296465Sdelphij    return (str);
1046296465Sdelphij}
1047