quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

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 }