Home | History | Annotate | Line # | Download | only in ssl
      1  1.1  christos /*
      2  1.1  christos  * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved.
      3  1.1  christos  * Copyright 2005 Nokia. All rights reserved.
      4  1.1  christos  *
      5  1.1  christos  * Licensed under the Apache License 2.0 (the "License").  You may not use
      6  1.1  christos  * this file except in compliance with the License.  You can obtain a copy
      7  1.1  christos  * in the file LICENSE in the source distribution or at
      8  1.1  christos  * https://www.openssl.org/source/license.html
      9  1.1  christos  */
     10  1.1  christos 
     11  1.1  christos #include <stdio.h>
     12  1.1  christos #include "ssl_local.h"
     13  1.1  christos #include "internal/ssl_unwrap.h"
     14  1.1  christos 
     15  1.1  christos const char *SSL_state_string_long(const SSL *s)
     16  1.1  christos {
     17  1.1  christos     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
     18  1.1  christos 
     19  1.1  christos     if (sc == NULL || ossl_statem_in_error(sc))
     20  1.1  christos         return "error";
     21  1.1  christos 
     22  1.1  christos     switch (SSL_get_state(s)) {
     23  1.1  christos     case TLS_ST_CR_CERT_STATUS:
     24  1.1  christos         return "SSLv3/TLS read certificate status";
     25  1.1  christos     case TLS_ST_CW_NEXT_PROTO:
     26  1.1  christos         return "SSLv3/TLS write next proto";
     27  1.1  christos     case TLS_ST_SR_NEXT_PROTO:
     28  1.1  christos         return "SSLv3/TLS read next proto";
     29  1.1  christos     case TLS_ST_SW_CERT_STATUS:
     30  1.1  christos         return "SSLv3/TLS write certificate status";
     31  1.1  christos     case TLS_ST_BEFORE:
     32  1.1  christos         return "before SSL initialization";
     33  1.1  christos     case TLS_ST_OK:
     34  1.1  christos         return "SSL negotiation finished successfully";
     35  1.1  christos     case TLS_ST_CW_CLNT_HELLO:
     36  1.1  christos         return "SSLv3/TLS write client hello";
     37  1.1  christos     case TLS_ST_CR_SRVR_HELLO:
     38  1.1  christos         return "SSLv3/TLS read server hello";
     39  1.1  christos     case TLS_ST_CR_CERT:
     40  1.1  christos         return "SSLv3/TLS read server certificate";
     41  1.1  christos     case TLS_ST_CR_COMP_CERT:
     42  1.1  christos         return "TLSv1.3 read server compressed certificate";
     43  1.1  christos     case TLS_ST_CR_KEY_EXCH:
     44  1.1  christos         return "SSLv3/TLS read server key exchange";
     45  1.1  christos     case TLS_ST_CR_CERT_REQ:
     46  1.1  christos         return "SSLv3/TLS read server certificate request";
     47  1.1  christos     case TLS_ST_CR_SESSION_TICKET:
     48  1.1  christos         return "SSLv3/TLS read server session ticket";
     49  1.1  christos     case TLS_ST_CR_SRVR_DONE:
     50  1.1  christos         return "SSLv3/TLS read server done";
     51  1.1  christos     case TLS_ST_CW_CERT:
     52  1.1  christos         return "SSLv3/TLS write client certificate";
     53  1.1  christos     case TLS_ST_CW_COMP_CERT:
     54  1.1  christos         return "TLSv1.3 write client compressed certificate";
     55  1.1  christos     case TLS_ST_CW_KEY_EXCH:
     56  1.1  christos         return "SSLv3/TLS write client key exchange";
     57  1.1  christos     case TLS_ST_CW_CERT_VRFY:
     58  1.1  christos         return "SSLv3/TLS write certificate verify";
     59  1.1  christos     case TLS_ST_CW_CHANGE:
     60  1.1  christos     case TLS_ST_SW_CHANGE:
     61  1.1  christos         return "SSLv3/TLS write change cipher spec";
     62  1.1  christos     case TLS_ST_CW_FINISHED:
     63  1.1  christos     case TLS_ST_SW_FINISHED:
     64  1.1  christos         return "SSLv3/TLS write finished";
     65  1.1  christos     case TLS_ST_CR_CHANGE:
     66  1.1  christos     case TLS_ST_SR_CHANGE:
     67  1.1  christos         return "SSLv3/TLS read change cipher spec";
     68  1.1  christos     case TLS_ST_CR_FINISHED:
     69  1.1  christos     case TLS_ST_SR_FINISHED:
     70  1.1  christos         return "SSLv3/TLS read finished";
     71  1.1  christos     case TLS_ST_SR_CLNT_HELLO:
     72  1.1  christos         return "SSLv3/TLS read client hello";
     73  1.1  christos     case TLS_ST_SW_HELLO_REQ:
     74  1.1  christos         return "SSLv3/TLS write hello request";
     75  1.1  christos     case TLS_ST_SW_SRVR_HELLO:
     76  1.1  christos         return "SSLv3/TLS write server hello";
     77  1.1  christos     case TLS_ST_SW_CERT:
     78  1.1  christos         return "SSLv3/TLS write certificate";
     79  1.1  christos     case TLS_ST_SW_COMP_CERT:
     80  1.1  christos         return "TLSv1.3 write server compressed certificate";
     81  1.1  christos     case TLS_ST_SW_KEY_EXCH:
     82  1.1  christos         return "SSLv3/TLS write key exchange";
     83  1.1  christos     case TLS_ST_SW_CERT_REQ:
     84  1.1  christos         return "SSLv3/TLS write certificate request";
     85  1.1  christos     case TLS_ST_SW_SESSION_TICKET:
     86  1.1  christos         return "SSLv3/TLS write session ticket";
     87  1.1  christos     case TLS_ST_SW_SRVR_DONE:
     88  1.1  christos         return "SSLv3/TLS write server done";
     89  1.1  christos     case TLS_ST_SR_CERT:
     90  1.1  christos         return "SSLv3/TLS read client certificate";
     91  1.1  christos     case TLS_ST_SR_COMP_CERT:
     92  1.1  christos         return "TLSv1.3 read client compressed certificate";
     93  1.1  christos     case TLS_ST_SR_KEY_EXCH:
     94  1.1  christos         return "SSLv3/TLS read client key exchange";
     95  1.1  christos     case TLS_ST_SR_CERT_VRFY:
     96  1.1  christos         return "SSLv3/TLS read certificate verify";
     97  1.1  christos     case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
     98  1.1  christos         return "DTLS1 read hello verify request";
     99  1.1  christos     case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
    100  1.1  christos         return "DTLS1 write hello verify request";
    101  1.1  christos     case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
    102  1.1  christos         return "TLSv1.3 write encrypted extensions";
    103  1.1  christos     case TLS_ST_CR_ENCRYPTED_EXTENSIONS:
    104  1.1  christos         return "TLSv1.3 read encrypted extensions";
    105  1.1  christos     case TLS_ST_CR_CERT_VRFY:
    106  1.1  christos         return "TLSv1.3 read server certificate verify";
    107  1.1  christos     case TLS_ST_SW_CERT_VRFY:
    108  1.1  christos         return "TLSv1.3 write server certificate verify";
    109  1.1  christos     case TLS_ST_CR_HELLO_REQ:
    110  1.1  christos         return "SSLv3/TLS read hello request";
    111  1.1  christos     case TLS_ST_SW_KEY_UPDATE:
    112  1.1  christos         return "TLSv1.3 write server key update";
    113  1.1  christos     case TLS_ST_CW_KEY_UPDATE:
    114  1.1  christos         return "TLSv1.3 write client key update";
    115  1.1  christos     case TLS_ST_SR_KEY_UPDATE:
    116  1.1  christos         return "TLSv1.3 read client key update";
    117  1.1  christos     case TLS_ST_CR_KEY_UPDATE:
    118  1.1  christos         return "TLSv1.3 read server key update";
    119  1.1  christos     case TLS_ST_EARLY_DATA:
    120  1.1  christos         return "TLSv1.3 early data";
    121  1.1  christos     case TLS_ST_PENDING_EARLY_DATA_END:
    122  1.1  christos         return "TLSv1.3 pending early data end";
    123  1.1  christos     case TLS_ST_CW_END_OF_EARLY_DATA:
    124  1.1  christos         return "TLSv1.3 write end of early data";
    125  1.1  christos     case TLS_ST_SR_END_OF_EARLY_DATA:
    126  1.1  christos         return "TLSv1.3 read end of early data";
    127  1.1  christos     default:
    128  1.1  christos         return "unknown state";
    129  1.1  christos     }
    130  1.1  christos }
    131  1.1  christos 
    132  1.1  christos const char *SSL_state_string(const SSL *s)
    133  1.1  christos {
    134  1.1  christos     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
    135  1.1  christos 
    136  1.1  christos     if (sc == NULL || ossl_statem_in_error(sc))
    137  1.1  christos         return "SSLERR";
    138  1.1  christos 
    139  1.1  christos     switch (SSL_get_state(s)) {
    140  1.1  christos     case TLS_ST_SR_NEXT_PROTO:
    141  1.1  christos         return "TRNP";
    142  1.1  christos     case TLS_ST_SW_SESSION_TICKET:
    143  1.1  christos         return "TWST";
    144  1.1  christos     case TLS_ST_SW_CERT_STATUS:
    145  1.1  christos         return "TWCS";
    146  1.1  christos     case TLS_ST_CR_CERT_STATUS:
    147  1.1  christos         return "TRCS";
    148  1.1  christos     case TLS_ST_CR_SESSION_TICKET:
    149  1.1  christos         return "TRST";
    150  1.1  christos     case TLS_ST_CW_NEXT_PROTO:
    151  1.1  christos         return "TWNP";
    152  1.1  christos     case TLS_ST_BEFORE:
    153  1.1  christos         return "PINIT";
    154  1.1  christos     case TLS_ST_OK:
    155  1.1  christos         return "SSLOK";
    156  1.1  christos     case TLS_ST_CW_CLNT_HELLO:
    157  1.1  christos         return "TWCH";
    158  1.1  christos     case TLS_ST_CR_SRVR_HELLO:
    159  1.1  christos         return "TRSH";
    160  1.1  christos     case TLS_ST_CR_CERT:
    161  1.1  christos         return "TRSC";
    162  1.1  christos     case TLS_ST_CR_COMP_CERT:
    163  1.1  christos         return "TRSCC";
    164  1.1  christos     case TLS_ST_CR_KEY_EXCH:
    165  1.1  christos         return "TRSKE";
    166  1.1  christos     case TLS_ST_CR_CERT_REQ:
    167  1.1  christos         return "TRCR";
    168  1.1  christos     case TLS_ST_CR_SRVR_DONE:
    169  1.1  christos         return "TRSD";
    170  1.1  christos     case TLS_ST_CW_CERT:
    171  1.1  christos         return "TWCC";
    172  1.1  christos     case TLS_ST_CW_COMP_CERT:
    173  1.1  christos         return "TWCCC";
    174  1.1  christos     case TLS_ST_CW_KEY_EXCH:
    175  1.1  christos         return "TWCKE";
    176  1.1  christos     case TLS_ST_CW_CERT_VRFY:
    177  1.1  christos         return "TWCV";
    178  1.1  christos     case TLS_ST_SW_CHANGE:
    179  1.1  christos     case TLS_ST_CW_CHANGE:
    180  1.1  christos         return "TWCCS";
    181  1.1  christos     case TLS_ST_SW_FINISHED:
    182  1.1  christos     case TLS_ST_CW_FINISHED:
    183  1.1  christos         return "TWFIN";
    184  1.1  christos     case TLS_ST_SR_CHANGE:
    185  1.1  christos     case TLS_ST_CR_CHANGE:
    186  1.1  christos         return "TRCCS";
    187  1.1  christos     case TLS_ST_SR_FINISHED:
    188  1.1  christos     case TLS_ST_CR_FINISHED:
    189  1.1  christos         return "TRFIN";
    190  1.1  christos     case TLS_ST_SW_HELLO_REQ:
    191  1.1  christos         return "TWHR";
    192  1.1  christos     case TLS_ST_SR_CLNT_HELLO:
    193  1.1  christos         return "TRCH";
    194  1.1  christos     case TLS_ST_SW_SRVR_HELLO:
    195  1.1  christos         return "TWSH";
    196  1.1  christos     case TLS_ST_SW_CERT:
    197  1.1  christos         return "TWSC";
    198  1.1  christos     case TLS_ST_SW_COMP_CERT:
    199  1.1  christos         return "TWSCC";
    200  1.1  christos     case TLS_ST_SW_KEY_EXCH:
    201  1.1  christos         return "TWSKE";
    202  1.1  christos     case TLS_ST_SW_CERT_REQ:
    203  1.1  christos         return "TWCR";
    204  1.1  christos     case TLS_ST_SW_SRVR_DONE:
    205  1.1  christos         return "TWSD";
    206  1.1  christos     case TLS_ST_SR_CERT:
    207  1.1  christos         return "TRCC";
    208  1.1  christos     case TLS_ST_SR_COMP_CERT:
    209  1.1  christos         return "TRCCC";
    210  1.1  christos     case TLS_ST_SR_KEY_EXCH:
    211  1.1  christos         return "TRCKE";
    212  1.1  christos     case TLS_ST_SR_CERT_VRFY:
    213  1.1  christos         return "TRCV";
    214  1.1  christos     case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
    215  1.1  christos         return "DRCHV";
    216  1.1  christos     case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
    217  1.1  christos         return "DWCHV";
    218  1.1  christos     case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
    219  1.1  christos         return "TWEE";
    220  1.1  christos     case TLS_ST_CR_ENCRYPTED_EXTENSIONS:
    221  1.1  christos         return "TREE";
    222  1.1  christos     case TLS_ST_CR_CERT_VRFY:
    223  1.1  christos         return "TRSCV";
    224  1.1  christos     case TLS_ST_SW_CERT_VRFY:
    225  1.1  christos         return "TWSCV";
    226  1.1  christos     case TLS_ST_CR_HELLO_REQ:
    227  1.1  christos         return "TRHR";
    228  1.1  christos     case TLS_ST_SW_KEY_UPDATE:
    229  1.1  christos         return "TWSKU";
    230  1.1  christos     case TLS_ST_CW_KEY_UPDATE:
    231  1.1  christos         return "TWCKU";
    232  1.1  christos     case TLS_ST_SR_KEY_UPDATE:
    233  1.1  christos         return "TRCKU";
    234  1.1  christos     case TLS_ST_CR_KEY_UPDATE:
    235  1.1  christos         return "TRSKU";
    236  1.1  christos     case TLS_ST_EARLY_DATA:
    237  1.1  christos         return "TED";
    238  1.1  christos     case TLS_ST_PENDING_EARLY_DATA_END:
    239  1.1  christos         return "TPEDE";
    240  1.1  christos     case TLS_ST_CW_END_OF_EARLY_DATA:
    241  1.1  christos         return "TWEOED";
    242  1.1  christos     case TLS_ST_SR_END_OF_EARLY_DATA:
    243  1.1  christos         return "TWEOED";
    244  1.1  christos     default:
    245  1.1  christos         return "UNKWN";
    246  1.1  christos     }
    247  1.1  christos }
    248  1.1  christos 
    249  1.1  christos const char *SSL_alert_type_string_long(int value)
    250  1.1  christos {
    251  1.1  christos     switch (value >> 8) {
    252  1.1  christos     case SSL3_AL_WARNING:
    253  1.1  christos         return "warning";
    254  1.1  christos     case SSL3_AL_FATAL:
    255  1.1  christos         return "fatal";
    256  1.1  christos     default:
    257  1.1  christos         return "unknown";
    258  1.1  christos     }
    259  1.1  christos }
    260  1.1  christos 
    261  1.1  christos const char *SSL_alert_type_string(int value)
    262  1.1  christos {
    263  1.1  christos     switch (value >> 8) {
    264  1.1  christos     case SSL3_AL_WARNING:
    265  1.1  christos         return "W";
    266  1.1  christos     case SSL3_AL_FATAL:
    267  1.1  christos         return "F";
    268  1.1  christos     default:
    269  1.1  christos         return "U";
    270  1.1  christos     }
    271  1.1  christos }
    272  1.1  christos 
    273  1.1  christos const char *SSL_alert_desc_string(int value)
    274  1.1  christos {
    275  1.1  christos     switch (value & 0xff) {
    276  1.1  christos     case SSL3_AD_CLOSE_NOTIFY:
    277  1.1  christos         return "CN";
    278  1.1  christos     case SSL3_AD_UNEXPECTED_MESSAGE:
    279  1.1  christos         return "UM";
    280  1.1  christos     case SSL3_AD_BAD_RECORD_MAC:
    281  1.1  christos         return "BM";
    282  1.1  christos     case SSL3_AD_DECOMPRESSION_FAILURE:
    283  1.1  christos         return "DF";
    284  1.1  christos     case SSL3_AD_HANDSHAKE_FAILURE:
    285  1.1  christos         return "HF";
    286  1.1  christos     case SSL3_AD_NO_CERTIFICATE:
    287  1.1  christos         return "NC";
    288  1.1  christos     case SSL3_AD_BAD_CERTIFICATE:
    289  1.1  christos         return "BC";
    290  1.1  christos     case SSL3_AD_UNSUPPORTED_CERTIFICATE:
    291  1.1  christos         return "UC";
    292  1.1  christos     case SSL3_AD_CERTIFICATE_REVOKED:
    293  1.1  christos         return "CR";
    294  1.1  christos     case SSL3_AD_CERTIFICATE_EXPIRED:
    295  1.1  christos         return "CE";
    296  1.1  christos     case SSL3_AD_CERTIFICATE_UNKNOWN:
    297  1.1  christos         return "CU";
    298  1.1  christos     case SSL3_AD_ILLEGAL_PARAMETER:
    299  1.1  christos         return "IP";
    300  1.1  christos     case TLS1_AD_DECRYPTION_FAILED:
    301  1.1  christos         return "DC";
    302  1.1  christos     case TLS1_AD_RECORD_OVERFLOW:
    303  1.1  christos         return "RO";
    304  1.1  christos     case TLS1_AD_UNKNOWN_CA:
    305  1.1  christos         return "CA";
    306  1.1  christos     case TLS1_AD_ACCESS_DENIED:
    307  1.1  christos         return "AD";
    308  1.1  christos     case TLS1_AD_DECODE_ERROR:
    309  1.1  christos         return "DE";
    310  1.1  christos     case TLS1_AD_DECRYPT_ERROR:
    311  1.1  christos         return "CY";
    312  1.1  christos     case TLS1_AD_EXPORT_RESTRICTION:
    313  1.1  christos         return "ER";
    314  1.1  christos     case TLS1_AD_PROTOCOL_VERSION:
    315  1.1  christos         return "PV";
    316  1.1  christos     case TLS1_AD_INSUFFICIENT_SECURITY:
    317  1.1  christos         return "IS";
    318  1.1  christos     case TLS1_AD_INTERNAL_ERROR:
    319  1.1  christos         return "IE";
    320  1.1  christos     case TLS1_AD_USER_CANCELLED:
    321  1.1  christos         return "US";
    322  1.1  christos     case TLS1_AD_NO_RENEGOTIATION:
    323  1.1  christos         return "NR";
    324  1.1  christos     case TLS1_AD_UNSUPPORTED_EXTENSION:
    325  1.1  christos         return "UE";
    326  1.1  christos     case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
    327  1.1  christos         return "CO";
    328  1.1  christos     case TLS1_AD_UNRECOGNIZED_NAME:
    329  1.1  christos         return "UN";
    330  1.1  christos     case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
    331  1.1  christos         return "BR";
    332  1.1  christos     case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
    333  1.1  christos         return "BH";
    334  1.1  christos     case TLS1_AD_UNKNOWN_PSK_IDENTITY:
    335  1.1  christos         return "UP";
    336  1.1  christos     default:
    337  1.1  christos         return "UK";
    338  1.1  christos     }
    339  1.1  christos }
    340  1.1  christos 
    341  1.1  christos const char *SSL_alert_desc_string_long(int value)
    342  1.1  christos {
    343  1.1  christos     switch (value & 0xff) {
    344  1.1  christos     case SSL3_AD_CLOSE_NOTIFY:
    345  1.1  christos         return "close notify";
    346  1.1  christos     case SSL3_AD_UNEXPECTED_MESSAGE:
    347  1.1  christos         return "unexpected message";
    348  1.1  christos     case SSL3_AD_BAD_RECORD_MAC:
    349  1.1  christos         return "bad record mac";
    350  1.1  christos     case SSL3_AD_DECOMPRESSION_FAILURE:
    351  1.1  christos         return "decompression failure";
    352  1.1  christos     case SSL3_AD_HANDSHAKE_FAILURE:
    353  1.1  christos         return "handshake failure";
    354  1.1  christos     case SSL3_AD_NO_CERTIFICATE:
    355  1.1  christos         return "no certificate";
    356  1.1  christos     case SSL3_AD_BAD_CERTIFICATE:
    357  1.1  christos         return "bad certificate";
    358  1.1  christos     case SSL3_AD_UNSUPPORTED_CERTIFICATE:
    359  1.1  christos         return "unsupported certificate";
    360  1.1  christos     case SSL3_AD_CERTIFICATE_REVOKED:
    361  1.1  christos         return "certificate revoked";
    362  1.1  christos     case SSL3_AD_CERTIFICATE_EXPIRED:
    363  1.1  christos         return "certificate expired";
    364  1.1  christos     case SSL3_AD_CERTIFICATE_UNKNOWN:
    365  1.1  christos         return "certificate unknown";
    366  1.1  christos     case SSL3_AD_ILLEGAL_PARAMETER:
    367  1.1  christos         return "illegal parameter";
    368  1.1  christos     case TLS1_AD_DECRYPTION_FAILED:
    369  1.1  christos         return "decryption failed";
    370  1.1  christos     case TLS1_AD_RECORD_OVERFLOW:
    371  1.1  christos         return "record overflow";
    372  1.1  christos     case TLS1_AD_UNKNOWN_CA:
    373  1.1  christos         return "unknown CA";
    374  1.1  christos     case TLS1_AD_ACCESS_DENIED:
    375  1.1  christos         return "access denied";
    376  1.1  christos     case TLS1_AD_DECODE_ERROR:
    377  1.1  christos         return "decode error";
    378  1.1  christos     case TLS1_AD_DECRYPT_ERROR:
    379  1.1  christos         return "decrypt error";
    380  1.1  christos     case TLS1_AD_EXPORT_RESTRICTION:
    381  1.1  christos         return "export restriction";
    382  1.1  christos     case TLS1_AD_PROTOCOL_VERSION:
    383  1.1  christos         return "protocol version";
    384  1.1  christos     case TLS1_AD_INSUFFICIENT_SECURITY:
    385  1.1  christos         return "insufficient security";
    386  1.1  christos     case TLS1_AD_INTERNAL_ERROR:
    387  1.1  christos         return "internal error";
    388  1.1  christos     case TLS1_AD_USER_CANCELLED:
    389  1.1  christos         return "user canceled";
    390  1.1  christos     case TLS1_AD_NO_RENEGOTIATION:
    391  1.1  christos         return "no renegotiation";
    392  1.1  christos     case TLS1_AD_UNSUPPORTED_EXTENSION:
    393  1.1  christos         return "unsupported extension";
    394  1.1  christos     case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
    395  1.1  christos         return "certificate unobtainable";
    396  1.1  christos     case TLS1_AD_UNRECOGNIZED_NAME:
    397  1.1  christos         return "unrecognized name";
    398  1.1  christos     case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
    399  1.1  christos         return "bad certificate status response";
    400  1.1  christos     case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
    401  1.1  christos         return "bad certificate hash value";
    402  1.1  christos     case TLS1_AD_UNKNOWN_PSK_IDENTITY:
    403  1.1  christos         return "unknown PSK identity";
    404  1.1  christos     case TLS1_AD_NO_APPLICATION_PROTOCOL:
    405  1.1  christos         return "no application protocol";
    406  1.1  christos     default:
    407  1.1  christos         return "unknown";
    408  1.1  christos     }
    409  1.1  christos }
    410