/* 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 <openssl/ssl.h>

#include "internal.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;

    /* 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;

    /* 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_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;

    /* 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;
}
