1*738d3f53Stb /* $OpenBSD: ssl_stat.c,v 1.23 2024/10/12 03:54:18 tb Exp $ */ 25b37fcf3Sryker /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 35b37fcf3Sryker * All rights reserved. 45b37fcf3Sryker * 55b37fcf3Sryker * This package is an SSL implementation written 65b37fcf3Sryker * by Eric Young (eay@cryptsoft.com). 75b37fcf3Sryker * The implementation was written so as to conform with Netscapes SSL. 85b37fcf3Sryker * 95b37fcf3Sryker * This library is free for commercial and non-commercial use as long as 105b37fcf3Sryker * the following conditions are aheared to. The following conditions 115b37fcf3Sryker * apply to all code found in this distribution, be it the RC4, RSA, 125b37fcf3Sryker * lhash, DES, etc., code; not just the SSL code. The SSL documentation 135b37fcf3Sryker * included with this distribution is covered by the same copyright terms 145b37fcf3Sryker * except that the holder is Tim Hudson (tjh@cryptsoft.com). 155b37fcf3Sryker * 165b37fcf3Sryker * Copyright remains Eric Young's, and as such any Copyright notices in 175b37fcf3Sryker * the code are not to be removed. 185b37fcf3Sryker * If this package is used in a product, Eric Young should be given attribution 195b37fcf3Sryker * as the author of the parts of the library used. 205b37fcf3Sryker * This can be in the form of a textual message at program startup or 215b37fcf3Sryker * in documentation (online or textual) provided with the package. 225b37fcf3Sryker * 235b37fcf3Sryker * Redistribution and use in source and binary forms, with or without 245b37fcf3Sryker * modification, are permitted provided that the following conditions 255b37fcf3Sryker * are met: 265b37fcf3Sryker * 1. Redistributions of source code must retain the copyright 275b37fcf3Sryker * notice, this list of conditions and the following disclaimer. 285b37fcf3Sryker * 2. Redistributions in binary form must reproduce the above copyright 295b37fcf3Sryker * notice, this list of conditions and the following disclaimer in the 305b37fcf3Sryker * documentation and/or other materials provided with the distribution. 315b37fcf3Sryker * 3. All advertising materials mentioning features or use of this software 325b37fcf3Sryker * must display the following acknowledgement: 335b37fcf3Sryker * "This product includes cryptographic software written by 345b37fcf3Sryker * Eric Young (eay@cryptsoft.com)" 355b37fcf3Sryker * The word 'cryptographic' can be left out if the rouines from the library 365b37fcf3Sryker * being used are not cryptographic related :-). 375b37fcf3Sryker * 4. If you include any Windows specific code (or a derivative thereof) from 385b37fcf3Sryker * the apps directory (application code) you must include an acknowledgement: 395b37fcf3Sryker * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 405b37fcf3Sryker * 415b37fcf3Sryker * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 425b37fcf3Sryker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 435b37fcf3Sryker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 445b37fcf3Sryker * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 455b37fcf3Sryker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 465b37fcf3Sryker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 475b37fcf3Sryker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 485b37fcf3Sryker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 495b37fcf3Sryker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 505b37fcf3Sryker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 515b37fcf3Sryker * SUCH DAMAGE. 525b37fcf3Sryker * 535b37fcf3Sryker * The licence and distribution terms for any publically available version or 545b37fcf3Sryker * derivative of this code cannot be changed. i.e. this code cannot simply be 555b37fcf3Sryker * copied and put under another distribution licence 565b37fcf3Sryker * [including the GNU Public Licence.] 575b37fcf3Sryker */ 580a5d6edeSdjm /* ==================================================================== 590a5d6edeSdjm * Copyright 2005 Nokia. All rights reserved. 600a5d6edeSdjm * 610a5d6edeSdjm * The portions of the attached software ("Contribution") is developed by 620a5d6edeSdjm * Nokia Corporation and is licensed pursuant to the OpenSSL open source 630a5d6edeSdjm * license. 640a5d6edeSdjm * 650a5d6edeSdjm * The Contribution, originally written by Mika Kousa and Pasi Eronen of 660a5d6edeSdjm * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites 670a5d6edeSdjm * support (see RFC 4279) to OpenSSL. 680a5d6edeSdjm * 690a5d6edeSdjm * No patent licenses or other rights except those expressly stated in 700a5d6edeSdjm * the OpenSSL open source license shall be deemed granted or received 710a5d6edeSdjm * expressly, by implication, estoppel, or otherwise. 720a5d6edeSdjm * 730a5d6edeSdjm * No assurances are provided by Nokia that the Contribution does not 740a5d6edeSdjm * infringe the patent or other intellectual property rights of any third 750a5d6edeSdjm * party or that the license provides you with all the necessary rights 760a5d6edeSdjm * to make use of the Contribution. 770a5d6edeSdjm * 780a5d6edeSdjm * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN 790a5d6edeSdjm * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA 800a5d6edeSdjm * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY 810a5d6edeSdjm * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR 820a5d6edeSdjm * OTHERWISE. 830a5d6edeSdjm */ 845b37fcf3Sryker 855b37fcf3Sryker #include <stdio.h> 86c5899dbcSjsing 87c9675a23Stb #include "ssl_local.h" 885b37fcf3Sryker 89dbea66cdSguenther const char * 90dbea66cdSguenther SSL_state_string_long(const SSL *s) 915b37fcf3Sryker { 9202876cc3Sjsing switch (s->s3->hs.state) { 9335fb0677Sjsing case SSL_ST_BEFORE: 94*738d3f53Stb return "before SSL initialization"; 9535fb0677Sjsing case SSL_ST_ACCEPT: 96*738d3f53Stb return "before accept initialization"; 9735fb0677Sjsing case SSL_ST_CONNECT: 98*738d3f53Stb return "before connect initialization"; 9935fb0677Sjsing case SSL_ST_OK: 100*738d3f53Stb return "SSL negotiation finished successfully"; 10135fb0677Sjsing case SSL_ST_RENEGOTIATE: 102*738d3f53Stb return "SSL renegotiate ciphers"; 10335fb0677Sjsing case SSL_ST_BEFORE|SSL_ST_CONNECT: 104*738d3f53Stb return "before/connect initialization"; 10535fb0677Sjsing case SSL_ST_OK|SSL_ST_CONNECT: 106*738d3f53Stb return "ok/connect SSL initialization"; 10735fb0677Sjsing case SSL_ST_BEFORE|SSL_ST_ACCEPT: 108*738d3f53Stb return "before/accept initialization"; 10935fb0677Sjsing case SSL_ST_OK|SSL_ST_ACCEPT: 110*738d3f53Stb return "ok/accept SSL initialization"; 1112006ab80Sjsing 1125b37fcf3Sryker /* SSLv3 additions */ 11335fb0677Sjsing case SSL3_ST_CW_CLNT_HELLO_A: 114*738d3f53Stb return "SSLv3 write client hello A"; 11535fb0677Sjsing case SSL3_ST_CW_CLNT_HELLO_B: 116*738d3f53Stb return "SSLv3 write client hello B"; 11735fb0677Sjsing case SSL3_ST_CR_SRVR_HELLO_A: 118*738d3f53Stb return "SSLv3 read server hello A"; 11935fb0677Sjsing case SSL3_ST_CR_SRVR_HELLO_B: 120*738d3f53Stb return "SSLv3 read server hello B"; 12135fb0677Sjsing case SSL3_ST_CR_CERT_A: 122*738d3f53Stb return "SSLv3 read server certificate A"; 12335fb0677Sjsing case SSL3_ST_CR_CERT_B: 124*738d3f53Stb return "SSLv3 read server certificate B"; 12535fb0677Sjsing case SSL3_ST_CR_KEY_EXCH_A: 126*738d3f53Stb return "SSLv3 read server key exchange A"; 12735fb0677Sjsing case SSL3_ST_CR_KEY_EXCH_B: 128*738d3f53Stb return "SSLv3 read server key exchange B"; 12935fb0677Sjsing case SSL3_ST_CR_CERT_REQ_A: 130*738d3f53Stb return "SSLv3 read server certificate request A"; 13135fb0677Sjsing case SSL3_ST_CR_CERT_REQ_B: 132*738d3f53Stb return "SSLv3 read server certificate request B"; 13335fb0677Sjsing case SSL3_ST_CR_SESSION_TICKET_A: 134*738d3f53Stb return "SSLv3 read server session ticket A"; 13535fb0677Sjsing case SSL3_ST_CR_SESSION_TICKET_B: 136*738d3f53Stb return "SSLv3 read server session ticket B"; 13735fb0677Sjsing case SSL3_ST_CR_SRVR_DONE_A: 138*738d3f53Stb return "SSLv3 read server done A"; 13935fb0677Sjsing case SSL3_ST_CR_SRVR_DONE_B: 140*738d3f53Stb return "SSLv3 read server done B"; 14135fb0677Sjsing case SSL3_ST_CW_CERT_A: 142*738d3f53Stb return "SSLv3 write client certificate A"; 14335fb0677Sjsing case SSL3_ST_CW_CERT_B: 144*738d3f53Stb return "SSLv3 write client certificate B"; 14535fb0677Sjsing case SSL3_ST_CW_CERT_C: 146*738d3f53Stb return "SSLv3 write client certificate C"; 14735fb0677Sjsing case SSL3_ST_CW_CERT_D: 148*738d3f53Stb return "SSLv3 write client certificate D"; 14935fb0677Sjsing case SSL3_ST_CW_KEY_EXCH_A: 150*738d3f53Stb return "SSLv3 write client key exchange A"; 15135fb0677Sjsing case SSL3_ST_CW_KEY_EXCH_B: 152*738d3f53Stb return "SSLv3 write client key exchange B"; 15335fb0677Sjsing case SSL3_ST_CW_CERT_VRFY_A: 154*738d3f53Stb return "SSLv3 write certificate verify A"; 15535fb0677Sjsing case SSL3_ST_CW_CERT_VRFY_B: 156*738d3f53Stb return "SSLv3 write certificate verify B"; 1575b37fcf3Sryker 1585b37fcf3Sryker case SSL3_ST_CW_CHANGE_A: 15935fb0677Sjsing case SSL3_ST_SW_CHANGE_A: 160*738d3f53Stb return "SSLv3 write change cipher spec A"; 1615b37fcf3Sryker case SSL3_ST_CW_CHANGE_B: 16235fb0677Sjsing case SSL3_ST_SW_CHANGE_B: 163*738d3f53Stb return "SSLv3 write change cipher spec B"; 1645b37fcf3Sryker case SSL3_ST_CW_FINISHED_A: 16535fb0677Sjsing case SSL3_ST_SW_FINISHED_A: 166*738d3f53Stb return "SSLv3 write finished A"; 1675b37fcf3Sryker case SSL3_ST_CW_FINISHED_B: 16835fb0677Sjsing case SSL3_ST_SW_FINISHED_B: 169*738d3f53Stb return "SSLv3 write finished B"; 1705b37fcf3Sryker case SSL3_ST_CR_CHANGE_A: 17135fb0677Sjsing case SSL3_ST_SR_CHANGE_A: 172*738d3f53Stb return "SSLv3 read change cipher spec A"; 1735b37fcf3Sryker case SSL3_ST_CR_CHANGE_B: 17435fb0677Sjsing case SSL3_ST_SR_CHANGE_B: 175*738d3f53Stb return "SSLv3 read change cipher spec B"; 1765b37fcf3Sryker case SSL3_ST_CR_FINISHED_A: 17735fb0677Sjsing case SSL3_ST_SR_FINISHED_A: 178*738d3f53Stb return "SSLv3 read finished A"; 1795b37fcf3Sryker case SSL3_ST_CR_FINISHED_B: 18035fb0677Sjsing case SSL3_ST_SR_FINISHED_B: 181*738d3f53Stb return "SSLv3 read finished B"; 1825b37fcf3Sryker 1835b37fcf3Sryker case SSL3_ST_CW_FLUSH: 18435fb0677Sjsing case SSL3_ST_SW_FLUSH: 185*738d3f53Stb return "SSLv3 flush data"; 1865b37fcf3Sryker 18735fb0677Sjsing case SSL3_ST_SR_CLNT_HELLO_A: 188*738d3f53Stb return "SSLv3 read client hello A"; 18935fb0677Sjsing case SSL3_ST_SR_CLNT_HELLO_B: 190*738d3f53Stb return "SSLv3 read client hello B"; 19135fb0677Sjsing case SSL3_ST_SR_CLNT_HELLO_C: 192*738d3f53Stb return "SSLv3 read client hello C"; 19335fb0677Sjsing case SSL3_ST_SW_HELLO_REQ_A: 194*738d3f53Stb return "SSLv3 write hello request A"; 19535fb0677Sjsing case SSL3_ST_SW_HELLO_REQ_B: 196*738d3f53Stb return "SSLv3 write hello request B"; 19735fb0677Sjsing case SSL3_ST_SW_HELLO_REQ_C: 198*738d3f53Stb return "SSLv3 write hello request C"; 19935fb0677Sjsing case SSL3_ST_SW_SRVR_HELLO_A: 200*738d3f53Stb return "SSLv3 write server hello A"; 20135fb0677Sjsing case SSL3_ST_SW_SRVR_HELLO_B: 202*738d3f53Stb return "SSLv3 write server hello B"; 20335fb0677Sjsing case SSL3_ST_SW_CERT_A: 204*738d3f53Stb return "SSLv3 write certificate A"; 20535fb0677Sjsing case SSL3_ST_SW_CERT_B: 206*738d3f53Stb return "SSLv3 write certificate B"; 20735fb0677Sjsing case SSL3_ST_SW_KEY_EXCH_A: 208*738d3f53Stb return "SSLv3 write key exchange A"; 20935fb0677Sjsing case SSL3_ST_SW_KEY_EXCH_B: 210*738d3f53Stb return "SSLv3 write key exchange B"; 21135fb0677Sjsing case SSL3_ST_SW_CERT_REQ_A: 212*738d3f53Stb return "SSLv3 write certificate request A"; 21335fb0677Sjsing case SSL3_ST_SW_CERT_REQ_B: 214*738d3f53Stb return "SSLv3 write certificate request B"; 21535fb0677Sjsing case SSL3_ST_SW_SESSION_TICKET_A: 216*738d3f53Stb return "SSLv3 write session ticket A"; 21735fb0677Sjsing case SSL3_ST_SW_SESSION_TICKET_B: 218*738d3f53Stb return "SSLv3 write session ticket B"; 21935fb0677Sjsing case SSL3_ST_SW_SRVR_DONE_A: 220*738d3f53Stb return "SSLv3 write server done A"; 22135fb0677Sjsing case SSL3_ST_SW_SRVR_DONE_B: 222*738d3f53Stb return "SSLv3 write server done B"; 22335fb0677Sjsing case SSL3_ST_SR_CERT_A: 224*738d3f53Stb return "SSLv3 read client certificate A"; 22535fb0677Sjsing case SSL3_ST_SR_CERT_B: 226*738d3f53Stb return "SSLv3 read client certificate B"; 22735fb0677Sjsing case SSL3_ST_SR_KEY_EXCH_A: 228*738d3f53Stb return "SSLv3 read client key exchange A"; 22935fb0677Sjsing case SSL3_ST_SR_KEY_EXCH_B: 230*738d3f53Stb return "SSLv3 read client key exchange B"; 23135fb0677Sjsing case SSL3_ST_SR_CERT_VRFY_A: 232*738d3f53Stb return "SSLv3 read certificate verify A"; 23335fb0677Sjsing case SSL3_ST_SR_CERT_VRFY_B: 234*738d3f53Stb return "SSLv3 read certificate verify B"; 2355b37fcf3Sryker 2360a5d6edeSdjm /* DTLS */ 23735fb0677Sjsing case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: 238*738d3f53Stb return "DTLS1 read hello verify request A"; 23935fb0677Sjsing case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: 240*738d3f53Stb return "DTLS1 read hello verify request B"; 24135fb0677Sjsing case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: 242*738d3f53Stb return "DTLS1 write hello verify request A"; 24335fb0677Sjsing case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: 244*738d3f53Stb return "DTLS1 write hello verify request B"; 2450a5d6edeSdjm 24635fb0677Sjsing default: 247*738d3f53Stb return "unknown state"; 2485b37fcf3Sryker } 2495b37fcf3Sryker } 25071e04849Sbeck LSSL_ALIAS(SSL_state_string_long); 2515b37fcf3Sryker 252dbea66cdSguenther const char * 253dbea66cdSguenther SSL_rstate_string_long(const SSL *s) 2545b37fcf3Sryker { 2556f7f653bSjsing switch (s->rstate) { 25635fb0677Sjsing case SSL_ST_READ_HEADER: 257*738d3f53Stb return "read header"; 25835fb0677Sjsing case SSL_ST_READ_BODY: 259*738d3f53Stb return "read body"; 26035fb0677Sjsing case SSL_ST_READ_DONE: 261*738d3f53Stb return "read done"; 26235fb0677Sjsing default: 263*738d3f53Stb return "unknown"; 2645b37fcf3Sryker } 2655b37fcf3Sryker } 26671e04849Sbeck LSSL_ALIAS(SSL_rstate_string_long); 2675b37fcf3Sryker 268dbea66cdSguenther const char * 269dbea66cdSguenther SSL_state_string(const SSL *s) 2705b37fcf3Sryker { 27102876cc3Sjsing switch (s->s3->hs.state) { 27235fb0677Sjsing case SSL_ST_BEFORE: 273*738d3f53Stb return "PINIT "; 27435fb0677Sjsing case SSL_ST_ACCEPT: 275*738d3f53Stb return "AINIT "; 27635fb0677Sjsing case SSL_ST_CONNECT: 277*738d3f53Stb return "CINIT "; 27835fb0677Sjsing case SSL_ST_OK: 279*738d3f53Stb return "SSLOK "; 2805b37fcf3Sryker 2815b37fcf3Sryker /* SSLv3 additions */ 2825b37fcf3Sryker case SSL3_ST_SW_FLUSH: 28335fb0677Sjsing case SSL3_ST_CW_FLUSH: 284*738d3f53Stb return "3FLUSH"; 28535fb0677Sjsing case SSL3_ST_CW_CLNT_HELLO_A: 286*738d3f53Stb return "3WCH_A"; 28735fb0677Sjsing case SSL3_ST_CW_CLNT_HELLO_B: 288*738d3f53Stb return "3WCH_B"; 28935fb0677Sjsing case SSL3_ST_CR_SRVR_HELLO_A: 290*738d3f53Stb return "3RSH_A"; 29135fb0677Sjsing case SSL3_ST_CR_SRVR_HELLO_B: 292*738d3f53Stb return "3RSH_B"; 29335fb0677Sjsing case SSL3_ST_CR_CERT_A: 294*738d3f53Stb return "3RSC_A"; 29535fb0677Sjsing case SSL3_ST_CR_CERT_B: 296*738d3f53Stb return "3RSC_B"; 29735fb0677Sjsing case SSL3_ST_CR_KEY_EXCH_A: 298*738d3f53Stb return "3RSKEA"; 29935fb0677Sjsing case SSL3_ST_CR_KEY_EXCH_B: 300*738d3f53Stb return "3RSKEB"; 30135fb0677Sjsing case SSL3_ST_CR_CERT_REQ_A: 302*738d3f53Stb return "3RCR_A"; 30335fb0677Sjsing case SSL3_ST_CR_CERT_REQ_B: 304*738d3f53Stb return "3RCR_B"; 30535fb0677Sjsing case SSL3_ST_CR_SRVR_DONE_A: 306*738d3f53Stb return "3RSD_A"; 30735fb0677Sjsing case SSL3_ST_CR_SRVR_DONE_B: 308*738d3f53Stb return "3RSD_B"; 30935fb0677Sjsing case SSL3_ST_CW_CERT_A: 310*738d3f53Stb return "3WCC_A"; 31135fb0677Sjsing case SSL3_ST_CW_CERT_B: 312*738d3f53Stb return "3WCC_B"; 31335fb0677Sjsing case SSL3_ST_CW_CERT_C: 314*738d3f53Stb return "3WCC_C"; 31535fb0677Sjsing case SSL3_ST_CW_CERT_D: 316*738d3f53Stb return "3WCC_D"; 31735fb0677Sjsing case SSL3_ST_CW_KEY_EXCH_A: 318*738d3f53Stb return "3WCKEA"; 31935fb0677Sjsing case SSL3_ST_CW_KEY_EXCH_B: 320*738d3f53Stb return "3WCKEB"; 32135fb0677Sjsing case SSL3_ST_CW_CERT_VRFY_A: 322*738d3f53Stb return "3WCV_A"; 32335fb0677Sjsing case SSL3_ST_CW_CERT_VRFY_B: 324*738d3f53Stb return "3WCV_B"; 3255b37fcf3Sryker 3265b37fcf3Sryker case SSL3_ST_SW_CHANGE_A: 32735fb0677Sjsing case SSL3_ST_CW_CHANGE_A: 328*738d3f53Stb return "3WCCSA"; 3295b37fcf3Sryker case SSL3_ST_SW_CHANGE_B: 33035fb0677Sjsing case SSL3_ST_CW_CHANGE_B: 331*738d3f53Stb return "3WCCSB"; 3325b37fcf3Sryker case SSL3_ST_SW_FINISHED_A: 33335fb0677Sjsing case SSL3_ST_CW_FINISHED_A: 334*738d3f53Stb return "3WFINA"; 3355b37fcf3Sryker case SSL3_ST_SW_FINISHED_B: 33635fb0677Sjsing case SSL3_ST_CW_FINISHED_B: 337*738d3f53Stb return "3WFINB"; 3385b37fcf3Sryker case SSL3_ST_SR_CHANGE_A: 33935fb0677Sjsing case SSL3_ST_CR_CHANGE_A: 340*738d3f53Stb return "3RCCSA"; 3415b37fcf3Sryker case SSL3_ST_SR_CHANGE_B: 34235fb0677Sjsing case SSL3_ST_CR_CHANGE_B: 343*738d3f53Stb return "3RCCSB"; 3445b37fcf3Sryker case SSL3_ST_SR_FINISHED_A: 34535fb0677Sjsing case SSL3_ST_CR_FINISHED_A: 346*738d3f53Stb return "3RFINA"; 3475b37fcf3Sryker case SSL3_ST_SR_FINISHED_B: 34835fb0677Sjsing case SSL3_ST_CR_FINISHED_B: 349*738d3f53Stb return "3RFINB"; 3505b37fcf3Sryker 35135fb0677Sjsing case SSL3_ST_SW_HELLO_REQ_A: 352*738d3f53Stb return "3WHR_A"; 35335fb0677Sjsing case SSL3_ST_SW_HELLO_REQ_B: 354*738d3f53Stb return "3WHR_B"; 35535fb0677Sjsing case SSL3_ST_SW_HELLO_REQ_C: 356*738d3f53Stb return "3WHR_C"; 35735fb0677Sjsing case SSL3_ST_SR_CLNT_HELLO_A: 358*738d3f53Stb return "3RCH_A"; 35935fb0677Sjsing case SSL3_ST_SR_CLNT_HELLO_B: 360*738d3f53Stb return "3RCH_B"; 36135fb0677Sjsing case SSL3_ST_SR_CLNT_HELLO_C: 362*738d3f53Stb return "3RCH_C"; 36335fb0677Sjsing case SSL3_ST_SW_SRVR_HELLO_A: 364*738d3f53Stb return "3WSH_A"; 36535fb0677Sjsing case SSL3_ST_SW_SRVR_HELLO_B: 366*738d3f53Stb return "3WSH_B"; 36735fb0677Sjsing case SSL3_ST_SW_CERT_A: 368*738d3f53Stb return "3WSC_A"; 36935fb0677Sjsing case SSL3_ST_SW_CERT_B: 370*738d3f53Stb return "3WSC_B"; 37135fb0677Sjsing case SSL3_ST_SW_KEY_EXCH_A: 372*738d3f53Stb return "3WSKEA"; 37335fb0677Sjsing case SSL3_ST_SW_KEY_EXCH_B: 374*738d3f53Stb return "3WSKEB"; 37535fb0677Sjsing case SSL3_ST_SW_CERT_REQ_A: 376*738d3f53Stb return "3WCR_A"; 37735fb0677Sjsing case SSL3_ST_SW_CERT_REQ_B: 378*738d3f53Stb return "3WCR_B"; 37935fb0677Sjsing case SSL3_ST_SW_SRVR_DONE_A: 380*738d3f53Stb return "3WSD_A"; 38135fb0677Sjsing case SSL3_ST_SW_SRVR_DONE_B: 382*738d3f53Stb return "3WSD_B"; 38335fb0677Sjsing case SSL3_ST_SR_CERT_A: 384*738d3f53Stb return "3RCC_A"; 38535fb0677Sjsing case SSL3_ST_SR_CERT_B: 386*738d3f53Stb return "3RCC_B"; 38735fb0677Sjsing case SSL3_ST_SR_KEY_EXCH_A: 388*738d3f53Stb return "3RCKEA"; 38935fb0677Sjsing case SSL3_ST_SR_KEY_EXCH_B: 390*738d3f53Stb return "3RCKEB"; 39135fb0677Sjsing case SSL3_ST_SR_CERT_VRFY_A: 392*738d3f53Stb return "3RCV_A"; 39335fb0677Sjsing case SSL3_ST_SR_CERT_VRFY_B: 394*738d3f53Stb return "3RCV_B"; 3952006ab80Sjsing 3960a5d6edeSdjm /* DTLS */ 39735fb0677Sjsing case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: 398*738d3f53Stb return "DRCHVA"; 39935fb0677Sjsing case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: 400*738d3f53Stb return "DRCHVB"; 40135fb0677Sjsing case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: 402*738d3f53Stb return "DWCHVA"; 40335fb0677Sjsing case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: 404*738d3f53Stb return "DWCHVB"; 4055b37fcf3Sryker 40635fb0677Sjsing default: 407*738d3f53Stb return "UNKWN "; 4085b37fcf3Sryker } 4095b37fcf3Sryker } 41071e04849Sbeck LSSL_ALIAS(SSL_state_string); 4115b37fcf3Sryker 412dbea66cdSguenther const char * 413dbea66cdSguenther SSL_alert_type_string_long(int value) 4145b37fcf3Sryker { 4155b37fcf3Sryker value >>= 8; 4165b37fcf3Sryker if (value == SSL3_AL_WARNING) 417*738d3f53Stb return "warning"; 4185b37fcf3Sryker else if (value == SSL3_AL_FATAL) 419*738d3f53Stb return "fatal"; 4205b37fcf3Sryker else 421*738d3f53Stb return "unknown"; 4225b37fcf3Sryker } 42371e04849Sbeck LSSL_ALIAS(SSL_alert_type_string_long); 4245b37fcf3Sryker 425dbea66cdSguenther const char * 426dbea66cdSguenther SSL_alert_type_string(int value) 4275b37fcf3Sryker { 4285b37fcf3Sryker value >>= 8; 4295b37fcf3Sryker if (value == SSL3_AL_WARNING) 430*738d3f53Stb return "W"; 4315b37fcf3Sryker else if (value == SSL3_AL_FATAL) 432*738d3f53Stb return "F"; 4335b37fcf3Sryker else 434*738d3f53Stb return "U"; 4355b37fcf3Sryker } 43671e04849Sbeck LSSL_ALIAS(SSL_alert_type_string); 4375b37fcf3Sryker 438dbea66cdSguenther const char * 439dbea66cdSguenther SSL_alert_desc_string(int value) 4405b37fcf3Sryker { 44135fb0677Sjsing switch (value & 0xff) { 4426650b941Sjsing case SSL_AD_CLOSE_NOTIFY: 443*738d3f53Stb return "CN"; 4446650b941Sjsing case SSL_AD_UNEXPECTED_MESSAGE: 445*738d3f53Stb return "UM"; 4466650b941Sjsing case SSL_AD_BAD_RECORD_MAC: 447*738d3f53Stb return "BM"; 4482db314dbStb case SSL_AD_RECORD_OVERFLOW: 449*738d3f53Stb return "RO"; 4506650b941Sjsing case SSL_AD_DECOMPRESSION_FAILURE: 451*738d3f53Stb return "DF"; 4526650b941Sjsing case SSL_AD_HANDSHAKE_FAILURE: 453*738d3f53Stb return "HF"; 4546650b941Sjsing case SSL_AD_BAD_CERTIFICATE: 455*738d3f53Stb return "BC"; 4566650b941Sjsing case SSL_AD_UNSUPPORTED_CERTIFICATE: 457*738d3f53Stb return "UC"; 4586650b941Sjsing case SSL_AD_CERTIFICATE_REVOKED: 459*738d3f53Stb return "CR"; 4606650b941Sjsing case SSL_AD_CERTIFICATE_EXPIRED: 461*738d3f53Stb return "CE"; 4626650b941Sjsing case SSL_AD_CERTIFICATE_UNKNOWN: 463*738d3f53Stb return "CU"; 4646650b941Sjsing case SSL_AD_ILLEGAL_PARAMETER: 465*738d3f53Stb return "IP"; 4666650b941Sjsing case SSL_AD_UNKNOWN_CA: 467*738d3f53Stb return "CA"; 4686650b941Sjsing case SSL_AD_ACCESS_DENIED: 469*738d3f53Stb return "AD"; 4706650b941Sjsing case SSL_AD_DECODE_ERROR: 471*738d3f53Stb return "DE"; 4726650b941Sjsing case SSL_AD_DECRYPT_ERROR: 473*738d3f53Stb return "CY"; 4746650b941Sjsing case SSL_AD_PROTOCOL_VERSION: 475*738d3f53Stb return "PV"; 4766650b941Sjsing case SSL_AD_INSUFFICIENT_SECURITY: 477*738d3f53Stb return "IS"; 4786650b941Sjsing case SSL_AD_INTERNAL_ERROR: 479*738d3f53Stb return "IE"; 4802db314dbStb case SSL_AD_INAPPROPRIATE_FALLBACK: 481*738d3f53Stb return "IF"; 4826650b941Sjsing case SSL_AD_USER_CANCELLED: 483*738d3f53Stb return "US"; 4846650b941Sjsing case SSL_AD_NO_RENEGOTIATION: 485*738d3f53Stb return "NR"; 4868e83d273Sjsing case SSL_AD_MISSING_EXTENSION: 487*738d3f53Stb return "ME"; 4886650b941Sjsing case SSL_AD_UNSUPPORTED_EXTENSION: 489*738d3f53Stb return "UE"; 4906650b941Sjsing case SSL_AD_CERTIFICATE_UNOBTAINABLE: 491*738d3f53Stb return "CO"; 4926650b941Sjsing case SSL_AD_UNRECOGNIZED_NAME: 493*738d3f53Stb return "UN"; 4946650b941Sjsing case SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 495*738d3f53Stb return "BR"; 4966650b941Sjsing case SSL_AD_BAD_CERTIFICATE_HASH_VALUE: 497*738d3f53Stb return "BH"; 4986650b941Sjsing case SSL_AD_UNKNOWN_PSK_IDENTITY: 499*738d3f53Stb return "UP"; 5002db314dbStb case SSL_AD_CERTIFICATE_REQUIRED: 501*738d3f53Stb return "CQ"; /* XXX */ 5022db314dbStb case SSL_AD_NO_APPLICATION_PROTOCOL: 503*738d3f53Stb return "AP"; 50435fb0677Sjsing default: 505*738d3f53Stb return "UK"; 5065b37fcf3Sryker } 5075b37fcf3Sryker } 50871e04849Sbeck LSSL_ALIAS(SSL_alert_desc_string); 5095b37fcf3Sryker 510dbea66cdSguenther const char * 511dbea66cdSguenther SSL_alert_desc_string_long(int value) 5125b37fcf3Sryker { 51335fb0677Sjsing switch (value & 0xff) { 5146650b941Sjsing case SSL_AD_CLOSE_NOTIFY: 515*738d3f53Stb return "close notify"; 5166650b941Sjsing case SSL_AD_UNEXPECTED_MESSAGE: 517*738d3f53Stb return "unexpected_message"; 5186650b941Sjsing case SSL_AD_BAD_RECORD_MAC: 519*738d3f53Stb return "bad record mac"; 5202db314dbStb case SSL_AD_RECORD_OVERFLOW: 521*738d3f53Stb return "record overflow"; 5226650b941Sjsing case SSL_AD_DECOMPRESSION_FAILURE: 523*738d3f53Stb return "decompression failure"; 5246650b941Sjsing case SSL_AD_HANDSHAKE_FAILURE: 525*738d3f53Stb return "handshake failure"; 5266650b941Sjsing case SSL_AD_BAD_CERTIFICATE: 527*738d3f53Stb return "bad certificate"; 5286650b941Sjsing case SSL_AD_UNSUPPORTED_CERTIFICATE: 529*738d3f53Stb return "unsupported certificate"; 5306650b941Sjsing case SSL_AD_CERTIFICATE_REVOKED: 531*738d3f53Stb return "certificate revoked"; 5326650b941Sjsing case SSL_AD_CERTIFICATE_EXPIRED: 533*738d3f53Stb return "certificate expired"; 5346650b941Sjsing case SSL_AD_CERTIFICATE_UNKNOWN: 535*738d3f53Stb return "certificate unknown"; 5366650b941Sjsing case SSL_AD_ILLEGAL_PARAMETER: 537*738d3f53Stb return "illegal parameter"; 5386650b941Sjsing case SSL_AD_UNKNOWN_CA: 539*738d3f53Stb return "unknown CA"; 5406650b941Sjsing case SSL_AD_ACCESS_DENIED: 541*738d3f53Stb return "access denied"; 5426650b941Sjsing case SSL_AD_DECODE_ERROR: 543*738d3f53Stb return "decode error"; 5446650b941Sjsing case SSL_AD_DECRYPT_ERROR: 545*738d3f53Stb return "decrypt error"; 5466650b941Sjsing case SSL_AD_PROTOCOL_VERSION: 547*738d3f53Stb return "protocol version"; 5486650b941Sjsing case SSL_AD_INSUFFICIENT_SECURITY: 549*738d3f53Stb return "insufficient security"; 5506650b941Sjsing case SSL_AD_INTERNAL_ERROR: 551*738d3f53Stb return "internal error"; 5522db314dbStb case SSL_AD_INAPPROPRIATE_FALLBACK: 553*738d3f53Stb return "inappropriate fallback"; 5546650b941Sjsing case SSL_AD_USER_CANCELLED: 555*738d3f53Stb return "user canceled"; 5566650b941Sjsing case SSL_AD_NO_RENEGOTIATION: 557*738d3f53Stb return "no renegotiation"; 5588e83d273Sjsing case SSL_AD_MISSING_EXTENSION: 559*738d3f53Stb return "missing extension"; 5606650b941Sjsing case SSL_AD_UNSUPPORTED_EXTENSION: 561*738d3f53Stb return "unsupported extension"; 5626650b941Sjsing case SSL_AD_CERTIFICATE_UNOBTAINABLE: 563*738d3f53Stb return "certificate unobtainable"; 5646650b941Sjsing case SSL_AD_UNRECOGNIZED_NAME: 565*738d3f53Stb return "unrecognized name"; 5666650b941Sjsing case SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 567*738d3f53Stb return "bad certificate status response"; 5686650b941Sjsing case SSL_AD_BAD_CERTIFICATE_HASH_VALUE: 569*738d3f53Stb return "bad certificate hash value"; 5706650b941Sjsing case SSL_AD_UNKNOWN_PSK_IDENTITY: 571*738d3f53Stb return "unknown PSK identity"; 5722db314dbStb case SSL_AD_CERTIFICATE_REQUIRED: 573*738d3f53Stb return "certificate required"; 5742db314dbStb case SSL_AD_NO_APPLICATION_PROTOCOL: 575*738d3f53Stb return "no application protocol"; 57635fb0677Sjsing default: 577*738d3f53Stb return "unknown"; 5785b37fcf3Sryker } 5795b37fcf3Sryker } 58071e04849Sbeck LSSL_ALIAS(SSL_alert_desc_string_long); 5815b37fcf3Sryker 582dbea66cdSguenther const char * 583dbea66cdSguenther SSL_rstate_string(const SSL *s) 5845b37fcf3Sryker { 5856f7f653bSjsing switch (s->rstate) { 58635fb0677Sjsing case SSL_ST_READ_HEADER: 587*738d3f53Stb return "RH"; 58835fb0677Sjsing case SSL_ST_READ_BODY: 589*738d3f53Stb return "RB"; 59035fb0677Sjsing case SSL_ST_READ_DONE: 591*738d3f53Stb return "RD"; 59235fb0677Sjsing default: 593*738d3f53Stb return "unknown"; 5945b37fcf3Sryker } 5955b37fcf3Sryker } 59671e04849Sbeck LSSL_ALIAS(SSL_rstate_string); 597