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