/* ssl/ssl_stat.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 * All rights reserved.
 *
 * This package is an SSL implementation written
 * by Eric Young (eay@cryptsoft.com).
 * The implementation was written so as to conform with Netscapes SSL.
 * 
 * This library is free for commercial and non-commercial use as long as
 * the following conditions are aheared to.  The following conditions
 * apply to all code found in this distribution, be it the RC4, RSA,
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 * included with this distribution is covered by the same copyright terms
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 * 
 * Copyright remains Eric Young's, and as such any Copyright notices in
 * the code are not to be removed.
 * If this package is used in a product, Eric Young should be given attribution
 * as the author of the parts of the library used.
 * This can be in the form of a textual message at program startup or
 * in documentation (online or textual) provided with the package.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    "This product includes cryptographic software written by
 *     Eric Young (eay@cryptsoft.com)"
 *    The word 'cryptographic' can be left out if the rouines from the library
 *    being used are not cryptographic related :-).
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 *    the apps directory (application code) you must include an acknowledgement:
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 * 
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * 
 * The licence and distribution terms for any publically available version or
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 * copied and put under another distribution licence
 * [including the GNU Public Licence.]
 */
/* ====================================================================
 * Copyright 2005 Nokia. All rights reserved.
 *
 * The portions of the attached software ("Contribution") is developed by
 * Nokia Corporation and is licensed pursuant to the OpenSSL open source
 * license.
 *
 * The Contribution, originally written by Mika Kousa and Pasi Eronen of
 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
 * support (see RFC 4279) to OpenSSL.
 *
 * No patent licenses or other rights except those expressly stated in
 * the OpenSSL open source license shall be deemed granted or received
 * expressly, by implication, estoppel, or otherwise.
 *
 * No assurances are provided by Nokia that the Contribution does not
 * infringe the patent or other intellectual property rights of any third
 * party or that the license provides you with all the necessary rights
 * to make use of the Contribution.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
 * OTHERWISE.
 */

#include <stdio.h>
#include "ssl_locl.h"

