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.
8296341Sdelphij *
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).
15296341Sdelphij *
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.
22296341Sdelphij *
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 :-).
37296341Sdelphij * 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)"
40296341Sdelphij *
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.
52296341Sdelphij *
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 */
58238405Sjkim/* ====================================================================
59238405Sjkim * Copyright 2005 Nokia. All rights reserved.
60238405Sjkim *
61238405Sjkim * The portions of the attached software ("Contribution") is developed by
62238405Sjkim * Nokia Corporation and is licensed pursuant to the OpenSSL open source
63238405Sjkim * license.
64238405Sjkim *
65238405Sjkim * The Contribution, originally written by Mika Kousa and Pasi Eronen of
66238405Sjkim * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
67238405Sjkim * support (see RFC 4279) to OpenSSL.
68238405Sjkim *
69238405Sjkim * No patent licenses or other rights except those expressly stated in
70238405Sjkim * the OpenSSL open source license shall be deemed granted or received
71238405Sjkim * expressly, by implication, estoppel, or otherwise.
72238405Sjkim *
73238405Sjkim * No assurances are provided by Nokia that the Contribution does not
74238405Sjkim * infringe the patent or other intellectual property rights of any third
75238405Sjkim * party or that the license provides you with all the necessary rights
76238405Sjkim * to make use of the Contribution.
77238405Sjkim *
78238405Sjkim * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
79238405Sjkim * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
80238405Sjkim * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
81238405Sjkim * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
82238405Sjkim * OTHERWISE.
83238405Sjkim */
8455714Skris
8555714Skris#include <stdio.h>
8655714Skris#include "ssl_locl.h"
8755714Skris
88109998Smarkmconst char *SSL_state_string_long(const SSL *s)
89296341Sdelphij{
90296341Sdelphij    const char *str;
9155714Skris
92296341Sdelphij    switch (s->state) {
93296341Sdelphij    case SSL_ST_BEFORE:
94296341Sdelphij        str = "before SSL initialization";
95296341Sdelphij        break;
96296341Sdelphij    case SSL_ST_ACCEPT:
97296341Sdelphij        str = "before accept initialization";
98296341Sdelphij        break;
99296341Sdelphij    case SSL_ST_CONNECT:
100296341Sdelphij        str = "before connect initialization";
101296341Sdelphij        break;
102296341Sdelphij    case SSL_ST_OK:
103296341Sdelphij        str = "SSL negotiation finished successfully";
104296341Sdelphij        break;
105296341Sdelphij    case SSL_ST_RENEGOTIATE:
106296341Sdelphij        str = "SSL renegotiate ciphers";
107296341Sdelphij        break;
108296341Sdelphij    case SSL_ST_BEFORE | SSL_ST_CONNECT:
109296341Sdelphij        str = "before/connect initialization";
110296341Sdelphij        break;
111296341Sdelphij    case SSL_ST_OK | SSL_ST_CONNECT:
112296341Sdelphij        str = "ok/connect SSL initialization";
113296341Sdelphij        break;
114296341Sdelphij    case SSL_ST_BEFORE | SSL_ST_ACCEPT:
115296341Sdelphij        str = "before/accept initialization";
116296341Sdelphij        break;
117296341Sdelphij    case SSL_ST_OK | SSL_ST_ACCEPT:
118296341Sdelphij        str = "ok/accept SSL initialization";
119296341Sdelphij        break;
120296341Sdelphij    case SSL_ST_ERR:
121296341Sdelphij        str = "error";
122296341Sdelphij        break;
123109998Smarkm#ifndef OPENSSL_NO_SSL2
124296341Sdelphij    case SSL2_ST_CLIENT_START_ENCRYPTION:
125296341Sdelphij        str = "SSLv2 client start encryption";
126296341Sdelphij        break;
127296341Sdelphij    case SSL2_ST_SERVER_START_ENCRYPTION:
128296341Sdelphij        str = "SSLv2 server start encryption";
129296341Sdelphij        break;
130296341Sdelphij    case SSL2_ST_SEND_CLIENT_HELLO_A:
131296341Sdelphij        str = "SSLv2 write client hello A";
132296341Sdelphij        break;
133296341Sdelphij    case SSL2_ST_SEND_CLIENT_HELLO_B:
134296341Sdelphij        str = "SSLv2 write client hello B";
135296341Sdelphij        break;
136296341Sdelphij    case SSL2_ST_GET_SERVER_HELLO_A:
137296341Sdelphij        str = "SSLv2 read server hello A";
138296341Sdelphij        break;
139296341Sdelphij    case SSL2_ST_GET_SERVER_HELLO_B:
140296341Sdelphij        str = "SSLv2 read server hello B";
141296341Sdelphij        break;
142296341Sdelphij    case SSL2_ST_SEND_CLIENT_MASTER_KEY_A:
143296341Sdelphij        str = "SSLv2 write client master key A";
144296341Sdelphij        break;
145296341Sdelphij    case SSL2_ST_SEND_CLIENT_MASTER_KEY_B:
146296341Sdelphij        str = "SSLv2 write client master key B";
147296341Sdelphij        break;
148296341Sdelphij    case SSL2_ST_SEND_CLIENT_FINISHED_A:
149296341Sdelphij        str = "SSLv2 write client finished A";
150296341Sdelphij        break;
151296341Sdelphij    case SSL2_ST_SEND_CLIENT_FINISHED_B:
152296341Sdelphij        str = "SSLv2 write client finished B";
153296341Sdelphij        break;
154296341Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_A:
155296341Sdelphij        str = "SSLv2 write client certificate A";
156296341Sdelphij        break;
157296341Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_B:
158296341Sdelphij        str = "SSLv2 write client certificate B";
159296341Sdelphij        break;
160296341Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_C:
161296341Sdelphij        str = "SSLv2 write client certificate C";
162296341Sdelphij        break;
163296341Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_D:
164296341Sdelphij        str = "SSLv2 write client certificate D";
165296341Sdelphij        break;
166296341Sdelphij    case SSL2_ST_GET_SERVER_VERIFY_A:
167296341Sdelphij        str = "SSLv2 read server verify A";
168296341Sdelphij        break;
169296341Sdelphij    case SSL2_ST_GET_SERVER_VERIFY_B:
170296341Sdelphij        str = "SSLv2 read server verify B";
171296341Sdelphij        break;
172296341Sdelphij    case SSL2_ST_GET_SERVER_FINISHED_A:
173296341Sdelphij        str = "SSLv2 read server finished A";
174296341Sdelphij        break;
175296341Sdelphij    case SSL2_ST_GET_SERVER_FINISHED_B:
176296341Sdelphij        str = "SSLv2 read server finished B";
177296341Sdelphij        break;
178296341Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_A:
179296341Sdelphij        str = "SSLv2 read client hello A";
180296341Sdelphij        break;
181296341Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_B:
182296341Sdelphij        str = "SSLv2 read client hello B";
183296341Sdelphij        break;
184296341Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_C:
185296341Sdelphij        str = "SSLv2 read client hello C";
186296341Sdelphij        break;
187296341Sdelphij    case SSL2_ST_SEND_SERVER_HELLO_A:
188296341Sdelphij        str = "SSLv2 write server hello A";
189296341Sdelphij        break;
190296341Sdelphij    case SSL2_ST_SEND_SERVER_HELLO_B:
191296341Sdelphij        str = "SSLv2 write server hello B";
192296341Sdelphij        break;
193296341Sdelphij    case SSL2_ST_GET_CLIENT_MASTER_KEY_A:
194296341Sdelphij        str = "SSLv2 read client master key A";
195296341Sdelphij        break;
196296341Sdelphij    case SSL2_ST_GET_CLIENT_MASTER_KEY_B:
197296341Sdelphij        str = "SSLv2 read client master key B";
198296341Sdelphij        break;
199296341Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_A:
200296341Sdelphij        str = "SSLv2 write server verify A";
201296341Sdelphij        break;
202296341Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_B:
203296341Sdelphij        str = "SSLv2 write server verify B";
204296341Sdelphij        break;
205296341Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_C:
206296341Sdelphij        str = "SSLv2 write server verify C";
207296341Sdelphij        break;
208296341Sdelphij    case SSL2_ST_GET_CLIENT_FINISHED_A:
209296341Sdelphij        str = "SSLv2 read client finished A";
210296341Sdelphij        break;
211296341Sdelphij    case SSL2_ST_GET_CLIENT_FINISHED_B:
212296341Sdelphij        str = "SSLv2 read client finished B";
213296341Sdelphij        break;
214296341Sdelphij    case SSL2_ST_SEND_SERVER_FINISHED_A:
215296341Sdelphij        str = "SSLv2 write server finished A";
216296341Sdelphij        break;
217296341Sdelphij    case SSL2_ST_SEND_SERVER_FINISHED_B:
218296341Sdelphij        str = "SSLv2 write server finished B";
219296341Sdelphij        break;
220296341Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_A:
221296341Sdelphij        str = "SSLv2 write request certificate A";
222296341Sdelphij        break;
223296341Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_B:
224296341Sdelphij        str = "SSLv2 write request certificate B";
225296341Sdelphij        break;
226296341Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_C:
227296341Sdelphij        str = "SSLv2 write request certificate C";
228296341Sdelphij        break;
229296341Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_D:
230296341Sdelphij        str = "SSLv2 write request certificate D";
231296341Sdelphij        break;
232296341Sdelphij    case SSL2_ST_X509_GET_SERVER_CERTIFICATE:
233296341Sdelphij        str = "SSLv2 X509 read server certificate";
234296341Sdelphij        break;
235296341Sdelphij    case SSL2_ST_X509_GET_CLIENT_CERTIFICATE:
236296341Sdelphij        str = "SSLv2 X509 read client certificate";
237296341Sdelphij        break;
23855714Skris#endif
23955714Skris
240109998Smarkm#ifndef OPENSSL_NO_SSL3
24155714Skris/* SSLv3 additions */
242296341Sdelphij    case SSL3_ST_CW_CLNT_HELLO_A:
243296341Sdelphij        str = "SSLv3 write client hello A";
244296341Sdelphij        break;
245296341Sdelphij    case SSL3_ST_CW_CLNT_HELLO_B:
246296341Sdelphij        str = "SSLv3 write client hello B";
247296341Sdelphij        break;
248296341Sdelphij    case SSL3_ST_CR_SRVR_HELLO_A:
249296341Sdelphij        str = "SSLv3 read server hello A";
250296341Sdelphij        break;
251296341Sdelphij    case SSL3_ST_CR_SRVR_HELLO_B:
252296341Sdelphij        str = "SSLv3 read server hello B";
253296341Sdelphij        break;
254296341Sdelphij    case SSL3_ST_CR_CERT_A:
255296341Sdelphij        str = "SSLv3 read server certificate A";
256296341Sdelphij        break;
257296341Sdelphij    case SSL3_ST_CR_CERT_B:
258296341Sdelphij        str = "SSLv3 read server certificate B";
259296341Sdelphij        break;
260296341Sdelphij    case SSL3_ST_CR_KEY_EXCH_A:
261296341Sdelphij        str = "SSLv3 read server key exchange A";
262296341Sdelphij        break;
263296341Sdelphij    case SSL3_ST_CR_KEY_EXCH_B:
264296341Sdelphij        str = "SSLv3 read server key exchange B";
265296341Sdelphij        break;
266296341Sdelphij    case SSL3_ST_CR_CERT_REQ_A:
267296341Sdelphij        str = "SSLv3 read server certificate request A";
268296341Sdelphij        break;
269296341Sdelphij    case SSL3_ST_CR_CERT_REQ_B:
270296341Sdelphij        str = "SSLv3 read server certificate request B";
271296341Sdelphij        break;
272296341Sdelphij    case SSL3_ST_CR_SESSION_TICKET_A:
273296341Sdelphij        str = "SSLv3 read server session ticket A";
274296341Sdelphij        break;
275296341Sdelphij    case SSL3_ST_CR_SESSION_TICKET_B:
276296341Sdelphij        str = "SSLv3 read server session ticket B";
277296341Sdelphij        break;
278296341Sdelphij    case SSL3_ST_CR_SRVR_DONE_A:
279296341Sdelphij        str = "SSLv3 read server done A";
280296341Sdelphij        break;
281296341Sdelphij    case SSL3_ST_CR_SRVR_DONE_B:
282296341Sdelphij        str = "SSLv3 read server done B";
283296341Sdelphij        break;
284296341Sdelphij    case SSL3_ST_CW_CERT_A:
285296341Sdelphij        str = "SSLv3 write client certificate A";
286296341Sdelphij        break;
287296341Sdelphij    case SSL3_ST_CW_CERT_B:
288296341Sdelphij        str = "SSLv3 write client certificate B";
289296341Sdelphij        break;
290296341Sdelphij    case SSL3_ST_CW_CERT_C:
291296341Sdelphij        str = "SSLv3 write client certificate C";
292296341Sdelphij        break;
293296341Sdelphij    case SSL3_ST_CW_CERT_D:
294296341Sdelphij        str = "SSLv3 write client certificate D";
295296341Sdelphij        break;
296296341Sdelphij    case SSL3_ST_CW_KEY_EXCH_A:
297296341Sdelphij        str = "SSLv3 write client key exchange A";
298296341Sdelphij        break;
299296341Sdelphij    case SSL3_ST_CW_KEY_EXCH_B:
300296341Sdelphij        str = "SSLv3 write client key exchange B";
301296341Sdelphij        break;
302296341Sdelphij    case SSL3_ST_CW_CERT_VRFY_A:
303296341Sdelphij        str = "SSLv3 write certificate verify A";
304296341Sdelphij        break;
305296341Sdelphij    case SSL3_ST_CW_CERT_VRFY_B:
306296341Sdelphij        str = "SSLv3 write certificate verify B";
307296341Sdelphij        break;
30855714Skris
309296341Sdelphij    case SSL3_ST_CW_CHANGE_A:
310296341Sdelphij    case SSL3_ST_SW_CHANGE_A:
311296341Sdelphij        str = "SSLv3 write change cipher spec A";
312296341Sdelphij        break;
313296341Sdelphij    case SSL3_ST_CW_CHANGE_B:
314296341Sdelphij    case SSL3_ST_SW_CHANGE_B:
315296341Sdelphij        str = "SSLv3 write change cipher spec B";
316296341Sdelphij        break;
317296341Sdelphij    case SSL3_ST_CW_FINISHED_A:
318296341Sdelphij    case SSL3_ST_SW_FINISHED_A:
319296341Sdelphij        str = "SSLv3 write finished A";
320296341Sdelphij        break;
321296341Sdelphij    case SSL3_ST_CW_FINISHED_B:
322296341Sdelphij    case SSL3_ST_SW_FINISHED_B:
323296341Sdelphij        str = "SSLv3 write finished B";
324296341Sdelphij        break;
325296341Sdelphij    case SSL3_ST_CR_CHANGE_A:
326296341Sdelphij    case SSL3_ST_SR_CHANGE_A:
327296341Sdelphij        str = "SSLv3 read change cipher spec A";
328296341Sdelphij        break;
329296341Sdelphij    case SSL3_ST_CR_CHANGE_B:
330296341Sdelphij    case SSL3_ST_SR_CHANGE_B:
331296341Sdelphij        str = "SSLv3 read change cipher spec B";
332296341Sdelphij        break;
333296341Sdelphij    case SSL3_ST_CR_FINISHED_A:
334296341Sdelphij    case SSL3_ST_SR_FINISHED_A:
335296341Sdelphij        str = "SSLv3 read finished A";
336296341Sdelphij        break;
337296341Sdelphij    case SSL3_ST_CR_FINISHED_B:
338296341Sdelphij    case SSL3_ST_SR_FINISHED_B:
339296341Sdelphij        str = "SSLv3 read finished B";
340296341Sdelphij        break;
34155714Skris
342296341Sdelphij    case SSL3_ST_CW_FLUSH:
343296341Sdelphij    case SSL3_ST_SW_FLUSH:
344296341Sdelphij        str = "SSLv3 flush data";
345296341Sdelphij        break;
34655714Skris
347296341Sdelphij    case SSL3_ST_SR_CLNT_HELLO_A:
348296341Sdelphij        str = "SSLv3 read client hello A";
349296341Sdelphij        break;
350296341Sdelphij    case SSL3_ST_SR_CLNT_HELLO_B:
351296341Sdelphij        str = "SSLv3 read client hello B";
352296341Sdelphij        break;
353296341Sdelphij    case SSL3_ST_SR_CLNT_HELLO_C:
354296341Sdelphij        str = "SSLv3 read client hello C";
355296341Sdelphij        break;
356296341Sdelphij    case SSL3_ST_SW_HELLO_REQ_A:
357296341Sdelphij        str = "SSLv3 write hello request A";
358296341Sdelphij        break;
359296341Sdelphij    case SSL3_ST_SW_HELLO_REQ_B:
360296341Sdelphij        str = "SSLv3 write hello request B";
361296341Sdelphij        break;
362296341Sdelphij    case SSL3_ST_SW_HELLO_REQ_C:
363296341Sdelphij        str = "SSLv3 write hello request C";
364296341Sdelphij        break;
365296341Sdelphij    case SSL3_ST_SW_SRVR_HELLO_A:
366296341Sdelphij        str = "SSLv3 write server hello A";
367296341Sdelphij        break;
368296341Sdelphij    case SSL3_ST_SW_SRVR_HELLO_B:
369296341Sdelphij        str = "SSLv3 write server hello B";
370296341Sdelphij        break;
371296341Sdelphij    case SSL3_ST_SW_CERT_A:
372296341Sdelphij        str = "SSLv3 write certificate A";
373296341Sdelphij        break;
374296341Sdelphij    case SSL3_ST_SW_CERT_B:
375296341Sdelphij        str = "SSLv3 write certificate B";
376296341Sdelphij        break;
377296341Sdelphij    case SSL3_ST_SW_KEY_EXCH_A:
378296341Sdelphij        str = "SSLv3 write key exchange A";
379296341Sdelphij        break;
380296341Sdelphij    case SSL3_ST_SW_KEY_EXCH_B:
381296341Sdelphij        str = "SSLv3 write key exchange B";
382296341Sdelphij        break;
383296341Sdelphij    case SSL3_ST_SW_CERT_REQ_A:
384296341Sdelphij        str = "SSLv3 write certificate request A";
385296341Sdelphij        break;
386296341Sdelphij    case SSL3_ST_SW_CERT_REQ_B:
387296341Sdelphij        str = "SSLv3 write certificate request B";
388296341Sdelphij        break;
389296341Sdelphij    case SSL3_ST_SW_SESSION_TICKET_A:
390296341Sdelphij        str = "SSLv3 write session ticket A";
391296341Sdelphij        break;
392296341Sdelphij    case SSL3_ST_SW_SESSION_TICKET_B:
393296341Sdelphij        str = "SSLv3 write session ticket B";
394296341Sdelphij        break;
395296341Sdelphij    case SSL3_ST_SW_SRVR_DONE_A:
396296341Sdelphij        str = "SSLv3 write server done A";
397296341Sdelphij        break;
398296341Sdelphij    case SSL3_ST_SW_SRVR_DONE_B:
399296341Sdelphij        str = "SSLv3 write server done B";
400296341Sdelphij        break;
401296341Sdelphij    case SSL3_ST_SR_CERT_A:
402296341Sdelphij        str = "SSLv3 read client certificate A";
403296341Sdelphij        break;
404296341Sdelphij    case SSL3_ST_SR_CERT_B:
405296341Sdelphij        str = "SSLv3 read client certificate B";
406296341Sdelphij        break;
407296341Sdelphij    case SSL3_ST_SR_KEY_EXCH_A:
408296341Sdelphij        str = "SSLv3 read client key exchange A";
409296341Sdelphij        break;
410296341Sdelphij    case SSL3_ST_SR_KEY_EXCH_B:
411296341Sdelphij        str = "SSLv3 read client key exchange B";
412296341Sdelphij        break;
413296341Sdelphij    case SSL3_ST_SR_CERT_VRFY_A:
414296341Sdelphij        str = "SSLv3 read certificate verify A";
415296341Sdelphij        break;
416296341Sdelphij    case SSL3_ST_SR_CERT_VRFY_B:
417296341Sdelphij        str = "SSLv3 read certificate verify B";
418296341Sdelphij        break;
41955714Skris#endif
42055714Skris
42159191Skris/* SSLv2/v3 compatibility states */
42255714Skris/* client */
423296341Sdelphij    case SSL23_ST_CW_CLNT_HELLO_A:
424296341Sdelphij        str = "SSLv2/v3 write client hello A";
425296341Sdelphij        break;
426296341Sdelphij    case SSL23_ST_CW_CLNT_HELLO_B:
427296341Sdelphij        str = "SSLv2/v3 write client hello B";
428296341Sdelphij        break;
429296341Sdelphij    case SSL23_ST_CR_SRVR_HELLO_A:
430296341Sdelphij        str = "SSLv2/v3 read server hello A";
431296341Sdelphij        break;
432296341Sdelphij    case SSL23_ST_CR_SRVR_HELLO_B:
433296341Sdelphij        str = "SSLv2/v3 read server hello B";
434296341Sdelphij        break;
43555714Skris/* server */
436296341Sdelphij    case SSL23_ST_SR_CLNT_HELLO_A:
437296341Sdelphij        str = "SSLv2/v3 read client hello A";
438296341Sdelphij        break;
439296341Sdelphij    case SSL23_ST_SR_CLNT_HELLO_B:
440296341Sdelphij        str = "SSLv2/v3 read client hello B";
441296341Sdelphij        break;
44255714Skris
443205128Ssimon/* DTLS */
444296341Sdelphij    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
445296341Sdelphij        str = "DTLS1 read hello verify request A";
446296341Sdelphij        break;
447296341Sdelphij    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
448296341Sdelphij        str = "DTLS1 read hello verify request B";
449296341Sdelphij        break;
450296341Sdelphij    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
451296341Sdelphij        str = "DTLS1 write hello verify request A";
452296341Sdelphij        break;
453296341Sdelphij    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B:
454296341Sdelphij        str = "DTLS1 write hello verify request B";
455296341Sdelphij        break;
456205128Ssimon
457296341Sdelphij    default:
458296341Sdelphij        str = "unknown state";
459296341Sdelphij        break;
460296341Sdelphij    }
461296341Sdelphij    return (str);
462296341Sdelphij}
46355714Skris
464109998Smarkmconst char *SSL_rstate_string_long(const SSL *s)
465296341Sdelphij{
466296341Sdelphij    const char *str;
46755714Skris
468296341Sdelphij    switch (s->rstate) {
469296341Sdelphij    case SSL_ST_READ_HEADER:
470296341Sdelphij        str = "read header";
471296341Sdelphij        break;
472296341Sdelphij    case SSL_ST_READ_BODY:
473296341Sdelphij        str = "read body";
474296341Sdelphij        break;
475296341Sdelphij    case SSL_ST_READ_DONE:
476296341Sdelphij        str = "read done";
477296341Sdelphij        break;
478296341Sdelphij    default:
479296341Sdelphij        str = "unknown";
480296341Sdelphij        break;
481296341Sdelphij    }
482296341Sdelphij    return (str);
483296341Sdelphij}
48455714Skris
485109998Smarkmconst char *SSL_state_string(const SSL *s)
486296341Sdelphij{
487296341Sdelphij    const char *str;
48855714Skris
489296341Sdelphij    switch (s->state) {
490296341Sdelphij    case SSL_ST_BEFORE:
491296341Sdelphij        str = "PINIT ";
492296341Sdelphij        break;
493296341Sdelphij    case SSL_ST_ACCEPT:
494296341Sdelphij        str = "AINIT ";
495296341Sdelphij        break;
496296341Sdelphij    case SSL_ST_CONNECT:
497296341Sdelphij        str = "CINIT ";
498296341Sdelphij        break;
499296341Sdelphij    case SSL_ST_OK:
500296341Sdelphij        str = "SSLOK ";
501296341Sdelphij        break;
502296341Sdelphij    case SSL_ST_ERR:
503296341Sdelphij        str = "SSLERR";
504296341Sdelphij        break;
505109998Smarkm#ifndef OPENSSL_NO_SSL2
506296341Sdelphij    case SSL2_ST_CLIENT_START_ENCRYPTION:
507296341Sdelphij        str = "2CSENC";
508296341Sdelphij        break;
509296341Sdelphij    case SSL2_ST_SERVER_START_ENCRYPTION:
510296341Sdelphij        str = "2SSENC";
511296341Sdelphij        break;
512296341Sdelphij    case SSL2_ST_SEND_CLIENT_HELLO_A:
513296341Sdelphij        str = "2SCH_A";
514296341Sdelphij        break;
515296341Sdelphij    case SSL2_ST_SEND_CLIENT_HELLO_B:
516296341Sdelphij        str = "2SCH_B";
517296341Sdelphij        break;
518296341Sdelphij    case SSL2_ST_GET_SERVER_HELLO_A:
519296341Sdelphij        str = "2GSH_A";
520296341Sdelphij        break;
521296341Sdelphij    case SSL2_ST_GET_SERVER_HELLO_B:
522296341Sdelphij        str = "2GSH_B";
523296341Sdelphij        break;
524296341Sdelphij    case SSL2_ST_SEND_CLIENT_MASTER_KEY_A:
525296341Sdelphij        str = "2SCMKA";
526296341Sdelphij        break;
527296341Sdelphij    case SSL2_ST_SEND_CLIENT_MASTER_KEY_B:
528296341Sdelphij        str = "2SCMKB";
529296341Sdelphij        break;
530296341Sdelphij    case SSL2_ST_SEND_CLIENT_FINISHED_A:
531296341Sdelphij        str = "2SCF_A";
532296341Sdelphij        break;
533296341Sdelphij    case SSL2_ST_SEND_CLIENT_FINISHED_B:
534296341Sdelphij        str = "2SCF_B";
535296341Sdelphij        break;
536296341Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_A:
537296341Sdelphij        str = "2SCC_A";
538296341Sdelphij        break;
539296341Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_B:
540296341Sdelphij        str = "2SCC_B";
541296341Sdelphij        break;
542296341Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_C:
543296341Sdelphij        str = "2SCC_C";
544296341Sdelphij        break;
545296341Sdelphij    case SSL2_ST_SEND_CLIENT_CERTIFICATE_D:
546296341Sdelphij        str = "2SCC_D";
547296341Sdelphij        break;
548296341Sdelphij    case SSL2_ST_GET_SERVER_VERIFY_A:
549296341Sdelphij        str = "2GSV_A";
550296341Sdelphij        break;
551296341Sdelphij    case SSL2_ST_GET_SERVER_VERIFY_B:
552296341Sdelphij        str = "2GSV_B";
553296341Sdelphij        break;
554296341Sdelphij    case SSL2_ST_GET_SERVER_FINISHED_A:
555296341Sdelphij        str = "2GSF_A";
556296341Sdelphij        break;
557296341Sdelphij    case SSL2_ST_GET_SERVER_FINISHED_B:
558296341Sdelphij        str = "2GSF_B";
559296341Sdelphij        break;
560296341Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_A:
561296341Sdelphij        str = "2GCH_A";
562296341Sdelphij        break;
563296341Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_B:
564296341Sdelphij        str = "2GCH_B";
565296341Sdelphij        break;
566296341Sdelphij    case SSL2_ST_GET_CLIENT_HELLO_C:
567296341Sdelphij        str = "2GCH_C";
568296341Sdelphij        break;
569296341Sdelphij    case SSL2_ST_SEND_SERVER_HELLO_A:
570296341Sdelphij        str = "2SSH_A";
571296341Sdelphij        break;
572296341Sdelphij    case SSL2_ST_SEND_SERVER_HELLO_B:
573296341Sdelphij        str = "2SSH_B";
574296341Sdelphij        break;
575296341Sdelphij    case SSL2_ST_GET_CLIENT_MASTER_KEY_A:
576296341Sdelphij        str = "2GCMKA";
577296341Sdelphij        break;
578296341Sdelphij    case SSL2_ST_GET_CLIENT_MASTER_KEY_B:
579296341Sdelphij        str = "2GCMKA";
580296341Sdelphij        break;
581296341Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_A:
582296341Sdelphij        str = "2SSV_A";
583296341Sdelphij        break;
584296341Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_B:
585296341Sdelphij        str = "2SSV_B";
586296341Sdelphij        break;
587296341Sdelphij    case SSL2_ST_SEND_SERVER_VERIFY_C:
588296341Sdelphij        str = "2SSV_C";
589296341Sdelphij        break;
590296341Sdelphij    case SSL2_ST_GET_CLIENT_FINISHED_A:
591296341Sdelphij        str = "2GCF_A";
592296341Sdelphij        break;
593296341Sdelphij    case SSL2_ST_GET_CLIENT_FINISHED_B:
594296341Sdelphij        str = "2GCF_B";
595296341Sdelphij        break;
596296341Sdelphij    case SSL2_ST_SEND_SERVER_FINISHED_A:
597296341Sdelphij        str = "2SSF_A";
598296341Sdelphij        break;
599296341Sdelphij    case SSL2_ST_SEND_SERVER_FINISHED_B:
600296341Sdelphij        str = "2SSF_B";
601296341Sdelphij        break;
602296341Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_A:
603296341Sdelphij        str = "2SRC_A";
604296341Sdelphij        break;
605296341Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_B:
606296341Sdelphij        str = "2SRC_B";
607296341Sdelphij        break;
608296341Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_C:
609296341Sdelphij        str = "2SRC_C";
610296341Sdelphij        break;
611296341Sdelphij    case SSL2_ST_SEND_REQUEST_CERTIFICATE_D:
612296341Sdelphij        str = "2SRC_D";
613296341Sdelphij        break;
614296341Sdelphij    case SSL2_ST_X509_GET_SERVER_CERTIFICATE:
615296341Sdelphij        str = "2X9GSC";
616296341Sdelphij        break;
617296341Sdelphij    case SSL2_ST_X509_GET_CLIENT_CERTIFICATE:
618296341Sdelphij        str = "2X9GCC";
619296341Sdelphij        break;
62055714Skris#endif
62155714Skris
622109998Smarkm#ifndef OPENSSL_NO_SSL3
62355714Skris/* SSLv3 additions */
624296341Sdelphij    case SSL3_ST_SW_FLUSH:
625296341Sdelphij    case SSL3_ST_CW_FLUSH:
626296341Sdelphij        str = "3FLUSH";
627296341Sdelphij        break;
628296341Sdelphij    case SSL3_ST_CW_CLNT_HELLO_A:
629296341Sdelphij        str = "3WCH_A";
630296341Sdelphij        break;
631296341Sdelphij    case SSL3_ST_CW_CLNT_HELLO_B:
632296341Sdelphij        str = "3WCH_B";
633296341Sdelphij        break;
634296341Sdelphij    case SSL3_ST_CR_SRVR_HELLO_A:
635296341Sdelphij        str = "3RSH_A";
636296341Sdelphij        break;
637296341Sdelphij    case SSL3_ST_CR_SRVR_HELLO_B:
638296341Sdelphij        str = "3RSH_B";
639296341Sdelphij        break;
640296341Sdelphij    case SSL3_ST_CR_CERT_A:
641296341Sdelphij        str = "3RSC_A";
642296341Sdelphij        break;
643296341Sdelphij    case SSL3_ST_CR_CERT_B:
644296341Sdelphij        str = "3RSC_B";
645296341Sdelphij        break;
646296341Sdelphij    case SSL3_ST_CR_KEY_EXCH_A:
647296341Sdelphij        str = "3RSKEA";
648296341Sdelphij        break;
649296341Sdelphij    case SSL3_ST_CR_KEY_EXCH_B:
650296341Sdelphij        str = "3RSKEB";
651296341Sdelphij        break;
652296341Sdelphij    case SSL3_ST_CR_CERT_REQ_A:
653296341Sdelphij        str = "3RCR_A";
654296341Sdelphij        break;
655296341Sdelphij    case SSL3_ST_CR_CERT_REQ_B:
656296341Sdelphij        str = "3RCR_B";
657296341Sdelphij        break;
658296341Sdelphij    case SSL3_ST_CR_SRVR_DONE_A:
659296341Sdelphij        str = "3RSD_A";
660296341Sdelphij        break;
661296341Sdelphij    case SSL3_ST_CR_SRVR_DONE_B:
662296341Sdelphij        str = "3RSD_B";
663296341Sdelphij        break;
664296341Sdelphij    case SSL3_ST_CW_CERT_A:
665296341Sdelphij        str = "3WCC_A";
666296341Sdelphij        break;
667296341Sdelphij    case SSL3_ST_CW_CERT_B:
668296341Sdelphij        str = "3WCC_B";
669296341Sdelphij        break;
670296341Sdelphij    case SSL3_ST_CW_CERT_C:
671296341Sdelphij        str = "3WCC_C";
672296341Sdelphij        break;
673296341Sdelphij    case SSL3_ST_CW_CERT_D:
674296341Sdelphij        str = "3WCC_D";
675296341Sdelphij        break;
676296341Sdelphij    case SSL3_ST_CW_KEY_EXCH_A:
677296341Sdelphij        str = "3WCKEA";
678296341Sdelphij        break;
679296341Sdelphij    case SSL3_ST_CW_KEY_EXCH_B:
680296341Sdelphij        str = "3WCKEB";
681296341Sdelphij        break;
682296341Sdelphij    case SSL3_ST_CW_CERT_VRFY_A:
683296341Sdelphij        str = "3WCV_A";
684296341Sdelphij        break;
685296341Sdelphij    case SSL3_ST_CW_CERT_VRFY_B:
686296341Sdelphij        str = "3WCV_B";
687296341Sdelphij        break;
68855714Skris
689296341Sdelphij    case SSL3_ST_SW_CHANGE_A:
690296341Sdelphij    case SSL3_ST_CW_CHANGE_A:
691296341Sdelphij        str = "3WCCSA";
692296341Sdelphij        break;
693296341Sdelphij    case SSL3_ST_SW_CHANGE_B:
694296341Sdelphij    case SSL3_ST_CW_CHANGE_B:
695296341Sdelphij        str = "3WCCSB";
696296341Sdelphij        break;
697296341Sdelphij    case SSL3_ST_SW_FINISHED_A:
698296341Sdelphij    case SSL3_ST_CW_FINISHED_A:
699296341Sdelphij        str = "3WFINA";
700296341Sdelphij        break;
701296341Sdelphij    case SSL3_ST_SW_FINISHED_B:
702296341Sdelphij    case SSL3_ST_CW_FINISHED_B:
703296341Sdelphij        str = "3WFINB";
704296341Sdelphij        break;
705296341Sdelphij    case SSL3_ST_SR_CHANGE_A:
706296341Sdelphij    case SSL3_ST_CR_CHANGE_A:
707296341Sdelphij        str = "3RCCSA";
708296341Sdelphij        break;
709296341Sdelphij    case SSL3_ST_SR_CHANGE_B:
710296341Sdelphij    case SSL3_ST_CR_CHANGE_B:
711296341Sdelphij        str = "3RCCSB";
712296341Sdelphij        break;
713296341Sdelphij    case SSL3_ST_SR_FINISHED_A:
714296341Sdelphij    case SSL3_ST_CR_FINISHED_A:
715296341Sdelphij        str = "3RFINA";
716296341Sdelphij        break;
717296341Sdelphij    case SSL3_ST_SR_FINISHED_B:
718296341Sdelphij    case SSL3_ST_CR_FINISHED_B:
719296341Sdelphij        str = "3RFINB";
720296341Sdelphij        break;
72155714Skris
722296341Sdelphij    case SSL3_ST_SW_HELLO_REQ_A:
723296341Sdelphij        str = "3WHR_A";
724296341Sdelphij        break;
725296341Sdelphij    case SSL3_ST_SW_HELLO_REQ_B:
726296341Sdelphij        str = "3WHR_B";
727296341Sdelphij        break;
728296341Sdelphij    case SSL3_ST_SW_HELLO_REQ_C:
729296341Sdelphij        str = "3WHR_C";
730296341Sdelphij        break;
731296341Sdelphij    case SSL3_ST_SR_CLNT_HELLO_A:
732296341Sdelphij        str = "3RCH_A";
733296341Sdelphij        break;
734296341Sdelphij    case SSL3_ST_SR_CLNT_HELLO_B:
735296341Sdelphij        str = "3RCH_B";
736296341Sdelphij        break;
737296341Sdelphij    case SSL3_ST_SR_CLNT_HELLO_C:
738296341Sdelphij        str = "3RCH_C";
739296341Sdelphij        break;
740296341Sdelphij    case SSL3_ST_SW_SRVR_HELLO_A:
741296341Sdelphij        str = "3WSH_A";
742296341Sdelphij        break;
743296341Sdelphij    case SSL3_ST_SW_SRVR_HELLO_B:
744296341Sdelphij        str = "3WSH_B";
745296341Sdelphij        break;
746296341Sdelphij    case SSL3_ST_SW_CERT_A:
747296341Sdelphij        str = "3WSC_A";
748296341Sdelphij        break;
749296341Sdelphij    case SSL3_ST_SW_CERT_B:
750296341Sdelphij        str = "3WSC_B";
751296341Sdelphij        break;
752296341Sdelphij    case SSL3_ST_SW_KEY_EXCH_A:
753296341Sdelphij        str = "3WSKEA";
754296341Sdelphij        break;
755296341Sdelphij    case SSL3_ST_SW_KEY_EXCH_B:
756296341Sdelphij        str = "3WSKEB";
757296341Sdelphij        break;
758296341Sdelphij    case SSL3_ST_SW_CERT_REQ_A:
759296341Sdelphij        str = "3WCR_A";
760296341Sdelphij        break;
761296341Sdelphij    case SSL3_ST_SW_CERT_REQ_B:
762296341Sdelphij        str = "3WCR_B";
763296341Sdelphij        break;
764296341Sdelphij    case SSL3_ST_SW_SRVR_DONE_A:
765296341Sdelphij        str = "3WSD_A";
766296341Sdelphij        break;
767296341Sdelphij    case SSL3_ST_SW_SRVR_DONE_B:
768296341Sdelphij        str = "3WSD_B";
769296341Sdelphij        break;
770296341Sdelphij    case SSL3_ST_SR_CERT_A:
771296341Sdelphij        str = "3RCC_A";
772296341Sdelphij        break;
773296341Sdelphij    case SSL3_ST_SR_CERT_B:
774296341Sdelphij        str = "3RCC_B";
775296341Sdelphij        break;
776296341Sdelphij    case SSL3_ST_SR_KEY_EXCH_A:
777296341Sdelphij        str = "3RCKEA";
778296341Sdelphij        break;
779296341Sdelphij    case SSL3_ST_SR_KEY_EXCH_B:
780296341Sdelphij        str = "3RCKEB";
781296341Sdelphij        break;
782296341Sdelphij    case SSL3_ST_SR_CERT_VRFY_A:
783296341Sdelphij        str = "3RCV_A";
784296341Sdelphij        break;
785296341Sdelphij    case SSL3_ST_SR_CERT_VRFY_B:
786296341Sdelphij        str = "3RCV_B";
787296341Sdelphij        break;
78855714Skris#endif
78955714Skris
79059191Skris/* SSLv2/v3 compatibility states */
79155714Skris/* client */
792296341Sdelphij    case SSL23_ST_CW_CLNT_HELLO_A:
793296341Sdelphij        str = "23WCHA";
794296341Sdelphij        break;
795296341Sdelphij    case SSL23_ST_CW_CLNT_HELLO_B:
796296341Sdelphij        str = "23WCHB";
797296341Sdelphij        break;
798296341Sdelphij    case SSL23_ST_CR_SRVR_HELLO_A:
799296341Sdelphij        str = "23RSHA";
800296341Sdelphij        break;
801296341Sdelphij    case SSL23_ST_CR_SRVR_HELLO_B:
802296341Sdelphij        str = "23RSHA";
803296341Sdelphij        break;
80455714Skris/* server */
805296341Sdelphij    case SSL23_ST_SR_CLNT_HELLO_A:
806296341Sdelphij        str = "23RCHA";
807296341Sdelphij        break;
808296341Sdelphij    case SSL23_ST_SR_CLNT_HELLO_B:
809296341Sdelphij        str = "23RCHB";
810296341Sdelphij        break;
811269686Sjkim
812205128Ssimon/* DTLS */
813296341Sdelphij    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
814296341Sdelphij        str = "DRCHVA";
815296341Sdelphij        break;
816296341Sdelphij    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
817296341Sdelphij        str = "DRCHVB";
818296341Sdelphij        break;
819296341Sdelphij    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
820296341Sdelphij        str = "DWCHVA";
821296341Sdelphij        break;
822296341Sdelphij    case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B:
823296341Sdelphij        str = "DWCHVB";
824296341Sdelphij        break;
82555714Skris
826296341Sdelphij    default:
827296341Sdelphij        str = "UNKWN ";
828296341Sdelphij        break;
829296341Sdelphij    }
830296341Sdelphij    return (str);
831296341Sdelphij}
83255714Skris
833109998Smarkmconst char *SSL_alert_type_string_long(int value)
834296341Sdelphij{
835296341Sdelphij    value >>= 8;
836296341Sdelphij    if (value == SSL3_AL_WARNING)
837296341Sdelphij        return ("warning");
838296341Sdelphij    else if (value == SSL3_AL_FATAL)
839296341Sdelphij        return ("fatal");
840296341Sdelphij    else
841296341Sdelphij        return ("unknown");
842296341Sdelphij}
84355714Skris
844109998Smarkmconst char *SSL_alert_type_string(int value)
845296341Sdelphij{
846296341Sdelphij    value >>= 8;
847296341Sdelphij    if (value == SSL3_AL_WARNING)
848296341Sdelphij        return ("W");
849296341Sdelphij    else if (value == SSL3_AL_FATAL)
850296341Sdelphij        return ("F");
851296341Sdelphij    else
852296341Sdelphij        return ("U");
853296341Sdelphij}
85455714Skris
855109998Smarkmconst char *SSL_alert_desc_string(int value)
856296341Sdelphij{
857296341Sdelphij    const char *str;
85855714Skris
859296341Sdelphij    switch (value & 0xff) {
860296341Sdelphij    case SSL3_AD_CLOSE_NOTIFY:
861296341Sdelphij        str = "CN";
862296341Sdelphij        break;
863296341Sdelphij    case SSL3_AD_UNEXPECTED_MESSAGE:
864296341Sdelphij        str = "UM";
865296341Sdelphij        break;
866296341Sdelphij    case SSL3_AD_BAD_RECORD_MAC:
867296341Sdelphij        str = "BM";
868296341Sdelphij        break;
869296341Sdelphij    case SSL3_AD_DECOMPRESSION_FAILURE:
870296341Sdelphij        str = "DF";
871296341Sdelphij        break;
872296341Sdelphij    case SSL3_AD_HANDSHAKE_FAILURE:
873296341Sdelphij        str = "HF";
874296341Sdelphij        break;
875296341Sdelphij    case SSL3_AD_NO_CERTIFICATE:
876296341Sdelphij        str = "NC";
877296341Sdelphij        break;
878296341Sdelphij    case SSL3_AD_BAD_CERTIFICATE:
879296341Sdelphij        str = "BC";
880296341Sdelphij        break;
881296341Sdelphij    case SSL3_AD_UNSUPPORTED_CERTIFICATE:
882296341Sdelphij        str = "UC";
883296341Sdelphij        break;
884296341Sdelphij    case SSL3_AD_CERTIFICATE_REVOKED:
885296341Sdelphij        str = "CR";
886296341Sdelphij        break;
887296341Sdelphij    case SSL3_AD_CERTIFICATE_EXPIRED:
888296341Sdelphij        str = "CE";
889296341Sdelphij        break;
890296341Sdelphij    case SSL3_AD_CERTIFICATE_UNKNOWN:
891296341Sdelphij        str = "CU";
892296341Sdelphij        break;
893296341Sdelphij    case SSL3_AD_ILLEGAL_PARAMETER:
894296341Sdelphij        str = "IP";
895296341Sdelphij        break;
896296341Sdelphij    case TLS1_AD_DECRYPTION_FAILED:
897296341Sdelphij        str = "DC";
898296341Sdelphij        break;
899296341Sdelphij    case TLS1_AD_RECORD_OVERFLOW:
900296341Sdelphij        str = "RO";
901296341Sdelphij        break;
902296341Sdelphij    case TLS1_AD_UNKNOWN_CA:
903296341Sdelphij        str = "CA";
904296341Sdelphij        break;
905296341Sdelphij    case TLS1_AD_ACCESS_DENIED:
906296341Sdelphij        str = "AD";
907296341Sdelphij        break;
908296341Sdelphij    case TLS1_AD_DECODE_ERROR:
909296341Sdelphij        str = "DE";
910296341Sdelphij        break;
911296341Sdelphij    case TLS1_AD_DECRYPT_ERROR:
912296341Sdelphij        str = "CY";
913296341Sdelphij        break;
914296341Sdelphij    case TLS1_AD_EXPORT_RESTRICTION:
915296341Sdelphij        str = "ER";
916296341Sdelphij        break;
917296341Sdelphij    case TLS1_AD_PROTOCOL_VERSION:
918296341Sdelphij        str = "PV";
919296341Sdelphij        break;
920296341Sdelphij    case TLS1_AD_INSUFFICIENT_SECURITY:
921296341Sdelphij        str = "IS";
922296341Sdelphij        break;
923296341Sdelphij    case TLS1_AD_INTERNAL_ERROR:
924296341Sdelphij        str = "IE";
925296341Sdelphij        break;
926296341Sdelphij    case TLS1_AD_USER_CANCELLED:
927296341Sdelphij        str = "US";
928296341Sdelphij        break;
929296341Sdelphij    case TLS1_AD_NO_RENEGOTIATION:
930296341Sdelphij        str = "NR";
931296341Sdelphij        break;
932296341Sdelphij    case TLS1_AD_UNSUPPORTED_EXTENSION:
933296341Sdelphij        str = "UE";
934296341Sdelphij        break;
935296341Sdelphij    case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
936296341Sdelphij        str = "CO";
937296341Sdelphij        break;
938296341Sdelphij    case TLS1_AD_UNRECOGNIZED_NAME:
939296341Sdelphij        str = "UN";
940296341Sdelphij        break;
941296341Sdelphij    case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
942296341Sdelphij        str = "BR";
943296341Sdelphij        break;
944296341Sdelphij    case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
945296341Sdelphij        str = "BH";
946296341Sdelphij        break;
947296341Sdelphij    case TLS1_AD_UNKNOWN_PSK_IDENTITY:
948296341Sdelphij        str = "UP";
949296341Sdelphij        break;
950296341Sdelphij    default:
951296341Sdelphij        str = "UK";
952296341Sdelphij        break;
953296341Sdelphij    }
954296341Sdelphij    return (str);
955296341Sdelphij}
95655714Skris
957109998Smarkmconst char *SSL_alert_desc_string_long(int value)
958296341Sdelphij{
959296341Sdelphij    const char *str;
96055714Skris
961296341Sdelphij    switch (value & 0xff) {
962296341Sdelphij    case SSL3_AD_CLOSE_NOTIFY:
963296341Sdelphij        str = "close notify";
964296341Sdelphij        break;
965296341Sdelphij    case SSL3_AD_UNEXPECTED_MESSAGE:
966296341Sdelphij        str = "unexpected_message";
967296341Sdelphij        break;
968296341Sdelphij    case SSL3_AD_BAD_RECORD_MAC:
969296341Sdelphij        str = "bad record mac";
970296341Sdelphij        break;
971296341Sdelphij    case SSL3_AD_DECOMPRESSION_FAILURE:
972296341Sdelphij        str = "decompression failure";
973296341Sdelphij        break;
974296341Sdelphij    case SSL3_AD_HANDSHAKE_FAILURE:
975296341Sdelphij        str = "handshake failure";
976296341Sdelphij        break;
977296341Sdelphij    case SSL3_AD_NO_CERTIFICATE:
978296341Sdelphij        str = "no certificate";
979296341Sdelphij        break;
980296341Sdelphij    case SSL3_AD_BAD_CERTIFICATE:
981296341Sdelphij        str = "bad certificate";
982296341Sdelphij        break;
983296341Sdelphij    case SSL3_AD_UNSUPPORTED_CERTIFICATE:
984296341Sdelphij        str = "unsupported certificate";
985296341Sdelphij        break;
986296341Sdelphij    case SSL3_AD_CERTIFICATE_REVOKED:
987296341Sdelphij        str = "certificate revoked";
988296341Sdelphij        break;
989296341Sdelphij    case SSL3_AD_CERTIFICATE_EXPIRED:
990296341Sdelphij        str = "certificate expired";
991296341Sdelphij        break;
992296341Sdelphij    case SSL3_AD_CERTIFICATE_UNKNOWN:
993296341Sdelphij        str = "certificate unknown";
994296341Sdelphij        break;
995296341Sdelphij    case SSL3_AD_ILLEGAL_PARAMETER:
996296341Sdelphij        str = "illegal parameter";
997296341Sdelphij        break;
998296341Sdelphij    case TLS1_AD_DECRYPTION_FAILED:
999296341Sdelphij        str = "decryption failed";
1000296341Sdelphij        break;
1001296341Sdelphij    case TLS1_AD_RECORD_OVERFLOW:
1002296341Sdelphij        str = "record overflow";
1003296341Sdelphij        break;
1004296341Sdelphij    case TLS1_AD_UNKNOWN_CA:
1005296341Sdelphij        str = "unknown CA";
1006296341Sdelphij        break;
1007296341Sdelphij    case TLS1_AD_ACCESS_DENIED:
1008296341Sdelphij        str = "access denied";
1009296341Sdelphij        break;
1010296341Sdelphij    case TLS1_AD_DECODE_ERROR:
1011296341Sdelphij        str = "decode error";
1012296341Sdelphij        break;
1013296341Sdelphij    case TLS1_AD_DECRYPT_ERROR:
1014296341Sdelphij        str = "decrypt error";
1015296341Sdelphij        break;
1016296341Sdelphij    case TLS1_AD_EXPORT_RESTRICTION:
1017296341Sdelphij        str = "export restriction";
1018296341Sdelphij        break;
1019296341Sdelphij    case TLS1_AD_PROTOCOL_VERSION:
1020296341Sdelphij        str = "protocol version";
1021296341Sdelphij        break;
1022296341Sdelphij    case TLS1_AD_INSUFFICIENT_SECURITY:
1023296341Sdelphij        str = "insufficient security";
1024296341Sdelphij        break;
1025296341Sdelphij    case TLS1_AD_INTERNAL_ERROR:
1026296341Sdelphij        str = "internal error";
1027296341Sdelphij        break;
1028296341Sdelphij    case TLS1_AD_USER_CANCELLED:
1029296341Sdelphij        str = "user canceled";
1030296341Sdelphij        break;
1031296341Sdelphij    case TLS1_AD_NO_RENEGOTIATION:
1032296341Sdelphij        str = "no renegotiation";
1033296341Sdelphij        break;
1034296341Sdelphij    case TLS1_AD_UNSUPPORTED_EXTENSION:
1035296341Sdelphij        str = "unsupported extension";
1036296341Sdelphij        break;
1037296341Sdelphij    case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
1038296341Sdelphij        str = "certificate unobtainable";
1039296341Sdelphij        break;
1040296341Sdelphij    case TLS1_AD_UNRECOGNIZED_NAME:
1041296341Sdelphij        str = "unrecognized name";
1042296341Sdelphij        break;
1043296341Sdelphij    case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
1044296341Sdelphij        str = "bad certificate status response";
1045296341Sdelphij        break;
1046296341Sdelphij    case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
1047296341Sdelphij        str = "bad certificate hash value";
1048296341Sdelphij        break;
1049296341Sdelphij    case TLS1_AD_UNKNOWN_PSK_IDENTITY:
1050296341Sdelphij        str = "unknown PSK identity";
1051296341Sdelphij        break;
1052296341Sdelphij    default:
1053296341Sdelphij        str = "unknown";
1054296341Sdelphij        break;
1055296341Sdelphij    }
1056296341Sdelphij    return (str);
1057296341Sdelphij}
105855714Skris
1059109998Smarkmconst char *SSL_rstate_string(const SSL *s)
1060296341Sdelphij{
1061296341Sdelphij    const char *str;
106255714Skris
1063296341Sdelphij    switch (s->rstate) {
1064296341Sdelphij    case SSL_ST_READ_HEADER:
1065296341Sdelphij        str = "RH";
1066296341Sdelphij        break;
1067296341Sdelphij    case SSL_ST_READ_BODY:
1068296341Sdelphij        str = "RB";
1069296341Sdelphij        break;
1070296341Sdelphij    case SSL_ST_READ_DONE:
1071296341Sdelphij        str = "RD";
1072296341Sdelphij        break;
1073296341Sdelphij    default:
1074296341Sdelphij        str = "unknown";
1075296341Sdelphij        break;
1076296341Sdelphij    }
1077296341Sdelphij    return (str);
1078296341Sdelphij}
1079