1 1.1 spz /* 2 1.1.1.8 christos * Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved. 3 1.1 spz * 4 1.1.1.8 christos * Licensed under the Apache License 2.0 (the "License"). You may not use 5 1.1.1.2 christos * this file except in compliance with the License. You can obtain a copy 6 1.1.1.2 christos * in the file LICENSE in the source distribution or at 7 1.1.1.2 christos * https://www.openssl.org/source/license.html 8 1.1 spz */ 9 1.1 spz 10 1.1.1.6 christos #include "ssl_local.h" 11 1.1 spz 12 1.1 spz #ifndef OPENSSL_NO_SSL_TRACE 13 1.1 spz 14 1.1 spz /* Packet trace support for OpenSSL */ 15 1.1 spz 16 1.1 spz typedef struct { 17 1.1 spz int num; 18 1.1 spz const char *name; 19 1.1 spz } ssl_trace_tbl; 20 1.1 spz 21 1.1 spz # define ssl_trace_str(val, tbl) \ 22 1.1.1.5 christos do_ssl_trace_str(val, tbl, OSSL_NELEM(tbl)) 23 1.1 spz 24 1.1 spz # define ssl_trace_list(bio, indent, msg, msglen, value, table) \ 25 1.1.1.5 christos do_ssl_trace_list(bio, indent, msg, msglen, value, \ 26 1.1.1.5 christos table, OSSL_NELEM(table)) 27 1.1 spz 28 1.1.1.5 christos static const char *do_ssl_trace_str(int val, const ssl_trace_tbl *tbl, 29 1.1.1.5 christos size_t ntbl) 30 1.1 spz { 31 1.1 spz size_t i; 32 1.1.1.5 christos 33 1.1 spz for (i = 0; i < ntbl; i++, tbl++) { 34 1.1 spz if (tbl->num == val) 35 1.1 spz return tbl->name; 36 1.1 spz } 37 1.1 spz return "UNKNOWN"; 38 1.1 spz } 39 1.1 spz 40 1.1 spz static int do_ssl_trace_list(BIO *bio, int indent, 41 1.1 spz const unsigned char *msg, size_t msglen, 42 1.1.1.5 christos size_t vlen, const ssl_trace_tbl *tbl, size_t ntbl) 43 1.1 spz { 44 1.1 spz int val; 45 1.1.1.5 christos 46 1.1 spz if (msglen % vlen) 47 1.1 spz return 0; 48 1.1 spz while (msglen) { 49 1.1 spz val = msg[0]; 50 1.1 spz if (vlen == 2) 51 1.1 spz val = (val << 8) | msg[1]; 52 1.1 spz BIO_indent(bio, indent, 80); 53 1.1 spz BIO_printf(bio, "%s (%d)\n", do_ssl_trace_str(val, tbl, ntbl), val); 54 1.1 spz msg += vlen; 55 1.1 spz msglen -= vlen; 56 1.1 spz } 57 1.1 spz return 1; 58 1.1 spz } 59 1.1 spz 60 1.1 spz /* Version number */ 61 1.1 spz 62 1.1.1.5 christos static const ssl_trace_tbl ssl_version_tbl[] = { 63 1.1 spz {SSL3_VERSION, "SSL 3.0"}, 64 1.1 spz {TLS1_VERSION, "TLS 1.0"}, 65 1.1 spz {TLS1_1_VERSION, "TLS 1.1"}, 66 1.1 spz {TLS1_2_VERSION, "TLS 1.2"}, 67 1.1.1.5 christos {TLS1_3_VERSION, "TLS 1.3"}, 68 1.1 spz {DTLS1_VERSION, "DTLS 1.0"}, 69 1.1 spz {DTLS1_2_VERSION, "DTLS 1.2"}, 70 1.1 spz {DTLS1_BAD_VER, "DTLS 1.0 (bad)"} 71 1.1 spz }; 72 1.1 spz 73 1.1.1.5 christos static const ssl_trace_tbl ssl_content_tbl[] = { 74 1.1 spz {SSL3_RT_CHANGE_CIPHER_SPEC, "ChangeCipherSpec"}, 75 1.1 spz {SSL3_RT_ALERT, "Alert"}, 76 1.1 spz {SSL3_RT_HANDSHAKE, "Handshake"}, 77 1.1 spz {SSL3_RT_APPLICATION_DATA, "ApplicationData"}, 78 1.1 spz }; 79 1.1 spz 80 1.1.1.5 christos /* Handshake types, sorted by ascending id */ 81 1.1.1.5 christos static const ssl_trace_tbl ssl_handshake_tbl[] = { 82 1.1 spz {SSL3_MT_HELLO_REQUEST, "HelloRequest"}, 83 1.1 spz {SSL3_MT_CLIENT_HELLO, "ClientHello"}, 84 1.1 spz {SSL3_MT_SERVER_HELLO, "ServerHello"}, 85 1.1 spz {DTLS1_MT_HELLO_VERIFY_REQUEST, "HelloVerifyRequest"}, 86 1.1 spz {SSL3_MT_NEWSESSION_TICKET, "NewSessionTicket"}, 87 1.1.1.5 christos {SSL3_MT_END_OF_EARLY_DATA, "EndOfEarlyData"}, 88 1.1.1.5 christos {SSL3_MT_ENCRYPTED_EXTENSIONS, "EncryptedExtensions"}, 89 1.1 spz {SSL3_MT_CERTIFICATE, "Certificate"}, 90 1.1 spz {SSL3_MT_SERVER_KEY_EXCHANGE, "ServerKeyExchange"}, 91 1.1 spz {SSL3_MT_CERTIFICATE_REQUEST, "CertificateRequest"}, 92 1.1 spz {SSL3_MT_SERVER_DONE, "ServerHelloDone"}, 93 1.1 spz {SSL3_MT_CERTIFICATE_VERIFY, "CertificateVerify"}, 94 1.1 spz {SSL3_MT_CLIENT_KEY_EXCHANGE, "ClientKeyExchange"}, 95 1.1 spz {SSL3_MT_FINISHED, "Finished"}, 96 1.1.1.5 christos {SSL3_MT_CERTIFICATE_URL, "CertificateUrl"}, 97 1.1.1.5 christos {SSL3_MT_CERTIFICATE_STATUS, "CertificateStatus"}, 98 1.1.1.5 christos {SSL3_MT_SUPPLEMENTAL_DATA, "SupplementalData"}, 99 1.1.1.5 christos {SSL3_MT_KEY_UPDATE, "KeyUpdate"}, 100 1.1.1.5 christos # ifndef OPENSSL_NO_NEXTPROTONEG 101 1.1.1.5 christos {SSL3_MT_NEXT_PROTO, "NextProto"}, 102 1.1.1.5 christos # endif 103 1.1.1.5 christos {SSL3_MT_MESSAGE_HASH, "MessageHash"} 104 1.1 spz }; 105 1.1 spz 106 1.1 spz /* Cipher suites */ 107 1.1.1.5 christos static const ssl_trace_tbl ssl_ciphers_tbl[] = { 108 1.1.1.5 christos {0x0000, "TLS_NULL_WITH_NULL_NULL"}, 109 1.1.1.5 christos {0x0001, "TLS_RSA_WITH_NULL_MD5"}, 110 1.1.1.5 christos {0x0002, "TLS_RSA_WITH_NULL_SHA"}, 111 1.1.1.5 christos {0x0003, "TLS_RSA_EXPORT_WITH_RC4_40_MD5"}, 112 1.1.1.5 christos {0x0004, "TLS_RSA_WITH_RC4_128_MD5"}, 113 1.1.1.5 christos {0x0005, "TLS_RSA_WITH_RC4_128_SHA"}, 114 1.1.1.5 christos {0x0006, "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"}, 115 1.1.1.5 christos {0x0007, "TLS_RSA_WITH_IDEA_CBC_SHA"}, 116 1.1.1.5 christos {0x0008, "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 117 1.1.1.5 christos {0x0009, "TLS_RSA_WITH_DES_CBC_SHA"}, 118 1.1.1.5 christos {0x000A, "TLS_RSA_WITH_3DES_EDE_CBC_SHA"}, 119 1.1.1.5 christos {0x000B, "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"}, 120 1.1.1.5 christos {0x000C, "TLS_DH_DSS_WITH_DES_CBC_SHA"}, 121 1.1.1.5 christos {0x000D, "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"}, 122 1.1.1.5 christos {0x000E, "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 123 1.1.1.5 christos {0x000F, "TLS_DH_RSA_WITH_DES_CBC_SHA"}, 124 1.1.1.5 christos {0x0010, "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"}, 125 1.1.1.5 christos {0x0011, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"}, 126 1.1.1.5 christos {0x0012, "TLS_DHE_DSS_WITH_DES_CBC_SHA"}, 127 1.1.1.5 christos {0x0013, "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"}, 128 1.1.1.5 christos {0x0014, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 129 1.1.1.5 christos {0x0015, "TLS_DHE_RSA_WITH_DES_CBC_SHA"}, 130 1.1.1.5 christos {0x0016, "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"}, 131 1.1.1.5 christos {0x0017, "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"}, 132 1.1.1.5 christos {0x0018, "TLS_DH_anon_WITH_RC4_128_MD5"}, 133 1.1.1.5 christos {0x0019, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"}, 134 1.1.1.5 christos {0x001A, "TLS_DH_anon_WITH_DES_CBC_SHA"}, 135 1.1.1.5 christos {0x001B, "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"}, 136 1.1 spz {0x001D, "SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA"}, 137 1.1 spz {0x001E, "SSL_FORTEZZA_KEA_WITH_RC4_128_SHA"}, 138 1.1 spz {0x001F, "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"}, 139 1.1 spz {0x0020, "TLS_KRB5_WITH_RC4_128_SHA"}, 140 1.1 spz {0x0021, "TLS_KRB5_WITH_IDEA_CBC_SHA"}, 141 1.1 spz {0x0022, "TLS_KRB5_WITH_DES_CBC_MD5"}, 142 1.1 spz {0x0023, "TLS_KRB5_WITH_3DES_EDE_CBC_MD5"}, 143 1.1 spz {0x0024, "TLS_KRB5_WITH_RC4_128_MD5"}, 144 1.1 spz {0x0025, "TLS_KRB5_WITH_IDEA_CBC_MD5"}, 145 1.1 spz {0x0026, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"}, 146 1.1 spz {0x0027, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"}, 147 1.1 spz {0x0028, "TLS_KRB5_EXPORT_WITH_RC4_40_SHA"}, 148 1.1 spz {0x0029, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"}, 149 1.1 spz {0x002A, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"}, 150 1.1 spz {0x002B, "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"}, 151 1.1.1.2 christos {0x002C, "TLS_PSK_WITH_NULL_SHA"}, 152 1.1.1.2 christos {0x002D, "TLS_DHE_PSK_WITH_NULL_SHA"}, 153 1.1.1.2 christos {0x002E, "TLS_RSA_PSK_WITH_NULL_SHA"}, 154 1.1 spz {0x002F, "TLS_RSA_WITH_AES_128_CBC_SHA"}, 155 1.1 spz {0x0030, "TLS_DH_DSS_WITH_AES_128_CBC_SHA"}, 156 1.1 spz {0x0031, "TLS_DH_RSA_WITH_AES_128_CBC_SHA"}, 157 1.1 spz {0x0032, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"}, 158 1.1 spz {0x0033, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"}, 159 1.1 spz {0x0034, "TLS_DH_anon_WITH_AES_128_CBC_SHA"}, 160 1.1 spz {0x0035, "TLS_RSA_WITH_AES_256_CBC_SHA"}, 161 1.1 spz {0x0036, "TLS_DH_DSS_WITH_AES_256_CBC_SHA"}, 162 1.1 spz {0x0037, "TLS_DH_RSA_WITH_AES_256_CBC_SHA"}, 163 1.1 spz {0x0038, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"}, 164 1.1 spz {0x0039, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"}, 165 1.1 spz {0x003A, "TLS_DH_anon_WITH_AES_256_CBC_SHA"}, 166 1.1 spz {0x003B, "TLS_RSA_WITH_NULL_SHA256"}, 167 1.1 spz {0x003C, "TLS_RSA_WITH_AES_128_CBC_SHA256"}, 168 1.1 spz {0x003D, "TLS_RSA_WITH_AES_256_CBC_SHA256"}, 169 1.1 spz {0x003E, "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"}, 170 1.1 spz {0x003F, "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"}, 171 1.1 spz {0x0040, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"}, 172 1.1 spz {0x0041, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"}, 173 1.1 spz {0x0042, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA"}, 174 1.1 spz {0x0043, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA"}, 175 1.1 spz {0x0044, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA"}, 176 1.1 spz {0x0045, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA"}, 177 1.1 spz {0x0046, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"}, 178 1.1 spz {0x0067, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"}, 179 1.1 spz {0x0068, "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"}, 180 1.1 spz {0x0069, "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"}, 181 1.1 spz {0x006A, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"}, 182 1.1 spz {0x006B, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"}, 183 1.1 spz {0x006C, "TLS_DH_anon_WITH_AES_128_CBC_SHA256"}, 184 1.1 spz {0x006D, "TLS_DH_anon_WITH_AES_256_CBC_SHA256"}, 185 1.1.1.5 christos {0x0081, "TLS_GOSTR341001_WITH_28147_CNT_IMIT"}, 186 1.1.1.5 christos {0x0083, "TLS_GOSTR341001_WITH_NULL_GOSTR3411"}, 187 1.1 spz {0x0084, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA"}, 188 1.1 spz {0x0085, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA"}, 189 1.1 spz {0x0086, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA"}, 190 1.1 spz {0x0087, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA"}, 191 1.1 spz {0x0088, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA"}, 192 1.1 spz {0x0089, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"}, 193 1.1 spz {0x008A, "TLS_PSK_WITH_RC4_128_SHA"}, 194 1.1 spz {0x008B, "TLS_PSK_WITH_3DES_EDE_CBC_SHA"}, 195 1.1 spz {0x008C, "TLS_PSK_WITH_AES_128_CBC_SHA"}, 196 1.1 spz {0x008D, "TLS_PSK_WITH_AES_256_CBC_SHA"}, 197 1.1 spz {0x008E, "TLS_DHE_PSK_WITH_RC4_128_SHA"}, 198 1.1 spz {0x008F, "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"}, 199 1.1 spz {0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA"}, 200 1.1 spz {0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA"}, 201 1.1 spz {0x0092, "TLS_RSA_PSK_WITH_RC4_128_SHA"}, 202 1.1 spz {0x0093, "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"}, 203 1.1 spz {0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"}, 204 1.1 spz {0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"}, 205 1.1 spz {0x0096, "TLS_RSA_WITH_SEED_CBC_SHA"}, 206 1.1 spz {0x0097, "TLS_DH_DSS_WITH_SEED_CBC_SHA"}, 207 1.1 spz {0x0098, "TLS_DH_RSA_WITH_SEED_CBC_SHA"}, 208 1.1 spz {0x0099, "TLS_DHE_DSS_WITH_SEED_CBC_SHA"}, 209 1.1 spz {0x009A, "TLS_DHE_RSA_WITH_SEED_CBC_SHA"}, 210 1.1 spz {0x009B, "TLS_DH_anon_WITH_SEED_CBC_SHA"}, 211 1.1 spz {0x009C, "TLS_RSA_WITH_AES_128_GCM_SHA256"}, 212 1.1 spz {0x009D, "TLS_RSA_WITH_AES_256_GCM_SHA384"}, 213 1.1 spz {0x009E, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"}, 214 1.1 spz {0x009F, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"}, 215 1.1 spz {0x00A0, "TLS_DH_RSA_WITH_AES_128_GCM_SHA256"}, 216 1.1 spz {0x00A1, "TLS_DH_RSA_WITH_AES_256_GCM_SHA384"}, 217 1.1 spz {0x00A2, "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"}, 218 1.1 spz {0x00A3, "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"}, 219 1.1 spz {0x00A4, "TLS_DH_DSS_WITH_AES_128_GCM_SHA256"}, 220 1.1 spz {0x00A5, "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"}, 221 1.1 spz {0x00A6, "TLS_DH_anon_WITH_AES_128_GCM_SHA256"}, 222 1.1 spz {0x00A7, "TLS_DH_anon_WITH_AES_256_GCM_SHA384"}, 223 1.1 spz {0x00A8, "TLS_PSK_WITH_AES_128_GCM_SHA256"}, 224 1.1 spz {0x00A9, "TLS_PSK_WITH_AES_256_GCM_SHA384"}, 225 1.1 spz {0x00AA, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"}, 226 1.1 spz {0x00AB, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"}, 227 1.1 spz {0x00AC, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"}, 228 1.1 spz {0x00AD, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"}, 229 1.1 spz {0x00AE, "TLS_PSK_WITH_AES_128_CBC_SHA256"}, 230 1.1 spz {0x00AF, "TLS_PSK_WITH_AES_256_CBC_SHA384"}, 231 1.1 spz {0x00B0, "TLS_PSK_WITH_NULL_SHA256"}, 232 1.1 spz {0x00B1, "TLS_PSK_WITH_NULL_SHA384"}, 233 1.1 spz {0x00B2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"}, 234 1.1 spz {0x00B3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"}, 235 1.1 spz {0x00B4, "TLS_DHE_PSK_WITH_NULL_SHA256"}, 236 1.1 spz {0x00B5, "TLS_DHE_PSK_WITH_NULL_SHA384"}, 237 1.1 spz {0x00B6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"}, 238 1.1 spz {0x00B7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"}, 239 1.1 spz {0x00B8, "TLS_RSA_PSK_WITH_NULL_SHA256"}, 240 1.1 spz {0x00B9, "TLS_RSA_PSK_WITH_NULL_SHA384"}, 241 1.1 spz {0x00BA, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 242 1.1 spz {0x00BB, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"}, 243 1.1 spz {0x00BC, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 244 1.1 spz {0x00BD, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256"}, 245 1.1 spz {0x00BE, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 246 1.1 spz {0x00BF, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"}, 247 1.1 spz {0x00C0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"}, 248 1.1 spz {0x00C1, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"}, 249 1.1 spz {0x00C2, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"}, 250 1.1 spz {0x00C3, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256"}, 251 1.1 spz {0x00C4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256"}, 252 1.1 spz {0x00C5, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"}, 253 1.1 spz {0x00FF, "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"}, 254 1.1.1.2 christos {0x5600, "TLS_FALLBACK_SCSV"}, 255 1.1 spz {0xC001, "TLS_ECDH_ECDSA_WITH_NULL_SHA"}, 256 1.1 spz {0xC002, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"}, 257 1.1 spz {0xC003, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"}, 258 1.1 spz {0xC004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"}, 259 1.1 spz {0xC005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"}, 260 1.1 spz {0xC006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA"}, 261 1.1 spz {0xC007, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"}, 262 1.1 spz {0xC008, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"}, 263 1.1 spz {0xC009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"}, 264 1.1 spz {0xC00A, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"}, 265 1.1 spz {0xC00B, "TLS_ECDH_RSA_WITH_NULL_SHA"}, 266 1.1 spz {0xC00C, "TLS_ECDH_RSA_WITH_RC4_128_SHA"}, 267 1.1 spz {0xC00D, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"}, 268 1.1 spz {0xC00E, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"}, 269 1.1 spz {0xC00F, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"}, 270 1.1 spz {0xC010, "TLS_ECDHE_RSA_WITH_NULL_SHA"}, 271 1.1 spz {0xC011, "TLS_ECDHE_RSA_WITH_RC4_128_SHA"}, 272 1.1 spz {0xC012, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"}, 273 1.1 spz {0xC013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"}, 274 1.1 spz {0xC014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"}, 275 1.1 spz {0xC015, "TLS_ECDH_anon_WITH_NULL_SHA"}, 276 1.1 spz {0xC016, "TLS_ECDH_anon_WITH_RC4_128_SHA"}, 277 1.1 spz {0xC017, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"}, 278 1.1 spz {0xC018, "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"}, 279 1.1 spz {0xC019, "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"}, 280 1.1 spz {0xC01A, "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA"}, 281 1.1 spz {0xC01B, "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA"}, 282 1.1 spz {0xC01C, "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA"}, 283 1.1 spz {0xC01D, "TLS_SRP_SHA_WITH_AES_128_CBC_SHA"}, 284 1.1 spz {0xC01E, "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA"}, 285 1.1 spz {0xC01F, "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA"}, 286 1.1 spz {0xC020, "TLS_SRP_SHA_WITH_AES_256_CBC_SHA"}, 287 1.1 spz {0xC021, "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA"}, 288 1.1 spz {0xC022, "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA"}, 289 1.1 spz {0xC023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"}, 290 1.1 spz {0xC024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"}, 291 1.1 spz {0xC025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"}, 292 1.1 spz {0xC026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"}, 293 1.1 spz {0xC027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"}, 294 1.1 spz {0xC028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"}, 295 1.1 spz {0xC029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"}, 296 1.1 spz {0xC02A, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"}, 297 1.1 spz {0xC02B, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"}, 298 1.1 spz {0xC02C, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"}, 299 1.1 spz {0xC02D, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"}, 300 1.1 spz {0xC02E, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"}, 301 1.1 spz {0xC02F, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"}, 302 1.1 spz {0xC030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"}, 303 1.1 spz {0xC031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"}, 304 1.1 spz {0xC032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"}, 305 1.1.1.2 christos {0xC033, "TLS_ECDHE_PSK_WITH_RC4_128_SHA"}, 306 1.1.1.2 christos {0xC034, "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA"}, 307 1.1.1.2 christos {0xC035, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA"}, 308 1.1.1.2 christos {0xC036, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA"}, 309 1.1.1.2 christos {0xC037, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256"}, 310 1.1.1.2 christos {0xC038, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384"}, 311 1.1.1.2 christos {0xC039, "TLS_ECDHE_PSK_WITH_NULL_SHA"}, 312 1.1.1.2 christos {0xC03A, "TLS_ECDHE_PSK_WITH_NULL_SHA256"}, 313 1.1.1.2 christos {0xC03B, "TLS_ECDHE_PSK_WITH_NULL_SHA384"}, 314 1.1.1.2 christos {0xC03C, "TLS_RSA_WITH_ARIA_128_CBC_SHA256"}, 315 1.1.1.2 christos {0xC03D, "TLS_RSA_WITH_ARIA_256_CBC_SHA384"}, 316 1.1.1.2 christos {0xC03E, "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"}, 317 1.1.1.2 christos {0xC03F, "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"}, 318 1.1.1.2 christos {0xC040, "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"}, 319 1.1.1.2 christos {0xC041, "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"}, 320 1.1.1.2 christos {0xC042, "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256"}, 321 1.1.1.2 christos {0xC043, "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384"}, 322 1.1.1.2 christos {0xC044, "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256"}, 323 1.1.1.2 christos {0xC045, "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384"}, 324 1.1.1.2 christos {0xC046, "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"}, 325 1.1.1.2 christos {0xC047, "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"}, 326 1.1.1.2 christos {0xC048, "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256"}, 327 1.1.1.2 christos {0xC049, "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384"}, 328 1.1.1.2 christos {0xC04A, "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256"}, 329 1.1.1.2 christos {0xC04B, "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384"}, 330 1.1.1.2 christos {0xC04C, "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256"}, 331 1.1.1.2 christos {0xC04D, "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384"}, 332 1.1.1.2 christos {0xC04E, "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256"}, 333 1.1.1.2 christos {0xC04F, "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384"}, 334 1.1.1.2 christos {0xC050, "TLS_RSA_WITH_ARIA_128_GCM_SHA256"}, 335 1.1.1.2 christos {0xC051, "TLS_RSA_WITH_ARIA_256_GCM_SHA384"}, 336 1.1.1.2 christos {0xC052, "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256"}, 337 1.1.1.2 christos {0xC053, "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384"}, 338 1.1.1.2 christos {0xC054, "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"}, 339 1.1.1.2 christos {0xC055, "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"}, 340 1.1.1.2 christos {0xC056, "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256"}, 341 1.1.1.2 christos {0xC057, "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384"}, 342 1.1.1.2 christos {0xC058, "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"}, 343 1.1.1.2 christos {0xC059, "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"}, 344 1.1.1.2 christos {0xC05A, "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"}, 345 1.1.1.2 christos {0xC05B, "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"}, 346 1.1.1.2 christos {0xC05C, "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256"}, 347 1.1.1.2 christos {0xC05D, "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384"}, 348 1.1.1.2 christos {0xC05E, "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256"}, 349 1.1.1.2 christos {0xC05F, "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384"}, 350 1.1.1.2 christos {0xC060, "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256"}, 351 1.1.1.2 christos {0xC061, "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384"}, 352 1.1.1.2 christos {0xC062, "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256"}, 353 1.1.1.2 christos {0xC063, "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384"}, 354 1.1.1.2 christos {0xC064, "TLS_PSK_WITH_ARIA_128_CBC_SHA256"}, 355 1.1.1.2 christos {0xC065, "TLS_PSK_WITH_ARIA_256_CBC_SHA384"}, 356 1.1.1.2 christos {0xC066, "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256"}, 357 1.1.1.2 christos {0xC067, "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384"}, 358 1.1.1.2 christos {0xC068, "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"}, 359 1.1.1.2 christos {0xC069, "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"}, 360 1.1.1.2 christos {0xC06A, "TLS_PSK_WITH_ARIA_128_GCM_SHA256"}, 361 1.1.1.2 christos {0xC06B, "TLS_PSK_WITH_ARIA_256_GCM_SHA384"}, 362 1.1.1.2 christos {0xC06C, "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256"}, 363 1.1.1.2 christos {0xC06D, "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384"}, 364 1.1.1.2 christos {0xC06E, "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"}, 365 1.1.1.2 christos {0xC06F, "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"}, 366 1.1.1.2 christos {0xC070, "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256"}, 367 1.1.1.2 christos {0xC071, "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384"}, 368 1.1.1.2 christos {0xC072, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"}, 369 1.1.1.2 christos {0xC073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"}, 370 1.1.1.2 christos {0xC074, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"}, 371 1.1.1.2 christos {0xC075, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"}, 372 1.1.1.2 christos {0xC076, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 373 1.1.1.2 christos {0xC077, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384"}, 374 1.1.1.2 christos {0xC078, "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 375 1.1.1.2 christos {0xC079, "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384"}, 376 1.1.1.2 christos {0xC07A, "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 377 1.1.1.2 christos {0xC07B, "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 378 1.1.1.2 christos {0xC07C, "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 379 1.1.1.2 christos {0xC07D, "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 380 1.1.1.2 christos {0xC07E, "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 381 1.1.1.2 christos {0xC07F, "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 382 1.1.1.2 christos {0xC080, "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256"}, 383 1.1.1.2 christos {0xC081, "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384"}, 384 1.1.1.2 christos {0xC082, "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"}, 385 1.1.1.2 christos {0xC083, "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"}, 386 1.1.1.2 christos {0xC084, "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"}, 387 1.1.1.2 christos {0xC085, "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"}, 388 1.1.1.2 christos {0xC086, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"}, 389 1.1.1.2 christos {0xC087, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"}, 390 1.1.1.2 christos {0xC088, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"}, 391 1.1.1.2 christos {0xC089, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"}, 392 1.1.1.2 christos {0xC08A, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 393 1.1.1.2 christos {0xC08B, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 394 1.1.1.2 christos {0xC08C, "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 395 1.1.1.2 christos {0xC08D, "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 396 1.1.1.2 christos {0xC08E, "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"}, 397 1.1.1.2 christos {0xC08F, "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"}, 398 1.1.1.2 christos {0xC090, "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256"}, 399 1.1.1.2 christos {0xC091, "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384"}, 400 1.1.1.2 christos {0xC092, "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"}, 401 1.1.1.2 christos {0xC093, "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"}, 402 1.1.1.2 christos {0xC094, "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, 403 1.1.1.2 christos {0xC095, "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, 404 1.1.1.2 christos {0xC096, "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, 405 1.1.1.2 christos {0xC097, "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, 406 1.1.1.2 christos {0xC098, "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, 407 1.1.1.2 christos {0xC099, "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, 408 1.1.1.2 christos {0xC09A, "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, 409 1.1.1.2 christos {0xC09B, "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, 410 1.1.1.2 christos {0xC09C, "TLS_RSA_WITH_AES_128_CCM"}, 411 1.1.1.2 christos {0xC09D, "TLS_RSA_WITH_AES_256_CCM"}, 412 1.1.1.2 christos {0xC09E, "TLS_DHE_RSA_WITH_AES_128_CCM"}, 413 1.1.1.2 christos {0xC09F, "TLS_DHE_RSA_WITH_AES_256_CCM"}, 414 1.1.1.2 christos {0xC0A0, "TLS_RSA_WITH_AES_128_CCM_8"}, 415 1.1.1.2 christos {0xC0A1, "TLS_RSA_WITH_AES_256_CCM_8"}, 416 1.1.1.2 christos {0xC0A2, "TLS_DHE_RSA_WITH_AES_128_CCM_8"}, 417 1.1.1.2 christos {0xC0A3, "TLS_DHE_RSA_WITH_AES_256_CCM_8"}, 418 1.1.1.2 christos {0xC0A4, "TLS_PSK_WITH_AES_128_CCM"}, 419 1.1.1.2 christos {0xC0A5, "TLS_PSK_WITH_AES_256_CCM"}, 420 1.1.1.2 christos {0xC0A6, "TLS_DHE_PSK_WITH_AES_128_CCM"}, 421 1.1.1.2 christos {0xC0A7, "TLS_DHE_PSK_WITH_AES_256_CCM"}, 422 1.1.1.2 christos {0xC0A8, "TLS_PSK_WITH_AES_128_CCM_8"}, 423 1.1.1.2 christos {0xC0A9, "TLS_PSK_WITH_AES_256_CCM_8"}, 424 1.1.1.2 christos {0xC0AA, "TLS_PSK_DHE_WITH_AES_128_CCM_8"}, 425 1.1.1.2 christos {0xC0AB, "TLS_PSK_DHE_WITH_AES_256_CCM_8"}, 426 1.1.1.2 christos {0xC0AC, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM"}, 427 1.1.1.2 christos {0xC0AD, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM"}, 428 1.1.1.2 christos {0xC0AE, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8"}, 429 1.1.1.2 christos {0xC0AF, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8"}, 430 1.1.1.8 christos {0xC102, "IANA-GOST2012-GOST8912-GOST8912"}, 431 1.1.1.2 christos {0xCCA8, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"}, 432 1.1.1.2 christos {0xCCA9, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"}, 433 1.1.1.2 christos {0xCCAA, "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256"}, 434 1.1.1.2 christos {0xCCAB, "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256"}, 435 1.1.1.2 christos {0xCCAC, "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256"}, 436 1.1.1.2 christos {0xCCAD, "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256"}, 437 1.1.1.2 christos {0xCCAE, "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256"}, 438 1.1.1.5 christos {0x1301, "TLS_AES_128_GCM_SHA256"}, 439 1.1.1.5 christos {0x1302, "TLS_AES_256_GCM_SHA384"}, 440 1.1.1.5 christos {0x1303, "TLS_CHACHA20_POLY1305_SHA256"}, 441 1.1.1.5 christos {0x1304, "TLS_AES_128_CCM_SHA256"}, 442 1.1.1.5 christos {0x1305, "TLS_AES_128_CCM_8_SHA256"}, 443 1.1 spz {0xFEFE, "SSL_RSA_FIPS_WITH_DES_CBC_SHA"}, 444 1.1 spz {0xFEFF, "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA"}, 445 1.1.1.8 christos {0xFF85, "LEGACY-GOST2012-GOST8912-GOST8912"}, 446 1.1.1.5 christos {0xFF87, "GOST2012-NULL-GOST12"}, 447 1.1.1.8 christos {0xC100, "GOST2012-KUZNYECHIK-KUZNYECHIKOMAC"}, 448 1.1.1.8 christos {0xC101, "GOST2012-MAGMA-MAGMAOMAC"}, 449 1.1.1.8 christos {0xC102, "GOST2012-GOST8912-IANA"}, 450 1.1 spz }; 451 1.1 spz 452 1.1 spz /* Compression methods */ 453 1.1.1.5 christos static const ssl_trace_tbl ssl_comp_tbl[] = { 454 1.1 spz {0x0000, "No Compression"}, 455 1.1 spz {0x0001, "Zlib Compression"} 456 1.1 spz }; 457 1.1 spz 458 1.1.1.5 christos /* Extensions sorted by ascending id */ 459 1.1.1.5 christos static const ssl_trace_tbl ssl_exts_tbl[] = { 460 1.1 spz {TLSEXT_TYPE_server_name, "server_name"}, 461 1.1 spz {TLSEXT_TYPE_max_fragment_length, "max_fragment_length"}, 462 1.1 spz {TLSEXT_TYPE_client_certificate_url, "client_certificate_url"}, 463 1.1 spz {TLSEXT_TYPE_trusted_ca_keys, "trusted_ca_keys"}, 464 1.1 spz {TLSEXT_TYPE_truncated_hmac, "truncated_hmac"}, 465 1.1 spz {TLSEXT_TYPE_status_request, "status_request"}, 466 1.1 spz {TLSEXT_TYPE_user_mapping, "user_mapping"}, 467 1.1 spz {TLSEXT_TYPE_client_authz, "client_authz"}, 468 1.1 spz {TLSEXT_TYPE_server_authz, "server_authz"}, 469 1.1 spz {TLSEXT_TYPE_cert_type, "cert_type"}, 470 1.1.1.5 christos {TLSEXT_TYPE_supported_groups, "supported_groups"}, 471 1.1 spz {TLSEXT_TYPE_ec_point_formats, "ec_point_formats"}, 472 1.1 spz {TLSEXT_TYPE_srp, "srp"}, 473 1.1 spz {TLSEXT_TYPE_signature_algorithms, "signature_algorithms"}, 474 1.1 spz {TLSEXT_TYPE_use_srtp, "use_srtp"}, 475 1.1.1.5 christos {TLSEXT_TYPE_application_layer_protocol_negotiation, 476 1.1.1.5 christos "application_layer_protocol_negotiation"}, 477 1.1.1.5 christos {TLSEXT_TYPE_signed_certificate_timestamp, "signed_certificate_timestamps"}, 478 1.1.1.5 christos {TLSEXT_TYPE_padding, "padding"}, 479 1.1.1.5 christos {TLSEXT_TYPE_encrypt_then_mac, "encrypt_then_mac"}, 480 1.1.1.5 christos {TLSEXT_TYPE_extended_master_secret, "extended_master_secret"}, 481 1.1 spz {TLSEXT_TYPE_session_ticket, "session_ticket"}, 482 1.1.1.5 christos {TLSEXT_TYPE_psk, "psk"}, 483 1.1.1.5 christos {TLSEXT_TYPE_early_data, "early_data"}, 484 1.1.1.5 christos {TLSEXT_TYPE_supported_versions, "supported_versions"}, 485 1.1.1.5 christos {TLSEXT_TYPE_cookie, "cookie_ext"}, 486 1.1.1.5 christos {TLSEXT_TYPE_psk_kex_modes, "psk_key_exchange_modes"}, 487 1.1.1.5 christos {TLSEXT_TYPE_certificate_authorities, "certificate_authorities"}, 488 1.1.1.5 christos {TLSEXT_TYPE_post_handshake_auth, "post_handshake_auth"}, 489 1.1.1.5 christos {TLSEXT_TYPE_signature_algorithms_cert, "signature_algorithms_cert"}, 490 1.1.1.5 christos {TLSEXT_TYPE_key_share, "key_share"}, 491 1.1 spz {TLSEXT_TYPE_renegotiate, "renegotiate"}, 492 1.1.1.2 christos # ifndef OPENSSL_NO_NEXTPROTONEG 493 1.1 spz {TLSEXT_TYPE_next_proto_neg, "next_proto_neg"}, 494 1.1.1.2 christos # endif 495 1.1 spz }; 496 1.1 spz 497 1.1.1.5 christos static const ssl_trace_tbl ssl_groups_tbl[] = { 498 1.1 spz {1, "sect163k1 (K-163)"}, 499 1.1 spz {2, "sect163r1"}, 500 1.1 spz {3, "sect163r2 (B-163)"}, 501 1.1 spz {4, "sect193r1"}, 502 1.1 spz {5, "sect193r2"}, 503 1.1 spz {6, "sect233k1 (K-233)"}, 504 1.1 spz {7, "sect233r1 (B-233)"}, 505 1.1 spz {8, "sect239k1"}, 506 1.1 spz {9, "sect283k1 (K-283)"}, 507 1.1 spz {10, "sect283r1 (B-283)"}, 508 1.1 spz {11, "sect409k1 (K-409)"}, 509 1.1 spz {12, "sect409r1 (B-409)"}, 510 1.1 spz {13, "sect571k1 (K-571)"}, 511 1.1 spz {14, "sect571r1 (B-571)"}, 512 1.1 spz {15, "secp160k1"}, 513 1.1 spz {16, "secp160r1"}, 514 1.1 spz {17, "secp160r2"}, 515 1.1 spz {18, "secp192k1"}, 516 1.1 spz {19, "secp192r1 (P-192)"}, 517 1.1 spz {20, "secp224k1"}, 518 1.1 spz {21, "secp224r1 (P-224)"}, 519 1.1 spz {22, "secp256k1"}, 520 1.1 spz {23, "secp256r1 (P-256)"}, 521 1.1 spz {24, "secp384r1 (P-384)"}, 522 1.1 spz {25, "secp521r1 (P-521)"}, 523 1.1 spz {26, "brainpoolP256r1"}, 524 1.1 spz {27, "brainpoolP384r1"}, 525 1.1 spz {28, "brainpoolP512r1"}, 526 1.1.1.2 christos {29, "ecdh_x25519"}, 527 1.1.1.5 christos {30, "ecdh_x448"}, 528 1.1.1.8 christos {34, "GC256A"}, 529 1.1.1.8 christos {35, "GC256B"}, 530 1.1.1.8 christos {36, "GC256C"}, 531 1.1.1.8 christos {37, "GC256D"}, 532 1.1.1.8 christos {38, "GC512A"}, 533 1.1.1.8 christos {39, "GC512B"}, 534 1.1.1.8 christos {40, "GC512C"}, 535 1.1.1.5 christos {256, "ffdhe2048"}, 536 1.1.1.5 christos {257, "ffdhe3072"}, 537 1.1.1.5 christos {258, "ffdhe4096"}, 538 1.1.1.5 christos {259, "ffdhe6144"}, 539 1.1.1.5 christos {260, "ffdhe8192"}, 540 1.1 spz {0xFF01, "arbitrary_explicit_prime_curves"}, 541 1.1 spz {0xFF02, "arbitrary_explicit_char2_curves"} 542 1.1 spz }; 543 1.1 spz 544 1.1.1.5 christos static const ssl_trace_tbl ssl_point_tbl[] = { 545 1.1 spz {0, "uncompressed"}, 546 1.1 spz {1, "ansiX962_compressed_prime"}, 547 1.1 spz {2, "ansiX962_compressed_char2"} 548 1.1 spz }; 549 1.1 spz 550 1.1.1.5 christos static const ssl_trace_tbl ssl_mfl_tbl[] = { 551 1.1.1.5 christos {0, "disabled"}, 552 1.1.1.5 christos {1, "max_fragment_length := 2^9 (512 bytes)"}, 553 1.1.1.5 christos {2, "max_fragment_length := 2^10 (1024 bytes)"}, 554 1.1.1.5 christos {3, "max_fragment_length := 2^11 (2048 bytes)"}, 555 1.1.1.5 christos {4, "max_fragment_length := 2^12 (4096 bytes)"} 556 1.1 spz }; 557 1.1 spz 558 1.1.1.5 christos static const ssl_trace_tbl ssl_sigalg_tbl[] = { 559 1.1.1.5 christos {TLSEXT_SIGALG_ecdsa_secp256r1_sha256, "ecdsa_secp256r1_sha256"}, 560 1.1.1.5 christos {TLSEXT_SIGALG_ecdsa_secp384r1_sha384, "ecdsa_secp384r1_sha384"}, 561 1.1.1.5 christos {TLSEXT_SIGALG_ecdsa_secp521r1_sha512, "ecdsa_secp521r1_sha512"}, 562 1.1.1.5 christos {TLSEXT_SIGALG_ecdsa_sha224, "ecdsa_sha224"}, 563 1.1.1.5 christos {TLSEXT_SIGALG_ed25519, "ed25519"}, 564 1.1.1.5 christos {TLSEXT_SIGALG_ed448, "ed448"}, 565 1.1.1.5 christos {TLSEXT_SIGALG_ecdsa_sha1, "ecdsa_sha1"}, 566 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pss_rsae_sha256, "rsa_pss_rsae_sha256"}, 567 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pss_rsae_sha384, "rsa_pss_rsae_sha384"}, 568 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pss_rsae_sha512, "rsa_pss_rsae_sha512"}, 569 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pss_pss_sha256, "rsa_pss_pss_sha256"}, 570 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pss_pss_sha384, "rsa_pss_pss_sha384"}, 571 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pss_pss_sha512, "rsa_pss_pss_sha512"}, 572 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pkcs1_sha256, "rsa_pkcs1_sha256"}, 573 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pkcs1_sha384, "rsa_pkcs1_sha384"}, 574 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pkcs1_sha512, "rsa_pkcs1_sha512"}, 575 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pkcs1_sha224, "rsa_pkcs1_sha224"}, 576 1.1.1.5 christos {TLSEXT_SIGALG_rsa_pkcs1_sha1, "rsa_pkcs1_sha1"}, 577 1.1.1.5 christos {TLSEXT_SIGALG_dsa_sha256, "dsa_sha256"}, 578 1.1.1.5 christos {TLSEXT_SIGALG_dsa_sha384, "dsa_sha384"}, 579 1.1.1.5 christos {TLSEXT_SIGALG_dsa_sha512, "dsa_sha512"}, 580 1.1.1.5 christos {TLSEXT_SIGALG_dsa_sha224, "dsa_sha224"}, 581 1.1.1.5 christos {TLSEXT_SIGALG_dsa_sha1, "dsa_sha1"}, 582 1.1.1.8 christos {TLSEXT_SIGALG_gostr34102012_256_intrinsic, "gost2012_256"}, 583 1.1.1.8 christos {TLSEXT_SIGALG_gostr34102012_512_intrinsic, "gost2012_512"}, 584 1.1.1.5 christos {TLSEXT_SIGALG_gostr34102012_256_gostr34112012_256, "gost2012_256"}, 585 1.1.1.5 christos {TLSEXT_SIGALG_gostr34102012_512_gostr34112012_512, "gost2012_512"}, 586 1.1.1.5 christos {TLSEXT_SIGALG_gostr34102001_gostr3411, "gost2001_gost94"}, 587 1.1 spz }; 588 1.1 spz 589 1.1.1.5 christos static const ssl_trace_tbl ssl_ctype_tbl[] = { 590 1.1 spz {1, "rsa_sign"}, 591 1.1 spz {2, "dss_sign"}, 592 1.1 spz {3, "rsa_fixed_dh"}, 593 1.1 spz {4, "dss_fixed_dh"}, 594 1.1 spz {5, "rsa_ephemeral_dh"}, 595 1.1 spz {6, "dss_ephemeral_dh"}, 596 1.1 spz {20, "fortezza_dms"}, 597 1.1 spz {64, "ecdsa_sign"}, 598 1.1 spz {65, "rsa_fixed_ecdh"}, 599 1.1.1.8 christos {66, "ecdsa_fixed_ecdh"}, 600 1.1.1.8 christos {67, "gost_sign256"}, 601 1.1.1.8 christos {68, "gost_sign512"}, 602 1.1 spz }; 603 1.1 spz 604 1.1.1.5 christos static const ssl_trace_tbl ssl_psk_kex_modes_tbl[] = { 605 1.1.1.5 christos {TLSEXT_KEX_MODE_KE, "psk_ke"}, 606 1.1.1.5 christos {TLSEXT_KEX_MODE_KE_DHE, "psk_dhe_ke"} 607 1.1.1.5 christos }; 608 1.1.1.5 christos 609 1.1.1.5 christos static const ssl_trace_tbl ssl_key_update_tbl[] = { 610 1.1.1.5 christos {SSL_KEY_UPDATE_NOT_REQUESTED, "update_not_requested"}, 611 1.1.1.5 christos {SSL_KEY_UPDATE_REQUESTED, "update_requested"} 612 1.1.1.5 christos }; 613 1.1.1.5 christos 614 1.1 spz static void ssl_print_hex(BIO *bio, int indent, const char *name, 615 1.1 spz const unsigned char *msg, size_t msglen) 616 1.1 spz { 617 1.1 spz size_t i; 618 1.1.1.5 christos 619 1.1 spz BIO_indent(bio, indent, 80); 620 1.1 spz BIO_printf(bio, "%s (len=%d): ", name, (int)msglen); 621 1.1 spz for (i = 0; i < msglen; i++) 622 1.1 spz BIO_printf(bio, "%02X", msg[i]); 623 1.1 spz BIO_puts(bio, "\n"); 624 1.1 spz } 625 1.1 spz 626 1.1.1.5 christos static int ssl_print_hexbuf(BIO *bio, int indent, const char *name, size_t nlen, 627 1.1 spz const unsigned char **pmsg, size_t *pmsglen) 628 1.1 spz { 629 1.1 spz size_t blen; 630 1.1 spz const unsigned char *p = *pmsg; 631 1.1.1.5 christos 632 1.1 spz if (*pmsglen < nlen) 633 1.1 spz return 0; 634 1.1 spz blen = p[0]; 635 1.1 spz if (nlen > 1) 636 1.1 spz blen = (blen << 8) | p[1]; 637 1.1 spz if (*pmsglen < nlen + blen) 638 1.1 spz return 0; 639 1.1 spz p += nlen; 640 1.1 spz ssl_print_hex(bio, indent, name, p, blen); 641 1.1 spz *pmsg += blen + nlen; 642 1.1 spz *pmsglen -= blen + nlen; 643 1.1 spz return 1; 644 1.1 spz } 645 1.1 spz 646 1.1 spz static int ssl_print_version(BIO *bio, int indent, const char *name, 647 1.1.1.5 christos const unsigned char **pmsg, size_t *pmsglen, 648 1.1.1.5 christos unsigned int *version) 649 1.1 spz { 650 1.1 spz int vers; 651 1.1.1.5 christos 652 1.1 spz if (*pmsglen < 2) 653 1.1 spz return 0; 654 1.1 spz vers = ((*pmsg)[0] << 8) | (*pmsg)[1]; 655 1.1.1.5 christos if (version != NULL) 656 1.1.1.5 christos *version = vers; 657 1.1 spz BIO_indent(bio, indent, 80); 658 1.1 spz BIO_printf(bio, "%s=0x%x (%s)\n", 659 1.1 spz name, vers, ssl_trace_str(vers, ssl_version_tbl)); 660 1.1 spz *pmsg += 2; 661 1.1 spz *pmsglen -= 2; 662 1.1 spz return 1; 663 1.1 spz } 664 1.1 spz 665 1.1 spz static int ssl_print_random(BIO *bio, int indent, 666 1.1 spz const unsigned char **pmsg, size_t *pmsglen) 667 1.1 spz { 668 1.1 spz unsigned int tm; 669 1.1 spz const unsigned char *p = *pmsg; 670 1.1.1.5 christos 671 1.1 spz if (*pmsglen < 32) 672 1.1 spz return 0; 673 1.1.1.7 christos tm = ((unsigned int)p[0] << 24) 674 1.1.1.7 christos | ((unsigned int)p[1] << 16) 675 1.1.1.7 christos | ((unsigned int)p[2] << 8) 676 1.1.1.7 christos | (unsigned int)p[3]; 677 1.1 spz p += 4; 678 1.1 spz BIO_indent(bio, indent, 80); 679 1.1 spz BIO_puts(bio, "Random:\n"); 680 1.1 spz BIO_indent(bio, indent + 2, 80); 681 1.1 spz BIO_printf(bio, "gmt_unix_time=0x%08X\n", tm); 682 1.1 spz ssl_print_hex(bio, indent + 2, "random_bytes", p, 28); 683 1.1 spz *pmsg += 32; 684 1.1 spz *pmsglen -= 32; 685 1.1 spz return 1; 686 1.1 spz } 687 1.1 spz 688 1.1.1.5 christos static int ssl_print_signature(BIO *bio, int indent, const SSL *ssl, 689 1.1 spz const unsigned char **pmsg, size_t *pmsglen) 690 1.1 spz { 691 1.1 spz if (*pmsglen < 2) 692 1.1 spz return 0; 693 1.1.1.5 christos if (SSL_USE_SIGALGS(ssl)) { 694 1.1 spz const unsigned char *p = *pmsg; 695 1.1.1.5 christos unsigned int sigalg = (p[0] << 8) | p[1]; 696 1.1.1.5 christos 697 1.1 spz BIO_indent(bio, indent, 80); 698 1.1.1.5 christos BIO_printf(bio, "Signature Algorithm: %s (0x%04x)\n", 699 1.1.1.5 christos ssl_trace_str(sigalg, ssl_sigalg_tbl), sigalg); 700 1.1 spz *pmsg += 2; 701 1.1 spz *pmsglen -= 2; 702 1.1 spz } 703 1.1 spz return ssl_print_hexbuf(bio, indent, "Signature", 2, pmsg, pmsglen); 704 1.1 spz } 705 1.1 spz 706 1.1.1.5 christos static int ssl_print_extension(BIO *bio, int indent, int server, 707 1.1.1.5 christos unsigned char mt, int extype, 708 1.1 spz const unsigned char *ext, size_t extlen) 709 1.1 spz { 710 1.1.1.5 christos size_t xlen, share_len; 711 1.1.1.5 christos unsigned int sigalg; 712 1.1.1.5 christos uint32_t max_early_data; 713 1.1.1.5 christos 714 1.1 spz BIO_indent(bio, indent, 80); 715 1.1 spz BIO_printf(bio, "extension_type=%s(%d), length=%d\n", 716 1.1 spz ssl_trace_str(extype, ssl_exts_tbl), extype, (int)extlen); 717 1.1 spz switch (extype) { 718 1.1.1.5 christos case TLSEXT_TYPE_max_fragment_length: 719 1.1.1.5 christos if (extlen < 1) 720 1.1.1.5 christos return 0; 721 1.1.1.5 christos xlen = extlen; 722 1.1.1.5 christos return ssl_trace_list(bio, indent + 2, ext, xlen, 1, ssl_mfl_tbl); 723 1.1.1.5 christos 724 1.1 spz case TLSEXT_TYPE_ec_point_formats: 725 1.1 spz if (extlen < 1) 726 1.1 spz return 0; 727 1.1 spz xlen = ext[0]; 728 1.1 spz if (extlen != xlen + 1) 729 1.1 spz return 0; 730 1.1.1.2 christos return ssl_trace_list(bio, indent + 2, ext + 1, xlen, 1, ssl_point_tbl); 731 1.1 spz 732 1.1.1.5 christos case TLSEXT_TYPE_supported_groups: 733 1.1 spz if (extlen < 2) 734 1.1 spz return 0; 735 1.1 spz xlen = (ext[0] << 8) | ext[1]; 736 1.1 spz if (extlen != xlen + 2) 737 1.1 spz return 0; 738 1.1.1.5 christos return ssl_trace_list(bio, indent + 2, ext + 2, xlen, 2, ssl_groups_tbl); 739 1.1.1.5 christos case TLSEXT_TYPE_application_layer_protocol_negotiation: 740 1.1.1.5 christos if (extlen < 2) 741 1.1.1.5 christos return 0; 742 1.1.1.5 christos xlen = (ext[0] << 8) | ext[1]; 743 1.1.1.5 christos if (extlen != xlen + 2) 744 1.1.1.5 christos return 0; 745 1.1.1.5 christos ext += 2; 746 1.1.1.5 christos while (xlen > 0) { 747 1.1.1.5 christos size_t plen = *ext++; 748 1.1.1.5 christos 749 1.1.1.5 christos if (plen + 1 > xlen) 750 1.1.1.5 christos return 0; 751 1.1.1.5 christos BIO_indent(bio, indent + 2, 80); 752 1.1.1.5 christos BIO_write(bio, ext, plen); 753 1.1.1.5 christos BIO_puts(bio, "\n"); 754 1.1.1.5 christos ext += plen; 755 1.1.1.5 christos xlen -= plen + 1; 756 1.1.1.5 christos } 757 1.1.1.5 christos return 1; 758 1.1 spz 759 1.1 spz case TLSEXT_TYPE_signature_algorithms: 760 1.1 spz 761 1.1 spz if (extlen < 2) 762 1.1 spz return 0; 763 1.1 spz xlen = (ext[0] << 8) | ext[1]; 764 1.1 spz if (extlen != xlen + 2) 765 1.1 spz return 0; 766 1.1 spz if (xlen & 1) 767 1.1 spz return 0; 768 1.1 spz ext += 2; 769 1.1 spz while (xlen > 0) { 770 1.1 spz BIO_indent(bio, indent + 2, 80); 771 1.1.1.5 christos sigalg = (ext[0] << 8) | ext[1]; 772 1.1.1.5 christos BIO_printf(bio, "%s (0x%04x)\n", 773 1.1.1.5 christos ssl_trace_str(sigalg, ssl_sigalg_tbl), sigalg); 774 1.1 spz xlen -= 2; 775 1.1 spz ext += 2; 776 1.1 spz } 777 1.1 spz break; 778 1.1 spz 779 1.1 spz case TLSEXT_TYPE_renegotiate: 780 1.1 spz if (extlen < 1) 781 1.1 spz return 0; 782 1.1 spz xlen = ext[0]; 783 1.1 spz if (xlen + 1 != extlen) 784 1.1 spz return 0; 785 1.1 spz ext++; 786 1.1 spz if (xlen) { 787 1.1 spz if (server) { 788 1.1 spz if (xlen & 1) 789 1.1 spz return 0; 790 1.1 spz xlen >>= 1; 791 1.1 spz } 792 1.1 spz ssl_print_hex(bio, indent + 4, "client_verify_data", ext, xlen); 793 1.1 spz if (server) { 794 1.1 spz ext += xlen; 795 1.1.1.2 christos ssl_print_hex(bio, indent + 4, "server_verify_data", ext, xlen); 796 1.1 spz } 797 1.1 spz } else { 798 1.1 spz BIO_indent(bio, indent + 4, 80); 799 1.1 spz BIO_puts(bio, "<EMPTY>\n"); 800 1.1 spz } 801 1.1 spz break; 802 1.1 spz 803 1.1 spz case TLSEXT_TYPE_session_ticket: 804 1.1 spz if (extlen != 0) 805 1.1 spz ssl_print_hex(bio, indent + 4, "ticket", ext, extlen); 806 1.1 spz break; 807 1.1 spz 808 1.1.1.5 christos case TLSEXT_TYPE_key_share: 809 1.1.1.5 christos if (server && extlen == 2) { 810 1.1.1.5 christos int group_id; 811 1.1.1.5 christos 812 1.1.1.5 christos /* We assume this is an HRR, otherwise this is an invalid key_share */ 813 1.1.1.5 christos group_id = (ext[0] << 8) | ext[1]; 814 1.1.1.5 christos BIO_indent(bio, indent + 4, 80); 815 1.1.1.5 christos BIO_printf(bio, "NamedGroup: %s (%d)\n", 816 1.1.1.5 christos ssl_trace_str(group_id, ssl_groups_tbl), group_id); 817 1.1.1.5 christos break; 818 1.1.1.5 christos } 819 1.1.1.5 christos if (extlen < 2) 820 1.1.1.5 christos return 0; 821 1.1.1.5 christos if (server) { 822 1.1.1.5 christos xlen = extlen; 823 1.1.1.5 christos } else { 824 1.1.1.5 christos xlen = (ext[0] << 8) | ext[1]; 825 1.1.1.5 christos if (extlen != xlen + 2) 826 1.1.1.5 christos return 0; 827 1.1.1.5 christos ext += 2; 828 1.1.1.5 christos } 829 1.1.1.5 christos for (; xlen > 0; ext += share_len, xlen -= share_len) { 830 1.1.1.5 christos int group_id; 831 1.1.1.5 christos 832 1.1.1.5 christos if (xlen < 4) 833 1.1.1.5 christos return 0; 834 1.1.1.5 christos group_id = (ext[0] << 8) | ext[1]; 835 1.1.1.5 christos share_len = (ext[2] << 8) | ext[3]; 836 1.1.1.5 christos ext += 4; 837 1.1.1.5 christos xlen -= 4; 838 1.1.1.5 christos if (xlen < share_len) 839 1.1.1.5 christos return 0; 840 1.1.1.5 christos BIO_indent(bio, indent + 4, 80); 841 1.1.1.5 christos BIO_printf(bio, "NamedGroup: %s (%d)\n", 842 1.1.1.5 christos ssl_trace_str(group_id, ssl_groups_tbl), group_id); 843 1.1.1.5 christos ssl_print_hex(bio, indent + 4, "key_exchange: ", ext, share_len); 844 1.1.1.5 christos } 845 1.1.1.5 christos break; 846 1.1.1.5 christos 847 1.1.1.5 christos case TLSEXT_TYPE_supported_versions: 848 1.1.1.5 christos if (server) { 849 1.1.1.5 christos int version; 850 1.1.1.5 christos 851 1.1.1.5 christos if (extlen != 2) 852 1.1.1.5 christos return 0; 853 1.1.1.5 christos version = (ext[0] << 8) | ext[1]; 854 1.1.1.5 christos BIO_indent(bio, indent + 4, 80); 855 1.1.1.5 christos BIO_printf(bio, "%s (%d)\n", 856 1.1.1.5 christos ssl_trace_str(version, ssl_version_tbl), version); 857 1.1.1.5 christos break; 858 1.1.1.5 christos } 859 1.1.1.5 christos if (extlen < 1) 860 1.1.1.5 christos return 0; 861 1.1.1.5 christos xlen = ext[0]; 862 1.1.1.5 christos if (extlen != xlen + 1) 863 1.1.1.5 christos return 0; 864 1.1.1.5 christos return ssl_trace_list(bio, indent + 2, ext + 1, xlen, 2, 865 1.1.1.5 christos ssl_version_tbl); 866 1.1.1.5 christos 867 1.1.1.5 christos case TLSEXT_TYPE_psk_kex_modes: 868 1.1.1.5 christos if (extlen < 1) 869 1.1.1.5 christos return 0; 870 1.1.1.5 christos xlen = ext[0]; 871 1.1.1.5 christos if (extlen != xlen + 1) 872 1.1.1.5 christos return 0; 873 1.1.1.5 christos return ssl_trace_list(bio, indent + 2, ext + 1, xlen, 1, 874 1.1.1.5 christos ssl_psk_kex_modes_tbl); 875 1.1.1.5 christos 876 1.1.1.5 christos case TLSEXT_TYPE_early_data: 877 1.1.1.5 christos if (mt != SSL3_MT_NEWSESSION_TICKET) 878 1.1.1.5 christos break; 879 1.1.1.5 christos if (extlen != 4) 880 1.1.1.5 christos return 0; 881 1.1.1.7 christos max_early_data = ((unsigned int)ext[0] << 24) 882 1.1.1.7 christos | ((unsigned int)ext[1] << 16) 883 1.1.1.7 christos | ((unsigned int)ext[2] << 8) 884 1.1.1.7 christos | (unsigned int)ext[3]; 885 1.1.1.5 christos BIO_indent(bio, indent + 2, 80); 886 1.1.1.5 christos BIO_printf(bio, "max_early_data=%u\n", max_early_data); 887 1.1.1.5 christos break; 888 1.1.1.5 christos 889 1.1 spz default: 890 1.1.1.2 christos BIO_dump_indent(bio, (const char *)ext, extlen, indent + 2); 891 1.1 spz } 892 1.1 spz return 1; 893 1.1 spz } 894 1.1 spz 895 1.1 spz static int ssl_print_extensions(BIO *bio, int indent, int server, 896 1.1.1.5 christos unsigned char mt, const unsigned char **msgin, 897 1.1.1.5 christos size_t *msginlen) 898 1.1 spz { 899 1.1.1.5 christos size_t extslen, msglen = *msginlen; 900 1.1.1.5 christos const unsigned char *msg = *msgin; 901 1.1.1.5 christos 902 1.1 spz BIO_indent(bio, indent, 80); 903 1.1 spz if (msglen == 0) { 904 1.1.1.5 christos BIO_puts(bio, "No extensions\n"); 905 1.1 spz return 1; 906 1.1 spz } 907 1.1.1.4 christos if (msglen < 2) 908 1.1.1.4 christos return 0; 909 1.1 spz extslen = (msg[0] << 8) | msg[1]; 910 1.1.1.5 christos msglen -= 2; 911 1.1 spz msg += 2; 912 1.1.1.5 christos if (extslen == 0) { 913 1.1.1.5 christos BIO_puts(bio, "No extensions\n"); 914 1.1.1.5 christos *msgin = msg; 915 1.1.1.5 christos *msginlen = msglen; 916 1.1.1.5 christos return 1; 917 1.1.1.5 christos } 918 1.1.1.5 christos if (extslen > msglen) 919 1.1.1.5 christos return 0; 920 1.1.1.5 christos BIO_printf(bio, "extensions, length = %d\n", (int)extslen); 921 1.1.1.5 christos msglen -= extslen; 922 1.1.1.5 christos while (extslen > 0) { 923 1.1 spz int extype; 924 1.1 spz size_t extlen; 925 1.1.1.5 christos if (extslen < 4) 926 1.1 spz return 0; 927 1.1 spz extype = (msg[0] << 8) | msg[1]; 928 1.1 spz extlen = (msg[2] << 8) | msg[3]; 929 1.1.1.5 christos if (extslen < extlen + 4) { 930 1.1.1.5 christos BIO_printf(bio, "extensions, extype = %d, extlen = %d\n", extype, 931 1.1.1.5 christos (int)extlen); 932 1.1.1.5 christos BIO_dump_indent(bio, (const char *)msg, extslen, indent + 2); 933 1.1 spz return 0; 934 1.1.1.5 christos } 935 1.1 spz msg += 4; 936 1.1.1.5 christos if (!ssl_print_extension(bio, indent + 2, server, mt, extype, msg, 937 1.1.1.5 christos extlen)) 938 1.1 spz return 0; 939 1.1 spz msg += extlen; 940 1.1.1.5 christos extslen -= extlen + 4; 941 1.1 spz } 942 1.1.1.5 christos 943 1.1.1.5 christos *msgin = msg; 944 1.1.1.5 christos *msginlen = msglen; 945 1.1 spz return 1; 946 1.1 spz } 947 1.1 spz 948 1.1.1.5 christos static int ssl_print_client_hello(BIO *bio, const SSL *ssl, int indent, 949 1.1 spz const unsigned char *msg, size_t msglen) 950 1.1 spz { 951 1.1 spz size_t len; 952 1.1 spz unsigned int cs; 953 1.1.1.5 christos 954 1.1.1.5 christos if (!ssl_print_version(bio, indent, "client_version", &msg, &msglen, NULL)) 955 1.1 spz return 0; 956 1.1 spz if (!ssl_print_random(bio, indent, &msg, &msglen)) 957 1.1 spz return 0; 958 1.1 spz if (!ssl_print_hexbuf(bio, indent, "session_id", 1, &msg, &msglen)) 959 1.1 spz return 0; 960 1.1 spz if (SSL_IS_DTLS(ssl)) { 961 1.1 spz if (!ssl_print_hexbuf(bio, indent, "cookie", 1, &msg, &msglen)) 962 1.1 spz return 0; 963 1.1 spz } 964 1.1 spz if (msglen < 2) 965 1.1 spz return 0; 966 1.1 spz len = (msg[0] << 8) | msg[1]; 967 1.1 spz msg += 2; 968 1.1 spz msglen -= 2; 969 1.1 spz BIO_indent(bio, indent, 80); 970 1.1 spz BIO_printf(bio, "cipher_suites (len=%d)\n", (int)len); 971 1.1 spz if (msglen < len || len & 1) 972 1.1 spz return 0; 973 1.1 spz while (len > 0) { 974 1.1 spz cs = (msg[0] << 8) | msg[1]; 975 1.1 spz BIO_indent(bio, indent + 2, 80); 976 1.1 spz BIO_printf(bio, "{0x%02X, 0x%02X} %s\n", 977 1.1 spz msg[0], msg[1], ssl_trace_str(cs, ssl_ciphers_tbl)); 978 1.1 spz msg += 2; 979 1.1 spz msglen -= 2; 980 1.1 spz len -= 2; 981 1.1 spz } 982 1.1 spz if (msglen < 1) 983 1.1 spz return 0; 984 1.1 spz len = msg[0]; 985 1.1 spz msg++; 986 1.1 spz msglen--; 987 1.1 spz if (msglen < len) 988 1.1 spz return 0; 989 1.1 spz BIO_indent(bio, indent, 80); 990 1.1 spz BIO_printf(bio, "compression_methods (len=%d)\n", (int)len); 991 1.1 spz while (len > 0) { 992 1.1 spz BIO_indent(bio, indent + 2, 80); 993 1.1 spz BIO_printf(bio, "%s (0x%02X)\n", 994 1.1 spz ssl_trace_str(msg[0], ssl_comp_tbl), msg[0]); 995 1.1 spz msg++; 996 1.1 spz msglen--; 997 1.1 spz len--; 998 1.1 spz } 999 1.1.1.5 christos if (!ssl_print_extensions(bio, indent, 0, SSL3_MT_CLIENT_HELLO, &msg, 1000 1.1.1.5 christos &msglen)) 1001 1.1 spz return 0; 1002 1.1 spz return 1; 1003 1.1 spz } 1004 1.1 spz 1005 1.1 spz static int dtls_print_hello_vfyrequest(BIO *bio, int indent, 1006 1.1.1.2 christos const unsigned char *msg, size_t msglen) 1007 1.1 spz { 1008 1.1.1.5 christos if (!ssl_print_version(bio, indent, "server_version", &msg, &msglen, NULL)) 1009 1.1 spz return 0; 1010 1.1 spz if (!ssl_print_hexbuf(bio, indent, "cookie", 1, &msg, &msglen)) 1011 1.1 spz return 0; 1012 1.1 spz return 1; 1013 1.1 spz } 1014 1.1 spz 1015 1.1 spz static int ssl_print_server_hello(BIO *bio, int indent, 1016 1.1 spz const unsigned char *msg, size_t msglen) 1017 1.1 spz { 1018 1.1 spz unsigned int cs; 1019 1.1.1.5 christos unsigned int vers; 1020 1.1.1.5 christos 1021 1.1.1.5 christos if (!ssl_print_version(bio, indent, "server_version", &msg, &msglen, &vers)) 1022 1.1 spz return 0; 1023 1.1 spz if (!ssl_print_random(bio, indent, &msg, &msglen)) 1024 1.1 spz return 0; 1025 1.1.1.5 christos if (vers != TLS1_3_VERSION 1026 1.1.1.5 christos && !ssl_print_hexbuf(bio, indent, "session_id", 1, &msg, &msglen)) 1027 1.1 spz return 0; 1028 1.1 spz if (msglen < 2) 1029 1.1 spz return 0; 1030 1.1 spz cs = (msg[0] << 8) | msg[1]; 1031 1.1 spz BIO_indent(bio, indent, 80); 1032 1.1 spz BIO_printf(bio, "cipher_suite {0x%02X, 0x%02X} %s\n", 1033 1.1 spz msg[0], msg[1], ssl_trace_str(cs, ssl_ciphers_tbl)); 1034 1.1 spz msg += 2; 1035 1.1 spz msglen -= 2; 1036 1.1.1.5 christos if (vers != TLS1_3_VERSION) { 1037 1.1.1.5 christos if (msglen < 1) 1038 1.1.1.5 christos return 0; 1039 1.1.1.5 christos BIO_indent(bio, indent, 80); 1040 1.1.1.5 christos BIO_printf(bio, "compression_method: %s (0x%02X)\n", 1041 1.1.1.5 christos ssl_trace_str(msg[0], ssl_comp_tbl), msg[0]); 1042 1.1.1.5 christos msg++; 1043 1.1.1.5 christos msglen--; 1044 1.1.1.5 christos } 1045 1.1.1.5 christos if (!ssl_print_extensions(bio, indent, 1, SSL3_MT_SERVER_HELLO, &msg, 1046 1.1.1.5 christos &msglen)) 1047 1.1 spz return 0; 1048 1.1 spz return 1; 1049 1.1 spz } 1050 1.1 spz 1051 1.1.1.5 christos static int ssl_get_keyex(const char **pname, const SSL *ssl) 1052 1.1 spz { 1053 1.1.1.8 christos unsigned long alg_k = ssl->s3.tmp.new_cipher->algorithm_mkey; 1054 1.1.1.5 christos 1055 1.1 spz if (alg_k & SSL_kRSA) { 1056 1.1 spz *pname = "rsa"; 1057 1.1 spz return SSL_kRSA; 1058 1.1 spz } 1059 1.1.1.2 christos if (alg_k & SSL_kDHE) { 1060 1.1.1.2 christos *pname = "DHE"; 1061 1.1.1.2 christos return SSL_kDHE; 1062 1.1.1.2 christos } 1063 1.1.1.2 christos if (alg_k & SSL_kECDHE) { 1064 1.1.1.2 christos *pname = "ECDHE"; 1065 1.1.1.2 christos return SSL_kECDHE; 1066 1.1 spz } 1067 1.1 spz if (alg_k & SSL_kPSK) { 1068 1.1 spz *pname = "PSK"; 1069 1.1 spz return SSL_kPSK; 1070 1.1 spz } 1071 1.1.1.2 christos if (alg_k & SSL_kRSAPSK) { 1072 1.1.1.2 christos *pname = "RSAPSK"; 1073 1.1.1.2 christos return SSL_kRSAPSK; 1074 1.1.1.2 christos } 1075 1.1.1.2 christos if (alg_k & SSL_kDHEPSK) { 1076 1.1.1.2 christos *pname = "DHEPSK"; 1077 1.1.1.2 christos return SSL_kDHEPSK; 1078 1.1.1.2 christos } 1079 1.1.1.2 christos if (alg_k & SSL_kECDHEPSK) { 1080 1.1.1.2 christos *pname = "ECDHEPSK"; 1081 1.1.1.2 christos return SSL_kECDHEPSK; 1082 1.1.1.2 christos } 1083 1.1 spz if (alg_k & SSL_kSRP) { 1084 1.1 spz *pname = "SRP"; 1085 1.1 spz return SSL_kSRP; 1086 1.1 spz } 1087 1.1 spz if (alg_k & SSL_kGOST) { 1088 1.1 spz *pname = "GOST"; 1089 1.1 spz return SSL_kGOST; 1090 1.1 spz } 1091 1.1.1.8 christos if (alg_k & SSL_kGOST18) { 1092 1.1.1.8 christos *pname = "GOST18"; 1093 1.1.1.8 christos return SSL_kGOST18; 1094 1.1.1.8 christos } 1095 1.1 spz *pname = "UNKNOWN"; 1096 1.1 spz return 0; 1097 1.1 spz } 1098 1.1 spz 1099 1.1.1.5 christos static int ssl_print_client_keyex(BIO *bio, int indent, const SSL *ssl, 1100 1.1 spz const unsigned char *msg, size_t msglen) 1101 1.1 spz { 1102 1.1 spz const char *algname; 1103 1.1.1.5 christos int id = ssl_get_keyex(&algname, ssl); 1104 1.1.1.5 christos 1105 1.1 spz BIO_indent(bio, indent, 80); 1106 1.1 spz BIO_printf(bio, "KeyExchangeAlgorithm=%s\n", algname); 1107 1.1.1.2 christos if (id & SSL_PSK) { 1108 1.1.1.2 christos if (!ssl_print_hexbuf(bio, indent + 2, 1109 1.1.1.2 christos "psk_identity", 2, &msg, &msglen)) 1110 1.1.1.2 christos return 0; 1111 1.1.1.2 christos } 1112 1.1 spz switch (id) { 1113 1.1 spz 1114 1.1 spz case SSL_kRSA: 1115 1.1.1.2 christos case SSL_kRSAPSK: 1116 1.1 spz if (TLS1_get_version(ssl) == SSL3_VERSION) { 1117 1.1 spz ssl_print_hex(bio, indent + 2, 1118 1.1.1.5 christos "EncryptedPreMasterSecret", msg, msglen); 1119 1.1 spz } else { 1120 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, 1121 1.1.1.5 christos "EncryptedPreMasterSecret", 2, &msg, &msglen)) 1122 1.1 spz return 0; 1123 1.1 spz } 1124 1.1 spz break; 1125 1.1 spz 1126 1.1.1.2 christos case SSL_kDHE: 1127 1.1.1.2 christos case SSL_kDHEPSK: 1128 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, "dh_Yc", 2, &msg, &msglen)) 1129 1.1 spz return 0; 1130 1.1 spz break; 1131 1.1 spz 1132 1.1.1.2 christos case SSL_kECDHE: 1133 1.1.1.2 christos case SSL_kECDHEPSK: 1134 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, "ecdh_Yc", 1, &msg, &msglen)) 1135 1.1 spz return 0; 1136 1.1 spz break; 1137 1.1.1.8 christos case SSL_kGOST: 1138 1.1.1.8 christos ssl_print_hex(bio, indent + 2, "GostKeyTransportBlob", msg, msglen); 1139 1.1.1.8 christos msglen = 0; 1140 1.1.1.8 christos break; 1141 1.1.1.8 christos case SSL_kGOST18: 1142 1.1.1.8 christos ssl_print_hex(bio, indent + 2, 1143 1.1.1.8 christos "GOST-wrapped PreMasterSecret", msg, msglen); 1144 1.1.1.8 christos msglen = 0; 1145 1.1.1.8 christos break; 1146 1.1 spz } 1147 1.1 spz 1148 1.1.1.2 christos return !msglen; 1149 1.1 spz } 1150 1.1 spz 1151 1.1.1.5 christos static int ssl_print_server_keyex(BIO *bio, int indent, const SSL *ssl, 1152 1.1 spz const unsigned char *msg, size_t msglen) 1153 1.1 spz { 1154 1.1 spz const char *algname; 1155 1.1.1.5 christos int id = ssl_get_keyex(&algname, ssl); 1156 1.1.1.5 christos 1157 1.1 spz BIO_indent(bio, indent, 80); 1158 1.1 spz BIO_printf(bio, "KeyExchangeAlgorithm=%s\n", algname); 1159 1.1.1.2 christos if (id & SSL_PSK) { 1160 1.1.1.2 christos if (!ssl_print_hexbuf(bio, indent + 2, 1161 1.1.1.2 christos "psk_identity_hint", 2, &msg, &msglen)) 1162 1.1.1.2 christos return 0; 1163 1.1.1.2 christos } 1164 1.1 spz switch (id) { 1165 1.1 spz case SSL_kRSA: 1166 1.1 spz 1167 1.1.1.2 christos if (!ssl_print_hexbuf(bio, indent + 2, "rsa_modulus", 2, &msg, &msglen)) 1168 1.1 spz return 0; 1169 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, "rsa_exponent", 2, 1170 1.1 spz &msg, &msglen)) 1171 1.1 spz return 0; 1172 1.1 spz break; 1173 1.1 spz 1174 1.1.1.2 christos case SSL_kDHE: 1175 1.1.1.2 christos case SSL_kDHEPSK: 1176 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, "dh_p", 2, &msg, &msglen)) 1177 1.1 spz return 0; 1178 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, "dh_g", 2, &msg, &msglen)) 1179 1.1 spz return 0; 1180 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, "dh_Ys", 2, &msg, &msglen)) 1181 1.1 spz return 0; 1182 1.1 spz break; 1183 1.1 spz 1184 1.1.1.2 christos case SSL_kECDHE: 1185 1.1.1.2 christos case SSL_kECDHEPSK: 1186 1.1 spz if (msglen < 1) 1187 1.1 spz return 0; 1188 1.1 spz BIO_indent(bio, indent + 2, 80); 1189 1.1 spz if (msg[0] == EXPLICIT_PRIME_CURVE_TYPE) 1190 1.1 spz BIO_puts(bio, "explicit_prime\n"); 1191 1.1 spz else if (msg[0] == EXPLICIT_CHAR2_CURVE_TYPE) 1192 1.1 spz BIO_puts(bio, "explicit_char2\n"); 1193 1.1 spz else if (msg[0] == NAMED_CURVE_TYPE) { 1194 1.1 spz int curve; 1195 1.1 spz if (msglen < 3) 1196 1.1 spz return 0; 1197 1.1 spz curve = (msg[1] << 8) | msg[2]; 1198 1.1 spz BIO_printf(bio, "named_curve: %s (%d)\n", 1199 1.1.1.5 christos ssl_trace_str(curve, ssl_groups_tbl), curve); 1200 1.1 spz msg += 3; 1201 1.1 spz msglen -= 3; 1202 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, "point", 1, &msg, &msglen)) 1203 1.1 spz return 0; 1204 1.1.1.2 christos } else { 1205 1.1.1.2 christos BIO_printf(bio, "UNKNOWN CURVE PARAMETER TYPE %d\n", msg[0]); 1206 1.1.1.2 christos return 0; 1207 1.1 spz } 1208 1.1 spz break; 1209 1.1.1.2 christos 1210 1.1.1.2 christos case SSL_kPSK: 1211 1.1.1.2 christos case SSL_kRSAPSK: 1212 1.1.1.2 christos break; 1213 1.1 spz } 1214 1.1.1.2 christos if (!(id & SSL_PSK)) 1215 1.1.1.2 christos ssl_print_signature(bio, indent, ssl, &msg, &msglen); 1216 1.1.1.2 christos return !msglen; 1217 1.1 spz } 1218 1.1 spz 1219 1.1 spz static int ssl_print_certificate(BIO *bio, int indent, 1220 1.1 spz const unsigned char **pmsg, size_t *pmsglen) 1221 1.1 spz { 1222 1.1 spz size_t msglen = *pmsglen; 1223 1.1 spz size_t clen; 1224 1.1 spz X509 *x; 1225 1.1 spz const unsigned char *p = *pmsg, *q; 1226 1.1.1.5 christos 1227 1.1 spz if (msglen < 3) 1228 1.1 spz return 0; 1229 1.1 spz clen = (p[0] << 16) | (p[1] << 8) | p[2]; 1230 1.1 spz if (msglen < clen + 3) 1231 1.1 spz return 0; 1232 1.1 spz q = p + 3; 1233 1.1 spz BIO_indent(bio, indent, 80); 1234 1.1 spz BIO_printf(bio, "ASN.1Cert, length=%d", (int)clen); 1235 1.1 spz x = d2i_X509(NULL, &q, clen); 1236 1.1 spz if (!x) 1237 1.1 spz BIO_puts(bio, "<UNPARSEABLE CERTIFICATE>\n"); 1238 1.1 spz else { 1239 1.1 spz BIO_puts(bio, "\n------details-----\n"); 1240 1.1 spz X509_print_ex(bio, x, XN_FLAG_ONELINE, 0); 1241 1.1 spz PEM_write_bio_X509(bio, x); 1242 1.1 spz /* Print certificate stuff */ 1243 1.1 spz BIO_puts(bio, "------------------\n"); 1244 1.1 spz X509_free(x); 1245 1.1 spz } 1246 1.1 spz if (q != p + 3 + clen) { 1247 1.1 spz BIO_puts(bio, "<TRAILING GARBAGE AFTER CERTIFICATE>\n"); 1248 1.1 spz } 1249 1.1 spz *pmsg += clen + 3; 1250 1.1 spz *pmsglen -= clen + 3; 1251 1.1 spz return 1; 1252 1.1 spz } 1253 1.1 spz 1254 1.1.1.5 christos static int ssl_print_certificates(BIO *bio, const SSL *ssl, int server, 1255 1.1.1.5 christos int indent, const unsigned char *msg, 1256 1.1.1.5 christos size_t msglen) 1257 1.1 spz { 1258 1.1 spz size_t clen; 1259 1.1.1.5 christos 1260 1.1.1.5 christos if (SSL_IS_TLS13(ssl) 1261 1.1.1.5 christos && !ssl_print_hexbuf(bio, indent, "context", 1, &msg, &msglen)) 1262 1.1.1.5 christos return 0; 1263 1.1.1.5 christos 1264 1.1 spz if (msglen < 3) 1265 1.1 spz return 0; 1266 1.1 spz clen = (msg[0] << 16) | (msg[1] << 8) | msg[2]; 1267 1.1 spz if (msglen != clen + 3) 1268 1.1 spz return 0; 1269 1.1 spz msg += 3; 1270 1.1 spz BIO_indent(bio, indent, 80); 1271 1.1 spz BIO_printf(bio, "certificate_list, length=%d\n", (int)clen); 1272 1.1 spz while (clen > 0) { 1273 1.1 spz if (!ssl_print_certificate(bio, indent + 2, &msg, &clen)) 1274 1.1 spz return 0; 1275 1.1.1.6 christos if (SSL_IS_TLS13(ssl) 1276 1.1.1.6 christos && !ssl_print_extensions(bio, indent + 2, server, 1277 1.1.1.6 christos SSL3_MT_CERTIFICATE, &msg, &clen)) 1278 1.1.1.5 christos return 0; 1279 1.1.1.5 christos 1280 1.1 spz } 1281 1.1 spz return 1; 1282 1.1 spz } 1283 1.1 spz 1284 1.1.1.5 christos static int ssl_print_cert_request(BIO *bio, int indent, const SSL *ssl, 1285 1.1 spz const unsigned char *msg, size_t msglen) 1286 1.1 spz { 1287 1.1 spz size_t xlen; 1288 1.1.1.5 christos unsigned int sigalg; 1289 1.1.1.5 christos 1290 1.1.1.5 christos if (SSL_IS_TLS13(ssl)) { 1291 1.1.1.5 christos if (!ssl_print_hexbuf(bio, indent, "request_context", 1, &msg, &msglen)) 1292 1.1.1.5 christos return 0; 1293 1.1.1.5 christos if (!ssl_print_extensions(bio, indent, 1, 1294 1.1.1.5 christos SSL3_MT_CERTIFICATE_REQUEST, &msg, &msglen)) 1295 1.1.1.5 christos return 0; 1296 1.1.1.5 christos return 1; 1297 1.1.1.5 christos } else { 1298 1.1.1.5 christos if (msglen < 1) 1299 1.1.1.5 christos return 0; 1300 1.1.1.5 christos xlen = msg[0]; 1301 1.1.1.5 christos if (msglen < xlen + 1) 1302 1.1.1.5 christos return 0; 1303 1.1.1.5 christos msg++; 1304 1.1.1.5 christos BIO_indent(bio, indent, 80); 1305 1.1.1.5 christos BIO_printf(bio, "certificate_types (len=%d)\n", (int)xlen); 1306 1.1.1.5 christos if (!ssl_trace_list(bio, indent + 2, msg, xlen, 1, ssl_ctype_tbl)) 1307 1.1.1.5 christos return 0; 1308 1.1.1.5 christos msg += xlen; 1309 1.1.1.5 christos msglen -= xlen + 1; 1310 1.1.1.5 christos } 1311 1.1.1.5 christos if (SSL_USE_SIGALGS(ssl)) { 1312 1.1.1.5 christos if (msglen < 2) 1313 1.1.1.5 christos return 0; 1314 1.1.1.5 christos xlen = (msg[0] << 8) | msg[1]; 1315 1.1.1.5 christos if (msglen < xlen + 2 || (xlen & 1)) 1316 1.1.1.5 christos return 0; 1317 1.1 spz msg += 2; 1318 1.1.1.5 christos msglen -= xlen + 2; 1319 1.1.1.5 christos BIO_indent(bio, indent, 80); 1320 1.1.1.5 christos BIO_printf(bio, "signature_algorithms (len=%d)\n", (int)xlen); 1321 1.1.1.5 christos while (xlen > 0) { 1322 1.1.1.5 christos BIO_indent(bio, indent + 2, 80); 1323 1.1.1.5 christos sigalg = (msg[0] << 8) | msg[1]; 1324 1.1.1.5 christos BIO_printf(bio, "%s (0x%04x)\n", 1325 1.1.1.5 christos ssl_trace_str(sigalg, ssl_sigalg_tbl), sigalg); 1326 1.1.1.5 christos xlen -= 2; 1327 1.1.1.5 christos msg += 2; 1328 1.1.1.5 christos } 1329 1.1.1.5 christos msg += xlen; 1330 1.1 spz } 1331 1.1 spz 1332 1.1.1.4 christos if (msglen < 2) 1333 1.1.1.4 christos return 0; 1334 1.1 spz xlen = (msg[0] << 8) | msg[1]; 1335 1.1 spz BIO_indent(bio, indent, 80); 1336 1.1 spz if (msglen < xlen + 2) 1337 1.1 spz return 0; 1338 1.1 spz msg += 2; 1339 1.1.1.5 christos msglen -= 2 + xlen; 1340 1.1 spz BIO_printf(bio, "certificate_authorities (len=%d)\n", (int)xlen); 1341 1.1 spz while (xlen > 0) { 1342 1.1 spz size_t dlen; 1343 1.1 spz X509_NAME *nm; 1344 1.1 spz const unsigned char *p; 1345 1.1 spz if (xlen < 2) 1346 1.1 spz return 0; 1347 1.1 spz dlen = (msg[0] << 8) | msg[1]; 1348 1.1 spz if (xlen < dlen + 2) 1349 1.1 spz return 0; 1350 1.1 spz msg += 2; 1351 1.1 spz BIO_indent(bio, indent + 2, 80); 1352 1.1 spz BIO_printf(bio, "DistinguishedName (len=%d): ", (int)dlen); 1353 1.1 spz p = msg; 1354 1.1 spz nm = d2i_X509_NAME(NULL, &p, dlen); 1355 1.1 spz if (!nm) { 1356 1.1 spz BIO_puts(bio, "<UNPARSEABLE DN>\n"); 1357 1.1 spz } else { 1358 1.1 spz X509_NAME_print_ex(bio, nm, 0, XN_FLAG_ONELINE); 1359 1.1 spz BIO_puts(bio, "\n"); 1360 1.1 spz X509_NAME_free(nm); 1361 1.1 spz } 1362 1.1 spz xlen -= dlen + 2; 1363 1.1 spz msg += dlen; 1364 1.1 spz } 1365 1.1.1.5 christos if (SSL_IS_TLS13(ssl)) { 1366 1.1.1.5 christos if (!ssl_print_hexbuf(bio, indent, "request_extensions", 2, 1367 1.1.1.5 christos &msg, &msglen)) 1368 1.1.1.5 christos return 0; 1369 1.1.1.5 christos } 1370 1.1.1.5 christos return msglen == 0; 1371 1.1 spz } 1372 1.1 spz 1373 1.1.1.5 christos static int ssl_print_ticket(BIO *bio, int indent, const SSL *ssl, 1374 1.1 spz const unsigned char *msg, size_t msglen) 1375 1.1 spz { 1376 1.1 spz unsigned int tick_life; 1377 1.1.1.5 christos 1378 1.1 spz if (msglen == 0) { 1379 1.1 spz BIO_indent(bio, indent + 2, 80); 1380 1.1 spz BIO_puts(bio, "No Ticket\n"); 1381 1.1 spz return 1; 1382 1.1 spz } 1383 1.1 spz if (msglen < 4) 1384 1.1 spz return 0; 1385 1.1.1.7 christos tick_life = ((unsigned int)msg[0] << 24) 1386 1.1.1.7 christos | ((unsigned int)msg[1] << 16) 1387 1.1.1.7 christos | ((unsigned int)msg[2] << 8) 1388 1.1.1.7 christos | (unsigned int)msg[3]; 1389 1.1 spz msglen -= 4; 1390 1.1 spz msg += 4; 1391 1.1 spz BIO_indent(bio, indent + 2, 80); 1392 1.1 spz BIO_printf(bio, "ticket_lifetime_hint=%u\n", tick_life); 1393 1.1.1.5 christos if (SSL_IS_TLS13(ssl)) { 1394 1.1.1.5 christos unsigned int ticket_age_add; 1395 1.1.1.5 christos 1396 1.1.1.5 christos if (msglen < 4) 1397 1.1.1.5 christos return 0; 1398 1.1.1.5 christos ticket_age_add = 1399 1.1.1.7 christos ((unsigned int)msg[0] << 24) 1400 1.1.1.7 christos | ((unsigned int)msg[1] << 16) 1401 1.1.1.7 christos | ((unsigned int)msg[2] << 8) 1402 1.1.1.7 christos | (unsigned int)msg[3]; 1403 1.1.1.5 christos msglen -= 4; 1404 1.1.1.5 christos msg += 4; 1405 1.1.1.5 christos BIO_indent(bio, indent + 2, 80); 1406 1.1.1.5 christos BIO_printf(bio, "ticket_age_add=%u\n", ticket_age_add); 1407 1.1.1.5 christos if (!ssl_print_hexbuf(bio, indent + 2, "ticket_nonce", 1, &msg, 1408 1.1.1.5 christos &msglen)) 1409 1.1.1.5 christos return 0; 1410 1.1.1.5 christos } 1411 1.1 spz if (!ssl_print_hexbuf(bio, indent + 2, "ticket", 2, &msg, &msglen)) 1412 1.1 spz return 0; 1413 1.1.1.5 christos if (SSL_IS_TLS13(ssl) 1414 1.1.1.5 christos && !ssl_print_extensions(bio, indent + 2, 0, 1415 1.1.1.5 christos SSL3_MT_NEWSESSION_TICKET, &msg, &msglen)) 1416 1.1.1.5 christos return 0; 1417 1.1 spz if (msglen) 1418 1.1 spz return 0; 1419 1.1 spz return 1; 1420 1.1 spz } 1421 1.1 spz 1422 1.1.1.5 christos static int ssl_print_handshake(BIO *bio, const SSL *ssl, int server, 1423 1.1 spz const unsigned char *msg, size_t msglen, 1424 1.1 spz int indent) 1425 1.1 spz { 1426 1.1 spz size_t hlen; 1427 1.1 spz unsigned char htype; 1428 1.1.1.5 christos 1429 1.1 spz if (msglen < 4) 1430 1.1 spz return 0; 1431 1.1 spz htype = msg[0]; 1432 1.1 spz hlen = (msg[1] << 16) | (msg[2] << 8) | msg[3]; 1433 1.1 spz BIO_indent(bio, indent, 80); 1434 1.1 spz BIO_printf(bio, "%s, Length=%d\n", 1435 1.1 spz ssl_trace_str(htype, ssl_handshake_tbl), (int)hlen); 1436 1.1 spz msg += 4; 1437 1.1 spz msglen -= 4; 1438 1.1 spz if (SSL_IS_DTLS(ssl)) { 1439 1.1 spz if (msglen < 8) 1440 1.1 spz return 0; 1441 1.1 spz BIO_indent(bio, indent, 80); 1442 1.1 spz BIO_printf(bio, "message_seq=%d, fragment_offset=%d, " 1443 1.1 spz "fragment_length=%d\n", 1444 1.1 spz (msg[0] << 8) | msg[1], 1445 1.1 spz (msg[2] << 16) | (msg[3] << 8) | msg[4], 1446 1.1 spz (msg[5] << 16) | (msg[6] << 8) | msg[7]); 1447 1.1 spz msg += 8; 1448 1.1 spz msglen -= 8; 1449 1.1 spz } 1450 1.1 spz if (msglen < hlen) 1451 1.1 spz return 0; 1452 1.1 spz switch (htype) { 1453 1.1 spz case SSL3_MT_CLIENT_HELLO: 1454 1.1 spz if (!ssl_print_client_hello(bio, ssl, indent + 2, msg, msglen)) 1455 1.1 spz return 0; 1456 1.1 spz break; 1457 1.1 spz 1458 1.1 spz case DTLS1_MT_HELLO_VERIFY_REQUEST: 1459 1.1 spz if (!dtls_print_hello_vfyrequest(bio, indent + 2, msg, msglen)) 1460 1.1 spz return 0; 1461 1.1 spz break; 1462 1.1 spz 1463 1.1 spz case SSL3_MT_SERVER_HELLO: 1464 1.1 spz if (!ssl_print_server_hello(bio, indent + 2, msg, msglen)) 1465 1.1 spz return 0; 1466 1.1 spz break; 1467 1.1 spz 1468 1.1 spz case SSL3_MT_SERVER_KEY_EXCHANGE: 1469 1.1 spz if (!ssl_print_server_keyex(bio, indent + 2, ssl, msg, msglen)) 1470 1.1 spz return 0; 1471 1.1 spz break; 1472 1.1 spz 1473 1.1 spz case SSL3_MT_CLIENT_KEY_EXCHANGE: 1474 1.1 spz if (!ssl_print_client_keyex(bio, indent + 2, ssl, msg, msglen)) 1475 1.1 spz return 0; 1476 1.1 spz break; 1477 1.1 spz 1478 1.1 spz case SSL3_MT_CERTIFICATE: 1479 1.1.1.5 christos if (!ssl_print_certificates(bio, ssl, server, indent + 2, msg, msglen)) 1480 1.1 spz return 0; 1481 1.1 spz break; 1482 1.1 spz 1483 1.1 spz case SSL3_MT_CERTIFICATE_VERIFY: 1484 1.1 spz if (!ssl_print_signature(bio, indent + 2, ssl, &msg, &msglen)) 1485 1.1 spz return 0; 1486 1.1 spz break; 1487 1.1 spz 1488 1.1 spz case SSL3_MT_CERTIFICATE_REQUEST: 1489 1.1 spz if (!ssl_print_cert_request(bio, indent + 2, ssl, msg, msglen)) 1490 1.1 spz return 0; 1491 1.1 spz break; 1492 1.1 spz 1493 1.1 spz case SSL3_MT_FINISHED: 1494 1.1 spz ssl_print_hex(bio, indent + 2, "verify_data", msg, msglen); 1495 1.1 spz break; 1496 1.1 spz 1497 1.1 spz case SSL3_MT_SERVER_DONE: 1498 1.1 spz if (msglen != 0) 1499 1.1 spz ssl_print_hex(bio, indent + 2, "unexpected value", msg, msglen); 1500 1.1 spz break; 1501 1.1 spz 1502 1.1 spz case SSL3_MT_NEWSESSION_TICKET: 1503 1.1.1.5 christos if (!ssl_print_ticket(bio, indent + 2, ssl, msg, msglen)) 1504 1.1.1.5 christos return 0; 1505 1.1.1.5 christos break; 1506 1.1.1.5 christos 1507 1.1.1.5 christos case SSL3_MT_ENCRYPTED_EXTENSIONS: 1508 1.1.1.5 christos if (!ssl_print_extensions(bio, indent + 2, 1, 1509 1.1.1.5 christos SSL3_MT_ENCRYPTED_EXTENSIONS, &msg, &msglen)) 1510 1.1.1.5 christos return 0; 1511 1.1.1.5 christos break; 1512 1.1.1.5 christos 1513 1.1.1.5 christos case SSL3_MT_KEY_UPDATE: 1514 1.1.1.5 christos if (msglen != 1) { 1515 1.1.1.5 christos ssl_print_hex(bio, indent + 2, "unexpected value", msg, msglen); 1516 1.1.1.5 christos return 0; 1517 1.1.1.5 christos } 1518 1.1.1.5 christos if (!ssl_trace_list(bio, indent + 2, msg, msglen, 1, 1519 1.1.1.5 christos ssl_key_update_tbl)) 1520 1.1 spz return 0; 1521 1.1 spz break; 1522 1.1 spz 1523 1.1 spz default: 1524 1.1 spz BIO_indent(bio, indent + 2, 80); 1525 1.1 spz BIO_puts(bio, "Unsupported, hex dump follows:\n"); 1526 1.1.1.2 christos BIO_dump_indent(bio, (const char *)msg, msglen, indent + 4); 1527 1.1 spz } 1528 1.1 spz return 1; 1529 1.1 spz } 1530 1.1 spz 1531 1.1 spz void SSL_trace(int write_p, int version, int content_type, 1532 1.1 spz const void *buf, size_t msglen, SSL *ssl, void *arg) 1533 1.1 spz { 1534 1.1 spz const unsigned char *msg = buf; 1535 1.1 spz BIO *bio = arg; 1536 1.1 spz 1537 1.1 spz switch (content_type) { 1538 1.1 spz case SSL3_RT_HEADER: 1539 1.1 spz { 1540 1.1.1.4 christos int hvers; 1541 1.1.1.4 christos 1542 1.1.1.4 christos /* avoid overlapping with length at the end of buffer */ 1543 1.1.1.4 christos if (msglen < (size_t)(SSL_IS_DTLS(ssl) ? 1544 1.1.1.5 christos DTLS1_RT_HEADER_LENGTH : SSL3_RT_HEADER_LENGTH)) { 1545 1.1.1.4 christos BIO_puts(bio, write_p ? "Sent" : "Received"); 1546 1.1.1.4 christos ssl_print_hex(bio, 0, " too short message", msg, msglen); 1547 1.1.1.4 christos break; 1548 1.1.1.4 christos } 1549 1.1.1.4 christos hvers = msg[1] << 8 | msg[2]; 1550 1.1 spz BIO_puts(bio, write_p ? "Sent" : "Received"); 1551 1.1 spz BIO_printf(bio, " Record\nHeader:\n Version = %s (0x%x)\n", 1552 1.1 spz ssl_trace_str(hvers, ssl_version_tbl), hvers); 1553 1.1 spz if (SSL_IS_DTLS(ssl)) { 1554 1.1 spz BIO_printf(bio, 1555 1.1 spz " epoch=%d, sequence_number=%04x%04x%04x\n", 1556 1.1 spz (msg[3] << 8 | msg[4]), 1557 1.1 spz (msg[5] << 8 | msg[6]), 1558 1.1 spz (msg[7] << 8 | msg[8]), (msg[9] << 8 | msg[10])); 1559 1.1 spz } 1560 1.1 spz 1561 1.1 spz BIO_printf(bio, " Content Type = %s (%d)\n Length = %d", 1562 1.1 spz ssl_trace_str(msg[0], ssl_content_tbl), msg[0], 1563 1.1 spz msg[msglen - 2] << 8 | msg[msglen - 1]); 1564 1.1 spz } 1565 1.1 spz break; 1566 1.1.1.5 christos 1567 1.1.1.5 christos case SSL3_RT_INNER_CONTENT_TYPE: 1568 1.1.1.5 christos BIO_printf(bio, " Inner Content Type = %s (%d)", 1569 1.1.1.5 christos ssl_trace_str(msg[0], ssl_content_tbl), msg[0]); 1570 1.1.1.5 christos break; 1571 1.1.1.5 christos 1572 1.1 spz case SSL3_RT_HANDSHAKE: 1573 1.1.1.5 christos if (!ssl_print_handshake(bio, ssl, ssl->server ? write_p : !write_p, 1574 1.1.1.5 christos msg, msglen, 4)) 1575 1.1 spz BIO_printf(bio, "Message length parse error!\n"); 1576 1.1 spz break; 1577 1.1 spz 1578 1.1 spz case SSL3_RT_CHANGE_CIPHER_SPEC: 1579 1.1 spz if (msglen == 1 && msg[0] == 1) 1580 1.1 spz BIO_puts(bio, " change_cipher_spec (1)\n"); 1581 1.1 spz else 1582 1.1 spz ssl_print_hex(bio, 4, "unknown value", msg, msglen); 1583 1.1 spz break; 1584 1.1 spz 1585 1.1 spz case SSL3_RT_ALERT: 1586 1.1.1.5 christos if (msglen != 2) 1587 1.1 spz BIO_puts(bio, " Illegal Alert Length\n"); 1588 1.1.1.5 christos else { 1589 1.1 spz BIO_printf(bio, " Level=%s(%d), description=%s(%d)\n", 1590 1.1 spz SSL_alert_type_string_long(msg[0] << 8), 1591 1.1 spz msg[0], SSL_alert_desc_string_long(msg[1]), msg[1]); 1592 1.1 spz } 1593 1.1 spz 1594 1.1 spz } 1595 1.1 spz 1596 1.1 spz BIO_puts(bio, "\n"); 1597 1.1 spz } 1598 1.1 spz 1599 1.1 spz #endif 1600