const char *SSL_state_string_long(const SSL *s) {
  const char *str;

  switch (s->state) {
    case SSL_ST_ACCEPT:
      str = "before accept initialization";
      break;

    case SSL_ST_CONNECT:
      str = "before connect initialization";
      break;

    case SSL_ST_OK:
      str = "SSL negotiation finished successfully";
      break;

    case SSL_ST_RENEGOTIATE:
      str = "SSL renegotiate ciphers";
      break;

    case SSL_ST_BEFORE | SSL_ST_CONNECT:
      str = "before/connect initialization";
      break;

    case SSL_ST_BEFORE | SSL_ST_ACCEPT:
      str = "before/accept initialization";
      break;

    /* SSLv3 additions */
    case SSL3_ST_CW_CLNT_HELLO_A:
      str = "SSLv3 write client hello A";
      break;

    case SSL3_ST_CW_CLNT_HELLO_B:
      str = "SSLv3 write client hello B";
      break;

    case SSL3_ST_CR_SRVR_HELLO_A:
      str = "SSLv3 read server hello A";
      break;

    case SSL3_ST_CR_SRVR_HELLO_B:
      str = "SSLv3 read server hello B";
      break;

    case SSL3_ST_CR_CERT_A:
      str = "SSLv3 read server certificate A";
      break;

    case SSL3_ST_CR_CERT_B:
      str = "SSLv3 read server certificate B";
      break;

    case SSL3_ST_CR_KEY_EXCH_A:
      str = "SSLv3 read server key exchange A";
      break;

    case SSL3_ST_CR_KEY_EXCH_B:
      str = "SSLv3 read server key exchange B";
      break;

    case SSL3_ST_CR_CERT_REQ_A:
      str = "SSLv3 read server certificate request A";
      break;

    case SSL3_ST_CR_CERT_REQ_B:
      str = "SSLv3 read server certificate request B";
      break;

    case SSL3_ST_CR_SESSION_TICKET_A:
      str = "SSLv3 read server session ticket A";
      break;

    case SSL3_ST_CR_SESSION_TICKET_B:
      str = "SSLv3 read server session ticket B";
      break;

    case SSL3_ST_CR_SRVR_DONE_A:
      str = "SSLv3 read server done A";
      break;

    case SSL3_ST_CR_SRVR_DONE_B:
      str = "SSLv3 read server done B";
      break;

    case SSL3_ST_CW_CERT_A:
      str = "SSLv3 write client certificate A";
      break;

    case SSL3_ST_CW_CERT_B:
      str = "SSLv3 write client certificate B";
      break;

    case SSL3_ST_CW_CERT_C:
      str = "SSLv3 write client certificate C";
      break;

    case SSL3_ST_CW_CERT_D:
      str = "SSLv3 write client certificate D";
      break;

    case SSL3_ST_CW_KEY_EXCH_A:
      str = "SSLv3 write client key exchange A";
      break;

    case SSL3_ST_CW_KEY_EXCH_B:
      str = "SSLv3 write client key exchange B";
      break;

    case SSL3_ST_CW_CERT_VRFY_A:
      str = "SSLv3 write certificate verify A";
      break;

    case SSL3_ST_CW_CERT_VRFY_B:
      str = "SSLv3 write certificate verify B";
      break;

    case SSL3_ST_CW_CHANGE_A:
    case SSL3_ST_SW_CHANGE_A:
      str = "SSLv3 write change cipher spec A";
      break;

    case SSL3_ST_CW_CHANGE_B:
    case SSL3_ST_SW_CHANGE_B:
      str = "SSLv3 write change cipher spec B";
      break;

    case SSL3_ST_CW_FINISHED_A:
    case SSL3_ST_SW_FINISHED_A:
      str = "SSLv3 write finished A";
      break;

    case SSL3_ST_CW_FINISHED_B:
    case SSL3_ST_SW_FINISHED_B:
      str = "SSLv3 write finished B";
      break;

    case SSL3_ST_CR_CHANGE:
    case SSL3_ST_SR_CHANGE:
      str = "SSLv3 read change cipher spec";
      break;

    case SSL3_ST_CR_FINISHED_A:
    case SSL3_ST_SR_FINISHED_A:
      str = "SSLv3 read finished A";
      break;

    case SSL3_ST_CR_FINISHED_B:
    case SSL3_ST_SR_FINISHED_B:
      str = "SSLv3 read finished B";
      break;

    case SSL3_ST_CW_FLUSH:
    case SSL3_ST_SW_FLUSH:
      str = "SSLv3 flush data";
      break;

    case SSL3_ST_SR_CLNT_HELLO_A:
      str = "SSLv3 read client hello A";
      break;

    case SSL3_ST_SR_CLNT_HELLO_B:
      str = "SSLv3 read client hello B";
      break;

    case SSL3_ST_SR_CLNT_HELLO_C:
      str = "SSLv3 read client hello C";
      break;

    case SSL3_ST_SR_CLNT_HELLO_D:
      str = "SSLv3 read client hello D";
      break;

    case SSL3_ST_SW_HELLO_REQ_A:
      str = "SSLv3 write hello request A";
      break;

    case SSL3_ST_SW_HELLO_REQ_B:
      str = "SSLv3 write hello request B";
      break;

    case SSL3_ST_SW_HELLO_REQ_C:
      str = "SSLv3 write hello request C";
      break;

    case SSL3_ST_SW_SRVR_HELLO_A:
      str = "SSLv3 write server hello A";
      break;

    case SSL3_ST_SW_SRVR_HELLO_B:
      str = "SSLv3 write server hello B";
      break;

    case SSL3_ST_SW_CERT_A:
      str = "SSLv3 write certificate A";
      break;

    case SSL3_ST_SW_CERT_B:
      str = "SSLv3 write certificate B";
      break;

    case SSL3_ST_SW_KEY_EXCH_A:
      str = "SSLv3 write key exchange A";
      break;

    case SSL3_ST_SW_KEY_EXCH_B:
      str = "SSLv3 write key exchange B";
      break;

    case SSL3_ST_SW_CERT_REQ_A:
      str = "SSLv3 write certificate request A";
      break;

    case SSL3_ST_SW_CERT_REQ_B:
      str = "SSLv3 write certificate request B";
      break;

    case SSL3_ST_SW_SESSION_TICKET_A:
      str = "SSLv3 write session ticket A";
      break;

    case SSL3_ST_SW_SESSION_TICKET_B:
      str = "SSLv3 write session ticket B";
      break;

    case SSL3_ST_SW_SRVR_DONE_A:
      str = "SSLv3 write server done A";
      break;

    case SSL3_ST_SW_SRVR_DONE_B:
      str = "SSLv3 write server done B";
      break;

    case SSL3_ST_SR_CERT_A:
      str = "SSLv3 read client certificate A";
      break;

    case SSL3_ST_SR_CERT_B:
      str = "SSLv3 read client certificate B";
      break;

    case SSL3_ST_SR_KEY_EXCH_A:
      str = "SSLv3 read client key exchange A";
      break;

    case SSL3_ST_SR_KEY_EXCH_B:
      str = "SSLv3 read client key exchange B";
      break;

    case SSL3_ST_SR_CERT_VRFY_A:
      str = "SSLv3 read certificate verify A";
      break;

    case SSL3_ST_SR_CERT_VRFY_B:
      str = "SSLv3 read certificate verify B";
      break;

    /* SSLv2/v3 compatibility states */
    /* client */
    case SSL23_ST_CW_CLNT_HELLO_A:
      str = "SSLv2/v3 write client hello A";
      break;

    case SSL23_ST_CW_CLNT_HELLO_B:
      str = "SSLv2/v3 write client hello B";
      break;

    case SSL23_ST_CR_SRVR_HELLO_A:
      str = "SSLv2/v3 read server hello A";
      break;

    case SSL23_ST_CR_SRVR_HELLO_B:
      str = "SSLv2/v3 read server hello B";
      break;

    /* server */
    case SSL23_ST_SR_CLNT_HELLO:
      str = "SSLv2/v3 read client hello";
      break;

    case SSL23_ST_SR_V2_CLNT_HELLO:
      str = "SSLv2/v3 read v2 client hello";
      break;

    case SSL23_ST_SR_SWITCH_VERSION:
      str = "SSLv2/v3 switch version";
      break;

    /* DTLS */
    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
      str = "DTLS1 read hello verify request A";
      break;

    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
      str = "DTLS1 read hello verify request B";
      break;

    default:
      str = "unknown state";
      break;
  }

  return str;
}

