1 /* 2 * Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved. 3 * Copyright 2017 BaishanCloud. All rights reserved. 4 * 5 * Licensed under the Apache License 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * https://www.openssl.org/source/license.html 9 * or in the file LICENSE in the source distribution. 10 */ 11 12 #include <stdio.h> 13 #include <string.h> 14 15 #include <openssl/opensslconf.h> 16 #include <openssl/err.h> 17 #include <openssl/e_os2.h> 18 #include <openssl/ssl.h> 19 #include <openssl/ssl3.h> 20 #include <openssl/tls1.h> 21 22 #include "internal/nelem.h" 23 #include "testutil.h" 24 25 typedef struct cipher_id_name { 26 int id; 27 const char *name; 28 } CIPHER_ID_NAME; 29 30 /* Cipher suites, copied from t1_trce.c */ 31 static CIPHER_ID_NAME cipher_names[] = { 32 {0x0000, "TLS_NULL_WITH_NULL_NULL"}, 33 {0x0001, "TLS_RSA_WITH_NULL_MD5"}, 34 {0x0002, "TLS_RSA_WITH_NULL_SHA"}, 35 {0x0003, "TLS_RSA_EXPORT_WITH_RC4_40_MD5"}, 36 {0x0004, "TLS_RSA_WITH_RC4_128_MD5"}, 37 {0x0005, "TLS_RSA_WITH_RC4_128_SHA"}, 38 {0x0006, "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"}, 39 {0x0007, "TLS_RSA_WITH_IDEA_CBC_SHA"}, 40 {0x0008, "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 41 {0x0009, "TLS_RSA_WITH_DES_CBC_SHA"}, 42 {0x000A, "TLS_RSA_WITH_3DES_EDE_CBC_SHA"}, 43 {0x000B, "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"}, 44 {0x000C, "TLS_DH_DSS_WITH_DES_CBC_SHA"}, 45 {0x000D, "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"}, 46 {0x000E, "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 47 {0x000F, "TLS_DH_RSA_WITH_DES_CBC_SHA"}, 48 {0x0010, "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"}, 49 {0x0011, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"}, 50 {0x0012, "TLS_DHE_DSS_WITH_DES_CBC_SHA"}, 51 {0x0013, "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"}, 52 {0x0014, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 53 {0x0015, "TLS_DHE_RSA_WITH_DES_CBC_SHA"}, 54 {0x0016, "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"}, 55 {0x0017, "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"}, 56 {0x0018, "TLS_DH_anon_WITH_RC4_128_MD5"}, 57 {0x0019, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"}, 58 {0x001A, "TLS_DH_anon_WITH_DES_CBC_SHA"}, 59 {0x001B, "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"}, 60 {0x001D, "SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA"}, 61 {0x001E, "SSL_FORTEZZA_KEA_WITH_RC4_128_SHA"}, 62 {0x001F, "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"}, 63 {0x0020, "TLS_KRB5_WITH_RC4_128_SHA"}, 64 {0x0021, "TLS_KRB5_WITH_IDEA_CBC_SHA"}, 65 {0x0022, "TLS_KRB5_WITH_DES_CBC_MD5"}, 66 {0x0023, "TLS_KRB5_WITH_3DES_EDE_CBC_MD5"}, 67 {0x0024, "TLS_KRB5_WITH_RC4_128_MD5"}, 68 {0x0025, "TLS_KRB5_WITH_IDEA_CBC_MD5"}, 69 {0x0026, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"}, 70 {0x0027, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"}, 71 {0x0028, "TLS_KRB5_EXPORT_WITH_RC4_40_SHA"}, 72 {0x0029, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"}, 73 {0x002A, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"}, 74 {0x002B, "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"}, 75 {0x002C, "TLS_PSK_WITH_NULL_SHA"}, 76 {0x002D, "TLS_DHE_PSK_WITH_NULL_SHA"}, 77 {0x002E, "TLS_RSA_PSK_WITH_NULL_SHA"}, 78 {0x002F, "TLS_RSA_WITH_AES_128_CBC_SHA"}, 79 {0x0030, "TLS_DH_DSS_WITH_AES_128_CBC_SHA"}, 80 {0x0031, "TLS_DH_RSA_WITH_AES_128_CBC_SHA"}, 81 {0x0032, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"}, 82 {0x0033, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"}, 83 {0x0034, "TLS_DH_anon_WITH_AES_128_CBC_SHA"}, 84 {0x0035, "TLS_RSA_WITH_AES_256_CBC_SHA"}, 85 {0x0036, "TLS_DH_DSS_WITH_AES_256_CBC_SHA"}, 86 {0x0037, "TLS_DH_RSA_WITH_AES_256_CBC_SHA"}, 87 {0x0038, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"}, 88 {0x0039, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"}, 89 {0x003A, "TLS_DH_anon_WITH_AES_256_CBC_SHA"}, 90 {0x003B, "TLS_RSA_WITH_NULL_SHA256"}, 91 {0x003C, "TLS_RSA_WITH_AES_128_CBC_SHA256"}, 92 {0x003D, "TLS_RSA_WITH_AES_256_CBC_SHA256"}, 93 {0x003E, "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"}, 94 {0x003F, "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"}, 95 {0x0040, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"}, 96 {0x0041, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"}, 97 {0x0042, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA"}, 98 {0x0043, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA"}, 99 {0x0044, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA"}, 100 {0x0045, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA"}, 101 {0x0046, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"}, 102 {0x0067, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"}, 103 {0x0068, "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"}, 104 {0x0069, "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"}, 105 {0x006A, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"}, 106 {0x006B, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"}, 107 {0x006C, "TLS_DH_anon_WITH_AES_128_CBC_SHA256"}, 108 {0x006D, "TLS_DH_anon_WITH_AES_256_CBC_SHA256"}, 109 {0x0084, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA"}, 110 {0x0085, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA"}, 111 {0x0086, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA"}, 112 {0x0087, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA"}, 113 {0x0088, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA"}, 114 {0x0089, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"}, 115 {0x008A, "TLS_PSK_WITH_RC4_128_SHA"}, 116 {0x008B, "TLS_PSK_WITH_3DES_EDE_CBC_SHA"}, 117 {0x008C, "TLS_PSK_WITH_AES_128_CBC_SHA"}, 118 {0x008D, "TLS_PSK_WITH_AES_256_CBC_SHA"}, 119 {0x008E, "TLS_DHE_PSK_WITH_RC4_128_SHA"}, 120 {0x008F, "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"}, 121 {0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA"}, 122 {0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA"}, 123 {0x0092, "TLS_RSA_PSK_WITH_RC4_128_SHA"}, 124 {0x0093, "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"}, 125 {0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"}, 126 {0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"}, 127 {0x0096, "TLS_RSA_WITH_SEED_CBC_SHA"}, 128 {0x0097, "TLS_DH_DSS_WITH_SEED_CBC_SHA"}, 129 {0x0098, "TLS_DH_RSA_WITH_SEED_CBC_SHA"}, 130 {0x0099, "TLS_DHE_DSS_WITH_SEED_CBC_SHA"}, 131 {0x009A, "TLS_DHE_RSA_WITH_SEED_CBC_SHA"}, 132 {0x009B, "TLS_DH_anon_WITH_SEED_CBC_SHA"}, 133 {0x009C, "TLS_RSA_WITH_AES_128_GCM_SHA256"}, 134 {0x009D, "TLS_RSA_WITH_AES_256_GCM_SHA384"}, 135 {0x009E, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"}, 136 {0x009F, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"}, 137 {0x00A0, "TLS_DH_RSA_WITH_AES_128_GCM_SHA256"}, 138 {0x00A1, "TLS_DH_RSA_WITH_AES_256_GCM_SHA384"}, 139 {0x00A2, "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"}, 140 {0x00A3, "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"}, 141 {0x00A4, "TLS_DH_DSS_WITH_AES_128_GCM_SHA256"}, 142 {0x00A5, "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"}, 143 {0x00A6, "TLS_DH_anon_WITH_AES_128_GCM_SHA256"}, 144 {0x00A7, "TLS_DH_anon_WITH_AES_256_GCM_SHA384"}, 145 {0x00A8, "TLS_PSK_WITH_AES_128_GCM_SHA256"}, 146 {0x00A9, "TLS_PSK_WITH_AES_256_GCM_SHA384"}, 147 {0x00AA, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"}, 148 {0x00AB, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"}, 149 {0x00AC, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"}, 150 {0x00AD, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"}, 151 {0x00AE, "TLS_PSK_WITH_AES_128_CBC_SHA256"}, 152 {0x00AF, "TLS_PSK_WITH_AES_256_CBC_SHA384"}, 153 {0x00B0, "TLS_PSK_WITH_NULL_SHA256"}, 154 {0x00B1, "TLS_PSK_WITH_NULL_SHA384"}, 155 {0x00B2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"}, 156 {0x00B3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"}, 157 {0x00B4, "TLS_DHE_PSK_WITH_NULL_SHA256"}, 158 {0x00B5, "TLS_DHE_PSK_WITH_NULL_SHA384"}, 159 {0x00B6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"}, 160 {0x00B7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"}, 161 {0x00B8, "TLS_RSA_PSK_WITH_NULL_SHA256"}, 162 {0x00B9, "TLS_RSA_PSK_WITH_NULL_SHA384"}, 163 {0x00BA, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 164 {0x00BB, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"}, 165 {0x00BC, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 166 {0x00BD, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256"}, 167 {0x00BE, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 168 {0x00BF, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"}, 169 {0x00C0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"}, 170 {0x00C1, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"}, 171 {0x00C2, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"}, 172 {0x00C3, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256"}, 173 {0x00C4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256"}, 174 {0x00C5, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"}, 175 {0x00FF, "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"}, 176 {0x5600, "TLS_FALLBACK_SCSV"}, 177 {0xC001, "TLS_ECDH_ECDSA_WITH_NULL_SHA"}, 178 {0xC002, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"}, 179 {0xC003, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"}, 180 {0xC004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"}, 181 {0xC005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"}, 182 {0xC006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA"}, 183 {0xC007, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"}, 184 {0xC008, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"}, 185 {0xC009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"}, 186 {0xC00A, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"}, 187 {0xC00B, "TLS_ECDH_RSA_WITH_NULL_SHA"}, 188 {0xC00C, "TLS_ECDH_RSA_WITH_RC4_128_SHA"}, 189 {0xC00D, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"}, 190 {0xC00E, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"}, 191 {0xC00F, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"}, 192 {0xC010, "TLS_ECDHE_RSA_WITH_NULL_SHA"}, 193 {0xC011, "TLS_ECDHE_RSA_WITH_RC4_128_SHA"}, 194 {0xC012, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"}, 195 {0xC013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"}, 196 {0xC014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"}, 197 {0xC015, "TLS_ECDH_anon_WITH_NULL_SHA"}, 198 {0xC016, "TLS_ECDH_anon_WITH_RC4_128_SHA"}, 199 {0xC017, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"}, 200 {0xC018, "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"}, 201 {0xC019, "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"}, 202 {0xC01A, "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA"}, 203 {0xC01B, "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA"}, 204 {0xC01C, "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA"}, 205 {0xC01D, "TLS_SRP_SHA_WITH_AES_128_CBC_SHA"}, 206 {0xC01E, "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA"}, 207 {0xC01F, "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA"}, 208 {0xC020, "TLS_SRP_SHA_WITH_AES_256_CBC_SHA"}, 209 {0xC021, "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA"}, 210 {0xC022, "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA"}, 211 {0xC023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"}, 212 {0xC024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"}, 213 {0xC025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"}, 214 {0xC026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"}, 215 {0xC027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"}, 216 {0xC028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"}, 217 {0xC029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"}, 218 {0xC02A, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"}, 219 {0xC02B, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"}, 220 {0xC02C, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"}, 221 {0xC02D, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"}, 222 {0xC02E, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"}, 223 {0xC02F, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"}, 224 {0xC030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"}, 225 {0xC031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"}, 226 {0xC032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"}, 227 {0xC033, "TLS_ECDHE_PSK_WITH_RC4_128_SHA"}, 228 {0xC034, "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA"}, 229 {0xC035, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA"}, 230 {0xC036, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA"}, 231 {0xC037, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256"}, 232 {0xC038, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384"}, 233 {0xC039, "TLS_ECDHE_PSK_WITH_NULL_SHA"}, 234 {0xC03A, "TLS_ECDHE_PSK_WITH_NULL_SHA256"}, 235 {0xC03B, "TLS_ECDHE_PSK_WITH_NULL_SHA384"}, 236 {0xC03C, "TLS_RSA_WITH_ARIA_128_CBC_SHA256"}, 237 {0xC03D, "TLS_RSA_WITH_ARIA_256_CBC_SHA384"}, 238 {0xC03E, "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"}, 239 {0xC03F, "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"}, 240 {0xC040, "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"}, 241 {0xC041, "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"}, 242 {0xC042, "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256"}, 243 {0xC043, "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384"}, 244 {0xC044, "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256"}, 245 {0xC045, "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384"}, 246 {0xC046, "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"}, 247 {0xC047, "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"}, 248 {0xC048, "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256"}, 249 {0xC049, "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384"}, 250 {0xC04A, "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256"}, 251 {0xC04B, "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384"}, 252 {0xC04C, "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256"}, 253 {0xC04D, "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384"}, 254 {0xC04E, "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256"}, 255 {0xC04F, "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384"}, 256 {0xC050, "TLS_RSA_WITH_ARIA_128_GCM_SHA256"}, 257 {0xC051, "TLS_RSA_WITH_ARIA_256_GCM_SHA384"}, 258 {0xC052, "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256"}, 259 {0xC053, "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384"}, 260 {0xC054, "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"}, 261 {0xC055, "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"}, 262 {0xC056, "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256"}, 263 {0xC057, "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384"}, 264 {0xC058, "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"}, 265 {0xC059, "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"}, 266 {0xC05A, "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"}, 267 {0xC05B, "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"}, 268 {0xC05C, "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256"}, 269 {0xC05D, "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384"}, 270 {0xC05E, "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256"}, 271 {0xC05F, "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384"}, 272 {0xC060, "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256"}, 273 {0xC061, "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384"}, 274 {0xC062, "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256"}, 275 {0xC063, "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384"}, 276 {0xC064, "TLS_PSK_WITH_ARIA_128_CBC_SHA256"}, 277 {0xC065, "TLS_PSK_WITH_ARIA_256_CBC_SHA384"}, 278 {0xC066, "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256"}, 279 {0xC067, "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384"}, 280 {0xC068, "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"}, 281 {0xC069, "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"}, 282 {0xC06A, "TLS_PSK_WITH_ARIA_128_GCM_SHA256"}, 283 {0xC06B, "TLS_PSK_WITH_ARIA_256_GCM_SHA384"}, 284 {0xC06C, "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256"}, 285 {0xC06D, "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384"}, 286 {0xC06E, "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"}, 287 {0xC06F, "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"}, 288 {0xC070, "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256"}, 289 {0xC071, "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384"}, 290 {0xC072, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"}, 291 {0xC073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"}, 292 {0xC074, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"}, 293 {0xC075, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"}, 294 {0xC076, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 295 {0xC077, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384"}, 296 {0xC078, "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, 297 {0xC079, "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384"}, 298 {0xC07A, "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 299 {0xC07B, "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 300 {0xC07C, "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 301 {0xC07D, "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 302 {0xC07E, "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 303 {0xC07F, "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 304 {0xC080, "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256"}, 305 {0xC081, "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384"}, 306 {0xC082, "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"}, 307 {0xC083, "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"}, 308 {0xC084, "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"}, 309 {0xC085, "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"}, 310 {0xC086, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"}, 311 {0xC087, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"}, 312 {0xC088, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"}, 313 {0xC089, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"}, 314 {0xC08A, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 315 {0xC08B, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 316 {0xC08C, "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, 317 {0xC08D, "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, 318 {0xC08E, "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"}, 319 {0xC08F, "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"}, 320 {0xC090, "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256"}, 321 {0xC091, "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384"}, 322 {0xC092, "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"}, 323 {0xC093, "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"}, 324 {0xC094, "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, 325 {0xC095, "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, 326 {0xC096, "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, 327 {0xC097, "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, 328 {0xC098, "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, 329 {0xC099, "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, 330 {0xC09A, "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, 331 {0xC09B, "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, 332 {0xC09C, "TLS_RSA_WITH_AES_128_CCM"}, 333 {0xC09D, "TLS_RSA_WITH_AES_256_CCM"}, 334 {0xC09E, "TLS_DHE_RSA_WITH_AES_128_CCM"}, 335 {0xC09F, "TLS_DHE_RSA_WITH_AES_256_CCM"}, 336 {0xC0A0, "TLS_RSA_WITH_AES_128_CCM_8"}, 337 {0xC0A1, "TLS_RSA_WITH_AES_256_CCM_8"}, 338 {0xC0A2, "TLS_DHE_RSA_WITH_AES_128_CCM_8"}, 339 {0xC0A3, "TLS_DHE_RSA_WITH_AES_256_CCM_8"}, 340 {0xC0A4, "TLS_PSK_WITH_AES_128_CCM"}, 341 {0xC0A5, "TLS_PSK_WITH_AES_256_CCM"}, 342 {0xC0A6, "TLS_DHE_PSK_WITH_AES_128_CCM"}, 343 {0xC0A7, "TLS_DHE_PSK_WITH_AES_256_CCM"}, 344 {0xC0A8, "TLS_PSK_WITH_AES_128_CCM_8"}, 345 {0xC0A9, "TLS_PSK_WITH_AES_256_CCM_8"}, 346 {0xC0AA, "TLS_PSK_DHE_WITH_AES_128_CCM_8"}, 347 {0xC0AB, "TLS_PSK_DHE_WITH_AES_256_CCM_8"}, 348 {0xC0AC, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM"}, 349 {0xC0AD, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM"}, 350 {0xC0AE, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8"}, 351 {0xC0AF, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8"}, 352 {0xCCA8, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"}, 353 {0xCCA9, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"}, 354 {0xCCAA, "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256"}, 355 {0xCCAB, "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256"}, 356 {0xCCAC, "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256"}, 357 {0xCCAD, "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256"}, 358 {0xCCAE, "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256"}, 359 {0x1301, "TLS_AES_128_GCM_SHA256"}, 360 {0x1302, "TLS_AES_256_GCM_SHA384"}, 361 {0x1303, "TLS_CHACHA20_POLY1305_SHA256"}, 362 {0x1304, "TLS_AES_128_CCM_SHA256"}, 363 {0x1305, "TLS_AES_128_CCM_8_SHA256"}, 364 {0xFEFE, "SSL_RSA_FIPS_WITH_DES_CBC_SHA"}, 365 {0xFEFF, "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA"}, 366 }; 367 368 static const char *get_std_name_by_id(int id) 369 { 370 size_t i; 371 372 for (i = 0; i < OSSL_NELEM(cipher_names); i++) 373 if (cipher_names[i].id == id) 374 return cipher_names[i].name; 375 376 return NULL; 377 } 378 379 static int test_cipher_name(void) 380 { 381 SSL_CTX *ctx = NULL; 382 SSL *ssl = NULL; 383 const SSL_CIPHER *c; 384 STACK_OF(SSL_CIPHER) *sk = NULL; 385 const char *ciphers = "ALL:eNULL", *p, *q, *r; 386 int i, id = 0, ret = 0; 387 388 /* tests for invalid input */ 389 p = SSL_CIPHER_standard_name(NULL); 390 if (!TEST_str_eq(p, "(NONE)")) { 391 TEST_info("test_cipher_name(std) failed: NULL input doesn't return \"(NONE)\"\n"); 392 goto err; 393 } 394 395 p = OPENSSL_cipher_name(NULL); 396 if (!TEST_str_eq(p, "(NONE)")) { 397 TEST_info("test_cipher_name(ossl) failed: NULL input doesn't return \"(NONE)\"\n"); 398 goto err; 399 } 400 401 p = OPENSSL_cipher_name("This is not a valid cipher"); 402 if (!TEST_str_eq(p, "(NONE)")) { 403 TEST_info("test_cipher_name(ossl) failed: invalid input doesn't return \"(NONE)\"\n"); 404 goto err; 405 } 406 407 /* tests for valid input */ 408 ctx = SSL_CTX_new(TLS_server_method()); 409 if (ctx == NULL) { 410 TEST_info("test_cipher_name failed: internal error\n"); 411 goto err; 412 } 413 414 if (!SSL_CTX_set_cipher_list(ctx, ciphers)) { 415 TEST_info("test_cipher_name failed: internal error\n"); 416 goto err; 417 } 418 419 ssl = SSL_new(ctx); 420 if (ssl == NULL) { 421 TEST_info("test_cipher_name failed: internal error\n"); 422 goto err; 423 } 424 425 sk = SSL_get_ciphers(ssl); 426 if (sk == NULL) { 427 TEST_info("test_cipher_name failed: internal error\n"); 428 goto err; 429 } 430 431 for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { 432 c = sk_SSL_CIPHER_value(sk, i); 433 id = SSL_CIPHER_get_id(c) & 0xFFFF; 434 if ((id == 0xC102) || (id == 0xFF85) ||(id == 0xFF87)) 435 /* skip GOST2012-GOST8912-GOST891 and GOST2012-NULL-GOST12 */ 436 continue; 437 p = SSL_CIPHER_standard_name(c); 438 q = get_std_name_by_id(id); 439 if (!TEST_ptr(p)) { 440 TEST_info("test_cipher_name failed: expected %s, got NULL, cipher %x\n", 441 q, id); 442 goto err; 443 } 444 /* check if p is a valid standard name */ 445 if (!TEST_str_eq(p, q)) { 446 TEST_info("test_cipher_name(std) failed: expected %s, got %s, cipher %x\n", 447 q, p, id); 448 goto err; 449 } 450 /* test OPENSSL_cipher_name */ 451 q = SSL_CIPHER_get_name(c); 452 r = OPENSSL_cipher_name(p); 453 if (!TEST_str_eq(r, q)) { 454 TEST_info("test_cipher_name(ossl) failed: expected %s, got %s, cipher %x\n", 455 q, r, id); 456 goto err; 457 } 458 } 459 ret = 1; 460 err: 461 SSL_CTX_free(ctx); 462 SSL_free(ssl); 463 return ret; 464 } 465 466 int setup_tests(void) 467 { 468 ADD_TEST(test_cipher_name); 469 return 1; 470 } 471