1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/ssl/libssl/src/ssl_stat.c Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,502 @@
1.4 +/* ssl/ssl_stat.c */
1.5 +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
1.6 + * All rights reserved.
1.7 + *
1.8 + * This package is an SSL implementation written
1.9 + * by Eric Young (eay@cryptsoft.com).
1.10 + * The implementation was written so as to conform with Netscapes SSL.
1.11 + *
1.12 + * This library is free for commercial and non-commercial use as long as
1.13 + * the following conditions are aheared to. The following conditions
1.14 + * apply to all code found in this distribution, be it the RC4, RSA,
1.15 + * lhash, DES, etc., code; not just the SSL code. The SSL documentation
1.16 + * included with this distribution is covered by the same copyright terms
1.17 + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
1.18 + *
1.19 + * Copyright remains Eric Young's, and as such any Copyright notices in
1.20 + * the code are not to be removed.
1.21 + * If this package is used in a product, Eric Young should be given attribution
1.22 + * as the author of the parts of the library used.
1.23 + * This can be in the form of a textual message at program startup or
1.24 + * in documentation (online or textual) provided with the package.
1.25 + *
1.26 + * Redistribution and use in source and binary forms, with or without
1.27 + * modification, are permitted provided that the following conditions
1.28 + * are met:
1.29 + * 1. Redistributions of source code must retain the copyright
1.30 + * notice, this list of conditions and the following disclaimer.
1.31 + * 2. Redistributions in binary form must reproduce the above copyright
1.32 + * notice, this list of conditions and the following disclaimer in the
1.33 + * documentation and/or other materials provided with the distribution.
1.34 + * 3. All advertising materials mentioning features or use of this software
1.35 + * must display the following acknowledgement:
1.36 + * "This product includes cryptographic software written by
1.37 + * Eric Young (eay@cryptsoft.com)"
1.38 + * The word 'cryptographic' can be left out if the rouines from the library
1.39 + * being used are not cryptographic related :-).
1.40 + * 4. If you include any Windows specific code (or a derivative thereof) from
1.41 + * the apps directory (application code) you must include an acknowledgement:
1.42 + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
1.43 + *
1.44 + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
1.45 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1.46 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1.47 + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1.48 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1.49 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1.50 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1.51 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
1.52 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
1.53 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
1.54 + * SUCH DAMAGE.
1.55 + *
1.56 + * The licence and distribution terms for any publically available version or
1.57 + * derivative of this code cannot be changed. i.e. this code cannot simply be
1.58 + * copied and put under another distribution licence
1.59 + * [including the GNU Public Licence.]
1.60 + */
1.61 +
1.62 +#include <stdio.h>
1.63 +#include "ssl_locl.h"
1.64 +
1.65 +EXPORT_C const char *SSL_state_string_long(const SSL *s)
1.66 + {
1.67 + const char *str;
1.68 +
1.69 + switch (s->state)
1.70 + {
1.71 +case SSL_ST_BEFORE: str="before SSL initialization"; break;
1.72 +case SSL_ST_ACCEPT: str="before accept initialization"; break;
1.73 +case SSL_ST_CONNECT: str="before connect initialization"; break;
1.74 +case SSL_ST_OK: str="SSL negotiation finished successfully"; break;
1.75 +case SSL_ST_RENEGOTIATE: str="SSL renegotiate ciphers"; break;
1.76 +case SSL_ST_BEFORE|SSL_ST_CONNECT: str="before/connect initialization"; break;
1.77 +case SSL_ST_OK|SSL_ST_CONNECT: str="ok/connect SSL initialization"; break;
1.78 +case SSL_ST_BEFORE|SSL_ST_ACCEPT: str="before/accept initialization"; break;
1.79 +case SSL_ST_OK|SSL_ST_ACCEPT: str="ok/accept SSL initialization"; break;
1.80 +#ifndef OPENSSL_NO_SSL2
1.81 +case SSL2_ST_CLIENT_START_ENCRYPTION: str="SSLv2 client start encryption"; break;
1.82 +case SSL2_ST_SERVER_START_ENCRYPTION: str="SSLv2 server start encryption"; break;
1.83 +case SSL2_ST_SEND_CLIENT_HELLO_A: str="SSLv2 write client hello A"; break;
1.84 +case SSL2_ST_SEND_CLIENT_HELLO_B: str="SSLv2 write client hello B"; break;
1.85 +case SSL2_ST_GET_SERVER_HELLO_A: str="SSLv2 read server hello A"; break;
1.86 +case SSL2_ST_GET_SERVER_HELLO_B: str="SSLv2 read server hello B"; break;
1.87 +case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: str="SSLv2 write client master key A"; break;
1.88 +case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: str="SSLv2 write client master key B"; break;
1.89 +case SSL2_ST_SEND_CLIENT_FINISHED_A: str="SSLv2 write client finished A"; break;
1.90 +case SSL2_ST_SEND_CLIENT_FINISHED_B: str="SSLv2 write client finished B"; break;
1.91 +case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: str="SSLv2 write client certificate A"; break;
1.92 +case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: str="SSLv2 write client certificate B"; break;
1.93 +case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: str="SSLv2 write client certificate C"; break;
1.94 +case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: str="SSLv2 write client certificate D"; break;
1.95 +case SSL2_ST_GET_SERVER_VERIFY_A: str="SSLv2 read server verify A"; break;
1.96 +case SSL2_ST_GET_SERVER_VERIFY_B: str="SSLv2 read server verify B"; break;
1.97 +case SSL2_ST_GET_SERVER_FINISHED_A: str="SSLv2 read server finished A"; break;
1.98 +case SSL2_ST_GET_SERVER_FINISHED_B: str="SSLv2 read server finished B"; break;
1.99 +case SSL2_ST_GET_CLIENT_HELLO_A: str="SSLv2 read client hello A"; break;
1.100 +case SSL2_ST_GET_CLIENT_HELLO_B: str="SSLv2 read client hello B"; break;
1.101 +case SSL2_ST_GET_CLIENT_HELLO_C: str="SSLv2 read client hello C"; break;
1.102 +case SSL2_ST_SEND_SERVER_HELLO_A: str="SSLv2 write server hello A"; break;
1.103 +case SSL2_ST_SEND_SERVER_HELLO_B: str="SSLv2 write server hello B"; break;
1.104 +case SSL2_ST_GET_CLIENT_MASTER_KEY_A: str="SSLv2 read client master key A"; break;
1.105 +case SSL2_ST_GET_CLIENT_MASTER_KEY_B: str="SSLv2 read client master key B"; break;
1.106 +case SSL2_ST_SEND_SERVER_VERIFY_A: str="SSLv2 write server verify A"; break;
1.107 +case SSL2_ST_SEND_SERVER_VERIFY_B: str="SSLv2 write server verify B"; break;
1.108 +case SSL2_ST_SEND_SERVER_VERIFY_C: str="SSLv2 write server verify C"; break;
1.109 +case SSL2_ST_GET_CLIENT_FINISHED_A: str="SSLv2 read client finished A"; break;
1.110 +case SSL2_ST_GET_CLIENT_FINISHED_B: str="SSLv2 read client finished B"; break;
1.111 +case SSL2_ST_SEND_SERVER_FINISHED_A: str="SSLv2 write server finished A"; break;
1.112 +case SSL2_ST_SEND_SERVER_FINISHED_B: str="SSLv2 write server finished B"; break;
1.113 +case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: str="SSLv2 write request certificate A"; break;
1.114 +case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: str="SSLv2 write request certificate B"; break;
1.115 +case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: str="SSLv2 write request certificate C"; break;
1.116 +case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: str="SSLv2 write request certificate D"; break;
1.117 +case SSL2_ST_X509_GET_SERVER_CERTIFICATE: str="SSLv2 X509 read server certificate"; break;
1.118 +case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: str="SSLv2 X509 read client certificate"; break;
1.119 +#endif
1.120 +
1.121 +#ifndef OPENSSL_NO_SSL3
1.122 +/* SSLv3 additions */
1.123 +case SSL3_ST_CW_CLNT_HELLO_A: str="SSLv3 write client hello A"; break;
1.124 +case SSL3_ST_CW_CLNT_HELLO_B: str="SSLv3 write client hello B"; break;
1.125 +case SSL3_ST_CR_SRVR_HELLO_A: str="SSLv3 read server hello A"; break;
1.126 +case SSL3_ST_CR_SRVR_HELLO_B: str="SSLv3 read server hello B"; break;
1.127 +case SSL3_ST_CR_CERT_A: str="SSLv3 read server certificate A"; break;
1.128 +case SSL3_ST_CR_CERT_B: str="SSLv3 read server certificate B"; break;
1.129 +case SSL3_ST_CR_KEY_EXCH_A: str="SSLv3 read server key exchange A"; break;
1.130 +case SSL3_ST_CR_KEY_EXCH_B: str="SSLv3 read server key exchange B"; break;
1.131 +case SSL3_ST_CR_CERT_REQ_A: str="SSLv3 read server certificate request A"; break;
1.132 +case SSL3_ST_CR_CERT_REQ_B: str="SSLv3 read server certificate request B"; break;
1.133 +case SSL3_ST_CR_SRVR_DONE_A: str="SSLv3 read server done A"; break;
1.134 +case SSL3_ST_CR_SRVR_DONE_B: str="SSLv3 read server done B"; break;
1.135 +case SSL3_ST_CW_CERT_A: str="SSLv3 write client certificate A"; break;
1.136 +case SSL3_ST_CW_CERT_B: str="SSLv3 write client certificate B"; break;
1.137 +case SSL3_ST_CW_CERT_C: str="SSLv3 write client certificate C"; break;
1.138 +case SSL3_ST_CW_CERT_D: str="SSLv3 write client certificate D"; break;
1.139 +case SSL3_ST_CW_KEY_EXCH_A: str="SSLv3 write client key exchange A"; break;
1.140 +case SSL3_ST_CW_KEY_EXCH_B: str="SSLv3 write client key exchange B"; break;
1.141 +case SSL3_ST_CW_CERT_VRFY_A: str="SSLv3 write certificate verify A"; break;
1.142 +case SSL3_ST_CW_CERT_VRFY_B: str="SSLv3 write certificate verify B"; break;
1.143 +
1.144 +case SSL3_ST_CW_CHANGE_A:
1.145 +case SSL3_ST_SW_CHANGE_A: str="SSLv3 write change cipher spec A"; break;
1.146 +case SSL3_ST_CW_CHANGE_B:
1.147 +case SSL3_ST_SW_CHANGE_B: str="SSLv3 write change cipher spec B"; break;
1.148 +case SSL3_ST_CW_FINISHED_A:
1.149 +case SSL3_ST_SW_FINISHED_A: str="SSLv3 write finished A"; break;
1.150 +case SSL3_ST_CW_FINISHED_B:
1.151 +case SSL3_ST_SW_FINISHED_B: str="SSLv3 write finished B"; break;
1.152 +case SSL3_ST_CR_CHANGE_A:
1.153 +case SSL3_ST_SR_CHANGE_A: str="SSLv3 read change cipher spec A"; break;
1.154 +case SSL3_ST_CR_CHANGE_B:
1.155 +case SSL3_ST_SR_CHANGE_B: str="SSLv3 read change cipher spec B"; break;
1.156 +case SSL3_ST_CR_FINISHED_A:
1.157 +case SSL3_ST_SR_FINISHED_A: str="SSLv3 read finished A"; break;
1.158 +case SSL3_ST_CR_FINISHED_B:
1.159 +case SSL3_ST_SR_FINISHED_B: str="SSLv3 read finished B"; break;
1.160 +
1.161 +case SSL3_ST_CW_FLUSH:
1.162 +case SSL3_ST_SW_FLUSH: str="SSLv3 flush data"; break;
1.163 +
1.164 +case SSL3_ST_SR_CLNT_HELLO_A: str="SSLv3 read client hello A"; break;
1.165 +case SSL3_ST_SR_CLNT_HELLO_B: str="SSLv3 read client hello B"; break;
1.166 +case SSL3_ST_SR_CLNT_HELLO_C: str="SSLv3 read client hello C"; break;
1.167 +case SSL3_ST_SW_HELLO_REQ_A: str="SSLv3 write hello request A"; break;
1.168 +case SSL3_ST_SW_HELLO_REQ_B: str="SSLv3 write hello request B"; break;
1.169 +case SSL3_ST_SW_HELLO_REQ_C: str="SSLv3 write hello request C"; break;
1.170 +case SSL3_ST_SW_SRVR_HELLO_A: str="SSLv3 write server hello A"; break;
1.171 +case SSL3_ST_SW_SRVR_HELLO_B: str="SSLv3 write server hello B"; break;
1.172 +case SSL3_ST_SW_CERT_A: str="SSLv3 write certificate A"; break;
1.173 +case SSL3_ST_SW_CERT_B: str="SSLv3 write certificate B"; break;
1.174 +case SSL3_ST_SW_KEY_EXCH_A: str="SSLv3 write key exchange A"; break;
1.175 +case SSL3_ST_SW_KEY_EXCH_B: str="SSLv3 write key exchange B"; break;
1.176 +case SSL3_ST_SW_CERT_REQ_A: str="SSLv3 write certificate request A"; break;
1.177 +case SSL3_ST_SW_CERT_REQ_B: str="SSLv3 write certificate request B"; break;
1.178 +case SSL3_ST_SW_SRVR_DONE_A: str="SSLv3 write server done A"; break;
1.179 +case SSL3_ST_SW_SRVR_DONE_B: str="SSLv3 write server done B"; break;
1.180 +case SSL3_ST_SR_CERT_A: str="SSLv3 read client certificate A"; break;
1.181 +case SSL3_ST_SR_CERT_B: str="SSLv3 read client certificate B"; break;
1.182 +case SSL3_ST_SR_KEY_EXCH_A: str="SSLv3 read client key exchange A"; break;
1.183 +case SSL3_ST_SR_KEY_EXCH_B: str="SSLv3 read client key exchange B"; break;
1.184 +case SSL3_ST_SR_CERT_VRFY_A: str="SSLv3 read certificate verify A"; break;
1.185 +case SSL3_ST_SR_CERT_VRFY_B: str="SSLv3 read certificate verify B"; break;
1.186 +#endif
1.187 +
1.188 +#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
1.189 +/* SSLv2/v3 compatibility states */
1.190 +/* client */
1.191 +case SSL23_ST_CW_CLNT_HELLO_A: str="SSLv2/v3 write client hello A"; break;
1.192 +case SSL23_ST_CW_CLNT_HELLO_B: str="SSLv2/v3 write client hello B"; break;
1.193 +case SSL23_ST_CR_SRVR_HELLO_A: str="SSLv2/v3 read server hello A"; break;
1.194 +case SSL23_ST_CR_SRVR_HELLO_B: str="SSLv2/v3 read server hello B"; break;
1.195 +/* server */
1.196 +case SSL23_ST_SR_CLNT_HELLO_A: str="SSLv2/v3 read client hello A"; break;
1.197 +case SSL23_ST_SR_CLNT_HELLO_B: str="SSLv2/v3 read client hello B"; break;
1.198 +#endif
1.199 +
1.200 +default: str="unknown state"; break;
1.201 + }
1.202 + return(str);
1.203 + }
1.204 +
1.205 +EXPORT_C const char *SSL_rstate_string_long(const SSL *s)
1.206 + {
1.207 + const char *str;
1.208 +
1.209 + switch (s->rstate)
1.210 + {
1.211 + case SSL_ST_READ_HEADER: str="read header"; break;
1.212 + case SSL_ST_READ_BODY: str="read body"; break;
1.213 + case SSL_ST_READ_DONE: str="read done"; break;
1.214 + default: str="unknown"; break;
1.215 + }
1.216 + return(str);
1.217 + }
1.218 +
1.219 +EXPORT_C const char *SSL_state_string(const SSL *s)
1.220 + {
1.221 + const char *str;
1.222 +
1.223 + switch (s->state)
1.224 + {
1.225 +case SSL_ST_BEFORE: str="PINIT "; break;
1.226 +case SSL_ST_ACCEPT: str="AINIT "; break;
1.227 +case SSL_ST_CONNECT: str="CINIT "; break;
1.228 +case SSL_ST_OK: str="SSLOK "; break;
1.229 +#ifndef OPENSSL_NO_SSL2
1.230 +case SSL2_ST_CLIENT_START_ENCRYPTION: str="2CSENC"; break;
1.231 +case SSL2_ST_SERVER_START_ENCRYPTION: str="2SSENC"; break;
1.232 +case SSL2_ST_SEND_CLIENT_HELLO_A: str="2SCH_A"; break;
1.233 +case SSL2_ST_SEND_CLIENT_HELLO_B: str="2SCH_B"; break;
1.234 +case SSL2_ST_GET_SERVER_HELLO_A: str="2GSH_A"; break;
1.235 +case SSL2_ST_GET_SERVER_HELLO_B: str="2GSH_B"; break;
1.236 +case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: str="2SCMKA"; break;
1.237 +case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: str="2SCMKB"; break;
1.238 +case SSL2_ST_SEND_CLIENT_FINISHED_A: str="2SCF_A"; break;
1.239 +case SSL2_ST_SEND_CLIENT_FINISHED_B: str="2SCF_B"; break;
1.240 +case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: str="2SCC_A"; break;
1.241 +case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: str="2SCC_B"; break;
1.242 +case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: str="2SCC_C"; break;
1.243 +case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: str="2SCC_D"; break;
1.244 +case SSL2_ST_GET_SERVER_VERIFY_A: str="2GSV_A"; break;
1.245 +case SSL2_ST_GET_SERVER_VERIFY_B: str="2GSV_B"; break;
1.246 +case SSL2_ST_GET_SERVER_FINISHED_A: str="2GSF_A"; break;
1.247 +case SSL2_ST_GET_SERVER_FINISHED_B: str="2GSF_B"; break;
1.248 +case SSL2_ST_GET_CLIENT_HELLO_A: str="2GCH_A"; break;
1.249 +case SSL2_ST_GET_CLIENT_HELLO_B: str="2GCH_B"; break;
1.250 +case SSL2_ST_GET_CLIENT_HELLO_C: str="2GCH_C"; break;
1.251 +case SSL2_ST_SEND_SERVER_HELLO_A: str="2SSH_A"; break;
1.252 +case SSL2_ST_SEND_SERVER_HELLO_B: str="2SSH_B"; break;
1.253 +case SSL2_ST_GET_CLIENT_MASTER_KEY_A: str="2GCMKA"; break;
1.254 +case SSL2_ST_GET_CLIENT_MASTER_KEY_B: str="2GCMKA"; break;
1.255 +case SSL2_ST_SEND_SERVER_VERIFY_A: str="2SSV_A"; break;
1.256 +case SSL2_ST_SEND_SERVER_VERIFY_B: str="2SSV_B"; break;
1.257 +case SSL2_ST_SEND_SERVER_VERIFY_C: str="2SSV_C"; break;
1.258 +case SSL2_ST_GET_CLIENT_FINISHED_A: str="2GCF_A"; break;
1.259 +case SSL2_ST_GET_CLIENT_FINISHED_B: str="2GCF_B"; break;
1.260 +case SSL2_ST_SEND_SERVER_FINISHED_A: str="2SSF_A"; break;
1.261 +case SSL2_ST_SEND_SERVER_FINISHED_B: str="2SSF_B"; break;
1.262 +case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: str="2SRC_A"; break;
1.263 +case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: str="2SRC_B"; break;
1.264 +case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: str="2SRC_C"; break;
1.265 +case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: str="2SRC_D"; break;
1.266 +case SSL2_ST_X509_GET_SERVER_CERTIFICATE: str="2X9GSC"; break;
1.267 +case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: str="2X9GCC"; break;
1.268 +#endif
1.269 +
1.270 +#ifndef OPENSSL_NO_SSL3
1.271 +/* SSLv3 additions */
1.272 +case SSL3_ST_SW_FLUSH:
1.273 +case SSL3_ST_CW_FLUSH: str="3FLUSH"; break;
1.274 +case SSL3_ST_CW_CLNT_HELLO_A: str="3WCH_A"; break;
1.275 +case SSL3_ST_CW_CLNT_HELLO_B: str="3WCH_B"; break;
1.276 +case SSL3_ST_CR_SRVR_HELLO_A: str="3RSH_A"; break;
1.277 +case SSL3_ST_CR_SRVR_HELLO_B: str="3RSH_B"; break;
1.278 +case SSL3_ST_CR_CERT_A: str="3RSC_A"; break;
1.279 +case SSL3_ST_CR_CERT_B: str="3RSC_B"; break;
1.280 +case SSL3_ST_CR_KEY_EXCH_A: str="3RSKEA"; break;
1.281 +case SSL3_ST_CR_KEY_EXCH_B: str="3RSKEB"; break;
1.282 +case SSL3_ST_CR_CERT_REQ_A: str="3RCR_A"; break;
1.283 +case SSL3_ST_CR_CERT_REQ_B: str="3RCR_B"; break;
1.284 +case SSL3_ST_CR_SRVR_DONE_A: str="3RSD_A"; break;
1.285 +case SSL3_ST_CR_SRVR_DONE_B: str="3RSD_B"; break;
1.286 +case SSL3_ST_CW_CERT_A: str="3WCC_A"; break;
1.287 +case SSL3_ST_CW_CERT_B: str="3WCC_B"; break;
1.288 +case SSL3_ST_CW_CERT_C: str="3WCC_C"; break;
1.289 +case SSL3_ST_CW_CERT_D: str="3WCC_D"; break;
1.290 +case SSL3_ST_CW_KEY_EXCH_A: str="3WCKEA"; break;
1.291 +case SSL3_ST_CW_KEY_EXCH_B: str="3WCKEB"; break;
1.292 +case SSL3_ST_CW_CERT_VRFY_A: str="3WCV_A"; break;
1.293 +case SSL3_ST_CW_CERT_VRFY_B: str="3WCV_B"; break;
1.294 +
1.295 +case SSL3_ST_SW_CHANGE_A:
1.296 +case SSL3_ST_CW_CHANGE_A: str="3WCCSA"; break;
1.297 +case SSL3_ST_SW_CHANGE_B:
1.298 +case SSL3_ST_CW_CHANGE_B: str="3WCCSB"; break;
1.299 +case SSL3_ST_SW_FINISHED_A:
1.300 +case SSL3_ST_CW_FINISHED_A: str="3WFINA"; break;
1.301 +case SSL3_ST_SW_FINISHED_B:
1.302 +case SSL3_ST_CW_FINISHED_B: str="3WFINB"; break;
1.303 +case SSL3_ST_SR_CHANGE_A:
1.304 +case SSL3_ST_CR_CHANGE_A: str="3RCCSA"; break;
1.305 +case SSL3_ST_SR_CHANGE_B:
1.306 +case SSL3_ST_CR_CHANGE_B: str="3RCCSB"; break;
1.307 +case SSL3_ST_SR_FINISHED_A:
1.308 +case SSL3_ST_CR_FINISHED_A: str="3RFINA"; break;
1.309 +case SSL3_ST_SR_FINISHED_B:
1.310 +case SSL3_ST_CR_FINISHED_B: str="3RFINB"; break;
1.311 +
1.312 +case SSL3_ST_SW_HELLO_REQ_A: str="3WHR_A"; break;
1.313 +case SSL3_ST_SW_HELLO_REQ_B: str="3WHR_B"; break;
1.314 +case SSL3_ST_SW_HELLO_REQ_C: str="3WHR_C"; break;
1.315 +case SSL3_ST_SR_CLNT_HELLO_A: str="3RCH_A"; break;
1.316 +case SSL3_ST_SR_CLNT_HELLO_B: str="3RCH_B"; break;
1.317 +case SSL3_ST_SR_CLNT_HELLO_C: str="3RCH_C"; break;
1.318 +case SSL3_ST_SW_SRVR_HELLO_A: str="3WSH_A"; break;
1.319 +case SSL3_ST_SW_SRVR_HELLO_B: str="3WSH_B"; break;
1.320 +case SSL3_ST_SW_CERT_A: str="3WSC_A"; break;
1.321 +case SSL3_ST_SW_CERT_B: str="3WSC_B"; break;
1.322 +case SSL3_ST_SW_KEY_EXCH_A: str="3WSKEA"; break;
1.323 +case SSL3_ST_SW_KEY_EXCH_B: str="3WSKEB"; break;
1.324 +case SSL3_ST_SW_CERT_REQ_A: str="3WCR_A"; break;
1.325 +case SSL3_ST_SW_CERT_REQ_B: str="3WCR_B"; break;
1.326 +case SSL3_ST_SW_SRVR_DONE_A: str="3WSD_A"; break;
1.327 +case SSL3_ST_SW_SRVR_DONE_B: str="3WSD_B"; break;
1.328 +case SSL3_ST_SR_CERT_A: str="3RCC_A"; break;
1.329 +case SSL3_ST_SR_CERT_B: str="3RCC_B"; break;
1.330 +case SSL3_ST_SR_KEY_EXCH_A: str="3RCKEA"; break;
1.331 +case SSL3_ST_SR_KEY_EXCH_B: str="3RCKEB"; break;
1.332 +case SSL3_ST_SR_CERT_VRFY_A: str="3RCV_A"; break;
1.333 +case SSL3_ST_SR_CERT_VRFY_B: str="3RCV_B"; break;
1.334 +#endif
1.335 +
1.336 +#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
1.337 +/* SSLv2/v3 compatibility states */
1.338 +/* client */
1.339 +case SSL23_ST_CW_CLNT_HELLO_A: str="23WCHA"; break;
1.340 +case SSL23_ST_CW_CLNT_HELLO_B: str="23WCHB"; break;
1.341 +case SSL23_ST_CR_SRVR_HELLO_A: str="23RSHA"; break;
1.342 +case SSL23_ST_CR_SRVR_HELLO_B: str="23RSHA"; break;
1.343 +/* server */
1.344 +case SSL23_ST_SR_CLNT_HELLO_A: str="23RCHA"; break;
1.345 +case SSL23_ST_SR_CLNT_HELLO_B: str="23RCHB"; break;
1.346 +#endif
1.347 +
1.348 +default: str="UNKWN "; break;
1.349 + }
1.350 + return(str);
1.351 + }
1.352 +
1.353 +EXPORT_C const char *SSL_alert_type_string_long(int value)
1.354 + {
1.355 + value>>=8;
1.356 + if (value == SSL3_AL_WARNING)
1.357 + return("warning");
1.358 + else if (value == SSL3_AL_FATAL)
1.359 + return("fatal");
1.360 + else
1.361 + return("unknown");
1.362 + }
1.363 +
1.364 +EXPORT_C const char *SSL_alert_type_string(int value)
1.365 + {
1.366 + value>>=8;
1.367 + if (value == SSL3_AL_WARNING)
1.368 + return("W");
1.369 + else if (value == SSL3_AL_FATAL)
1.370 + return("F");
1.371 + else
1.372 + return("U");
1.373 + }
1.374 +
1.375 +EXPORT_C const char *SSL_alert_desc_string(int value)
1.376 + {
1.377 + const char *str;
1.378 +
1.379 + switch (value & 0xff)
1.380 + {
1.381 + case SSL3_AD_CLOSE_NOTIFY: str="CN"; break;
1.382 + case SSL3_AD_UNEXPECTED_MESSAGE: str="UM"; break;
1.383 + case SSL3_AD_BAD_RECORD_MAC: str="BM"; break;
1.384 + case SSL3_AD_DECOMPRESSION_FAILURE: str="DF"; break;
1.385 + case SSL3_AD_HANDSHAKE_FAILURE: str="HF"; break;
1.386 + case SSL3_AD_NO_CERTIFICATE: str="NC"; break;
1.387 + case SSL3_AD_BAD_CERTIFICATE: str="BC"; break;
1.388 + case SSL3_AD_UNSUPPORTED_CERTIFICATE: str="UC"; break;
1.389 + case SSL3_AD_CERTIFICATE_REVOKED: str="CR"; break;
1.390 + case SSL3_AD_CERTIFICATE_EXPIRED: str="CE"; break;
1.391 + case SSL3_AD_CERTIFICATE_UNKNOWN: str="CU"; break;
1.392 + case SSL3_AD_ILLEGAL_PARAMETER: str="IP"; break;
1.393 + case TLS1_AD_DECRYPTION_FAILED: str="DC"; break;
1.394 + case TLS1_AD_RECORD_OVERFLOW: str="RO"; break;
1.395 + case TLS1_AD_UNKNOWN_CA: str="CA"; break;
1.396 + case TLS1_AD_ACCESS_DENIED: str="AD"; break;
1.397 + case TLS1_AD_DECODE_ERROR: str="DE"; break;
1.398 + case TLS1_AD_DECRYPT_ERROR: str="CY"; break;
1.399 + case TLS1_AD_EXPORT_RESTRICTION: str="ER"; break;
1.400 + case TLS1_AD_PROTOCOL_VERSION: str="PV"; break;
1.401 + case TLS1_AD_INSUFFICIENT_SECURITY: str="IS"; break;
1.402 + case TLS1_AD_INTERNAL_ERROR: str="IE"; break;
1.403 + case TLS1_AD_USER_CANCELLED: str="US"; break;
1.404 + case TLS1_AD_NO_RENEGOTIATION: str="NR"; break;
1.405 + default: str="UK"; break;
1.406 + }
1.407 + return(str);
1.408 + }
1.409 +
1.410 +EXPORT_C const char *SSL_alert_desc_string_long(int value)
1.411 + {
1.412 + const char *str;
1.413 +
1.414 + switch (value & 0xff)
1.415 + {
1.416 + case SSL3_AD_CLOSE_NOTIFY:
1.417 + str="close notify";
1.418 + break;
1.419 + case SSL3_AD_UNEXPECTED_MESSAGE:
1.420 + str="unexpected_message";
1.421 + break;
1.422 + case SSL3_AD_BAD_RECORD_MAC:
1.423 + str="bad record mac";
1.424 + break;
1.425 + case SSL3_AD_DECOMPRESSION_FAILURE:
1.426 + str="decompression failure";
1.427 + break;
1.428 + case SSL3_AD_HANDSHAKE_FAILURE:
1.429 + str="handshake failure";
1.430 + break;
1.431 + case SSL3_AD_NO_CERTIFICATE:
1.432 + str="no certificate";
1.433 + break;
1.434 + case SSL3_AD_BAD_CERTIFICATE:
1.435 + str="bad certificate";
1.436 + break;
1.437 + case SSL3_AD_UNSUPPORTED_CERTIFICATE:
1.438 + str="unsupported certificate";
1.439 + break;
1.440 + case SSL3_AD_CERTIFICATE_REVOKED:
1.441 + str="certificate revoked";
1.442 + break;
1.443 + case SSL3_AD_CERTIFICATE_EXPIRED:
1.444 + str="certificate expired";
1.445 + break;
1.446 + case SSL3_AD_CERTIFICATE_UNKNOWN:
1.447 + str="certificate unknown";
1.448 + break;
1.449 + case SSL3_AD_ILLEGAL_PARAMETER:
1.450 + str="illegal parameter";
1.451 + break;
1.452 + case TLS1_AD_DECRYPTION_FAILED:
1.453 + str="decryption failed";
1.454 + break;
1.455 + case TLS1_AD_RECORD_OVERFLOW:
1.456 + str="record overflow";
1.457 + break;
1.458 + case TLS1_AD_UNKNOWN_CA:
1.459 + str="unknown CA";
1.460 + break;
1.461 + case TLS1_AD_ACCESS_DENIED:
1.462 + str="access denied";
1.463 + break;
1.464 + case TLS1_AD_DECODE_ERROR:
1.465 + str="decode error";
1.466 + break;
1.467 + case TLS1_AD_DECRYPT_ERROR:
1.468 + str="decrypt error";
1.469 + break;
1.470 + case TLS1_AD_EXPORT_RESTRICTION:
1.471 + str="export restriction";
1.472 + break;
1.473 + case TLS1_AD_PROTOCOL_VERSION:
1.474 + str="protocol version";
1.475 + break;
1.476 + case TLS1_AD_INSUFFICIENT_SECURITY:
1.477 + str="insufficient security";
1.478 + break;
1.479 + case TLS1_AD_INTERNAL_ERROR:
1.480 + str="internal error";
1.481 + break;
1.482 + case TLS1_AD_USER_CANCELLED:
1.483 + str="user canceled";
1.484 + break;
1.485 + case TLS1_AD_NO_RENEGOTIATION:
1.486 + str="no renegotiation";
1.487 + break;
1.488 + default: str="unknown"; break;
1.489 + }
1.490 + return(str);
1.491 + }
1.492 +
1.493 +EXPORT_C const char *SSL_rstate_string(const SSL *s)
1.494 + {
1.495 + const char *str;
1.496 +
1.497 + switch (s->rstate)
1.498 + {
1.499 + case SSL_ST_READ_HEADER:str="RH"; break;
1.500 + case SSL_ST_READ_BODY: str="RB"; break;
1.501 + case SSL_ST_READ_DONE: str="RD"; break;
1.502 + default: str="unknown"; break;
1.503 + }
1.504 + return(str);
1.505 + }