const char *SSL_rstate_string_long(const SSL *s) {
  const char *str;

  switch (s->rstate) {
    case SSL_ST_READ_HEADER:
      str = "read header";
      break;

    case SSL_ST_READ_BODY:
      str = "read body";
      break;

    case SSL_ST_READ_DONE:
      str = "read done";
      break;

    default:
      str = "unknown";
      break;
  }

  return str;
}

const char *SSL_state_string(const SSL *s) {
  const char *str;

  switch (s->state) {
    case SSL_ST_ACCEPT:
      str = "AINIT ";
      break;

    case SSL_ST_CONNECT:
      str = "CINIT ";
      break;

    case SSL_ST_OK:
      str = "SSLOK ";
      break;

    /* SSLv3 additions */
    case SSL3_ST_SW_FLUSH:
    case SSL3_ST_CW_FLUSH:
      str = "3FLUSH";
      break;

    case SSL3_ST_CW_CLNT_HELLO_A:
      str = "3WCH_A";
      break;

    case SSL3_ST_CW_CLNT_HELLO_B:
      str = "3WCH_B";
      break;

    case SSL3_ST_CR_SRVR_HELLO_A:
      str = "3RSH_A";
      break;

    case SSL3_ST_CR_SRVR_HELLO_B:
      str = "3RSH_B";
      break;

    case SSL3_ST_CR_CERT_A:
      str = "3RSC_A";
      break;

    case SSL3_ST_CR_CERT_B:
      str = "3RSC_B";
      break;

    case SSL3_ST_CR_KEY_EXCH_A:
      str = "3RSKEA";
      break;

    case SSL3_ST_CR_KEY_EXCH_B:
      str = "3RSKEB";
      break;

    case SSL3_ST_CR_CERT_REQ_A:
      str = "3RCR_A";
      break;

    case SSL3_ST_CR_CERT_REQ_B:
      str = "3RCR_B";
      break;

    case SSL3_ST_CR_SRVR_DONE_A:
      str = "3RSD_A";
      break;

    case SSL3_ST_CR_SRVR_DONE_B:
      str = "3RSD_B";
      break;

    case SSL3_ST_CW_CERT_A:
      str = "3WCC_A";
      break;

    case SSL3_ST_CW_CERT_B:
      str = "3WCC_B";
      break;

    case SSL3_ST_CW_CERT_C:
      str = "3WCC_C";
      break;

    case SSL3_ST_CW_CERT_D:
      str = "3WCC_D";
      break;

    case SSL3_ST_CW_KEY_EXCH_A:
      str = "3WCKEA";
      break;

    case SSL3_ST_CW_KEY_EXCH_B:
      str = "3WCKEB";
      break;

    case SSL3_ST_CW_CERT_VRFY_A:
      str = "3WCV_A";
      break;

    case SSL3_ST_CW_CERT_VRFY_B:
      str = "3WCV_B";
      break;

    case SSL3_ST_SW_CHANGE_A:
    case SSL3_ST_CW_CHANGE_A:
      str = "3WCCSA";
      break;

    case SSL3_ST_SW_CHANGE_B:
    case SSL3_ST_CW_CHANGE_B:
      str = "3WCCSB";
      break;

    case SSL3_ST_SW_FINISHED_A:
    case SSL3_ST_CW_FINISHED_A:
      str = "3WFINA";
      break;

    case SSL3_ST_SW_FINISHED_B:
    case SSL3_ST_CW_FINISHED_B:
      str = "3WFINB";
      break;

    case SSL3_ST_CR_CHANGE:
    case SSL3_ST_SR_CHANGE:
      str = "3RCCS_";
      break;

    case SSL3_ST_SR_FINISHED_A:
    case SSL3_ST_CR_FINISHED_A:
      str = "3RFINA";
      break;

    case SSL3_ST_SR_FINISHED_B:
    case SSL3_ST_CR_FINISHED_B:
      str = "3RFINB";
      break;

    case SSL3_ST_SW_HELLO_REQ_A:
      str = "3WHR_A";
      break;

    case SSL3_ST_SW_HELLO_REQ_B:
      str = "3WHR_B";
      break;

    case SSL3_ST_SW_HELLO_REQ_C:
      str = "3WHR_C";
      break;

    case SSL3_ST_SR_CLNT_HELLO_A:
      str = "3RCH_A";
      break;

    case SSL3_ST_SR_CLNT_HELLO_B:
      str = "3RCH_B";
      break;

    case SSL3_ST_SR_CLNT_HELLO_C:
      str = "3RCH_C";
      break;

    case SSL3_ST_SR_CLNT_HELLO_D:
      str = "3RCH_D";
      break;

    case SSL3_ST_SW_SRVR_HELLO_A:
      str = "3WSH_A";
      break;

    case SSL3_ST_SW_SRVR_HELLO_B:
      str = "3WSH_B";
      break;

    case SSL3_ST_SW_CERT_A:
      str = "3WSC_A";
      break;

    case SSL3_ST_SW_CERT_B:
      str = "3WSC_B";
      break;

    case SSL3_ST_SW_KEY_EXCH_A:
      str = "3WSKEA";
      break;

    case SSL3_ST_SW_KEY_EXCH_B:
      str = "3WSKEB";
      break;

    case SSL3_ST_SW_CERT_REQ_A:
      str = "3WCR_A";
      break;

    case SSL3_ST_SW_CERT_REQ_B:
      str = "3WCR_B";
      break;

    case SSL3_ST_SW_SRVR_DONE_A:
      str = "3WSD_A";
      break;

    case SSL3_ST_SW_SRVR_DONE_B:
      str = "3WSD_B";
      break;

    case SSL3_ST_SR_CERT_A:
      str = "3RCC_A";
      break;

    case SSL3_ST_SR_CERT_B:
      str = "3RCC_B";
      break;

    case SSL3_ST_SR_KEY_EXCH_A:
      str = "3RCKEA";
      break;

    case SSL3_ST_SR_KEY_EXCH_B:
      str = "3RCKEB";
      break;

    case SSL3_ST_SR_CERT_VRFY_A:
      str = "3RCV_A";
      break;

    case SSL3_ST_SR_CERT_VRFY_B:
      str = "3RCV_B";
      break;

    /* SSLv2/v3 compatibility states */
    /* client */
    case SSL23_ST_CW_CLNT_HELLO_A:
      str = "23WCHA";
      break;

    case SSL23_ST_CW_CLNT_HELLO_B:
      str = "23WCHB";
      break;

    case SSL23_ST_CR_SRVR_HELLO_A:
      str = "23RSHA";
      break;

    case SSL23_ST_CR_SRVR_HELLO_B:
      str = "23RSHA";
      break;

    /* server */
    case SSL23_ST_SR_CLNT_HELLO:
      str = "23RCH_";
      break;

    case SSL23_ST_SR_V2_CLNT_HELLO:
      str = "23R2CH";
      break;

    case SSL23_ST_SR_SWITCH_VERSION:
      str = "23RSW_";
      break;

    /* DTLS */
    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
      str = "DRCHVA";
      break;

    case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
      str = "DRCHVB";
      break;

    default:
      str = "UNKWN ";
      break;
  }

  return str;
}

