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. 855714Skris * 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). 1555714Skris * 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. 2255714Skris * 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 :-). 3755714Skris * 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)" 4055714Skris * 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. 5255714Skris * 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) 8955714Skris { 90109998Smarkm const char *str; 9155714Skris 9255714Skris switch (s->state) 9355714Skris { 9455714Skriscase SSL_ST_BEFORE: str="before SSL initialization"; break; 9555714Skriscase SSL_ST_ACCEPT: str="before accept initialization"; break; 9655714Skriscase SSL_ST_CONNECT: str="before connect initialization"; break; 9755714Skriscase SSL_ST_OK: str="SSL negotiation finished successfully"; break; 9855714Skriscase SSL_ST_RENEGOTIATE: str="SSL renegotiate ciphers"; break; 9955714Skriscase SSL_ST_BEFORE|SSL_ST_CONNECT: str="before/connect initialization"; break; 10055714Skriscase SSL_ST_OK|SSL_ST_CONNECT: str="ok/connect SSL initialization"; break; 10155714Skriscase SSL_ST_BEFORE|SSL_ST_ACCEPT: str="before/accept initialization"; break; 10255714Skriscase SSL_ST_OK|SSL_ST_ACCEPT: str="ok/accept SSL initialization"; break; 103109998Smarkm#ifndef OPENSSL_NO_SSL2 10455714Skriscase SSL2_ST_CLIENT_START_ENCRYPTION: str="SSLv2 client start encryption"; break; 10555714Skriscase SSL2_ST_SERVER_START_ENCRYPTION: str="SSLv2 server start encryption"; break; 10655714Skriscase SSL2_ST_SEND_CLIENT_HELLO_A: str="SSLv2 write client hello A"; break; 10755714Skriscase SSL2_ST_SEND_CLIENT_HELLO_B: str="SSLv2 write client hello B"; break; 10855714Skriscase SSL2_ST_GET_SERVER_HELLO_A: str="SSLv2 read server hello A"; break; 10955714Skriscase SSL2_ST_GET_SERVER_HELLO_B: str="SSLv2 read server hello B"; break; 11055714Skriscase SSL2_ST_SEND_CLIENT_MASTER_KEY_A: str="SSLv2 write client master key A"; break; 11155714Skriscase SSL2_ST_SEND_CLIENT_MASTER_KEY_B: str="SSLv2 write client master key B"; break; 11255714Skriscase SSL2_ST_SEND_CLIENT_FINISHED_A: str="SSLv2 write client finished A"; break; 11355714Skriscase SSL2_ST_SEND_CLIENT_FINISHED_B: str="SSLv2 write client finished B"; break; 11455714Skriscase SSL2_ST_SEND_CLIENT_CERTIFICATE_A: str="SSLv2 write client certificate A"; break; 11555714Skriscase SSL2_ST_SEND_CLIENT_CERTIFICATE_B: str="SSLv2 write client certificate B"; break; 11655714Skriscase SSL2_ST_SEND_CLIENT_CERTIFICATE_C: str="SSLv2 write client certificate C"; break; 11755714Skriscase SSL2_ST_SEND_CLIENT_CERTIFICATE_D: str="SSLv2 write client certificate D"; break; 11855714Skriscase SSL2_ST_GET_SERVER_VERIFY_A: str="SSLv2 read server verify A"; break; 11955714Skriscase SSL2_ST_GET_SERVER_VERIFY_B: str="SSLv2 read server verify B"; break; 12055714Skriscase SSL2_ST_GET_SERVER_FINISHED_A: str="SSLv2 read server finished A"; break; 12155714Skriscase SSL2_ST_GET_SERVER_FINISHED_B: str="SSLv2 read server finished B"; break; 12255714Skriscase SSL2_ST_GET_CLIENT_HELLO_A: str="SSLv2 read client hello A"; break; 12355714Skriscase SSL2_ST_GET_CLIENT_HELLO_B: str="SSLv2 read client hello B"; break; 12455714Skriscase SSL2_ST_GET_CLIENT_HELLO_C: str="SSLv2 read client hello C"; break; 12555714Skriscase SSL2_ST_SEND_SERVER_HELLO_A: str="SSLv2 write server hello A"; break; 12655714Skriscase SSL2_ST_SEND_SERVER_HELLO_B: str="SSLv2 write server hello B"; break; 12755714Skriscase SSL2_ST_GET_CLIENT_MASTER_KEY_A: str="SSLv2 read client master key A"; break; 12855714Skriscase SSL2_ST_GET_CLIENT_MASTER_KEY_B: str="SSLv2 read client master key B"; break; 12955714Skriscase SSL2_ST_SEND_SERVER_VERIFY_A: str="SSLv2 write server verify A"; break; 13055714Skriscase SSL2_ST_SEND_SERVER_VERIFY_B: str="SSLv2 write server verify B"; break; 13155714Skriscase SSL2_ST_SEND_SERVER_VERIFY_C: str="SSLv2 write server verify C"; break; 13255714Skriscase SSL2_ST_GET_CLIENT_FINISHED_A: str="SSLv2 read client finished A"; break; 13355714Skriscase SSL2_ST_GET_CLIENT_FINISHED_B: str="SSLv2 read client finished B"; break; 13455714Skriscase SSL2_ST_SEND_SERVER_FINISHED_A: str="SSLv2 write server finished A"; break; 13555714Skriscase SSL2_ST_SEND_SERVER_FINISHED_B: str="SSLv2 write server finished B"; break; 13655714Skriscase SSL2_ST_SEND_REQUEST_CERTIFICATE_A: str="SSLv2 write request certificate A"; break; 13755714Skriscase SSL2_ST_SEND_REQUEST_CERTIFICATE_B: str="SSLv2 write request certificate B"; break; 13855714Skriscase SSL2_ST_SEND_REQUEST_CERTIFICATE_C: str="SSLv2 write request certificate C"; break; 13955714Skriscase SSL2_ST_SEND_REQUEST_CERTIFICATE_D: str="SSLv2 write request certificate D"; break; 14055714Skriscase SSL2_ST_X509_GET_SERVER_CERTIFICATE: str="SSLv2 X509 read server certificate"; break; 14155714Skriscase SSL2_ST_X509_GET_CLIENT_CERTIFICATE: str="SSLv2 X509 read client certificate"; break; 14255714Skris#endif 14355714Skris 144109998Smarkm#ifndef OPENSSL_NO_SSL3 14555714Skris/* SSLv3 additions */ 14655714Skriscase SSL3_ST_CW_CLNT_HELLO_A: str="SSLv3 write client hello A"; break; 14755714Skriscase SSL3_ST_CW_CLNT_HELLO_B: str="SSLv3 write client hello B"; break; 14855714Skriscase SSL3_ST_CR_SRVR_HELLO_A: str="SSLv3 read server hello A"; break; 14955714Skriscase SSL3_ST_CR_SRVR_HELLO_B: str="SSLv3 read server hello B"; break; 15055714Skriscase SSL3_ST_CR_CERT_A: str="SSLv3 read server certificate A"; break; 15155714Skriscase SSL3_ST_CR_CERT_B: str="SSLv3 read server certificate B"; break; 15255714Skriscase SSL3_ST_CR_KEY_EXCH_A: str="SSLv3 read server key exchange A"; break; 15355714Skriscase SSL3_ST_CR_KEY_EXCH_B: str="SSLv3 read server key exchange B"; break; 15455714Skriscase SSL3_ST_CR_CERT_REQ_A: str="SSLv3 read server certificate request A"; break; 15555714Skriscase SSL3_ST_CR_CERT_REQ_B: str="SSLv3 read server certificate request B"; break; 156194206Ssimoncase SSL3_ST_CR_SESSION_TICKET_A: str="SSLv3 read server session ticket A";break; 157194206Ssimoncase SSL3_ST_CR_SESSION_TICKET_B: str="SSLv3 read server session ticket B";break; 15855714Skriscase SSL3_ST_CR_SRVR_DONE_A: str="SSLv3 read server done A"; break; 15955714Skriscase SSL3_ST_CR_SRVR_DONE_B: str="SSLv3 read server done B"; break; 16055714Skriscase SSL3_ST_CW_CERT_A: str="SSLv3 write client certificate A"; break; 16155714Skriscase SSL3_ST_CW_CERT_B: str="SSLv3 write client certificate B"; break; 16255714Skriscase SSL3_ST_CW_CERT_C: str="SSLv3 write client certificate C"; break; 16355714Skriscase SSL3_ST_CW_CERT_D: str="SSLv3 write client certificate D"; break; 16455714Skriscase SSL3_ST_CW_KEY_EXCH_A: str="SSLv3 write client key exchange A"; break; 16555714Skriscase SSL3_ST_CW_KEY_EXCH_B: str="SSLv3 write client key exchange B"; break; 16655714Skriscase SSL3_ST_CW_CERT_VRFY_A: str="SSLv3 write certificate verify A"; break; 16789837Skriscase SSL3_ST_CW_CERT_VRFY_B: str="SSLv3 write certificate verify B"; break; 16855714Skris 16955714Skriscase SSL3_ST_CW_CHANGE_A: 17055714Skriscase SSL3_ST_SW_CHANGE_A: str="SSLv3 write change cipher spec A"; break; 17155714Skriscase SSL3_ST_CW_CHANGE_B: 17255714Skriscase SSL3_ST_SW_CHANGE_B: str="SSLv3 write change cipher spec B"; break; 17355714Skriscase SSL3_ST_CW_FINISHED_A: 17455714Skriscase SSL3_ST_SW_FINISHED_A: str="SSLv3 write finished A"; break; 17555714Skriscase SSL3_ST_CW_FINISHED_B: 17689837Skriscase SSL3_ST_SW_FINISHED_B: str="SSLv3 write finished B"; break; 17755714Skriscase SSL3_ST_CR_CHANGE_A: 17855714Skriscase SSL3_ST_SR_CHANGE_A: str="SSLv3 read change cipher spec A"; break; 17955714Skriscase SSL3_ST_CR_CHANGE_B: 18055714Skriscase SSL3_ST_SR_CHANGE_B: str="SSLv3 read change cipher spec B"; break; 18155714Skriscase SSL3_ST_CR_FINISHED_A: 18255714Skriscase SSL3_ST_SR_FINISHED_A: str="SSLv3 read finished A"; break; 18355714Skriscase SSL3_ST_CR_FINISHED_B: 18455714Skriscase SSL3_ST_SR_FINISHED_B: str="SSLv3 read finished B"; break; 18555714Skris 18655714Skriscase SSL3_ST_CW_FLUSH: 18755714Skriscase SSL3_ST_SW_FLUSH: str="SSLv3 flush data"; break; 18855714Skris 18955714Skriscase SSL3_ST_SR_CLNT_HELLO_A: str="SSLv3 read client hello A"; break; 19055714Skriscase SSL3_ST_SR_CLNT_HELLO_B: str="SSLv3 read client hello B"; break; 19155714Skriscase SSL3_ST_SR_CLNT_HELLO_C: str="SSLv3 read client hello C"; break; 19255714Skriscase SSL3_ST_SW_HELLO_REQ_A: str="SSLv3 write hello request A"; break; 19355714Skriscase SSL3_ST_SW_HELLO_REQ_B: str="SSLv3 write hello request B"; break; 19455714Skriscase SSL3_ST_SW_HELLO_REQ_C: str="SSLv3 write hello request C"; break; 19555714Skriscase SSL3_ST_SW_SRVR_HELLO_A: str="SSLv3 write server hello A"; break; 19655714Skriscase SSL3_ST_SW_SRVR_HELLO_B: str="SSLv3 write server hello B"; break; 19755714Skriscase SSL3_ST_SW_CERT_A: str="SSLv3 write certificate A"; break; 19855714Skriscase SSL3_ST_SW_CERT_B: str="SSLv3 write certificate B"; break; 19955714Skriscase SSL3_ST_SW_KEY_EXCH_A: str="SSLv3 write key exchange A"; break; 20055714Skriscase SSL3_ST_SW_KEY_EXCH_B: str="SSLv3 write key exchange B"; break; 20155714Skriscase SSL3_ST_SW_CERT_REQ_A: str="SSLv3 write certificate request A"; break; 20255714Skriscase SSL3_ST_SW_CERT_REQ_B: str="SSLv3 write certificate request B"; break; 203194206Ssimoncase SSL3_ST_SW_SESSION_TICKET_A: str="SSLv3 write session ticket A"; break; 204194206Ssimoncase SSL3_ST_SW_SESSION_TICKET_B: str="SSLv3 write session ticket B"; break; 20555714Skriscase SSL3_ST_SW_SRVR_DONE_A: str="SSLv3 write server done A"; break; 20655714Skriscase SSL3_ST_SW_SRVR_DONE_B: str="SSLv3 write server done B"; break; 20755714Skriscase SSL3_ST_SR_CERT_A: str="SSLv3 read client certificate A"; break; 20855714Skriscase SSL3_ST_SR_CERT_B: str="SSLv3 read client certificate B"; break; 20955714Skriscase SSL3_ST_SR_KEY_EXCH_A: str="SSLv3 read client key exchange A"; break; 21055714Skriscase SSL3_ST_SR_KEY_EXCH_B: str="SSLv3 read client key exchange B"; break; 21155714Skriscase SSL3_ST_SR_CERT_VRFY_A: str="SSLv3 read certificate verify A"; break; 21255714Skriscase SSL3_ST_SR_CERT_VRFY_B: str="SSLv3 read certificate verify B"; break; 21355714Skris#endif 21455714Skris 21559191Skris/* SSLv2/v3 compatibility states */ 21655714Skris/* client */ 21755714Skriscase SSL23_ST_CW_CLNT_HELLO_A: str="SSLv2/v3 write client hello A"; break; 21855714Skriscase SSL23_ST_CW_CLNT_HELLO_B: str="SSLv2/v3 write client hello B"; break; 21955714Skriscase SSL23_ST_CR_SRVR_HELLO_A: str="SSLv2/v3 read server hello A"; break; 22055714Skriscase SSL23_ST_CR_SRVR_HELLO_B: str="SSLv2/v3 read server hello B"; break; 22155714Skris/* server */ 22255714Skriscase SSL23_ST_SR_CLNT_HELLO_A: str="SSLv2/v3 read client hello A"; break; 22355714Skriscase SSL23_ST_SR_CLNT_HELLO_B: str="SSLv2/v3 read client hello B"; break; 22455714Skris 225205128Ssimon/* DTLS */ 226205128Ssimoncase DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: str="DTLS1 read hello verify request A"; break; 227205128Ssimoncase DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: str="DTLS1 read hello verify request B"; break; 228205128Ssimoncase DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: str="DTLS1 write hello verify request A"; break; 229205128Ssimoncase DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: str="DTLS1 write hello verify request B"; break; 230205128Ssimon 23155714Skrisdefault: str="unknown state"; break; 23255714Skris } 23355714Skris return(str); 23455714Skris } 23555714Skris 236109998Smarkmconst char *SSL_rstate_string_long(const SSL *s) 23755714Skris { 238109998Smarkm const char *str; 23955714Skris 24055714Skris switch (s->rstate) 24155714Skris { 24255714Skris case SSL_ST_READ_HEADER: str="read header"; break; 24355714Skris case SSL_ST_READ_BODY: str="read body"; break; 24455714Skris case SSL_ST_READ_DONE: str="read done"; break; 24555714Skris default: str="unknown"; break; 24655714Skris } 24755714Skris return(str); 24855714Skris } 24955714Skris 250109998Smarkmconst char *SSL_state_string(const SSL *s) 25155714Skris { 252109998Smarkm const char *str; 25355714Skris 25455714Skris switch (s->state) 25555714Skris { 25655714Skriscase SSL_ST_BEFORE: str="PINIT "; break; 25755714Skriscase SSL_ST_ACCEPT: str="AINIT "; break; 25855714Skriscase SSL_ST_CONNECT: str="CINIT "; break; 25955714Skriscase SSL_ST_OK: str="SSLOK "; break; 260109998Smarkm#ifndef OPENSSL_NO_SSL2 26155714Skriscase SSL2_ST_CLIENT_START_ENCRYPTION: str="2CSENC"; break; 26255714Skriscase SSL2_ST_SERVER_START_ENCRYPTION: str="2SSENC"; break; 26355714Skriscase SSL2_ST_SEND_CLIENT_HELLO_A: str="2SCH_A"; break; 26455714Skriscase SSL2_ST_SEND_CLIENT_HELLO_B: str="2SCH_B"; break; 26555714Skriscase SSL2_ST_GET_SERVER_HELLO_A: str="2GSH_A"; break; 26655714Skriscase SSL2_ST_GET_SERVER_HELLO_B: str="2GSH_B"; break; 26755714Skriscase SSL2_ST_SEND_CLIENT_MASTER_KEY_A: str="2SCMKA"; break; 26855714Skriscase SSL2_ST_SEND_CLIENT_MASTER_KEY_B: str="2SCMKB"; break; 26955714Skriscase SSL2_ST_SEND_CLIENT_FINISHED_A: str="2SCF_A"; break; 27055714Skriscase SSL2_ST_SEND_CLIENT_FINISHED_B: str="2SCF_B"; break; 27155714Skriscase SSL2_ST_SEND_CLIENT_CERTIFICATE_A: str="2SCC_A"; break; 27255714Skriscase SSL2_ST_SEND_CLIENT_CERTIFICATE_B: str="2SCC_B"; break; 27355714Skriscase SSL2_ST_SEND_CLIENT_CERTIFICATE_C: str="2SCC_C"; break; 27455714Skriscase SSL2_ST_SEND_CLIENT_CERTIFICATE_D: str="2SCC_D"; break; 27555714Skriscase SSL2_ST_GET_SERVER_VERIFY_A: str="2GSV_A"; break; 27655714Skriscase SSL2_ST_GET_SERVER_VERIFY_B: str="2GSV_B"; break; 27755714Skriscase SSL2_ST_GET_SERVER_FINISHED_A: str="2GSF_A"; break; 27855714Skriscase SSL2_ST_GET_SERVER_FINISHED_B: str="2GSF_B"; break; 27955714Skriscase SSL2_ST_GET_CLIENT_HELLO_A: str="2GCH_A"; break; 28055714Skriscase SSL2_ST_GET_CLIENT_HELLO_B: str="2GCH_B"; break; 28155714Skriscase SSL2_ST_GET_CLIENT_HELLO_C: str="2GCH_C"; break; 28255714Skriscase SSL2_ST_SEND_SERVER_HELLO_A: str="2SSH_A"; break; 28355714Skriscase SSL2_ST_SEND_SERVER_HELLO_B: str="2SSH_B"; break; 28455714Skriscase SSL2_ST_GET_CLIENT_MASTER_KEY_A: str="2GCMKA"; break; 28555714Skriscase SSL2_ST_GET_CLIENT_MASTER_KEY_B: str="2GCMKA"; break; 28655714Skriscase SSL2_ST_SEND_SERVER_VERIFY_A: str="2SSV_A"; break; 28755714Skriscase SSL2_ST_SEND_SERVER_VERIFY_B: str="2SSV_B"; break; 28855714Skriscase SSL2_ST_SEND_SERVER_VERIFY_C: str="2SSV_C"; break; 28955714Skriscase SSL2_ST_GET_CLIENT_FINISHED_A: str="2GCF_A"; break; 29055714Skriscase SSL2_ST_GET_CLIENT_FINISHED_B: str="2GCF_B"; break; 29155714Skriscase SSL2_ST_SEND_SERVER_FINISHED_A: str="2SSF_A"; break; 29255714Skriscase SSL2_ST_SEND_SERVER_FINISHED_B: str="2SSF_B"; break; 29355714Skriscase SSL2_ST_SEND_REQUEST_CERTIFICATE_A: str="2SRC_A"; break; 29455714Skriscase SSL2_ST_SEND_REQUEST_CERTIFICATE_B: str="2SRC_B"; break; 29555714Skriscase SSL2_ST_SEND_REQUEST_CERTIFICATE_C: str="2SRC_C"; break; 29655714Skriscase SSL2_ST_SEND_REQUEST_CERTIFICATE_D: str="2SRC_D"; break; 29755714Skriscase SSL2_ST_X509_GET_SERVER_CERTIFICATE: str="2X9GSC"; break; 29855714Skriscase SSL2_ST_X509_GET_CLIENT_CERTIFICATE: str="2X9GCC"; break; 29955714Skris#endif 30055714Skris 301109998Smarkm#ifndef OPENSSL_NO_SSL3 30255714Skris/* SSLv3 additions */ 30355714Skriscase SSL3_ST_SW_FLUSH: 30455714Skriscase SSL3_ST_CW_FLUSH: str="3FLUSH"; break; 30555714Skriscase SSL3_ST_CW_CLNT_HELLO_A: str="3WCH_A"; break; 30655714Skriscase SSL3_ST_CW_CLNT_HELLO_B: str="3WCH_B"; break; 30755714Skriscase SSL3_ST_CR_SRVR_HELLO_A: str="3RSH_A"; break; 30855714Skriscase SSL3_ST_CR_SRVR_HELLO_B: str="3RSH_B"; break; 30955714Skriscase SSL3_ST_CR_CERT_A: str="3RSC_A"; break; 31055714Skriscase SSL3_ST_CR_CERT_B: str="3RSC_B"; break; 31155714Skriscase SSL3_ST_CR_KEY_EXCH_A: str="3RSKEA"; break; 31255714Skriscase SSL3_ST_CR_KEY_EXCH_B: str="3RSKEB"; break; 31355714Skriscase SSL3_ST_CR_CERT_REQ_A: str="3RCR_A"; break; 31455714Skriscase SSL3_ST_CR_CERT_REQ_B: str="3RCR_B"; break; 31555714Skriscase SSL3_ST_CR_SRVR_DONE_A: str="3RSD_A"; break; 31655714Skriscase SSL3_ST_CR_SRVR_DONE_B: str="3RSD_B"; break; 31755714Skriscase SSL3_ST_CW_CERT_A: str="3WCC_A"; break; 31855714Skriscase SSL3_ST_CW_CERT_B: str="3WCC_B"; break; 31955714Skriscase SSL3_ST_CW_CERT_C: str="3WCC_C"; break; 32055714Skriscase SSL3_ST_CW_CERT_D: str="3WCC_D"; break; 32155714Skriscase SSL3_ST_CW_KEY_EXCH_A: str="3WCKEA"; break; 32255714Skriscase SSL3_ST_CW_KEY_EXCH_B: str="3WCKEB"; break; 32355714Skriscase SSL3_ST_CW_CERT_VRFY_A: str="3WCV_A"; break; 32455714Skriscase SSL3_ST_CW_CERT_VRFY_B: str="3WCV_B"; break; 32555714Skris 32655714Skriscase SSL3_ST_SW_CHANGE_A: 32755714Skriscase SSL3_ST_CW_CHANGE_A: str="3WCCSA"; break; 32855714Skriscase SSL3_ST_SW_CHANGE_B: 32955714Skriscase SSL3_ST_CW_CHANGE_B: str="3WCCSB"; break; 33055714Skriscase SSL3_ST_SW_FINISHED_A: 33155714Skriscase SSL3_ST_CW_FINISHED_A: str="3WFINA"; break; 33255714Skriscase SSL3_ST_SW_FINISHED_B: 33355714Skriscase SSL3_ST_CW_FINISHED_B: str="3WFINB"; break; 33455714Skriscase SSL3_ST_SR_CHANGE_A: 33555714Skriscase SSL3_ST_CR_CHANGE_A: str="3RCCSA"; break; 33655714Skriscase SSL3_ST_SR_CHANGE_B: 33755714Skriscase SSL3_ST_CR_CHANGE_B: str="3RCCSB"; break; 33855714Skriscase SSL3_ST_SR_FINISHED_A: 33955714Skriscase SSL3_ST_CR_FINISHED_A: str="3RFINA"; break; 34055714Skriscase SSL3_ST_SR_FINISHED_B: 34155714Skriscase SSL3_ST_CR_FINISHED_B: str="3RFINB"; break; 34255714Skris 34355714Skriscase SSL3_ST_SW_HELLO_REQ_A: str="3WHR_A"; break; 34455714Skriscase SSL3_ST_SW_HELLO_REQ_B: str="3WHR_B"; break; 34555714Skriscase SSL3_ST_SW_HELLO_REQ_C: str="3WHR_C"; break; 34655714Skriscase SSL3_ST_SR_CLNT_HELLO_A: str="3RCH_A"; break; 34755714Skriscase SSL3_ST_SR_CLNT_HELLO_B: str="3RCH_B"; break; 34855714Skriscase SSL3_ST_SR_CLNT_HELLO_C: str="3RCH_C"; break; 34955714Skriscase SSL3_ST_SW_SRVR_HELLO_A: str="3WSH_A"; break; 35055714Skriscase SSL3_ST_SW_SRVR_HELLO_B: str="3WSH_B"; break; 35155714Skriscase SSL3_ST_SW_CERT_A: str="3WSC_A"; break; 35255714Skriscase SSL3_ST_SW_CERT_B: str="3WSC_B"; break; 35355714Skriscase SSL3_ST_SW_KEY_EXCH_A: str="3WSKEA"; break; 35455714Skriscase SSL3_ST_SW_KEY_EXCH_B: str="3WSKEB"; break; 35555714Skriscase SSL3_ST_SW_CERT_REQ_A: str="3WCR_A"; break; 35655714Skriscase SSL3_ST_SW_CERT_REQ_B: str="3WCR_B"; break; 35755714Skriscase SSL3_ST_SW_SRVR_DONE_A: str="3WSD_A"; break; 35855714Skriscase SSL3_ST_SW_SRVR_DONE_B: str="3WSD_B"; break; 35955714Skriscase SSL3_ST_SR_CERT_A: str="3RCC_A"; break; 36055714Skriscase SSL3_ST_SR_CERT_B: str="3RCC_B"; break; 36155714Skriscase SSL3_ST_SR_KEY_EXCH_A: str="3RCKEA"; break; 36255714Skriscase SSL3_ST_SR_KEY_EXCH_B: str="3RCKEB"; break; 36355714Skriscase SSL3_ST_SR_CERT_VRFY_A: str="3RCV_A"; break; 36455714Skriscase SSL3_ST_SR_CERT_VRFY_B: str="3RCV_B"; break; 36555714Skris#endif 36655714Skris 36759191Skris/* SSLv2/v3 compatibility states */ 36855714Skris/* client */ 36955714Skriscase SSL23_ST_CW_CLNT_HELLO_A: str="23WCHA"; break; 37055714Skriscase SSL23_ST_CW_CLNT_HELLO_B: str="23WCHB"; break; 37155714Skriscase SSL23_ST_CR_SRVR_HELLO_A: str="23RSHA"; break; 37255714Skriscase SSL23_ST_CR_SRVR_HELLO_B: str="23RSHA"; break; 37355714Skris/* server */ 37455714Skriscase SSL23_ST_SR_CLNT_HELLO_A: str="23RCHA"; break; 37555714Skriscase SSL23_ST_SR_CLNT_HELLO_B: str="23RCHB"; break; 376279264Sdelphij 377205128Ssimon/* DTLS */ 378205128Ssimoncase DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: str="DRCHVA"; break; 379205128Ssimoncase DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: str="DRCHVB"; break; 380205128Ssimoncase DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: str="DWCHVA"; break; 381205128Ssimoncase DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: str="DWCHVB"; break; 38255714Skris 38355714Skrisdefault: str="UNKWN "; break; 38455714Skris } 38555714Skris return(str); 38655714Skris } 38755714Skris 388109998Smarkmconst char *SSL_alert_type_string_long(int value) 38955714Skris { 39055714Skris value>>=8; 39155714Skris if (value == SSL3_AL_WARNING) 39255714Skris return("warning"); 39355714Skris else if (value == SSL3_AL_FATAL) 39455714Skris return("fatal"); 39555714Skris else 39655714Skris return("unknown"); 39755714Skris } 39855714Skris 399109998Smarkmconst char *SSL_alert_type_string(int value) 40055714Skris { 40155714Skris value>>=8; 40255714Skris if (value == SSL3_AL_WARNING) 40355714Skris return("W"); 40455714Skris else if (value == SSL3_AL_FATAL) 40555714Skris return("F"); 40655714Skris else 40755714Skris return("U"); 40855714Skris } 40955714Skris 410109998Smarkmconst char *SSL_alert_desc_string(int value) 41155714Skris { 412109998Smarkm const char *str; 41355714Skris 41455714Skris switch (value & 0xff) 41555714Skris { 41655714Skris case SSL3_AD_CLOSE_NOTIFY: str="CN"; break; 41755714Skris case SSL3_AD_UNEXPECTED_MESSAGE: str="UM"; break; 41855714Skris case SSL3_AD_BAD_RECORD_MAC: str="BM"; break; 41955714Skris case SSL3_AD_DECOMPRESSION_FAILURE: str="DF"; break; 42055714Skris case SSL3_AD_HANDSHAKE_FAILURE: str="HF"; break; 42155714Skris case SSL3_AD_NO_CERTIFICATE: str="NC"; break; 42255714Skris case SSL3_AD_BAD_CERTIFICATE: str="BC"; break; 42355714Skris case SSL3_AD_UNSUPPORTED_CERTIFICATE: str="UC"; break; 42455714Skris case SSL3_AD_CERTIFICATE_REVOKED: str="CR"; break; 42555714Skris case SSL3_AD_CERTIFICATE_EXPIRED: str="CE"; break; 42655714Skris case SSL3_AD_CERTIFICATE_UNKNOWN: str="CU"; break; 42755714Skris case SSL3_AD_ILLEGAL_PARAMETER: str="IP"; break; 42889837Skris case TLS1_AD_DECRYPTION_FAILED: str="DC"; break; 42989837Skris case TLS1_AD_RECORD_OVERFLOW: str="RO"; break; 43089837Skris case TLS1_AD_UNKNOWN_CA: str="CA"; break; 43189837Skris case TLS1_AD_ACCESS_DENIED: str="AD"; break; 43289837Skris case TLS1_AD_DECODE_ERROR: str="DE"; break; 43389837Skris case TLS1_AD_DECRYPT_ERROR: str="CY"; break; 43489837Skris case TLS1_AD_EXPORT_RESTRICTION: str="ER"; break; 43589837Skris case TLS1_AD_PROTOCOL_VERSION: str="PV"; break; 43689837Skris case TLS1_AD_INSUFFICIENT_SECURITY: str="IS"; break; 43789837Skris case TLS1_AD_INTERNAL_ERROR: str="IE"; break; 43889837Skris case TLS1_AD_USER_CANCELLED: str="US"; break; 43989837Skris case TLS1_AD_NO_RENEGOTIATION: str="NR"; break; 440238405Sjkim case TLS1_AD_UNSUPPORTED_EXTENSION: str="UE"; break; 441238405Sjkim case TLS1_AD_CERTIFICATE_UNOBTAINABLE: str="CO"; break; 442238405Sjkim case TLS1_AD_UNRECOGNIZED_NAME: str="UN"; break; 443238405Sjkim case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: str="BR"; break; 444238405Sjkim case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: str="BH"; break; 445238405Sjkim case TLS1_AD_UNKNOWN_PSK_IDENTITY: str="UP"; break; 44655714Skris default: str="UK"; break; 44755714Skris } 44855714Skris return(str); 44955714Skris } 45055714Skris 451109998Smarkmconst char *SSL_alert_desc_string_long(int value) 45255714Skris { 453109998Smarkm const char *str; 45455714Skris 45555714Skris switch (value & 0xff) 45655714Skris { 45755714Skris case SSL3_AD_CLOSE_NOTIFY: 45855714Skris str="close notify"; 45955714Skris break; 46055714Skris case SSL3_AD_UNEXPECTED_MESSAGE: 46159191Skris str="unexpected_message"; 46255714Skris break; 46355714Skris case SSL3_AD_BAD_RECORD_MAC: 46455714Skris str="bad record mac"; 46555714Skris break; 46655714Skris case SSL3_AD_DECOMPRESSION_FAILURE: 46755714Skris str="decompression failure"; 46855714Skris break; 46955714Skris case SSL3_AD_HANDSHAKE_FAILURE: 47055714Skris str="handshake failure"; 47155714Skris break; 47255714Skris case SSL3_AD_NO_CERTIFICATE: 47355714Skris str="no certificate"; 47455714Skris break; 47555714Skris case SSL3_AD_BAD_CERTIFICATE: 47655714Skris str="bad certificate"; 47755714Skris break; 47855714Skris case SSL3_AD_UNSUPPORTED_CERTIFICATE: 47955714Skris str="unsupported certificate"; 48055714Skris break; 48155714Skris case SSL3_AD_CERTIFICATE_REVOKED: 48255714Skris str="certificate revoked"; 48355714Skris break; 48455714Skris case SSL3_AD_CERTIFICATE_EXPIRED: 48555714Skris str="certificate expired"; 48655714Skris break; 48755714Skris case SSL3_AD_CERTIFICATE_UNKNOWN: 48859191Skris str="certificate unknown"; 48955714Skris break; 49055714Skris case SSL3_AD_ILLEGAL_PARAMETER: 49155714Skris str="illegal parameter"; 49255714Skris break; 49389837Skris case TLS1_AD_DECRYPTION_FAILED: 49489837Skris str="decryption failed"; 49589837Skris break; 49689837Skris case TLS1_AD_RECORD_OVERFLOW: 49789837Skris str="record overflow"; 49889837Skris break; 49989837Skris case TLS1_AD_UNKNOWN_CA: 50089837Skris str="unknown CA"; 50189837Skris break; 50289837Skris case TLS1_AD_ACCESS_DENIED: 50389837Skris str="access denied"; 50489837Skris break; 50589837Skris case TLS1_AD_DECODE_ERROR: 50689837Skris str="decode error"; 50789837Skris break; 50889837Skris case TLS1_AD_DECRYPT_ERROR: 50989837Skris str="decrypt error"; 51089837Skris break; 51189837Skris case TLS1_AD_EXPORT_RESTRICTION: 51289837Skris str="export restriction"; 51389837Skris break; 51489837Skris case TLS1_AD_PROTOCOL_VERSION: 51589837Skris str="protocol version"; 51689837Skris break; 51789837Skris case TLS1_AD_INSUFFICIENT_SECURITY: 51889837Skris str="insufficient security"; 51989837Skris break; 52089837Skris case TLS1_AD_INTERNAL_ERROR: 52189837Skris str="internal error"; 52289837Skris break; 52389837Skris case TLS1_AD_USER_CANCELLED: 52489837Skris str="user canceled"; 52589837Skris break; 52689837Skris case TLS1_AD_NO_RENEGOTIATION: 52789837Skris str="no renegotiation"; 52889837Skris break; 529238405Sjkim case TLS1_AD_UNSUPPORTED_EXTENSION: 530238405Sjkim str="unsupported extension"; 531238405Sjkim break; 532238405Sjkim case TLS1_AD_CERTIFICATE_UNOBTAINABLE: 533238405Sjkim str="certificate unobtainable"; 534238405Sjkim break; 535238405Sjkim case TLS1_AD_UNRECOGNIZED_NAME: 536238405Sjkim str="unrecognized name"; 537238405Sjkim break; 538238405Sjkim case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 539238405Sjkim str="bad certificate status response"; 540238405Sjkim break; 541238405Sjkim case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 542238405Sjkim str="bad certificate hash value"; 543238405Sjkim break; 544238405Sjkim case TLS1_AD_UNKNOWN_PSK_IDENTITY: 545238405Sjkim str="unknown PSK identity"; 546238405Sjkim break; 54755714Skris default: str="unknown"; break; 54855714Skris } 54955714Skris return(str); 55055714Skris } 55155714Skris 552109998Smarkmconst char *SSL_rstate_string(const SSL *s) 55355714Skris { 554109998Smarkm const char *str; 55555714Skris 55655714Skris switch (s->rstate) 55755714Skris { 55855714Skris case SSL_ST_READ_HEADER:str="RH"; break; 55955714Skris case SSL_ST_READ_BODY: str="RB"; break; 56055714Skris case SSL_ST_READ_DONE: str="RD"; break; 56155714Skris default: str="unknown"; break; 56255714Skris } 56355714Skris return(str); 56455714Skris } 565