unit3205.c (26189B)
1 /*************************************************************************** 2 * _ _ ____ _ 3 * Project ___| | | | _ \| | 4 * / __| | | | |_) | | 5 * | (__| |_| | _ <| |___ 6 * \___|\___/|_| \_\_____| 7 * 8 * Copyright (C) Jan Venekamp, <jan@venekamp.net> 9 * 10 * This software is licensed as described in the file COPYING, which 11 * you should have received as part of this distribution. The terms 12 * are also available at https://curl.se/docs/copyright.html. 13 * 14 * You may opt to use, copy, modify, merge, publish, distribute and/or sell 15 * copies of the Software, and permit persons to whom the Software is 16 * furnished to do so, under the terms of the COPYING file. 17 * 18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19 * KIND, either express or implied. 20 * 21 * SPDX-License-Identifier: curl 22 * 23 ***************************************************************************/ 24 #include "unitcheck.h" 25 26 #include "vtls/cipher_suite.h" 27 28 static CURLcode test_unit3205(char *arg) 29 { 30 UNITTEST_BEGIN_SIMPLE 31 32 #if defined(USE_MBEDTLS) || defined(USE_RUSTLS) 33 34 struct test_cs_entry { 35 uint16_t id; 36 const char *rfc; 37 const char *openssl; 38 }; 39 40 static const struct test_cs_entry test_cs_list[] = { 41 { 0x1301, "TLS_AES_128_GCM_SHA256", 42 NULL }, 43 { 0x1302, "TLS_AES_256_GCM_SHA384", 44 NULL }, 45 { 0x1303, "TLS_CHACHA20_POLY1305_SHA256", 46 NULL }, 47 { 0x1304, "TLS_AES_128_CCM_SHA256", 48 NULL }, 49 { 0x1305, "TLS_AES_128_CCM_8_SHA256", 50 NULL }, 51 { 0xC02B, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", 52 "ECDHE-ECDSA-AES128-GCM-SHA256" }, 53 { 0xC02C, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", 54 "ECDHE-ECDSA-AES256-GCM-SHA384" }, 55 { 0xC02F, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", 56 "ECDHE-RSA-AES128-GCM-SHA256" }, 57 { 0xC030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", 58 "ECDHE-RSA-AES256-GCM-SHA384" }, 59 { 0xCCA8, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", 60 "ECDHE-RSA-CHACHA20-POLY1305" }, 61 { 0xCCA9, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", 62 "ECDHE-ECDSA-CHACHA20-POLY1305" }, 63 #if defined(USE_MBEDTLS) 64 { 0x002F, "TLS_RSA_WITH_AES_128_CBC_SHA", 65 "AES128-SHA" }, 66 { 0x0035, "TLS_RSA_WITH_AES_256_CBC_SHA", 67 "AES256-SHA" }, 68 { 0x003C, "TLS_RSA_WITH_AES_128_CBC_SHA256", 69 "AES128-SHA256" }, 70 { 0x003D, "TLS_RSA_WITH_AES_256_CBC_SHA256", 71 "AES256-SHA256" }, 72 { 0x009C, "TLS_RSA_WITH_AES_128_GCM_SHA256", 73 "AES128-GCM-SHA256" }, 74 { 0x009D, "TLS_RSA_WITH_AES_256_GCM_SHA384", 75 "AES256-GCM-SHA384" }, 76 { 0xC004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", 77 "ECDH-ECDSA-AES128-SHA" }, 78 { 0xC005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", 79 "ECDH-ECDSA-AES256-SHA" }, 80 { 0xC009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", 81 "ECDHE-ECDSA-AES128-SHA" }, 82 { 0xC00A, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", 83 "ECDHE-ECDSA-AES256-SHA" }, 84 { 0xC00E, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", 85 "ECDH-RSA-AES128-SHA" }, 86 { 0xC00F, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", 87 "ECDH-RSA-AES256-SHA" }, 88 { 0xC013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", 89 "ECDHE-RSA-AES128-SHA" }, 90 { 0xC014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", 91 "ECDHE-RSA-AES256-SHA" }, 92 { 0xC023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", 93 "ECDHE-ECDSA-AES128-SHA256" }, 94 { 0xC024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", 95 "ECDHE-ECDSA-AES256-SHA384" }, 96 { 0xC025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", 97 "ECDH-ECDSA-AES128-SHA256" }, 98 { 0xC026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", 99 "ECDH-ECDSA-AES256-SHA384" }, 100 { 0xC027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", 101 "ECDHE-RSA-AES128-SHA256" }, 102 { 0xC028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", 103 "ECDHE-RSA-AES256-SHA384" }, 104 { 0xC029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", 105 "ECDH-RSA-AES128-SHA256" }, 106 { 0xC02A, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", 107 "ECDH-RSA-AES256-SHA384" }, 108 { 0xC02D, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", 109 "ECDH-ECDSA-AES128-GCM-SHA256" }, 110 { 0xC02E, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", 111 "ECDH-ECDSA-AES256-GCM-SHA384" }, 112 { 0xC031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", 113 "ECDH-RSA-AES128-GCM-SHA256" }, 114 { 0xC032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", 115 "ECDH-RSA-AES256-GCM-SHA384" }, 116 { 0x0001, "TLS_RSA_WITH_NULL_MD5", 117 "NULL-MD5" }, 118 { 0x0002, "TLS_RSA_WITH_NULL_SHA", 119 "NULL-SHA" }, 120 { 0x002C, "TLS_PSK_WITH_NULL_SHA", 121 "PSK-NULL-SHA" }, 122 { 0x002D, "TLS_DHE_PSK_WITH_NULL_SHA", 123 "DHE-PSK-NULL-SHA" }, 124 { 0x002E, "TLS_RSA_PSK_WITH_NULL_SHA", 125 "RSA-PSK-NULL-SHA" }, 126 { 0x0033, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", 127 "DHE-RSA-AES128-SHA" }, 128 { 0x0039, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", 129 "DHE-RSA-AES256-SHA" }, 130 { 0x003B, "TLS_RSA_WITH_NULL_SHA256", 131 "NULL-SHA256" }, 132 { 0x0067, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", 133 "DHE-RSA-AES128-SHA256" }, 134 { 0x006B, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", 135 "DHE-RSA-AES256-SHA256" }, 136 { 0x008C, "TLS_PSK_WITH_AES_128_CBC_SHA", 137 "PSK-AES128-CBC-SHA" }, 138 { 0x008D, "TLS_PSK_WITH_AES_256_CBC_SHA", 139 "PSK-AES256-CBC-SHA" }, 140 { 0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA", 141 "DHE-PSK-AES128-CBC-SHA" }, 142 { 0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA", 143 "DHE-PSK-AES256-CBC-SHA" }, 144 { 0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA", 145 "RSA-PSK-AES128-CBC-SHA" }, 146 { 0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA", 147 "RSA-PSK-AES256-CBC-SHA" }, 148 { 0x009E, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", 149 "DHE-RSA-AES128-GCM-SHA256" }, 150 { 0x009F, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", 151 "DHE-RSA-AES256-GCM-SHA384" }, 152 { 0x00A8, "TLS_PSK_WITH_AES_128_GCM_SHA256", 153 "PSK-AES128-GCM-SHA256" }, 154 { 0x00A9, "TLS_PSK_WITH_AES_256_GCM_SHA384", 155 "PSK-AES256-GCM-SHA384" }, 156 { 0x00AA, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", 157 "DHE-PSK-AES128-GCM-SHA256" }, 158 { 0x00AB, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", 159 "DHE-PSK-AES256-GCM-SHA384" }, 160 { 0x00AC, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", 161 "RSA-PSK-AES128-GCM-SHA256" }, 162 { 0x00AD, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384", 163 "RSA-PSK-AES256-GCM-SHA384" }, 164 { 0x00AE, "TLS_PSK_WITH_AES_128_CBC_SHA256", 165 "PSK-AES128-CBC-SHA256" }, 166 { 0x00AF, "TLS_PSK_WITH_AES_256_CBC_SHA384", 167 "PSK-AES256-CBC-SHA384" }, 168 { 0x00B0, "TLS_PSK_WITH_NULL_SHA256", 169 "PSK-NULL-SHA256" }, 170 { 0x00B1, "TLS_PSK_WITH_NULL_SHA384", 171 "PSK-NULL-SHA384" }, 172 { 0x00B2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", 173 "DHE-PSK-AES128-CBC-SHA256" }, 174 { 0x00B3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", 175 "DHE-PSK-AES256-CBC-SHA384" }, 176 { 0x00B4, "TLS_DHE_PSK_WITH_NULL_SHA256", 177 "DHE-PSK-NULL-SHA256" }, 178 { 0x00B5, "TLS_DHE_PSK_WITH_NULL_SHA384", 179 "DHE-PSK-NULL-SHA384" }, 180 { 0x00B6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", 181 "RSA-PSK-AES128-CBC-SHA256" }, 182 { 0x00B7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384", 183 "RSA-PSK-AES256-CBC-SHA384" }, 184 { 0x00B8, "TLS_RSA_PSK_WITH_NULL_SHA256", 185 "RSA-PSK-NULL-SHA256" }, 186 { 0x00B9, "TLS_RSA_PSK_WITH_NULL_SHA384", 187 "RSA-PSK-NULL-SHA384" }, 188 { 0xC001, "TLS_ECDH_ECDSA_WITH_NULL_SHA", 189 "ECDH-ECDSA-NULL-SHA" }, 190 { 0xC006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA", 191 "ECDHE-ECDSA-NULL-SHA" }, 192 { 0xC00B, "TLS_ECDH_RSA_WITH_NULL_SHA", 193 "ECDH-RSA-NULL-SHA" }, 194 { 0xC010, "TLS_ECDHE_RSA_WITH_NULL_SHA", 195 "ECDHE-RSA-NULL-SHA" }, 196 { 0xC035, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", 197 "ECDHE-PSK-AES128-CBC-SHA" }, 198 { 0xC036, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", 199 "ECDHE-PSK-AES256-CBC-SHA" }, 200 { 0xCCAB, "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256", 201 "PSK-CHACHA20-POLY1305" }, 202 { 0xC09C, "TLS_RSA_WITH_AES_128_CCM", 203 "AES128-CCM" }, 204 { 0xC09D, "TLS_RSA_WITH_AES_256_CCM", 205 "AES256-CCM" }, 206 { 0xC0A0, "TLS_RSA_WITH_AES_128_CCM_8", 207 "AES128-CCM8" }, 208 { 0xC0A1, "TLS_RSA_WITH_AES_256_CCM_8", 209 "AES256-CCM8" }, 210 { 0xC0AC, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM", 211 "ECDHE-ECDSA-AES128-CCM" }, 212 { 0xC0AD, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM", 213 "ECDHE-ECDSA-AES256-CCM" }, 214 { 0xC0AE, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8", 215 "ECDHE-ECDSA-AES128-CCM8" }, 216 { 0xC0AF, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8", 217 "ECDHE-ECDSA-AES256-CCM8" }, 218 /* entries marked ns are non-"standard", they are not in OpenSSL */ 219 { 0x0041, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", 220 "CAMELLIA128-SHA" }, 221 { 0x0045, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", 222 "DHE-RSA-CAMELLIA128-SHA" }, 223 { 0x0084, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", 224 "CAMELLIA256-SHA" }, 225 { 0x0088, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", 226 "DHE-RSA-CAMELLIA256-SHA" }, 227 { 0x00BA, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256", 228 "CAMELLIA128-SHA256" }, 229 { 0x00BE, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", 230 "DHE-RSA-CAMELLIA128-SHA256" }, 231 { 0x00C0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256", 232 "CAMELLIA256-SHA256" }, 233 { 0x00C4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", 234 "DHE-RSA-CAMELLIA256-SHA256" }, 235 { 0xC037, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", 236 "ECDHE-PSK-AES128-CBC-SHA256" }, 237 { 0xC038, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", 238 "ECDHE-PSK-AES256-CBC-SHA384" }, 239 { 0xC039, "TLS_ECDHE_PSK_WITH_NULL_SHA", 240 "ECDHE-PSK-NULL-SHA" }, 241 { 0xC03A, "TLS_ECDHE_PSK_WITH_NULL_SHA256", 242 "ECDHE-PSK-NULL-SHA256" }, 243 { 0xC03B, "TLS_ECDHE_PSK_WITH_NULL_SHA384", 244 "ECDHE-PSK-NULL-SHA384" }, 245 { 0xC03C, "TLS_RSA_WITH_ARIA_128_CBC_SHA256", 246 "ARIA128-SHA256" /* ns */ }, 247 { 0xC03D, "TLS_RSA_WITH_ARIA_256_CBC_SHA384", 248 "ARIA256-SHA384" /* ns */ }, 249 { 0xC044, "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256", 250 "DHE-RSA-ARIA128-SHA256" /* ns */ }, 251 { 0xC045, "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384", 252 "DHE-RSA-ARIA256-SHA384" /* ns */ }, 253 { 0xC048, "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256", 254 "ECDHE-ECDSA-ARIA128-SHA256" /* ns */ }, 255 { 0xC049, "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384", 256 "ECDHE-ECDSA-ARIA256-SHA384" /* ns */ }, 257 { 0xC04A, "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256", 258 "ECDH-ECDSA-ARIA128-SHA256" /* ns */ }, 259 { 0xC04B, "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384", 260 "ECDH-ECDSA-ARIA256-SHA384" /* ns */ }, 261 { 0xC04C, "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256", 262 "ECDHE-ARIA128-SHA256" /* ns */ }, 263 { 0xC04D, "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384", 264 "ECDHE-ARIA256-SHA384" /* ns */ }, 265 { 0xC04E, "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256", 266 "ECDH-ARIA128-SHA256" /* ns */ }, 267 { 0xC04F, "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384", 268 "ECDH-ARIA256-SHA384" /* ns */ }, 269 { 0xC050, "TLS_RSA_WITH_ARIA_128_GCM_SHA256", 270 "ARIA128-GCM-SHA256" }, 271 { 0xC051, "TLS_RSA_WITH_ARIA_256_GCM_SHA384", 272 "ARIA256-GCM-SHA384" }, 273 { 0xC052, "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256", 274 "DHE-RSA-ARIA128-GCM-SHA256" }, 275 { 0xC053, "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384", 276 "DHE-RSA-ARIA256-GCM-SHA384" }, 277 { 0xC05C, "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", 278 "ECDHE-ECDSA-ARIA128-GCM-SHA256" }, 279 { 0xC05D, "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", 280 "ECDHE-ECDSA-ARIA256-GCM-SHA384" }, 281 { 0xC05E, "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256", 282 "ECDH-ECDSA-ARIA128-GCM-SHA256" /* ns */ }, 283 { 0xC05F, "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384", 284 "ECDH-ECDSA-ARIA256-GCM-SHA384" /* ns */ }, 285 { 0xC060, "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", 286 "ECDHE-ARIA128-GCM-SHA256" }, 287 { 0xC061, "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", 288 "ECDHE-ARIA256-GCM-SHA384" }, 289 { 0xC062, "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256", 290 "ECDH-ARIA128-GCM-SHA256" /* ns */ }, 291 { 0xC063, "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384", 292 "ECDH-ARIA256-GCM-SHA384" /* ns */ }, 293 { 0xC064, "TLS_PSK_WITH_ARIA_128_CBC_SHA256", 294 "PSK-ARIA128-SHA256" /* ns */ }, 295 { 0xC065, "TLS_PSK_WITH_ARIA_256_CBC_SHA384", 296 "PSK-ARIA256-SHA384" /* ns */ }, 297 { 0xC066, "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256", 298 "DHE-PSK-ARIA128-SHA256" /* ns */ }, 299 { 0xC067, "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384", 300 "DHE-PSK-ARIA256-SHA384" /* ns */ }, 301 { 0xC068, "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256", 302 "RSA-PSK-ARIA128-SHA256" /* ns */ }, 303 { 0xC069, "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384", 304 "RSA-PSK-ARIA256-SHA384" /* ns */ }, 305 { 0xC06A, "TLS_PSK_WITH_ARIA_128_GCM_SHA256", 306 "PSK-ARIA128-GCM-SHA256" }, 307 { 0xC06B, "TLS_PSK_WITH_ARIA_256_GCM_SHA384", 308 "PSK-ARIA256-GCM-SHA384" }, 309 { 0xC06C, "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256", 310 "DHE-PSK-ARIA128-GCM-SHA256" }, 311 { 0xC06D, "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384", 312 "DHE-PSK-ARIA256-GCM-SHA384" }, 313 { 0xC06E, "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256", 314 "RSA-PSK-ARIA128-GCM-SHA256" }, 315 { 0xC06F, "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384", 316 "RSA-PSK-ARIA256-GCM-SHA384" }, 317 { 0xC070, "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256", 318 "ECDHE-PSK-ARIA128-SHA256" /* ns */ }, 319 { 0xC071, "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384", 320 "ECDHE-PSK-ARIA256-SHA384" /* ns */ }, 321 { 0xC072, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", 322 "ECDHE-ECDSA-CAMELLIA128-SHA256" }, 323 { 0xC073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", 324 "ECDHE-ECDSA-CAMELLIA256-SHA384" }, 325 { 0xC074, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", 326 "ECDH-ECDSA-CAMELLIA128-SHA256" /* ns */ }, 327 { 0xC075, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", 328 "ECDH-ECDSA-CAMELLIA256-SHA384" /* ns */ }, 329 { 0xC076, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", 330 "ECDHE-RSA-CAMELLIA128-SHA256" }, 331 { 0xC077, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384", 332 "ECDHE-RSA-CAMELLIA256-SHA384" }, 333 { 0xC078, "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256", 334 "ECDH-CAMELLIA128-SHA256" /* ns */ }, 335 { 0xC079, "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384", 336 "ECDH-CAMELLIA256-SHA384" /* ns */ }, 337 { 0xC07A, "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256", 338 "CAMELLIA128-GCM-SHA256" /* ns */ }, 339 { 0xC07B, "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384", 340 "CAMELLIA256-GCM-SHA384" /* ns */ }, 341 { 0xC07C, "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", 342 "DHE-RSA-CAMELLIA128-GCM-SHA256" /* ns */ }, 343 { 0xC07D, "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", 344 "DHE-RSA-CAMELLIA256-GCM-SHA384" /* ns */ }, 345 { 0xC086, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", 346 "ECDHE-ECDSA-CAMELLIA128-GCM-SHA256" /* ns */ }, 347 { 0xC087, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", 348 "ECDHE-ECDSA-CAMELLIA256-GCM-SHA384" /* ns */ }, 349 { 0xC088, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", 350 "ECDH-ECDSA-CAMELLIA128-GCM-SHA256" /* ns */ }, 351 { 0xC089, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", 352 "ECDH-ECDSA-CAMELLIA256-GCM-SHA384" /* ns */ }, 353 { 0xC08A, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", 354 "ECDHE-CAMELLIA128-GCM-SHA256" /* ns */ }, 355 { 0xC08B, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", 356 "ECDHE-CAMELLIA256-GCM-SHA384" /* ns */ }, 357 { 0xC08C, "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256", 358 "ECDH-CAMELLIA128-GCM-SHA256" /* ns */ }, 359 { 0xC08D, "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384", 360 "ECDH-CAMELLIA256-GCM-SHA384" /* ns */ }, 361 { 0xC08E, "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256", 362 "PSK-CAMELLIA128-GCM-SHA256" /* ns */ }, 363 { 0xC08F, "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384", 364 "PSK-CAMELLIA256-GCM-SHA384" /* ns */ }, 365 { 0xC090, "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256", 366 "DHE-PSK-CAMELLIA128-GCM-SHA256" /* ns */ }, 367 { 0xC091, "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384", 368 "DHE-PSK-CAMELLIA256-GCM-SHA384" /* ns */ }, 369 { 0xC092, "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256", 370 "RSA-PSK-CAMELLIA128-GCM-SHA256" /* ns */ }, 371 { 0xC093, "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384", 372 "RSA-PSK-CAMELLIA256-GCM-SHA384" /* ns */ }, 373 { 0xC094, "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256", 374 "PSK-CAMELLIA128-SHA256" }, 375 { 0xC095, "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384", 376 "PSK-CAMELLIA256-SHA384" }, 377 { 0xC096, "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", 378 "DHE-PSK-CAMELLIA128-SHA256" }, 379 { 0xC097, "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", 380 "DHE-PSK-CAMELLIA256-SHA384" }, 381 { 0xC098, "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256", 382 "RSA-PSK-CAMELLIA128-SHA256" }, 383 { 0xC099, "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384", 384 "RSA-PSK-CAMELLIA256-SHA384" }, 385 { 0xC09A, "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", 386 "ECDHE-PSK-CAMELLIA128-SHA256" }, 387 { 0xC09B, "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", 388 "ECDHE-PSK-CAMELLIA256-SHA384" }, 389 { 0xC09E, "TLS_DHE_RSA_WITH_AES_128_CCM", 390 "DHE-RSA-AES128-CCM" }, 391 { 0xC09F, "TLS_DHE_RSA_WITH_AES_256_CCM", 392 "DHE-RSA-AES256-CCM" }, 393 { 0xC0A2, "TLS_DHE_RSA_WITH_AES_128_CCM_8", 394 "DHE-RSA-AES128-CCM8" }, 395 { 0xC0A3, "TLS_DHE_RSA_WITH_AES_256_CCM_8", 396 "DHE-RSA-AES256-CCM8" }, 397 { 0xC0A4, "TLS_PSK_WITH_AES_128_CCM", 398 "PSK-AES128-CCM" }, 399 { 0xC0A5, "TLS_PSK_WITH_AES_256_CCM", 400 "PSK-AES256-CCM" }, 401 { 0xC0A6, "TLS_DHE_PSK_WITH_AES_128_CCM", 402 "DHE-PSK-AES128-CCM" }, 403 { 0xC0A7, "TLS_DHE_PSK_WITH_AES_256_CCM", 404 "DHE-PSK-AES256-CCM" }, 405 { 0xC0A8, "TLS_PSK_WITH_AES_128_CCM_8", 406 "PSK-AES128-CCM8" }, 407 { 0xC0A9, "TLS_PSK_WITH_AES_256_CCM_8", 408 "PSK-AES256-CCM8" }, 409 { 0xC0AA, "TLS_PSK_DHE_WITH_AES_128_CCM_8", 410 "DHE-PSK-AES128-CCM8" }, 411 { 0xC0AB, "TLS_PSK_DHE_WITH_AES_256_CCM_8", 412 "DHE-PSK-AES256-CCM8" }, 413 { 0xCCAA, "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", 414 "DHE-RSA-CHACHA20-POLY1305" }, 415 { 0xCCAC, "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", 416 "ECDHE-PSK-CHACHA20-POLY1305" }, 417 { 0xCCAD, "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256", 418 "DHE-PSK-CHACHA20-POLY1305" }, 419 { 0xCCAE, "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256", 420 "RSA-PSK-CHACHA20-POLY1305" }, 421 #endif 422 }; 423 424 static const char *cs_test_string = 425 "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:" 426 "TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:" 427 "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:" 428 "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:" 429 "ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:" 430 "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:" 431 "ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:" 432 "ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:" 433 "ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:" 434 "DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:" 435 "AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:" 436 "DES-CBC3-SHA:" 437 ":: GIBBERISH ::" 438 ; 439 440 struct test_str_entry { 441 uint16_t id; 442 const char *str; 443 }; 444 static const struct test_str_entry test_str_list[] = { 445 { 0x1301, "TLS_AES_128_GCM_SHA256"}, 446 { 0x1302, "TLS_AES_256_GCM_SHA384"}, 447 { 0x1303, "TLS_CHACHA20_POLY1305_SHA256"}, 448 { 0xC02B, "ECDHE-ECDSA-AES128-GCM-SHA256"}, 449 { 0xC02F, "ECDHE-RSA-AES128-GCM-SHA256"}, 450 { 0xC02C, "ECDHE-ECDSA-AES256-GCM-SHA384"}, 451 { 0xC030, "ECDHE-RSA-AES256-GCM-SHA384"}, 452 { 0xCCA9, "ECDHE-ECDSA-CHACHA20-POLY1305"}, 453 { 0xCCA8, "ECDHE-RSA-CHACHA20-POLY1305"}, 454 #if defined(USE_MBEDTLS) 455 { 0x009E, "DHE-RSA-AES128-GCM-SHA256"}, 456 { 0x009F, "DHE-RSA-AES256-GCM-SHA384"}, 457 #else 458 { 0x0000, "DHE-RSA-AES128-GCM-SHA256"}, 459 { 0x0000, "DHE-RSA-AES256-GCM-SHA384"}, 460 #endif 461 #if defined(USE_MBEDTLS) 462 { 0xCCAA, "DHE-RSA-CHACHA20-POLY1305"}, 463 #else 464 { 0x0000, "DHE-RSA-CHACHA20-POLY1305"}, 465 #endif 466 #if defined(USE_MBEDTLS) 467 { 0xC023, "ECDHE-ECDSA-AES128-SHA256" }, 468 { 0xC027, "ECDHE-RSA-AES128-SHA256" }, 469 { 0xC009, "ECDHE-ECDSA-AES128-SHA" }, 470 { 0xC013, "ECDHE-RSA-AES128-SHA" }, 471 { 0xC024, "ECDHE-ECDSA-AES256-SHA384" }, 472 { 0xC028, "ECDHE-RSA-AES256-SHA384" }, 473 { 0xC00A, "ECDHE-ECDSA-AES256-SHA" }, 474 { 0xC014, "ECDHE-RSA-AES256-SHA" }, 475 #else 476 { 0x0000, "ECDHE-ECDSA-AES128-SHA256" }, 477 { 0x0000, "ECDHE-RSA-AES128-SHA256" }, 478 { 0x0000, "ECDHE-ECDSA-AES128-SHA" }, 479 { 0x0000, "ECDHE-RSA-AES128-SHA" }, 480 { 0x0000, "ECDHE-ECDSA-AES256-SHA384" }, 481 { 0x0000, "ECDHE-RSA-AES256-SHA384" }, 482 { 0x0000, "ECDHE-ECDSA-AES256-SHA" }, 483 { 0x0000, "ECDHE-RSA-AES256-SHA" }, 484 #endif 485 #if defined(USE_MBEDTLS) 486 { 0x0067, "DHE-RSA-AES128-SHA256" }, 487 { 0x006B, "DHE-RSA-AES256-SHA256" }, 488 #else 489 { 0x0000, "DHE-RSA-AES128-SHA256" }, 490 { 0x0000, "DHE-RSA-AES256-SHA256" }, 491 #endif 492 #if defined(USE_MBEDTLS) 493 { 0x009C, "AES128-GCM-SHA256" }, 494 { 0x009D, "AES256-GCM-SHA384" }, 495 { 0x003C, "AES128-SHA256" }, 496 { 0x003D, "AES256-SHA256" }, 497 { 0x002F, "AES128-SHA" }, 498 { 0x0035, "AES256-SHA" }, 499 #else 500 { 0x0000, "AES128-GCM-SHA256" }, 501 { 0x0000, "AES256-GCM-SHA384" }, 502 { 0x0000, "AES128-SHA256" }, 503 { 0x0000, "AES256-SHA256" }, 504 { 0x0000, "AES128-SHA" }, 505 { 0x0000, "AES256-SHA" }, 506 #endif 507 { 0x0000, "DES-CBC3-SHA" }, 508 { 0x0000, "GIBBERISH" }, 509 { 0x0000, "" }, 510 }; 511 512 size_t i; 513 for(i = 0; i < CURL_ARRAYSIZE(test_cs_list); i++) { 514 const struct test_cs_entry *test = &test_cs_list[i]; 515 const char *expect; 516 char buf[64] = ""; 517 char alt[64] = ""; 518 uint16_t id; 519 520 /* test Curl_cipher_suite_lookup_id() for rfc name */ 521 if(test->rfc) { 522 id = Curl_cipher_suite_lookup_id(test->rfc, strlen(test->rfc)); 523 if(id != test->id) { 524 curl_mfprintf(stderr, "Curl_cipher_suite_lookup_id FAILED for \"%s\", " 525 "result = 0x%04x, expected = 0x%04x\n", 526 test->rfc, id, test->id); 527 unitfail++; 528 } 529 } 530 531 /* test Curl_cipher_suite_lookup_id() for OpenSSL name */ 532 if(test->openssl) { 533 id = Curl_cipher_suite_lookup_id(test->openssl, strlen(test->openssl)); 534 if(id != test->id) { 535 curl_mfprintf(stderr, "Curl_cipher_suite_lookup_id FAILED for \"%s\", " 536 "result = 0x%04x, expected = 0x%04x\n", 537 test->openssl, id, test->id); 538 unitfail++; 539 } 540 } 541 542 /* test Curl_cipher_suite_get_str() prefer rfc name */ 543 buf[0] = '\0'; 544 expect = test->rfc ? test->rfc : test->openssl; 545 546 Curl_cipher_suite_get_str(test->id, buf, sizeof(buf), true); 547 548 if(expect && strcmp(buf, expect) != 0) { 549 curl_mfprintf(stderr, "Curl_cipher_suite_get_str FAILED for 0x%04x, " 550 "result = \"%s\", expected = \"%s\"\n", 551 test->id, buf, expect); 552 unitfail++; 553 } 554 555 /* test Curl_cipher_suite_get_str() prefer OpenSSL name */ 556 buf[0] = '\0'; 557 expect = test->openssl ? test->openssl : test->rfc; 558 559 Curl_cipher_suite_get_str(test->id, buf, sizeof(buf), false); 560 561 /* suites matched by EDH alias will return the DHE name */ 562 if(test->id >= 0x0011 && test->id < 0x0017) { 563 if(expect && memcmp(expect, "EDH-", 4) == 0) 564 expect = (char *) memcpy(strcpy(alt, expect), "DHE-", 4); 565 if(expect && memcmp(expect + 4, "EDH-", 4) == 0) 566 expect = (char *) memcpy(strcpy(alt, expect) + 4, "DHE-", 4) - 4; 567 } 568 569 if(expect && strcmp(buf, expect) != 0) { 570 curl_mfprintf(stderr, "Curl_cipher_suite_get_str FAILED for 0x%04x, " 571 "result = \"%s\", expected = \"%s\"\n", 572 test->id, buf, expect); 573 unitfail++; 574 } 575 } 576 577 /* test Curl_cipher_suite_walk_str() */ 578 { 579 const char *ptr, *end = cs_test_string; 580 int j = 0; 581 uint16_t id; 582 size_t len; 583 584 for(ptr = cs_test_string; ptr[0] != '\0'; ptr = end) { 585 const struct test_str_entry *test = &test_str_list[j]; 586 abort_if(j == CURL_ARRAYSIZE(test_str_list), "should have been done"); 587 588 id = Curl_cipher_suite_walk_str(&ptr, &end); 589 len = end - ptr; 590 591 if(id != test->id) { 592 curl_mfprintf(stderr, "Curl_cipher_suite_walk_str FAILED for \"%s\" " 593 "unexpected cipher, " 594 "result = 0x%04x, expected = 0x%04x\n", 595 test->str, id, test->id); 596 unitfail++; 597 } 598 if(len > 64 || strncmp(ptr, test->str, len) != 0) { 599 curl_mfprintf(stderr, "Curl_cipher_suite_walk_str ABORT for \"%s\" " 600 "unexpected pointers\n", 601 test->str); 602 unitfail++; 603 goto unit_test_abort; 604 } 605 j++; 606 } 607 } 608 #endif /* defined(USE_MBEDTLS) || defined(USE_RUSTLS) */ 609 610 UNITTEST_END_SIMPLE 611 }