const char *SSL_alert_type_string_long(int value) {
  value >>= 8;
  if (value == SSL3_AL_WARNING) {
    return "warning";
  } else if (value == SSL3_AL_FATAL) {
    return "fatal";
  }

  return "unknown";
}

const char *SSL_alert_type_string(int value) {
  value >>= 8;
  if (value == SSL3_AL_WARNING) {
    return "W";
  } else if (value == SSL3_AL_FATAL) {
    return "F";
  }

  return "U";
}

const char *SSL_alert_desc_string(int value) {
  const char *str;

  switch (value & 0xff) {
    case SSL3_AD_CLOSE_NOTIFY:
      str = "CN";
      break;

    case SSL3_AD_UNEXPECTED_MESSAGE:
      str = "UM";
      break;

    case SSL3_AD_BAD_RECORD_MAC:
      str = "BM";
      break;

    case SSL3_AD_DECOMPRESSION_FAILURE:
      str = "DF";
      break;

    case SSL3_AD_HANDSHAKE_FAILURE:
      str = "HF";
      break;

    case SSL3_AD_NO_CERTIFICATE:
      str = "NC";
      break;

    case SSL3_AD_BAD_CERTIFICATE:
      str = "BC";
      break;

    case SSL3_AD_UNSUPPORTED_CERTIFICATE:
      str = "UC";
      break;

    case SSL3_AD_CERTIFICATE_REVOKED:
      str = "CR";
      break;

    case SSL3_AD_CERTIFICATE_EXPIRED:
      str = "CE";
      break;

    case SSL3_AD_CERTIFICATE_UNKNOWN:
      str = "CU";
      break;

    case SSL3_AD_ILLEGAL_PARAMETER:
      str = "IP";
      break;

    case TLS1_AD_DECRYPTION_FAILED:
      str = "DC";
      break;

    case TLS1_AD_RECORD_OVERFLOW:
      str = "RO";
      break;

    case TLS1_AD_UNKNOWN_CA:
      str = "CA";
      break;

    case TLS1_AD_ACCESS_DENIED:
      str = "AD";
      break;

    case TLS1_AD_DECODE_ERROR:
      str = "DE";
      break;

    case TLS1_AD_DECRYPT_ERROR:
      str = "CY";
      break;

    case TLS1_AD_EXPORT_RESTRICTION:
      str = "ER";
      break;

    case TLS1_AD_PROTOCOL_VERSION:
      str = "PV";
      break;

    case TLS1_AD_INSUFFICIENT_SECURITY:
      str = "IS";
      break;

    case TLS1_AD_INTERNAL_ERROR:
      str = "IE";
      break;

    case TLS1_AD_USER_CANCELLED:
      str = "US";
      break;

    case TLS1_AD_NO_RENEGOTIATION:
      str = "NR";
      break;

    case TLS1_AD_UNSUPPORTED_EXTENSION:
      str = "UE";
      break;

    case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
      str = "CO";
      break;

    case TLS1_AD_UNRECOGNIZED_NAME:
      str = "UN";
      break;

    case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
      str = "BR";
      break;

    case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
      str = "BH";
      break;

    case TLS1_AD_UNKNOWN_PSK_IDENTITY:
      str = "UP";
      break;

    default:
      str = "UK";
      break;
  }

  return str;
}

