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. 8296341Sdelphij * 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). 15296341Sdelphij * 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. 22296341Sdelphij * 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 :-). 37296341Sdelphij * 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)" 40296341Sdelphij * 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. 52296341Sdelphij * 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) 89296341Sdelphij{ 90296341Sdelphij const char *str; 9155714Skris 92296341Sdelphij switch (s->state) { 93296341Sdelphij case SSL_ST_BEFORE: 94296341Sdelphij str = "before SSL initialization"; 95296341Sdelphij break; 96296341Sdelphij case SSL_ST_ACCEPT: 97296341Sdelphij str = "before accept initialization"; 98296341Sdelphij break; 99296341Sdelphij case SSL_ST_CONNECT: 100296341Sdelphij str = "before connect initialization"; 101296341Sdelphij break; 102296341Sdelphij case SSL_ST_OK: 103296341Sdelphij str = "SSL negotiation finished successfully"; 104296341Sdelphij break; 105296341Sdelphij case SSL_ST_RENEGOTIATE: 106296341Sdelphij str = "SSL renegotiate ciphers"; 107296341Sdelphij break; 108296341Sdelphij case SSL_ST_BEFORE | SSL_ST_CONNECT: 109296341Sdelphij str = "before/connect initialization"; 110296341Sdelphij break; 111296341Sdelphij case SSL_ST_OK | SSL_ST_CONNECT: 112296341Sdelphij str = "ok/connect SSL initialization"; 113296341Sdelphij break; 114296341Sdelphij case SSL_ST_BEFORE | SSL_ST_ACCEPT: 115296341Sdelphij str = "before/accept initialization"; 116296341Sdelphij break; 117296341Sdelphij case SSL_ST_OK | SSL_ST_ACCEPT: 118296341Sdelphij str = "ok/accept SSL initialization"; 119296341Sdelphij break; 120296341Sdelphij case SSL_ST_ERR: 121296341Sdelphij str = "error"; 122296341Sdelphij break; 123109998Smarkm#ifndef OPENSSL_NO_SSL2 124296341Sdelphij case SSL2_ST_CLIENT_START_ENCRYPTION: 125296341Sdelphij str = "SSLv2 client start encryption"; 126296341Sdelphij break; 127296341Sdelphij case SSL2_ST_SERVER_START_ENCRYPTION: 128296341Sdelphij str = "SSLv2 server start encryption"; 129296341Sdelphij break; 130296341Sdelphij case SSL2_ST_SEND_CLIENT_HELLO_A: 131296341Sdelphij str = "SSLv2 write client hello A"; 132296341Sdelphij break; 133296341Sdelphij case SSL2_ST_SEND_CLIENT_HELLO_B: 134296341Sdelphij str = "SSLv2 write client hello B"; 135296341Sdelphij break; 136296341Sdelphij case SSL2_ST_GET_SERVER_HELLO_A: 137296341Sdelphij str = "SSLv2 read server hello A"; 138296341Sdelphij break; 139296341Sdelphij case SSL2_ST_GET_SERVER_HELLO_B: 140296341Sdelphij str = "SSLv2 read server hello B"; 141296341Sdelphij break; 142296341Sdelphij case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: 143296341Sdelphij str = "SSLv2 write client master key A"; 144296341Sdelphij break; 145296341Sdelphij case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: 146296341Sdelphij str = "SSLv2 write client master key B"; 147296341Sdelphij break; 148296341Sdelphij case SSL2_ST_SEND_CLIENT_FINISHED_A: 149296341Sdelphij str = "SSLv2 write client finished A"; 150296341Sdelphij break; 151296341Sdelphij case SSL2_ST_SEND_CLIENT_FINISHED_B: 152296341Sdelphij str = "SSLv2 write client finished B"; 153296341Sdelphij break; 154296341Sdelphij case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: 155296341Sdelphij str = "SSLv2 write client certificate A"; 156296341Sdelphij break; 157296341Sdelphij case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: 158296341Sdelphij str = "SSLv2 write client certificate B"; 159296341Sdelphij break; 160296341Sdelphij case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: 161296341Sdelphij str = "SSLv2 write client certificate C"; 162296341Sdelphij break; 163296341Sdelphij case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: 164296341Sdelphij str = "SSLv2 write client certificate D"; 165296341Sdelphij break; 166296341Sdelphij case SSL2_ST_GET_SERVER_VERIFY_A: 167296341Sdelphij str = "SSLv2 read server verify A"; 168296341Sdelphij break; 169296341Sdelphij case SSL2_ST_GET_SERVER_VERIFY_B: 170296341Sdelphij str = "SSLv2 read server verify B"; 171296341Sdelphij break; 172296341Sdelphij case SSL2_ST_GET_SERVER_FINISHED_A: 173296341Sdelphij str = "SSLv2 read server finished A"; 174296341Sdelphij break; 175296341Sdelphij case SSL2_ST_GET_SERVER_FINISHED_B: 176296341Sdelphij str = "SSLv2 read server finished B"; 177296341Sdelphij break; 178296341Sdelphij case SSL2_ST_GET_CLIENT_HELLO_A: 179296341Sdelphij str = "SSLv2 read client hello A"; 180296341Sdelphij break; 181296341Sdelphij case SSL2_ST_GET_CLIENT_HELLO_B: 182296341Sdelphij str = "SSLv2 read client hello B"; 183296341Sdelphij break; 184296341Sdelphij case SSL2_ST_GET_CLIENT_HELLO_C: 185296341Sdelphij str = "SSLv2 read client hello C"; 186296341Sdelphij break; 187296341Sdelphij case SSL2_ST_SEND_SERVER_HELLO_A: 188296341Sdelphij str = "SSLv2 write server hello A"; 189296341Sdelphij break; 190296341Sdelphij case SSL2_ST_SEND_SERVER_HELLO_B: 191296341Sdelphij str = "SSLv2 write server hello B"; 192296341Sdelphij break; 193296341Sdelphij case SSL2_ST_GET_CLIENT_MASTER_KEY_A: 194296341Sdelphij str = "SSLv2 read client master key A"; 195296341Sdelphij break; 196296341Sdelphij case SSL2_ST_GET_CLIENT_MASTER_KEY_B: 197296341Sdelphij str = "SSLv2 read client master key B"; 198296341Sdelphij break; 199296341Sdelphij case SSL2_ST_SEND_SERVER_VERIFY_A: 200296341Sdelphij str = "SSLv2 write server verify A"; 201296341Sdelphij break; 202296341Sdelphij case SSL2_ST_SEND_SERVER_VERIFY_B: 203296341Sdelphij str = "SSLv2 write server verify B"; 204296341Sdelphij break; 205296341Sdelphij case SSL2_ST_SEND_SERVER_VERIFY_C: 206296341Sdelphij str = "SSLv2 write server verify C"; 207296341Sdelphij break; 208296341Sdelphij case SSL2_ST_GET_CLIENT_FINISHED_A: 209296341Sdelphij str = "SSLv2 read client finished A"; 210296341Sdelphij break; 211296341Sdelphij case SSL2_ST_GET_CLIENT_FINISHED_B: 212296341Sdelphij str = "SSLv2 read client finished B"; 213296341Sdelphij break; 214296341Sdelphij case SSL2_ST_SEND_SERVER_FINISHED_A: 215296341Sdelphij str = "SSLv2 write server finished A"; 216296341Sdelphij break; 217296341Sdelphij case SSL2_ST_SEND_SERVER_FINISHED_B: 218296341Sdelphij str = "SSLv2 write server finished B"; 219296341Sdelphij break; 220296341Sdelphij case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: 221296341Sdelphij str = "SSLv2 write request certificate A"; 222296341Sdelphij break; 223296341Sdelphij case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: 224296341Sdelphij str = "SSLv2 write request certificate B"; 225296341Sdelphij break; 226296341Sdelphij case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: 227296341Sdelphij str = "SSLv2 write request certificate C"; 228296341Sdelphij break; 229296341Sdelphij case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: 230296341Sdelphij str = "SSLv2 write request certificate D"; 231296341Sdelphij break; 232296341Sdelphij case SSL2_ST_X509_GET_SERVER_CERTIFICATE: 233296341Sdelphij str = "SSLv2 X509 read server certificate"; 234296341Sdelphij break; 235296341Sdelphij case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: 236296341Sdelphij str = "SSLv2 X509 read client certificate"; 237296341Sdelphij break; 23855714Skris#endif 23955714Skris 240109998Smarkm#ifndef OPENSSL_NO_SSL3 24155714Skris/* SSLv3 additions */ 242296341Sdelphij case SSL3_ST_CW_CLNT_HELLO_A: 243296341Sdelphij str = "SSLv3 write client hello A"; 244296341Sdelphij break; 245296341Sdelphij case SSL3_ST_CW_CLNT_HELLO_B: 246296341Sdelphij str = "SSLv3 write client hello B"; 247296341Sdelphij break; 248296341Sdelphij case SSL3_ST_CR_SRVR_HELLO_A: 249296341Sdelphij str = "SSLv3 read server hello A"; 250296341Sdelphij break; 251296341Sdelphij case SSL3_ST_CR_SRVR_HELLO_B: 252296341Sdelphij str = "SSLv3 read server hello B"; 253296341Sdelphij break; 254296341Sdelphij case SSL3_ST_CR_CERT_A: 255296341Sdelphij str = "SSLv3 read server certificate A"; 256296341Sdelphij break; 257296341Sdelphij case SSL3_ST_CR_CERT_B: 258296341Sdelphij str = "SSLv3 read server certificate B"; 259296341Sdelphij break; 260296341Sdelphij case SSL3_ST_CR_KEY_EXCH_A: 261296341Sdelphij str = "SSLv3 read server key exchange A"; 262296341Sdelphij break; 263296341Sdelphij case SSL3_ST_CR_KEY_EXCH_B: 264296341Sdelphij str = "SSLv3 read server key exchange B"; 265296341Sdelphij break; 266296341Sdelphij case SSL3_ST_CR_CERT_REQ_A: 267296341Sdelphij str = "SSLv3 read server certificate request A"; 268296341Sdelphij break; 269296341Sdelphij case SSL3_ST_CR_CERT_REQ_B: 270296341Sdelphij str = "SSLv3 read server certificate request B"; 271296341Sdelphij break; 272296341Sdelphij case SSL3_ST_CR_SESSION_TICKET_A: 273296341Sdelphij str = "SSLv3 read server session ticket A"; 274296341Sdelphij break; 275296341Sdelphij case SSL3_ST_CR_SESSION_TICKET_B: 276296341Sdelphij str = "SSLv3 read server session ticket B"; 277296341Sdelphij break; 278296341Sdelphij case SSL3_ST_CR_SRVR_DONE_A: 279296341Sdelphij str = "SSLv3 read server done A"; 280296341Sdelphij break; 281296341Sdelphij case SSL3_ST_CR_SRVR_DONE_B: 282296341Sdelphij str = "SSLv3 read server done B"; 283296341Sdelphij break; 284296341Sdelphij case SSL3_ST_CW_CERT_A: 285296341Sdelphij str = "SSLv3 write client certificate A"; 286296341Sdelphij break; 287296341Sdelphij case SSL3_ST_CW_CERT_B: 288296341Sdelphij str = "SSLv3 write client certificate B"; 289296341Sdelphij break; 290296341Sdelphij case SSL3_ST_CW_CERT_C: 291296341Sdelphij str = "SSLv3 write client certificate C"; 292296341Sdelphij break; 293296341Sdelphij case SSL3_ST_CW_CERT_D: 294296341Sdelphij str = "SSLv3 write client certificate D"; 295296341Sdelphij break; 296296341Sdelphij case SSL3_ST_CW_KEY_EXCH_A: 297296341Sdelphij str = "SSLv3 write client key exchange A"; 298296341Sdelphij break; 299296341Sdelphij case SSL3_ST_CW_KEY_EXCH_B: 300296341Sdelphij str = "SSLv3 write client key exchange B"; 301296341Sdelphij break; 302296341Sdelphij case SSL3_ST_CW_CERT_VRFY_A: 303296341Sdelphij str = "SSLv3 write certificate verify A"; 304296341Sdelphij break; 305296341Sdelphij case SSL3_ST_CW_CERT_VRFY_B: 306296341Sdelphij str = "SSLv3 write certificate verify B"; 307296341Sdelphij break; 30855714Skris 309296341Sdelphij case SSL3_ST_CW_CHANGE_A: 310296341Sdelphij case SSL3_ST_SW_CHANGE_A: 311296341Sdelphij str = "SSLv3 write change cipher spec A"; 312296341Sdelphij break; 313296341Sdelphij case SSL3_ST_CW_CHANGE_B: 314296341Sdelphij case SSL3_ST_SW_CHANGE_B: 315296341Sdelphij str = "SSLv3 write change cipher spec B"; 316296341Sdelphij break; 317296341Sdelphij case SSL3_ST_CW_FINISHED_A: 318296341Sdelphij case SSL3_ST_SW_FINISHED_A: 319296341Sdelphij str = "SSLv3 write finished A"; 320296341Sdelphij break; 321296341Sdelphij case SSL3_ST_CW_FINISHED_B: 322296341Sdelphij case SSL3_ST_SW_FINISHED_B: 323296341Sdelphij str = "SSLv3 write finished B"; 324296341Sdelphij break; 325296341Sdelphij case SSL3_ST_CR_CHANGE_A: 326296341Sdelphij case SSL3_ST_SR_CHANGE_A: 327296341Sdelphij str = "SSLv3 read change cipher spec A"; 328296341Sdelphij break; 329296341Sdelphij case SSL3_ST_CR_CHANGE_B: 330296341Sdelphij case SSL3_ST_SR_CHANGE_B: 331296341Sdelphij str = "SSLv3 read change cipher spec B"; 332296341Sdelphij break; 333296341Sdelphij case SSL3_ST_CR_FINISHED_A: 334296341Sdelphij case SSL3_ST_SR_FINISHED_A: 335296341Sdelphij str = "SSLv3 read finished A"; 336296341Sdelphij break; 337296341Sdelphij case SSL3_ST_CR_FINISHED_B: 338296341Sdelphij case SSL3_ST_SR_FINISHED_B: 339296341Sdelphij str = "SSLv3 read finished B"; 340296341Sdelphij break; 34155714Skris 342296341Sdelphij case SSL3_ST_CW_FLUSH: 343296341Sdelphij case SSL3_ST_SW_FLUSH: 344296341Sdelphij str = "SSLv3 flush data"; 345296341Sdelphij break; 34655714Skris 347296341Sdelphij case SSL3_ST_SR_CLNT_HELLO_A: 348296341Sdelphij str = "SSLv3 read client hello A"; 349296341Sdelphij break; 350296341Sdelphij case SSL3_ST_SR_CLNT_HELLO_B: 351296341Sdelphij str = "SSLv3 read client hello B"; 352296341Sdelphij break; 353296341Sdelphij case SSL3_ST_SR_CLNT_HELLO_C: 354296341Sdelphij str = "SSLv3 read client hello C"; 355296341Sdelphij break; 356296341Sdelphij case SSL3_ST_SW_HELLO_REQ_A: 357296341Sdelphij str = "SSLv3 write hello request A"; 358296341Sdelphij break; 359296341Sdelphij case SSL3_ST_SW_HELLO_REQ_B: 360296341Sdelphij str = "SSLv3 write hello request B"; 361296341Sdelphij break; 362296341Sdelphij case SSL3_ST_SW_HELLO_REQ_C: 363296341Sdelphij str = "SSLv3 write hello request C"; 364296341Sdelphij break; 365296341Sdelphij case SSL3_ST_SW_SRVR_HELLO_A: 366296341Sdelphij str = "SSLv3 write server hello A"; 367296341Sdelphij break; 368296341Sdelphij case SSL3_ST_SW_SRVR_HELLO_B: 369296341Sdelphij str = "SSLv3 write server hello B"; 370296341Sdelphij break; 371296341Sdelphij case SSL3_ST_SW_CERT_A: 372296341Sdelphij str = "SSLv3 write certificate A"; 373296341Sdelphij break; 374296341Sdelphij case SSL3_ST_SW_CERT_B: 375296341Sdelphij str = "SSLv3 write certificate B"; 376296341Sdelphij break; 377296341Sdelphij case SSL3_ST_SW_KEY_EXCH_A: 378296341Sdelphij str = "SSLv3 write key exchange A"; 379296341Sdelphij break; 380296341Sdelphij case SSL3_ST_SW_KEY_EXCH_B: 381296341Sdelphij str = "SSLv3 write key exchange B"; 382296341Sdelphij break; 383296341Sdelphij case SSL3_ST_SW_CERT_REQ_A: 384296341Sdelphij str = "SSLv3 write certificate request A"; 385296341Sdelphij break; 386296341Sdelphij case SSL3_ST_SW_CERT_REQ_B: 387296341Sdelphij str = "SSLv3 write certificate request B"; 388296341Sdelphij break; 389296341Sdelphij case SSL3_ST_SW_SESSION_TICKET_A: 390296341Sdelphij str = "SSLv3 write session ticket A"; 391296341Sdelphij break; 392296341Sdelphij case SSL3_ST_SW_SESSION_TICKET_B: 393296341Sdelphij str = "SSLv3 write session ticket B"; 394296341Sdelphij break; 395296341Sdelphij case SSL3_ST_SW_SRVR_DONE_A: 396296341Sdelphij str = "SSLv3 write server done A"; 397296341Sdelphij break; 398296341Sdelphij case SSL3_ST_SW_SRVR_DONE_B: 399296341Sdelphij str = "SSLv3 write server done B"; 400296341Sdelphij break; 401296341Sdelphij case SSL3_ST_SR_CERT_A: 402296341Sdelphij str = "SSLv3 read client certificate A"; 403296341Sdelphij break; 404296341Sdelphij case SSL3_ST_SR_CERT_B: 405296341Sdelphij str = "SSLv3 read client certificate B"; 406296341Sdelphij break; 407296341Sdelphij case SSL3_ST_SR_KEY_EXCH_A: 408296341Sdelphij str = "SSLv3 read client key exchange A"; 409296341Sdelphij break; 410296341Sdelphij case SSL3_ST_SR_KEY_EXCH_B: 411296341Sdelphij str = "SSLv3 read client key exchange B"; 412296341Sdelphij break; 413296341Sdelphij case SSL3_ST_SR_CERT_VRFY_A: 414296341Sdelphij str = "SSLv3 read certificate verify A"; 415296341Sdelphij break; 416296341Sdelphij case SSL3_ST_SR_CERT_VRFY_B: 417296341Sdelphij str = "SSLv3 read certificate verify B"; 418296341Sdelphij break; 41955714Skris#endif 42055714Skris 42159191Skris/* SSLv2/v3 compatibility states */ 42255714Skris/* client */ 423296341Sdelphij case SSL23_ST_CW_CLNT_HELLO_A: 424296341Sdelphij str = "SSLv2/v3 write client hello A"; 425296341Sdelphij break; 426296341Sdelphij case SSL23_ST_CW_CLNT_HELLO_B: 427296341Sdelphij str = "SSLv2/v3 write client hello B"; 428296341Sdelphij break; 429296341Sdelphij case SSL23_ST_CR_SRVR_HELLO_A: 430296341Sdelphij str = "SSLv2/v3 read server hello A"; 431296341Sdelphij break; 432296341Sdelphij case SSL23_ST_CR_SRVR_HELLO_B: 433296341Sdelphij str = "SSLv2/v3 read server hello B"; 434296341Sdelphij break; 43555714Skris/* server */ 436296341Sdelphij case SSL23_ST_SR_CLNT_HELLO_A: 437296341Sdelphij str = "SSLv2/v3 read client hello A"; 438296341Sdelphij break; 439296341Sdelphij case SSL23_ST_SR_CLNT_HELLO_B: 440296341Sdelphij str = "SSLv2/v3 read client hello B"; 441296341Sdelphij break; 44255714Skris 443205128Ssimon/* DTLS */ 444296341Sdelphij case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: 445296341Sdelphij str = "DTLS1 read hello verify request A"; 446296341Sdelphij break; 447296341Sdelphij case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: 448296341Sdelphij str = "DTLS1 read hello verify request B"; 449296341Sdelphij break; 450296341Sdelphij case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: 451296341Sdelphij str = "DTLS1 write hello verify request A"; 452296341Sdelphij break; 453296341Sdelphij case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: 454296341Sdelphij str = "DTLS1 write hello verify request B"; 455296341Sdelphij break; 456205128Ssimon 457296341Sdelphij default: 458296341Sdelphij str = "unknown state"; 459296341Sdelphij break; 460296341Sdelphij } 461296341Sdelphij return (str); 462296341Sdelphij} 46355714Skris 464109998Smarkmconst char *SSL_rstate_string_long(const SSL *s) 465296341Sdelphij{ 466296341Sdelphij const char *str; 46755714Skris 468296341Sdelphij switch (s->rstate) { 469296341Sdelphij case SSL_ST_READ_HEADER: 470296341Sdelphij str = "read header"; 471296341Sdelphij break; 472296341Sdelphij case SSL_ST_READ_BODY: 473296341Sdelphij str = "read body"; 474296341Sdelphij break; 475296341Sdelphij case SSL_ST_READ_DONE: 476296341Sdelphij str = "read done"; 477296341Sdelphij break; 478296341Sdelphij default: 479296341Sdelphij str = "unknown"; 480296341Sdelphij break; 481296341Sdelphij } 482296341Sdelphij return (str); 483296341Sdelphij} 48455714Skris 485109998Smarkmconst char *SSL_state_string(const SSL *s) 486296341Sdelphij{ 487296341Sdelphij const char *str; 48855714Skris 489296341Sdelphij switch (s->state) { 490296341Sdelphij case SSL_ST_BEFORE: 491296341Sdelphij str = "PINIT "; 492296341Sdelphij break; 493296341Sdelphij case SSL_ST_ACCEPT: 494296341Sdelphij str = "AINIT "; 495296341Sdelphij break; 496296341Sdelphij case SSL_ST_CONNECT: 497296341Sdelphij str = "CINIT "; 498296341Sdelphij break; 499296341Sdelphij case SSL_ST_OK: 500296341Sdelphij str = "SSLOK "; 501296341Sdelphij break; 502296341Sdelphij case SSL_ST_ERR: 503296341Sdelphij str = "SSLERR"; 504296341Sdelphij break; 505109998Smarkm#ifndef OPENSSL_NO_SSL2 506296341Sdelphij case SSL2_ST_CLIENT_START_ENCRYPTION: 507296341Sdelphij str = "2CSENC"; 508296341Sdelphij break; 509296341Sdelphij case SSL2_ST_SERVER_START_ENCRYPTION: 510296341Sdelphij str = "2SSENC"; 511296341Sdelphij break; 512296341Sdelphij case SSL2_ST_SEND_CLIENT_HELLO_A: 513296341Sdelphij str = "2SCH_A"; 514296341Sdelphij break; 515296341Sdelphij case SSL2_ST_SEND_CLIENT_HELLO_B: 516296341Sdelphij str = "2SCH_B"; 517296341Sdelphij break; 518296341Sdelphij case SSL2_ST_GET_SERVER_HELLO_A: 519296341Sdelphij str = "2GSH_A"; 520296341Sdelphij break; 521296341Sdelphij case SSL2_ST_GET_SERVER_HELLO_B: 522296341Sdelphij str = "2GSH_B"; 523296341Sdelphij break; 524296341Sdelphij case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: 525296341Sdelphij str = "2SCMKA"; 526296341Sdelphij break; 527296341Sdelphij case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: 528296341Sdelphij str = "2SCMKB"; 529296341Sdelphij break; 530296341Sdelphij case SSL2_ST_SEND_CLIENT_FINISHED_A: 531296341Sdelphij str = "2SCF_A"; 532296341Sdelphij break; 533296341Sdelphij case SSL2_ST_SEND_CLIENT_FINISHED_B: 534296341Sdelphij str = "2SCF_B"; 535296341Sdelphij break; 536296341Sdelphij case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: 537296341Sdelphij str = "2SCC_A"; 538296341Sdelphij break; 539296341Sdelphij case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: 540296341Sdelphij str = "2SCC_B"; 541296341Sdelphij break; 542296341Sdelphij case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: 543296341Sdelphij str = "2SCC_C"; 544296341Sdelphij break; 545296341Sdelphij case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: 546296341Sdelphij str = "2SCC_D"; 547296341Sdelphij break; 548296341Sdelphij case SSL2_ST_GET_SERVER_VERIFY_A: 549296341Sdelphij str = "2GSV_A"; 550296341Sdelphij break; 551296341Sdelphij case SSL2_ST_GET_SERVER_VERIFY_B: 552296341Sdelphij str = "2GSV_B"; 553296341Sdelphij break; 554296341Sdelphij case SSL2_ST_GET_SERVER_FINISHED_A: 555296341Sdelphij str = "2GSF_A"; 556296341Sdelphij break; 557296341Sdelphij case SSL2_ST_GET_SERVER_FINISHED_B: 558296341Sdelphij str = "2GSF_B"; 559296341Sdelphij break; 560296341Sdelphij case SSL2_ST_GET_CLIENT_HELLO_A: 561296341Sdelphij str = "2GCH_A"; 562296341Sdelphij break; 563296341Sdelphij case SSL2_ST_GET_CLIENT_HELLO_B: 564296341Sdelphij str = "2GCH_B"; 565296341Sdelphij break; 566296341Sdelphij case SSL2_ST_GET_CLIENT_HELLO_C: 567296341Sdelphij str = "2GCH_C"; 568296341Sdelphij break; 569296341Sdelphij case SSL2_ST_SEND_SERVER_HELLO_A: 570296341Sdelphij str = "2SSH_A"; 571296341Sdelphij break; 572296341Sdelphij case SSL2_ST_SEND_SERVER_HELLO_B: 573296341Sdelphij str = "2SSH_B"; 574296341Sdelphij break; 575296341Sdelphij case SSL2_ST_GET_CLIENT_MASTER_KEY_A: 576296341Sdelphij str = "2GCMKA"; 577296341Sdelphij break; 578296341Sdelphij case SSL2_ST_GET_CLIENT_MASTER_KEY_B: 579296341Sdelphij str = "2GCMKA"; 580296341Sdelphij break; 581296341Sdelphij case SSL2_ST_SEND_SERVER_VERIFY_A: 582296341Sdelphij str = "2SSV_A"; 583296341Sdelphij break; 584296341Sdelphij case SSL2_ST_SEND_SERVER_VERIFY_B: 585296341Sdelphij str = "2SSV_B"; 586296341Sdelphij break; 587296341Sdelphij case SSL2_ST_SEND_SERVER_VERIFY_C: 588296341Sdelphij str = "2SSV_C"; 589296341Sdelphij break; 590296341Sdelphij case SSL2_ST_GET_CLIENT_FINISHED_A: 591296341Sdelphij str = "2GCF_A"; 592296341Sdelphij break; 593296341Sdelphij case SSL2_ST_GET_CLIENT_FINISHED_B: 594296341Sdelphij str = "2GCF_B"; 595296341Sdelphij break; 596296341Sdelphij case SSL2_ST_SEND_SERVER_FINISHED_A: 597296341Sdelphij str = "2SSF_A"; 598296341Sdelphij break; 599296341Sdelphij case SSL2_ST_SEND_SERVER_FINISHED_B: 600296341Sdelphij str = "2SSF_B"; 601296341Sdelphij break; 602296341Sdelphij case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: 603296341Sdelphij str = "2SRC_A"; 604296341Sdelphij break; 605296341Sdelphij case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: 606296341Sdelphij str = "2SRC_B"; 607296341Sdelphij break; 608296341Sdelphij case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: 609296341Sdelphij str = "2SRC_C"; 610296341Sdelphij break; 611296341Sdelphij case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: 612296341Sdelphij str = "2SRC_D"; 613296341Sdelphij break; 614296341Sdelphij case SSL2_ST_X509_GET_SERVER_CERTIFICATE: 615296341Sdelphij str = "2X9GSC"; 616296341Sdelphij break; 617296341Sdelphij case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: 618296341Sdelphij str = "2X9GCC"; 619296341Sdelphij break; 62055714Skris#endif 62155714Skris 622109998Smarkm#ifndef OPENSSL_NO_SSL3 62355714Skris/* SSLv3 additions */ 624296341Sdelphij case SSL3_ST_SW_FLUSH: 625296341Sdelphij case SSL3_ST_CW_FLUSH: 626296341Sdelphij str = "3FLUSH"; 627296341Sdelphij break; 628296341Sdelphij case SSL3_ST_CW_CLNT_HELLO_A: 629296341Sdelphij str = "3WCH_A"; 630296341Sdelphij break; 631296341Sdelphij case SSL3_ST_CW_CLNT_HELLO_B: 632296341Sdelphij str = "3WCH_B"; 633296341Sdelphij break; 634296341Sdelphij case SSL3_ST_CR_SRVR_HELLO_A: 635296341Sdelphij str = "3RSH_A"; 636296341Sdelphij break; 637296341Sdelphij case SSL3_ST_CR_SRVR_HELLO_B: 638296341Sdelphij str = "3RSH_B"; 639296341Sdelphij break; 640296341Sdelphij case SSL3_ST_CR_CERT_A: 641296341Sdelphij str = "3RSC_A"; 642296341Sdelphij break; 643296341Sdelphij case SSL3_ST_CR_CERT_B: 644296341Sdelphij str = "3RSC_B"; 645296341Sdelphij break; 646296341Sdelphij case SSL3_ST_CR_KEY_EXCH_A: 647296341Sdelphij str = "3RSKEA"; 648296341Sdelphij break; 649296341Sdelphij case SSL3_ST_CR_KEY_EXCH_B: 650296341Sdelphij str = "3RSKEB"; 651296341Sdelphij break; 652296341Sdelphij case SSL3_ST_CR_CERT_REQ_A: 653296341Sdelphij str = "3RCR_A"; 654296341Sdelphij break; 655296341Sdelphij case SSL3_ST_CR_CERT_REQ_B: 656296341Sdelphij str = "3RCR_B"; 657296341Sdelphij break; 658296341Sdelphij case SSL3_ST_CR_SRVR_DONE_A: 659296341Sdelphij str = "3RSD_A"; 660296341Sdelphij break; 661296341Sdelphij case SSL3_ST_CR_SRVR_DONE_B: 662296341Sdelphij str = "3RSD_B"; 663296341Sdelphij break; 664296341Sdelphij case SSL3_ST_CW_CERT_A: 665296341Sdelphij str = "3WCC_A"; 666296341Sdelphij break; 667296341Sdelphij case SSL3_ST_CW_CERT_B: 668296341Sdelphij str = "3WCC_B"; 669296341Sdelphij break; 670296341Sdelphij case SSL3_ST_CW_CERT_C: 671296341Sdelphij str = "3WCC_C"; 672296341Sdelphij break; 673296341Sdelphij case SSL3_ST_CW_CERT_D: 674296341Sdelphij str = "3WCC_D"; 675296341Sdelphij break; 676296341Sdelphij case SSL3_ST_CW_KEY_EXCH_A: 677296341Sdelphij str = "3WCKEA"; 678296341Sdelphij break; 679296341Sdelphij case SSL3_ST_CW_KEY_EXCH_B: 680296341Sdelphij str = "3WCKEB"; 681296341Sdelphij break; 682296341Sdelphij case SSL3_ST_CW_CERT_VRFY_A: 683296341Sdelphij str = "3WCV_A"; 684296341Sdelphij break; 685296341Sdelphij case SSL3_ST_CW_CERT_VRFY_B: 686296341Sdelphij str = "3WCV_B"; 687296341Sdelphij break; 68855714Skris 689296341Sdelphij case SSL3_ST_SW_CHANGE_A: 690296341Sdelphij case SSL3_ST_CW_CHANGE_A: 691296341Sdelphij str = "3WCCSA"; 692296341Sdelphij break; 693296341Sdelphij case SSL3_ST_SW_CHANGE_B: 694296341Sdelphij case SSL3_ST_CW_CHANGE_B: 695296341Sdelphij str = "3WCCSB"; 696296341Sdelphij break; 697296341Sdelphij case SSL3_ST_SW_FINISHED_A: 698296341Sdelphij case SSL3_ST_CW_FINISHED_A: 699296341Sdelphij str = "3WFINA"; 700296341Sdelphij break; 701296341Sdelphij case SSL3_ST_SW_FINISHED_B: 702296341Sdelphij case SSL3_ST_CW_FINISHED_B: 703296341Sdelphij str = "3WFINB"; 704296341Sdelphij break; 705296341Sdelphij case SSL3_ST_SR_CHANGE_A: 706296341Sdelphij case SSL3_ST_CR_CHANGE_A: 707296341Sdelphij str = "3RCCSA"; 708296341Sdelphij break; 709296341Sdelphij case SSL3_ST_SR_CHANGE_B: 710296341Sdelphij case SSL3_ST_CR_CHANGE_B: 711296341Sdelphij str = "3RCCSB"; 712296341Sdelphij break; 713296341Sdelphij case SSL3_ST_SR_FINISHED_A: 714296341Sdelphij case SSL3_ST_CR_FINISHED_A: 715296341Sdelphij str = "3RFINA"; 716296341Sdelphij break; 717296341Sdelphij case SSL3_ST_SR_FINISHED_B: 718296341Sdelphij case SSL3_ST_CR_FINISHED_B: 719296341Sdelphij str = "3RFINB"; 720296341Sdelphij break; 72155714Skris 722296341Sdelphij case SSL3_ST_SW_HELLO_REQ_A: 723296341Sdelphij str = "3WHR_A"; 724296341Sdelphij break; 725296341Sdelphij case SSL3_ST_SW_HELLO_REQ_B: 726296341Sdelphij str = "3WHR_B"; 727296341Sdelphij break; 728296341Sdelphij case SSL3_ST_SW_HELLO_REQ_C: 729296341Sdelphij str = "3WHR_C"; 730296341Sdelphij break; 731296341Sdelphij case SSL3_ST_SR_CLNT_HELLO_A: 732296341Sdelphij str = "3RCH_A"; 733296341Sdelphij break; 734296341Sdelphij case SSL3_ST_SR_CLNT_HELLO_B: 735296341Sdelphij str = "3RCH_B"; 736296341Sdelphij break; 737296341Sdelphij case SSL3_ST_SR_CLNT_HELLO_C: 738296341Sdelphij str = "3RCH_C"; 739296341Sdelphij break; 740296341Sdelphij case SSL3_ST_SW_SRVR_HELLO_A: 741296341Sdelphij str = "3WSH_A"; 742296341Sdelphij break; 743296341Sdelphij case SSL3_ST_SW_SRVR_HELLO_B: 744296341Sdelphij str = "3WSH_B"; 745296341Sdelphij break; 746296341Sdelphij case SSL3_ST_SW_CERT_A: 747296341Sdelphij str = "3WSC_A"; 748296341Sdelphij break; 749296341Sdelphij case SSL3_ST_SW_CERT_B: 750296341Sdelphij str = "3WSC_B"; 751296341Sdelphij break; 752296341Sdelphij case SSL3_ST_SW_KEY_EXCH_A: 753296341Sdelphij str = "3WSKEA"; 754296341Sdelphij break; 755296341Sdelphij case SSL3_ST_SW_KEY_EXCH_B: 756296341Sdelphij str = "3WSKEB"; 757296341Sdelphij break; 758296341Sdelphij case SSL3_ST_SW_CERT_REQ_A: 759296341Sdelphij str = "3WCR_A"; 760296341Sdelphij break; 761296341Sdelphij case SSL3_ST_SW_CERT_REQ_B: 762296341Sdelphij str = "3WCR_B"; 763296341Sdelphij break; 764296341Sdelphij case SSL3_ST_SW_SRVR_DONE_A: 765296341Sdelphij str = "3WSD_A"; 766296341Sdelphij break; 767296341Sdelphij case SSL3_ST_SW_SRVR_DONE_B: 768296341Sdelphij str = "3WSD_B"; 769296341Sdelphij break; 770296341Sdelphij case SSL3_ST_SR_CERT_A: 771296341Sdelphij str = "3RCC_A"; 772296341Sdelphij break; 773296341Sdelphij case SSL3_ST_SR_CERT_B: 774296341Sdelphij str = "3RCC_B"; 775296341Sdelphij break; 776296341Sdelphij case SSL3_ST_SR_KEY_EXCH_A: 777296341Sdelphij str = "3RCKEA"; 778296341Sdelphij break; 779296341Sdelphij case SSL3_ST_SR_KEY_EXCH_B: 780296341Sdelphij str = "3RCKEB"; 781296341Sdelphij break; 782296341Sdelphij case SSL3_ST_SR_CERT_VRFY_A: 783296341Sdelphij str = "3RCV_A"; 784296341Sdelphij break; 785296341Sdelphij case SSL3_ST_SR_CERT_VRFY_B: 786296341Sdelphij str = "3RCV_B"; 787296341Sdelphij break; 78855714Skris#endif 78955714Skris 79059191Skris/* SSLv2/v3 compatibility states */ 79155714Skris/* client */ 792296341Sdelphij case SSL23_ST_CW_CLNT_HELLO_A: 793296341Sdelphij str = "23WCHA"; 794296341Sdelphij break; 795296341Sdelphij case SSL23_ST_CW_CLNT_HELLO_B: 796296341Sdelphij str = "23WCHB"; 797296341Sdelphij break; 798296341Sdelphij case SSL23_ST_CR_SRVR_HELLO_A: 799296341Sdelphij str = "23RSHA"; 800296341Sdelphij break; 801296341Sdelphij case SSL23_ST_CR_SRVR_HELLO_B: 802296341Sdelphij str = "23RSHA"; 803296341Sdelphij break; 80455714Skris/* server */ 805296341Sdelphij case SSL23_ST_SR_CLNT_HELLO_A: 806296341Sdelphij str = "23RCHA"; 807296341Sdelphij break; 808296341Sdelphij case SSL23_ST_SR_CLNT_HELLO_B: 809296341Sdelphij str = "23RCHB"; 810296341Sdelphij break; 811269686Sjkim 812205128Ssimon/* DTLS */ 813296341Sdelphij case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: 814296341Sdelphij str = "DRCHVA"; 815296341Sdelphij break; 816296341Sdelphij case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: 817296341Sdelphij str = "DRCHVB"; 818296341Sdelphij break; 819296341Sdelphij case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: 820296341Sdelphij str = "DWCHVA"; 821296341Sdelphij break; 822296341Sdelphij case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: 823296341Sdelphij str = "DWCHVB"; 824296341Sdelphij break; 82555714Skris 826296341Sdelphij default: 827296341Sdelphij str = "UNKWN "; 828296341Sdelphij break; 829296341Sdelphij } 830296341Sdelphij return (str); 831296341Sdelphij} 83255714Skris 833109998Smarkmconst char *SSL_alert_type_string_long(int value) 834296341Sdelphij{ 835296341Sdelphij value >>= 8; 836296341Sdelphij if (value == SSL3_AL_WARNING) 837296341Sdelphij return ("warning"); 838296341Sdelphij else if (value == SSL3_AL_FATAL) 839296341Sdelphij return ("fatal"); 840296341Sdelphij else 841296341Sdelphij return ("unknown"); 842296341Sdelphij} 84355714Skris 844109998Smarkmconst char *SSL_alert_type_string(int value) 845296341Sdelphij{ 846296341Sdelphij value >>= 8; 847296341Sdelphij if (value == SSL3_AL_WARNING) 848296341Sdelphij return ("W"); 849296341Sdelphij else if (value == SSL3_AL_FATAL) 850296341Sdelphij return ("F"); 851296341Sdelphij else 852296341Sdelphij return ("U"); 853296341Sdelphij} 85455714Skris 855109998Smarkmconst char *SSL_alert_desc_string(int value) 856296341Sdelphij{ 857296341Sdelphij const char *str; 85855714Skris 859296341Sdelphij switch (value & 0xff) { 860296341Sdelphij case SSL3_AD_CLOSE_NOTIFY: 861296341Sdelphij str = "CN"; 862296341Sdelphij break; 863296341Sdelphij case SSL3_AD_UNEXPECTED_MESSAGE: 864296341Sdelphij str = "UM"; 865296341Sdelphij break; 866296341Sdelphij case SSL3_AD_BAD_RECORD_MAC: 867296341Sdelphij str = "BM"; 868296341Sdelphij break; 869296341Sdelphij case SSL3_AD_DECOMPRESSION_FAILURE: 870296341Sdelphij str = "DF"; 871296341Sdelphij break; 872296341Sdelphij case SSL3_AD_HANDSHAKE_FAILURE: 873296341Sdelphij str = "HF"; 874296341Sdelphij break; 875296341Sdelphij case SSL3_AD_NO_CERTIFICATE: 876296341Sdelphij str = "NC"; 877296341Sdelphij break; 878296341Sdelphij case SSL3_AD_BAD_CERTIFICATE: 879296341Sdelphij str = "BC"; 880296341Sdelphij break; 881296341Sdelphij case SSL3_AD_UNSUPPORTED_CERTIFICATE: 882296341Sdelphij str = "UC"; 883296341Sdelphij break; 884296341Sdelphij case SSL3_AD_CERTIFICATE_REVOKED: 885296341Sdelphij str = "CR"; 886296341Sdelphij break; 887296341Sdelphij case SSL3_AD_CERTIFICATE_EXPIRED: 888296341Sdelphij str = "CE"; 889296341Sdelphij break; 890296341Sdelphij case SSL3_AD_CERTIFICATE_UNKNOWN: 891296341Sdelphij str = "CU"; 892296341Sdelphij break; 893296341Sdelphij case SSL3_AD_ILLEGAL_PARAMETER: 894296341Sdelphij str = "IP"; 895296341Sdelphij break; 896296341Sdelphij case TLS1_AD_DECRYPTION_FAILED: 897296341Sdelphij str = "DC"; 898296341Sdelphij break; 899296341Sdelphij case TLS1_AD_RECORD_OVERFLOW: 900296341Sdelphij str = "RO"; 901296341Sdelphij break; 902296341Sdelphij case TLS1_AD_UNKNOWN_CA: 903296341Sdelphij str = "CA"; 904296341Sdelphij break; 905296341Sdelphij case TLS1_AD_ACCESS_DENIED: 906296341Sdelphij str = "AD"; 907296341Sdelphij break; 908296341Sdelphij case TLS1_AD_DECODE_ERROR: 909296341Sdelphij str = "DE"; 910296341Sdelphij break; 911296341Sdelphij case TLS1_AD_DECRYPT_ERROR: 912296341Sdelphij str = "CY"; 913296341Sdelphij break; 914296341Sdelphij case TLS1_AD_EXPORT_RESTRICTION: 915296341Sdelphij str = "ER"; 916296341Sdelphij break; 917296341Sdelphij case TLS1_AD_PROTOCOL_VERSION: 918296341Sdelphij str = "PV"; 919296341Sdelphij break; 920296341Sdelphij case TLS1_AD_INSUFFICIENT_SECURITY: 921296341Sdelphij str = "IS"; 922296341Sdelphij break; 923296341Sdelphij case TLS1_AD_INTERNAL_ERROR: 924296341Sdelphij str = "IE"; 925296341Sdelphij break; 926296341Sdelphij case TLS1_AD_USER_CANCELLED: 927296341Sdelphij str = "US"; 928296341Sdelphij break; 929296341Sdelphij case TLS1_AD_NO_RENEGOTIATION: 930296341Sdelphij str = "NR"; 931296341Sdelphij break; 932296341Sdelphij case TLS1_AD_UNSUPPORTED_EXTENSION: 933296341Sdelphij str = "UE"; 934296341Sdelphij break; 935296341Sdelphij case TLS1_AD_CERTIFICATE_UNOBTAINABLE: 936296341Sdelphij str = "CO"; 937296341Sdelphij break; 938296341Sdelphij case TLS1_AD_UNRECOGNIZED_NAME: 939296341Sdelphij str = "UN"; 940296341Sdelphij break; 941296341Sdelphij case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 942296341Sdelphij str = "BR"; 943296341Sdelphij break; 944296341Sdelphij case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 945296341Sdelphij str = "BH"; 946296341Sdelphij break; 947296341Sdelphij case TLS1_AD_UNKNOWN_PSK_IDENTITY: 948296341Sdelphij str = "UP"; 949296341Sdelphij break; 950296341Sdelphij default: 951296341Sdelphij str = "UK"; 952296341Sdelphij break; 953296341Sdelphij } 954296341Sdelphij return (str); 955296341Sdelphij} 95655714Skris 957109998Smarkmconst char *SSL_alert_desc_string_long(int value) 958296341Sdelphij{ 959296341Sdelphij const char *str; 96055714Skris 961296341Sdelphij switch (value & 0xff) { 962296341Sdelphij case SSL3_AD_CLOSE_NOTIFY: 963296341Sdelphij str = "close notify"; 964296341Sdelphij break; 965296341Sdelphij case SSL3_AD_UNEXPECTED_MESSAGE: 966296341Sdelphij str = "unexpected_message"; 967296341Sdelphij break; 968296341Sdelphij case SSL3_AD_BAD_RECORD_MAC: 969296341Sdelphij str = "bad record mac"; 970296341Sdelphij break; 971296341Sdelphij case SSL3_AD_DECOMPRESSION_FAILURE: 972296341Sdelphij str = "decompression failure"; 973296341Sdelphij break; 974296341Sdelphij case SSL3_AD_HANDSHAKE_FAILURE: 975296341Sdelphij str = "handshake failure"; 976296341Sdelphij break; 977296341Sdelphij case SSL3_AD_NO_CERTIFICATE: 978296341Sdelphij str = "no certificate"; 979296341Sdelphij break; 980296341Sdelphij case SSL3_AD_BAD_CERTIFICATE: 981296341Sdelphij str = "bad certificate"; 982296341Sdelphij break; 983296341Sdelphij case SSL3_AD_UNSUPPORTED_CERTIFICATE: 984296341Sdelphij str = "unsupported certificate"; 985296341Sdelphij break; 986296341Sdelphij case SSL3_AD_CERTIFICATE_REVOKED: 987296341Sdelphij str = "certificate revoked"; 988296341Sdelphij break; 989296341Sdelphij case SSL3_AD_CERTIFICATE_EXPIRED: 990296341Sdelphij str = "certificate expired"; 991296341Sdelphij break; 992296341Sdelphij case SSL3_AD_CERTIFICATE_UNKNOWN: 993296341Sdelphij str = "certificate unknown"; 994296341Sdelphij break; 995296341Sdelphij case SSL3_AD_ILLEGAL_PARAMETER: 996296341Sdelphij str = "illegal parameter"; 997296341Sdelphij break; 998296341Sdelphij case TLS1_AD_DECRYPTION_FAILED: 999296341Sdelphij str = "decryption failed"; 1000296341Sdelphij break; 1001296341Sdelphij case TLS1_AD_RECORD_OVERFLOW: 1002296341Sdelphij str = "record overflow"; 1003296341Sdelphij break; 1004296341Sdelphij case TLS1_AD_UNKNOWN_CA: 1005296341Sdelphij str = "unknown CA"; 1006296341Sdelphij break; 1007296341Sdelphij case TLS1_AD_ACCESS_DENIED: 1008296341Sdelphij str = "access denied"; 1009296341Sdelphij break; 1010296341Sdelphij case TLS1_AD_DECODE_ERROR: 1011296341Sdelphij str = "decode error"; 1012296341Sdelphij break; 1013296341Sdelphij case TLS1_AD_DECRYPT_ERROR: 1014296341Sdelphij str = "decrypt error"; 1015296341Sdelphij break; 1016296341Sdelphij case TLS1_AD_EXPORT_RESTRICTION: 1017296341Sdelphij str = "export restriction"; 1018296341Sdelphij break; 1019296341Sdelphij case TLS1_AD_PROTOCOL_VERSION: 1020296341Sdelphij str = "protocol version"; 1021296341Sdelphij break; 1022296341Sdelphij case TLS1_AD_INSUFFICIENT_SECURITY: 1023296341Sdelphij str = "insufficient security"; 1024296341Sdelphij break; 1025296341Sdelphij case TLS1_AD_INTERNAL_ERROR: 1026296341Sdelphij str = "internal error"; 1027296341Sdelphij break; 1028296341Sdelphij case TLS1_AD_USER_CANCELLED: 1029296341Sdelphij str = "user canceled"; 1030296341Sdelphij break; 1031296341Sdelphij case TLS1_AD_NO_RENEGOTIATION: 1032296341Sdelphij str = "no renegotiation"; 1033296341Sdelphij break; 1034296341Sdelphij case TLS1_AD_UNSUPPORTED_EXTENSION: 1035296341Sdelphij str = "unsupported extension"; 1036296341Sdelphij break; 1037296341Sdelphij case TLS1_AD_CERTIFICATE_UNOBTAINABLE: 1038296341Sdelphij str = "certificate unobtainable"; 1039296341Sdelphij break; 1040296341Sdelphij case TLS1_AD_UNRECOGNIZED_NAME: 1041296341Sdelphij str = "unrecognized name"; 1042296341Sdelphij break; 1043296341Sdelphij case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 1044296341Sdelphij str = "bad certificate status response"; 1045296341Sdelphij break; 1046296341Sdelphij case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 1047296341Sdelphij str = "bad certificate hash value"; 1048296341Sdelphij break; 1049296341Sdelphij case TLS1_AD_UNKNOWN_PSK_IDENTITY: 1050296341Sdelphij str = "unknown PSK identity"; 1051296341Sdelphij break; 1052296341Sdelphij default: 1053296341Sdelphij str = "unknown"; 1054296341Sdelphij break; 1055296341Sdelphij } 1056296341Sdelphij return (str); 1057296341Sdelphij} 105855714Skris 1059109998Smarkmconst char *SSL_rstate_string(const SSL *s) 1060296341Sdelphij{ 1061296341Sdelphij const char *str; 106255714Skris 1063296341Sdelphij switch (s->rstate) { 1064296341Sdelphij case SSL_ST_READ_HEADER: 1065296341Sdelphij str = "RH"; 1066296341Sdelphij break; 1067296341Sdelphij case SSL_ST_READ_BODY: 1068296341Sdelphij str = "RB"; 1069296341Sdelphij break; 1070296341Sdelphij case SSL_ST_READ_DONE: 1071296341Sdelphij str = "RD"; 1072296341Sdelphij break; 1073296341Sdelphij default: 1074296341Sdelphij str = "unknown"; 1075296341Sdelphij break; 1076296341Sdelphij } 1077296341Sdelphij return (str); 1078296341Sdelphij} 1079