Home | History | Annotate | Line # | Download | only in test
      1 /*
      2  * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
      3  * Copyright 2017 BaishanCloud. All rights reserved.
      4  *
      5  * Licensed under the OpenSSL licenses, (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 == 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