const char *SSL_alert_desc_string_long(int value) {
  const char *str;

  switch (value & 0xff) {
    case SSL3_AD_CLOSE_NOTIFY:
      str = "close notify";
      break;

    case SSL3_AD_UNEXPECTED_MESSAGE:
      str = "unexpected_message";
      break;

    case SSL3_AD_BAD_RECORD_MAC:
      str = "bad record mac";
      break;

    case SSL3_AD_DECOMPRESSION_FAILURE:
      str = "decompression failure";
      break;

    case SSL3_AD_HANDSHAKE_FAILURE:
      str = "handshake failure";
      break;

    case SSL3_AD_NO_CERTIFICATE:
      str = "no certificate";
      break;

    case SSL3_AD_BAD_CERTIFICATE:
      str = "bad certificate";
      break;

    case SSL3_AD_UNSUPPORTED_CERTIFICATE:
      str = "unsupported certificate";
      break;

    case SSL3_AD_CERTIFICATE_REVOKED:
      str = "certificate revoked";
      break;

    case SSL3_AD_CERTIFICATE_EXPIRED:
      str = "certificate expired";
      break;

    case SSL3_AD_CERTIFICATE_UNKNOWN:
      str = "certificate unknown";
      break;

    case SSL3_AD_ILLEGAL_PARAMETER:
      str = "illegal parameter";
      break;

    case TLS1_AD_DECRYPTION_FAILED:
      str = "decryption failed";
      break;

    case TLS1_AD_RECORD_OVERFLOW:
      str = "record overflow";
      break;

    case TLS1_AD_UNKNOWN_CA:
      str = "unknown CA";
      break;

    case TLS1_AD_ACCESS_DENIED:
      str = "access denied";
      break;

    case TLS1_AD_DECODE_ERROR:
      str = "decode error";
      break;

    case TLS1_AD_DECRYPT_ERROR:
      str = "decrypt error";
      break;

    case TLS1_AD_EXPORT_RESTRICTION:
      str = "export restriction";
      break;

    case TLS1_AD_PROTOCOL_VERSION:
      str = "protocol version";
      break;

    case TLS1_AD_INSUFFICIENT_SECURITY:
      str = "insufficient security";
      break;

    case TLS1_AD_INTERNAL_ERROR:
      str = "internal error";
      break;

    case TLS1_AD_USER_CANCELLED:
      str = "user canceled";
      break;

    case TLS1_AD_NO_RENEGOTIATION:
      str = "no renegotiation";
      break;

    case TLS1_AD_UNSUPPORTED_EXTENSION:
      str = "unsupported extension";
      break;

    case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
      str = "certificate unobtainable";
      break;

    case TLS1_AD_UNRECOGNIZED_NAME:
      str = "unrecognized name";
      break;

    case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
      str = "bad certificate status response";
      break;

    case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
      str = "bad certificate hash value";
      break;

    case TLS1_AD_UNKNOWN_PSK_IDENTITY:
      str = "unknown PSK identity";
      break;

    default:
      str = "unknown";
      break;
  }

  return str;
}

const char *SSL_rstate_string(const SSL *s) {
  const char *str;

  switch (s->rstate) {
    case SSL_ST_READ_HEADER:
      str = "RH";
      break;

    case SSL_ST_READ_BODY:
      str = "RB";
      break;

    case SSL_ST_READ_DONE:
      str = "RD";
      break;

    default:
      str = "unknown";
      break;
  }

  return str;
}
