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