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