]> git.ipfire.org Git - thirdparty/openssl.git/blame - ssl/s3_lib.c
Deprecate the low level Diffie-Hellman functions.
[thirdparty/openssl.git] / ssl / s3_lib.c
CommitLineData
846e33c7 1/*
6738bf14 2 * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
aa8f3d76 3 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
c80149d9 4 * Copyright 2005 Nokia. All rights reserved.
5a4fbc69 5 *
2c18d164 6 * Licensed under the Apache License 2.0 (the "License"). You may not use
846e33c7
RS
7 * this file except in compliance with the License. You can obtain a copy
8 * in the file LICENSE in the source distribution or at
9 * https://www.openssl.org/source/license.html
5a4fbc69 10 */
846e33c7 11
d02b48c6 12#include <stdio.h>
ec577822 13#include <openssl/objects.h>
677963e5 14#include "internal/nelem.h"
706457b7 15#include "ssl_local.h"
dbad1690 16#include <openssl/md5.h>
3c27208f 17#include <openssl/dh.h>
a3680c8f 18#include <openssl/rand.h>
77359d22 19#include <openssl/trace.h>
5f8dd0f8 20#include "internal/cryptlib.h"
d02b48c6 21
f865b081 22#define TLS13_NUM_CIPHERS OSSL_NELEM(tls13_ciphers)
b6eb9827 23#define SSL3_NUM_CIPHERS OSSL_NELEM(ssl3_ciphers)
650c6e41 24#define SSL3_NUM_SCSVS OSSL_NELEM(ssl3_scsvs)
d02b48c6 25
643a3580
MC
26/* TLSv1.3 downgrade protection sentinel values */
27const unsigned char tls11downgrade[] = {
28 0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x00
29};
30const unsigned char tls12downgrade[] = {
31 0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x01
32};
33
f865b081
MC
34/* The list of available TLSv1.3 ciphers */
35static SSL_CIPHER tls13_ciphers[] = {
36 {
37 1,
38 TLS1_3_RFC_AES_128_GCM_SHA256,
39 TLS1_3_RFC_AES_128_GCM_SHA256,
40 TLS1_3_CK_AES_128_GCM_SHA256,
f80c8643
MC
41 SSL_kANY,
42 SSL_aANY,
f865b081
MC
43 SSL_AES128GCM,
44 SSL_AEAD,
45 TLS1_3_VERSION, TLS1_3_VERSION,
f80c8643 46 0, 0,
f865b081
MC
47 SSL_HIGH,
48 SSL_HANDSHAKE_MAC_SHA256,
49 128,
50 128,
51 }, {
52 1,
53 TLS1_3_RFC_AES_256_GCM_SHA384,
54 TLS1_3_RFC_AES_256_GCM_SHA384,
55 TLS1_3_CK_AES_256_GCM_SHA384,
56 SSL_kANY,
57 SSL_aANY,
58 SSL_AES256GCM,
59 SSL_AEAD,
60 TLS1_3_VERSION, TLS1_3_VERSION,
61 0, 0,
62 SSL_HIGH,
63 SSL_HANDSHAKE_MAC_SHA384,
64 256,
65 256,
66 },
67#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
68 {
69 1,
70 TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
71 TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
72 TLS1_3_CK_CHACHA20_POLY1305_SHA256,
73 SSL_kANY,
74 SSL_aANY,
75 SSL_CHACHA20POLY1305,
76 SSL_AEAD,
77 TLS1_3_VERSION, TLS1_3_VERSION,
78 0, 0,
79 SSL_HIGH,
80 SSL_HANDSHAKE_MAC_SHA256,
81 256,
82 256,
83 },
84#endif
85 {
86 1,
87 TLS1_3_RFC_AES_128_CCM_SHA256,
88 TLS1_3_RFC_AES_128_CCM_SHA256,
89 TLS1_3_CK_AES_128_CCM_SHA256,
90 SSL_kANY,
91 SSL_aANY,
92 SSL_AES128CCM,
93 SSL_AEAD,
94 TLS1_3_VERSION, TLS1_3_VERSION,
95 0, 0,
96 SSL_NOT_DEFAULT | SSL_HIGH,
97 SSL_HANDSHAKE_MAC_SHA256,
98 128,
99 128,
100 }, {
101 1,
102 TLS1_3_RFC_AES_128_CCM_8_SHA256,
103 TLS1_3_RFC_AES_128_CCM_8_SHA256,
104 TLS1_3_CK_AES_128_CCM_8_SHA256,
105 SSL_kANY,
106 SSL_aANY,
107 SSL_AES128CCM8,
108 SSL_AEAD,
109 TLS1_3_VERSION, TLS1_3_VERSION,
110 0, 0,
111 SSL_NOT_DEFAULT | SSL_HIGH,
112 SSL_HANDSHAKE_MAC_SHA256,
113 128,
114 128,
115 }
116};
117
748f2546 118/*
ef28891b 119 * The list of available ciphers, mostly organized into the following
748f2546
RS
120 * groups:
121 * Always there
122 * EC
123 * PSK
124 * SRP (within that: RSA EC PSK)
9bb6f829 125 * Cipher families: Chacha/poly, Camellia, Gost, IDEA, SEED
748f2546
RS
126 * Weak ciphers
127 */
a230b26e 128static SSL_CIPHER ssl3_ciphers[] = {
0f113f3e
MC
129 {
130 1,
131 SSL3_TXT_RSA_NULL_MD5,
bbb4ceb8 132 SSL3_RFC_RSA_NULL_MD5,
0f113f3e
MC
133 SSL3_CK_RSA_NULL_MD5,
134 SSL_kRSA,
135 SSL_aRSA,
136 SSL_eNULL,
137 SSL_MD5,
3eb2aff4 138 SSL3_VERSION, TLS1_2_VERSION,
387cf213 139 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 140 SSL_STRONG_NONE,
0f113f3e
MC
141 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
142 0,
143 0,
144 },
0f113f3e
MC
145 {
146 1,
147 SSL3_TXT_RSA_NULL_SHA,
bbb4ceb8 148 SSL3_RFC_RSA_NULL_SHA,
0f113f3e
MC
149 SSL3_CK_RSA_NULL_SHA,
150 SSL_kRSA,
151 SSL_aRSA,
152 SSL_eNULL,
153 SSL_SHA1,
3eb2aff4 154 SSL3_VERSION, TLS1_2_VERSION,
387cf213 155 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 156 SSL_STRONG_NONE | SSL_FIPS,
0f113f3e
MC
157 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
158 0,
159 0,
160 },
d33726b9 161#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
0f113f3e
MC
162 {
163 1,
164 SSL3_TXT_RSA_DES_192_CBC3_SHA,
bbb4ceb8 165 SSL3_RFC_RSA_DES_192_CBC3_SHA,
0f113f3e
MC
166 SSL3_CK_RSA_DES_192_CBC3_SHA,
167 SSL_kRSA,
168 SSL_aRSA,
169 SSL_3DES,
170 SSL_SHA1,
3eb2aff4 171 SSL3_VERSION, TLS1_2_VERSION,
387cf213 172 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 173 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
0f113f3e
MC
174 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
175 112,
176 168,
177 },
0f113f3e
MC
178 {
179 1,
180 SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA,
bbb4ceb8 181 SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA,
0f113f3e
MC
182 SSL3_CK_DHE_DSS_DES_192_CBC3_SHA,
183 SSL_kDHE,
184 SSL_aDSS,
185 SSL_3DES,
186 SSL_SHA1,
3eb2aff4 187 SSL3_VERSION, TLS1_2_VERSION,
387cf213 188 DTLS1_BAD_VER, DTLS1_2_VERSION,
4a8e9c22 189 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
0f113f3e
MC
190 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
191 112,
192 168,
193 },
0f113f3e
MC
194 {
195 1,
196 SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA,
bbb4ceb8 197 SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA,
0f113f3e
MC
198 SSL3_CK_DHE_RSA_DES_192_CBC3_SHA,
199 SSL_kDHE,
200 SSL_aRSA,
201 SSL_3DES,
202 SSL_SHA1,
3eb2aff4 203 SSL3_VERSION, TLS1_2_VERSION,
387cf213 204 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 205 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
0f113f3e
MC
206 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
207 112,
208 168,
209 },
0f113f3e
MC
210 {
211 1,
212 SSL3_TXT_ADH_DES_192_CBC_SHA,
bbb4ceb8 213 SSL3_RFC_ADH_DES_192_CBC_SHA,
0f113f3e
MC
214 SSL3_CK_ADH_DES_192_CBC_SHA,
215 SSL_kDHE,
216 SSL_aNULL,
217 SSL_3DES,
218 SSL_SHA1,
3eb2aff4 219 SSL3_VERSION, TLS1_2_VERSION,
387cf213 220 DTLS1_BAD_VER, DTLS1_2_VERSION,
4a8e9c22 221 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
0f113f3e
MC
222 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
223 112,
224 168,
225 },
d33726b9 226#endif
0f113f3e
MC
227 {
228 1,
229 TLS1_TXT_RSA_WITH_AES_128_SHA,
bbb4ceb8 230 TLS1_RFC_RSA_WITH_AES_128_SHA,
0f113f3e
MC
231 TLS1_CK_RSA_WITH_AES_128_SHA,
232 SSL_kRSA,
233 SSL_aRSA,
234 SSL_AES128,
235 SSL_SHA1,
3eb2aff4 236 SSL3_VERSION, TLS1_2_VERSION,
387cf213 237 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 238 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
239 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
240 128,
241 128,
242 },
0f113f3e
MC
243 {
244 1,
245 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
bbb4ceb8 246 TLS1_RFC_DHE_DSS_WITH_AES_128_SHA,
0f113f3e
MC
247 TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
248 SSL_kDHE,
249 SSL_aDSS,
250 SSL_AES128,
251 SSL_SHA1,
3eb2aff4 252 SSL3_VERSION, TLS1_2_VERSION,
387cf213 253 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 254 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
0f113f3e
MC
255 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
256 128,
257 128,
258 },
0f113f3e
MC
259 {
260 1,
261 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
bbb4ceb8 262 TLS1_RFC_DHE_RSA_WITH_AES_128_SHA,
0f113f3e
MC
263 TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
264 SSL_kDHE,
265 SSL_aRSA,
266 SSL_AES128,
267 SSL_SHA1,
3eb2aff4 268 SSL3_VERSION, TLS1_2_VERSION,
387cf213 269 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 270 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
271 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
272 128,
273 128,
274 },
0f113f3e
MC
275 {
276 1,
277 TLS1_TXT_ADH_WITH_AES_128_SHA,
bbb4ceb8 278 TLS1_RFC_ADH_WITH_AES_128_SHA,
0f113f3e
MC
279 TLS1_CK_ADH_WITH_AES_128_SHA,
280 SSL_kDHE,
281 SSL_aNULL,
282 SSL_AES128,
283 SSL_SHA1,
3eb2aff4 284 SSL3_VERSION, TLS1_2_VERSION,
387cf213 285 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 286 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
0f113f3e
MC
287 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
288 128,
289 128,
290 },
0f113f3e
MC
291 {
292 1,
293 TLS1_TXT_RSA_WITH_AES_256_SHA,
bbb4ceb8 294 TLS1_RFC_RSA_WITH_AES_256_SHA,
0f113f3e
MC
295 TLS1_CK_RSA_WITH_AES_256_SHA,
296 SSL_kRSA,
297 SSL_aRSA,
298 SSL_AES256,
299 SSL_SHA1,
3eb2aff4 300 SSL3_VERSION, TLS1_2_VERSION,
387cf213 301 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 302 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
303 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
304 256,
305 256,
306 },
0f113f3e
MC
307 {
308 1,
309 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
bbb4ceb8 310 TLS1_RFC_DHE_DSS_WITH_AES_256_SHA,
0f113f3e
MC
311 TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
312 SSL_kDHE,
313 SSL_aDSS,
314 SSL_AES256,
315 SSL_SHA1,
3eb2aff4 316 SSL3_VERSION, TLS1_2_VERSION,
387cf213 317 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 318 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
0f113f3e
MC
319 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
320 256,
321 256,
322 },
0f113f3e
MC
323 {
324 1,
325 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
bbb4ceb8 326 TLS1_RFC_DHE_RSA_WITH_AES_256_SHA,
0f113f3e
MC
327 TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
328 SSL_kDHE,
329 SSL_aRSA,
330 SSL_AES256,
331 SSL_SHA1,
3eb2aff4 332 SSL3_VERSION, TLS1_2_VERSION,
387cf213 333 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 334 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
335 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
336 256,
337 256,
338 },
0f113f3e
MC
339 {
340 1,
341 TLS1_TXT_ADH_WITH_AES_256_SHA,
bbb4ceb8 342 TLS1_RFC_ADH_WITH_AES_256_SHA,
0f113f3e
MC
343 TLS1_CK_ADH_WITH_AES_256_SHA,
344 SSL_kDHE,
345 SSL_aNULL,
346 SSL_AES256,
347 SSL_SHA1,
3eb2aff4 348 SSL3_VERSION, TLS1_2_VERSION,
387cf213 349 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 350 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
0f113f3e
MC
351 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
352 256,
353 256,
354 },
0f113f3e
MC
355 {
356 1,
357 TLS1_TXT_RSA_WITH_NULL_SHA256,
bbb4ceb8 358 TLS1_RFC_RSA_WITH_NULL_SHA256,
0f113f3e
MC
359 TLS1_CK_RSA_WITH_NULL_SHA256,
360 SSL_kRSA,
361 SSL_aRSA,
362 SSL_eNULL,
363 SSL_SHA256,
3eb2aff4
KR
364 TLS1_2_VERSION, TLS1_2_VERSION,
365 DTLS1_2_VERSION, DTLS1_2_VERSION,
1510b5f7 366 SSL_STRONG_NONE | SSL_FIPS,
0f113f3e
MC
367 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
368 0,
369 0,
370 },
0f113f3e
MC
371 {
372 1,
373 TLS1_TXT_RSA_WITH_AES_128_SHA256,
bbb4ceb8 374 TLS1_RFC_RSA_WITH_AES_128_SHA256,
0f113f3e
MC
375 TLS1_CK_RSA_WITH_AES_128_SHA256,
376 SSL_kRSA,
377 SSL_aRSA,
378 SSL_AES128,
379 SSL_SHA256,
3eb2aff4
KR
380 TLS1_2_VERSION, TLS1_2_VERSION,
381 DTLS1_2_VERSION, DTLS1_2_VERSION,
361a1191 382 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
383 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
384 128,
385 128,
386 },
0f113f3e
MC
387 {
388 1,
389 TLS1_TXT_RSA_WITH_AES_256_SHA256,
bbb4ceb8 390 TLS1_RFC_RSA_WITH_AES_256_SHA256,
0f113f3e
MC
391 TLS1_CK_RSA_WITH_AES_256_SHA256,
392 SSL_kRSA,
393 SSL_aRSA,
394 SSL_AES256,
395 SSL_SHA256,
3eb2aff4
KR
396 TLS1_2_VERSION, TLS1_2_VERSION,
397 DTLS1_2_VERSION, DTLS1_2_VERSION,
361a1191 398 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
399 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
400 256,
401 256,
402 },
0f113f3e
MC
403 {
404 1,
405 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
bbb4ceb8 406 TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256,
0f113f3e
MC
407 TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
408 SSL_kDHE,
409 SSL_aDSS,
410 SSL_AES128,
411 SSL_SHA256,
3eb2aff4
KR
412 TLS1_2_VERSION, TLS1_2_VERSION,
413 DTLS1_2_VERSION, DTLS1_2_VERSION,
a556f342 414 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
0f113f3e
MC
415 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
416 128,
417 128,
418 },
0f113f3e
MC
419 {
420 1,
421 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
bbb4ceb8 422 TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256,
0f113f3e
MC
423 TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
424 SSL_kDHE,
425 SSL_aRSA,
426 SSL_AES128,
427 SSL_SHA256,
3eb2aff4
KR
428 TLS1_2_VERSION, TLS1_2_VERSION,
429 DTLS1_2_VERSION, DTLS1_2_VERSION,
361a1191 430 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
431 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
432 128,
433 128,
434 },
0f113f3e
MC
435 {
436 1,
437 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
bbb4ceb8 438 TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256,
0f113f3e
MC
439 TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
440 SSL_kDHE,
441 SSL_aDSS,
442 SSL_AES256,
443 SSL_SHA256,
3eb2aff4
KR
444 TLS1_2_VERSION, TLS1_2_VERSION,
445 DTLS1_2_VERSION, DTLS1_2_VERSION,
a556f342 446 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
0f113f3e
MC
447 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
448 256,
449 256,
450 },
0f113f3e
MC
451 {
452 1,
453 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
bbb4ceb8 454 TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256,
0f113f3e
MC
455 TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
456 SSL_kDHE,
457 SSL_aRSA,
458 SSL_AES256,
459 SSL_SHA256,
3eb2aff4
KR
460 TLS1_2_VERSION, TLS1_2_VERSION,
461 DTLS1_2_VERSION, DTLS1_2_VERSION,
361a1191 462 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
463 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
464 256,
465 256,
466 },
0f113f3e
MC
467 {
468 1,
469 TLS1_TXT_ADH_WITH_AES_128_SHA256,
bbb4ceb8 470 TLS1_RFC_ADH_WITH_AES_128_SHA256,
0f113f3e
MC
471 TLS1_CK_ADH_WITH_AES_128_SHA256,
472 SSL_kDHE,
473 SSL_aNULL,
474 SSL_AES128,
475 SSL_SHA256,
3eb2aff4
KR
476 TLS1_2_VERSION, TLS1_2_VERSION,
477 DTLS1_2_VERSION, DTLS1_2_VERSION,
361a1191 478 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
0f113f3e
MC
479 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
480 128,
481 128,
482 },
0f113f3e
MC
483 {
484 1,
485 TLS1_TXT_ADH_WITH_AES_256_SHA256,
bbb4ceb8 486 TLS1_RFC_ADH_WITH_AES_256_SHA256,
0f113f3e
MC
487 TLS1_CK_ADH_WITH_AES_256_SHA256,
488 SSL_kDHE,
489 SSL_aNULL,
490 SSL_AES256,
491 SSL_SHA256,
3eb2aff4
KR
492 TLS1_2_VERSION, TLS1_2_VERSION,
493 DTLS1_2_VERSION, DTLS1_2_VERSION,
361a1191 494 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
0f113f3e
MC
495 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
496 256,
497 256,
498 },
0f113f3e
MC
499 {
500 1,
748f2546 501 TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
bbb4ceb8 502 TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256,
748f2546
RS
503 TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
504 SSL_kRSA,
505 SSL_aRSA,
506 SSL_AES128GCM,
507 SSL_AEAD,
508 TLS1_2_VERSION, TLS1_2_VERSION,
509 DTLS1_2_VERSION, DTLS1_2_VERSION,
510 SSL_HIGH | SSL_FIPS,
511 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
512 128,
513 128,
514 },
0f113f3e
MC
515 {
516 1,
748f2546 517 TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
bbb4ceb8 518 TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384,
748f2546 519 TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
0f113f3e
MC
520 SSL_kRSA,
521 SSL_aRSA,
748f2546
RS
522 SSL_AES256GCM,
523 SSL_AEAD,
524 TLS1_2_VERSION, TLS1_2_VERSION,
525 DTLS1_2_VERSION, DTLS1_2_VERSION,
526 SSL_HIGH | SSL_FIPS,
527 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
0f113f3e
MC
528 256,
529 256,
530 },
0f113f3e
MC
531 {
532 1,
748f2546 533 TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
bbb4ceb8 534 TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256,
748f2546 535 TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
0f113f3e 536 SSL_kDHE,
748f2546
RS
537 SSL_aRSA,
538 SSL_AES128GCM,
539 SSL_AEAD,
540 TLS1_2_VERSION, TLS1_2_VERSION,
541 DTLS1_2_VERSION, DTLS1_2_VERSION,
542 SSL_HIGH | SSL_FIPS,
543 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
544 128,
545 128,
0f113f3e 546 },
0f113f3e
MC
547 {
548 1,
748f2546 549 TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
bbb4ceb8 550 TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384,
748f2546 551 TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
0f113f3e
MC
552 SSL_kDHE,
553 SSL_aRSA,
748f2546
RS
554 SSL_AES256GCM,
555 SSL_AEAD,
556 TLS1_2_VERSION, TLS1_2_VERSION,
557 DTLS1_2_VERSION, DTLS1_2_VERSION,
558 SSL_HIGH | SSL_FIPS,
559 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
0f113f3e
MC
560 256,
561 256,
562 },
0f113f3e
MC
563 {
564 1,
748f2546 565 TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
bbb4ceb8 566 TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256,
748f2546 567 TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
0f113f3e 568 SSL_kDHE,
748f2546
RS
569 SSL_aDSS,
570 SSL_AES128GCM,
571 SSL_AEAD,
572 TLS1_2_VERSION, TLS1_2_VERSION,
573 DTLS1_2_VERSION, DTLS1_2_VERSION,
574 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
575 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
0f113f3e
MC
576 128,
577 128,
578 },
0f113f3e
MC
579 {
580 1,
748f2546 581 TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
bbb4ceb8 582 TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384,
748f2546
RS
583 TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
584 SSL_kDHE,
585 SSL_aDSS,
586 SSL_AES256GCM,
587 SSL_AEAD,
588 TLS1_2_VERSION, TLS1_2_VERSION,
589 DTLS1_2_VERSION, DTLS1_2_VERSION,
590 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
591 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
592 256,
593 256,
0f113f3e 594 },
0f113f3e
MC
595 {
596 1,
748f2546 597 TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
bbb4ceb8 598 TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256,
748f2546
RS
599 TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
600 SSL_kDHE,
601 SSL_aNULL,
602 SSL_AES128GCM,
603 SSL_AEAD,
604 TLS1_2_VERSION, TLS1_2_VERSION,
605 DTLS1_2_VERSION, DTLS1_2_VERSION,
606 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
607 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
0f113f3e
MC
608 128,
609 128,
610 },
0f113f3e
MC
611 {
612 1,
748f2546 613 TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
bbb4ceb8 614 TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384,
748f2546
RS
615 TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
616 SSL_kDHE,
617 SSL_aNULL,
618 SSL_AES256GCM,
619 SSL_AEAD,
620 TLS1_2_VERSION, TLS1_2_VERSION,
621 DTLS1_2_VERSION, DTLS1_2_VERSION,
622 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
623 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
0f113f3e
MC
624 256,
625 256,
626 },
ea6114c6
DSH
627 {
628 1,
748f2546 629 TLS1_TXT_RSA_WITH_AES_128_CCM,
bbb4ceb8 630 TLS1_RFC_RSA_WITH_AES_128_CCM,
748f2546
RS
631 TLS1_CK_RSA_WITH_AES_128_CCM,
632 SSL_kRSA,
633 SSL_aRSA,
634 SSL_AES128CCM,
635 SSL_AEAD,
636 TLS1_2_VERSION, TLS1_2_VERSION,
637 DTLS1_2_VERSION, DTLS1_2_VERSION,
638 SSL_NOT_DEFAULT | SSL_HIGH,
639 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
ea6114c6
DSH
640 128,
641 128,
642 },
ea6114c6
DSH
643 {
644 1,
748f2546 645 TLS1_TXT_RSA_WITH_AES_256_CCM,
bbb4ceb8 646 TLS1_RFC_RSA_WITH_AES_256_CCM,
748f2546
RS
647 TLS1_CK_RSA_WITH_AES_256_CCM,
648 SSL_kRSA,
649 SSL_aRSA,
650 SSL_AES256CCM,
651 SSL_AEAD,
652 TLS1_2_VERSION, TLS1_2_VERSION,
653 DTLS1_2_VERSION, DTLS1_2_VERSION,
654 SSL_NOT_DEFAULT | SSL_HIGH,
655 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
656 256,
657 256,
ea6114c6 658 },
ea6114c6
DSH
659 {
660 1,
748f2546 661 TLS1_TXT_DHE_RSA_WITH_AES_128_CCM,
bbb4ceb8 662 TLS1_RFC_DHE_RSA_WITH_AES_128_CCM,
748f2546
RS
663 TLS1_CK_DHE_RSA_WITH_AES_128_CCM,
664 SSL_kDHE,
665 SSL_aRSA,
666 SSL_AES128CCM,
667 SSL_AEAD,
668 TLS1_2_VERSION, TLS1_2_VERSION,
669 DTLS1_2_VERSION, DTLS1_2_VERSION,
670 SSL_NOT_DEFAULT | SSL_HIGH,
671 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
ea6114c6
DSH
672 128,
673 128,
674 },
ea6114c6
DSH
675 {
676 1,
748f2546 677 TLS1_TXT_DHE_RSA_WITH_AES_256_CCM,
bbb4ceb8 678 TLS1_RFC_DHE_RSA_WITH_AES_256_CCM,
748f2546
RS
679 TLS1_CK_DHE_RSA_WITH_AES_256_CCM,
680 SSL_kDHE,
681 SSL_aRSA,
682 SSL_AES256CCM,
683 SSL_AEAD,
684 TLS1_2_VERSION, TLS1_2_VERSION,
685 DTLS1_2_VERSION, DTLS1_2_VERSION,
686 SSL_NOT_DEFAULT | SSL_HIGH,
687 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
ea6114c6
DSH
688 256,
689 256,
690 },
ea6114c6
DSH
691 {
692 1,
748f2546 693 TLS1_TXT_RSA_WITH_AES_128_CCM_8,
bbb4ceb8 694 TLS1_RFC_RSA_WITH_AES_128_CCM_8,
748f2546
RS
695 TLS1_CK_RSA_WITH_AES_128_CCM_8,
696 SSL_kRSA,
ea6114c6 697 SSL_aRSA,
748f2546 698 SSL_AES128CCM8,
0f113f3e 699 SSL_AEAD,
3eb2aff4
KR
700 TLS1_2_VERSION, TLS1_2_VERSION,
701 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 702 SSL_NOT_DEFAULT | SSL_HIGH,
0f113f3e
MC
703 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
704 128,
705 128,
706 },
0f113f3e
MC
707 {
708 1,
748f2546 709 TLS1_TXT_RSA_WITH_AES_256_CCM_8,
bbb4ceb8 710 TLS1_RFC_RSA_WITH_AES_256_CCM_8,
748f2546 711 TLS1_CK_RSA_WITH_AES_256_CCM_8,
0f113f3e
MC
712 SSL_kRSA,
713 SSL_aRSA,
748f2546 714 SSL_AES256CCM8,
0f113f3e 715 SSL_AEAD,
3eb2aff4
KR
716 TLS1_2_VERSION, TLS1_2_VERSION,
717 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
718 SSL_NOT_DEFAULT | SSL_HIGH,
719 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
0f113f3e
MC
720 256,
721 256,
722 },
0f113f3e
MC
723 {
724 1,
748f2546 725 TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8,
bbb4ceb8 726 TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8,
748f2546 727 TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8,
0f113f3e
MC
728 SSL_kDHE,
729 SSL_aRSA,
748f2546 730 SSL_AES128CCM8,
0f113f3e 731 SSL_AEAD,
3eb2aff4
KR
732 TLS1_2_VERSION, TLS1_2_VERSION,
733 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 734 SSL_NOT_DEFAULT | SSL_HIGH,
0f113f3e
MC
735 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
736 128,
737 128,
738 },
0f113f3e
MC
739 {
740 1,
748f2546 741 TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8,
bbb4ceb8 742 TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8,
748f2546 743 TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8,
0f113f3e
MC
744 SSL_kDHE,
745 SSL_aRSA,
748f2546 746 SSL_AES256CCM8,
0f113f3e 747 SSL_AEAD,
3eb2aff4
KR
748 TLS1_2_VERSION, TLS1_2_VERSION,
749 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
750 SSL_NOT_DEFAULT | SSL_HIGH,
751 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
0f113f3e
MC
752 256,
753 256,
754 },
0f113f3e
MC
755 {
756 1,
748f2546 757 TLS1_TXT_PSK_WITH_AES_128_CCM,
bbb4ceb8 758 TLS1_RFC_PSK_WITH_AES_128_CCM,
748f2546
RS
759 TLS1_CK_PSK_WITH_AES_128_CCM,
760 SSL_kPSK,
761 SSL_aPSK,
762 SSL_AES128CCM,
0f113f3e 763 SSL_AEAD,
3eb2aff4
KR
764 TLS1_2_VERSION, TLS1_2_VERSION,
765 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 766 SSL_NOT_DEFAULT | SSL_HIGH,
0f113f3e
MC
767 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
768 128,
769 128,
770 },
0f113f3e
MC
771 {
772 1,
748f2546 773 TLS1_TXT_PSK_WITH_AES_256_CCM,
bbb4ceb8 774 TLS1_RFC_PSK_WITH_AES_256_CCM,
748f2546
RS
775 TLS1_CK_PSK_WITH_AES_256_CCM,
776 SSL_kPSK,
777 SSL_aPSK,
778 SSL_AES256CCM,
0f113f3e 779 SSL_AEAD,
3eb2aff4
KR
780 TLS1_2_VERSION, TLS1_2_VERSION,
781 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
782 SSL_NOT_DEFAULT | SSL_HIGH,
783 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
0f113f3e
MC
784 256,
785 256,
786 },
0f113f3e
MC
787 {
788 1,
748f2546 789 TLS1_TXT_DHE_PSK_WITH_AES_128_CCM,
bbb4ceb8 790 TLS1_RFC_DHE_PSK_WITH_AES_128_CCM,
748f2546
RS
791 TLS1_CK_DHE_PSK_WITH_AES_128_CCM,
792 SSL_kDHEPSK,
793 SSL_aPSK,
794 SSL_AES128CCM,
0f113f3e 795 SSL_AEAD,
3eb2aff4
KR
796 TLS1_2_VERSION, TLS1_2_VERSION,
797 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 798 SSL_NOT_DEFAULT | SSL_HIGH,
0f113f3e
MC
799 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
800 128,
801 128,
802 },
0f113f3e
MC
803 {
804 1,
748f2546 805 TLS1_TXT_DHE_PSK_WITH_AES_256_CCM,
bbb4ceb8 806 TLS1_RFC_DHE_PSK_WITH_AES_256_CCM,
748f2546
RS
807 TLS1_CK_DHE_PSK_WITH_AES_256_CCM,
808 SSL_kDHEPSK,
809 SSL_aPSK,
810 SSL_AES256CCM,
0f113f3e 811 SSL_AEAD,
3eb2aff4
KR
812 TLS1_2_VERSION, TLS1_2_VERSION,
813 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
814 SSL_NOT_DEFAULT | SSL_HIGH,
815 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
0f113f3e
MC
816 256,
817 256,
818 },
547dba74
DSH
819 {
820 1,
748f2546 821 TLS1_TXT_PSK_WITH_AES_128_CCM_8,
bbb4ceb8 822 TLS1_RFC_PSK_WITH_AES_128_CCM_8,
748f2546 823 TLS1_CK_PSK_WITH_AES_128_CCM_8,
547dba74
DSH
824 SSL_kPSK,
825 SSL_aPSK,
748f2546 826 SSL_AES128CCM8,
547dba74 827 SSL_AEAD,
3eb2aff4
KR
828 TLS1_2_VERSION, TLS1_2_VERSION,
829 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 830 SSL_NOT_DEFAULT | SSL_HIGH,
547dba74
DSH
831 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
832 128,
833 128,
834 },
547dba74
DSH
835 {
836 1,
748f2546 837 TLS1_TXT_PSK_WITH_AES_256_CCM_8,
bbb4ceb8 838 TLS1_RFC_PSK_WITH_AES_256_CCM_8,
748f2546 839 TLS1_CK_PSK_WITH_AES_256_CCM_8,
547dba74
DSH
840 SSL_kPSK,
841 SSL_aPSK,
748f2546 842 SSL_AES256CCM8,
547dba74 843 SSL_AEAD,
3eb2aff4
KR
844 TLS1_2_VERSION, TLS1_2_VERSION,
845 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
846 SSL_NOT_DEFAULT | SSL_HIGH,
847 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
547dba74
DSH
848 256,
849 256,
850 },
ea6114c6
DSH
851 {
852 1,
748f2546 853 TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8,
bbb4ceb8 854 TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8,
748f2546 855 TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8,
ea6114c6
DSH
856 SSL_kDHEPSK,
857 SSL_aPSK,
748f2546 858 SSL_AES128CCM8,
ea6114c6 859 SSL_AEAD,
3eb2aff4
KR
860 TLS1_2_VERSION, TLS1_2_VERSION,
861 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 862 SSL_NOT_DEFAULT | SSL_HIGH,
ea6114c6
DSH
863 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
864 128,
865 128,
866 },
ea6114c6
DSH
867 {
868 1,
748f2546 869 TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8,
bbb4ceb8 870 TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8,
748f2546
RS
871 TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8,
872 SSL_kDHEPSK,
ea6114c6 873 SSL_aPSK,
748f2546 874 SSL_AES256CCM8,
ea6114c6 875 SSL_AEAD,
3eb2aff4
KR
876 TLS1_2_VERSION, TLS1_2_VERSION,
877 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
878 SSL_NOT_DEFAULT | SSL_HIGH,
879 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
ea6114c6
DSH
880 256,
881 256,
882 },
ea6114c6
DSH
883 {
884 1,
748f2546 885 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM,
bbb4ceb8 886 TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM,
748f2546
RS
887 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM,
888 SSL_kECDHE,
889 SSL_aECDSA,
890 SSL_AES128CCM,
ea6114c6 891 SSL_AEAD,
3eb2aff4
KR
892 TLS1_2_VERSION, TLS1_2_VERSION,
893 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 894 SSL_NOT_DEFAULT | SSL_HIGH,
ea6114c6
DSH
895 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
896 128,
897 128,
898 },
ea6114c6
DSH
899 {
900 1,
748f2546 901 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM,
bbb4ceb8 902 TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM,
748f2546
RS
903 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM,
904 SSL_kECDHE,
905 SSL_aECDSA,
906 SSL_AES256CCM,
ea6114c6 907 SSL_AEAD,
3eb2aff4
KR
908 TLS1_2_VERSION, TLS1_2_VERSION,
909 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
910 SSL_NOT_DEFAULT | SSL_HIGH,
911 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
ea6114c6
DSH
912 256,
913 256,
914 },
ea6114c6
DSH
915 {
916 1,
748f2546 917 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8,
bbb4ceb8 918 TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8,
748f2546
RS
919 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8,
920 SSL_kECDHE,
921 SSL_aECDSA,
922 SSL_AES128CCM8,
923 SSL_AEAD,
924 TLS1_2_VERSION, TLS1_2_VERSION,
925 DTLS1_2_VERSION, DTLS1_2_VERSION,
926 SSL_NOT_DEFAULT | SSL_HIGH,
927 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
ea6114c6
DSH
928 128,
929 128,
930 },
ea6114c6
DSH
931 {
932 1,
748f2546 933 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8,
bbb4ceb8 934 TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8,
748f2546
RS
935 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8,
936 SSL_kECDHE,
937 SSL_aECDSA,
938 SSL_AES256CCM8,
939 SSL_AEAD,
940 TLS1_2_VERSION, TLS1_2_VERSION,
941 DTLS1_2_VERSION, DTLS1_2_VERSION,
942 SSL_NOT_DEFAULT | SSL_HIGH,
943 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
ea6114c6
DSH
944 256,
945 256,
946 },
ea6114c6
DSH
947 {
948 1,
748f2546 949 TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
bbb4ceb8 950 TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA,
748f2546
RS
951 TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
952 SSL_kECDHE,
953 SSL_aECDSA,
ea6114c6 954 SSL_eNULL,
748f2546 955 SSL_SHA1,
fe55c4a2 956 TLS1_VERSION, TLS1_2_VERSION,
387cf213 957 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 958 SSL_STRONG_NONE | SSL_FIPS,
ea6114c6
DSH
959 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
960 0,
961 0,
962 },
d33726b9 963# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
ea6114c6
DSH
964 {
965 1,
748f2546 966 TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
bbb4ceb8 967 TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
748f2546
RS
968 TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
969 SSL_kECDHE,
970 SSL_aECDSA,
971 SSL_3DES,
972 SSL_SHA1,
fe55c4a2 973 TLS1_VERSION, TLS1_2_VERSION,
387cf213 974 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 975 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
748f2546
RS
976 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
977 112,
978 168,
ea6114c6 979 },
d33726b9 980# endif
ea6114c6
DSH
981 {
982 1,
748f2546 983 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
bbb4ceb8 984 TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
748f2546
RS
985 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
986 SSL_kECDHE,
987 SSL_aECDSA,
ea6114c6 988 SSL_AES128,
748f2546 989 SSL_SHA1,
fe55c4a2 990 TLS1_VERSION, TLS1_2_VERSION,
387cf213 991 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 992 SSL_HIGH | SSL_FIPS,
ea6114c6
DSH
993 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
994 128,
995 128,
996 },
ea6114c6
DSH
997 {
998 1,
748f2546 999 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
bbb4ceb8 1000 TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
748f2546
RS
1001 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1002 SSL_kECDHE,
1003 SSL_aECDSA,
ea6114c6 1004 SSL_AES256,
748f2546 1005 SSL_SHA1,
fe55c4a2 1006 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1007 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1008 SSL_HIGH | SSL_FIPS,
748f2546 1009 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
ea6114c6
DSH
1010 256,
1011 256,
1012 },
ea6114c6
DSH
1013 {
1014 1,
748f2546 1015 TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
bbb4ceb8 1016 TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA,
748f2546
RS
1017 TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
1018 SSL_kECDHE,
1019 SSL_aRSA,
ea6114c6 1020 SSL_eNULL,
748f2546 1021 SSL_SHA1,
fe55c4a2 1022 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1023 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 1024 SSL_STRONG_NONE | SSL_FIPS,
ea6114c6
DSH
1025 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1026 0,
1027 0,
1028 },
d33726b9 1029# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
ea6114c6
DSH
1030 {
1031 1,
748f2546 1032 TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
bbb4ceb8 1033 TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
748f2546
RS
1034 TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1035 SSL_kECDHE,
1036 SSL_aRSA,
1037 SSL_3DES,
1038 SSL_SHA1,
fe55c4a2 1039 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1040 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 1041 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
748f2546
RS
1042 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1043 112,
1044 168,
ea6114c6 1045 },
d33726b9 1046# endif
ea6114c6
DSH
1047 {
1048 1,
748f2546 1049 TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
bbb4ceb8 1050 TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA,
748f2546
RS
1051 TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1052 SSL_kECDHE,
ea6114c6
DSH
1053 SSL_aRSA,
1054 SSL_AES128,
748f2546 1055 SSL_SHA1,
fe55c4a2 1056 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1057 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1058 SSL_HIGH | SSL_FIPS,
ea6114c6
DSH
1059 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1060 128,
1061 128,
1062 },
ea6114c6
DSH
1063 {
1064 1,
748f2546 1065 TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
bbb4ceb8 1066 TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA,
748f2546
RS
1067 TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1068 SSL_kECDHE,
ea6114c6
DSH
1069 SSL_aRSA,
1070 SSL_AES256,
748f2546 1071 SSL_SHA1,
fe55c4a2 1072 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1073 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1074 SSL_HIGH | SSL_FIPS,
748f2546 1075 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
ea6114c6
DSH
1076 256,
1077 256,
1078 },
ea6114c6
DSH
1079 {
1080 1,
748f2546 1081 TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
bbb4ceb8 1082 TLS1_RFC_ECDH_anon_WITH_NULL_SHA,
748f2546
RS
1083 TLS1_CK_ECDH_anon_WITH_NULL_SHA,
1084 SSL_kECDHE,
1085 SSL_aNULL,
ea6114c6 1086 SSL_eNULL,
748f2546 1087 SSL_SHA1,
fe55c4a2 1088 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1089 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 1090 SSL_STRONG_NONE | SSL_FIPS,
ea6114c6
DSH
1091 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1092 0,
1093 0,
1094 },
d33726b9 1095# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
ea6114c6
DSH
1096 {
1097 1,
748f2546 1098 TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
bbb4ceb8 1099 TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA,
748f2546
RS
1100 TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
1101 SSL_kECDHE,
1102 SSL_aNULL,
1103 SSL_3DES,
1104 SSL_SHA1,
fe55c4a2 1105 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1106 DTLS1_BAD_VER, DTLS1_2_VERSION,
4a8e9c22 1107 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
748f2546
RS
1108 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1109 112,
1110 168,
ea6114c6 1111 },
d33726b9 1112# endif
0f113f3e
MC
1113 {
1114 1,
748f2546 1115 TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
bbb4ceb8 1116 TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA,
748f2546
RS
1117 TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
1118 SSL_kECDHE,
1119 SSL_aNULL,
1120 SSL_AES128,
1121 SSL_SHA1,
fe55c4a2 1122 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1123 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1124 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
1125 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1126 128,
1127 128,
1128 },
0f113f3e
MC
1129 {
1130 1,
748f2546 1131 TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
bbb4ceb8 1132 TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA,
748f2546
RS
1133 TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
1134 SSL_kECDHE,
1135 SSL_aNULL,
1136 SSL_AES256,
1137 SSL_SHA1,
fe55c4a2 1138 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1139 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1140 SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
1141 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1142 256,
1143 256,
1144 },
1145 {
1146 1,
1147 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
bbb4ceb8 1148 TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256,
748f2546
RS
1149 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
1150 SSL_kECDHE,
1151 SSL_aECDSA,
1152 SSL_AES128,
0f113f3e 1153 SSL_SHA256,
3eb2aff4
KR
1154 TLS1_2_VERSION, TLS1_2_VERSION,
1155 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 1156 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1157 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1158 128,
1159 128,
1160 },
0f113f3e
MC
1161 {
1162 1,
748f2546 1163 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
bbb4ceb8 1164 TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384,
748f2546
RS
1165 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
1166 SSL_kECDHE,
1167 SSL_aECDSA,
1168 SSL_AES256,
1169 SSL_SHA384,
3eb2aff4
KR
1170 TLS1_2_VERSION, TLS1_2_VERSION,
1171 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
1172 SSL_HIGH | SSL_FIPS,
1173 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1174 256,
1175 256,
0f113f3e 1176 },
0f113f3e
MC
1177 {
1178 1,
748f2546 1179 TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
bbb4ceb8 1180 TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256,
748f2546
RS
1181 TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
1182 SSL_kECDHE,
1183 SSL_aRSA,
1184 SSL_AES128,
0f113f3e 1185 SSL_SHA256,
3eb2aff4
KR
1186 TLS1_2_VERSION, TLS1_2_VERSION,
1187 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 1188 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1189 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1190 128,
1191 128,
1192 },
0f113f3e
MC
1193 {
1194 1,
748f2546 1195 TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
bbb4ceb8 1196 TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384,
748f2546
RS
1197 TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
1198 SSL_kECDHE,
0f113f3e 1199 SSL_aRSA,
748f2546
RS
1200 SSL_AES256,
1201 SSL_SHA384,
3eb2aff4
KR
1202 TLS1_2_VERSION, TLS1_2_VERSION,
1203 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
1204 SSL_HIGH | SSL_FIPS,
1205 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
0f113f3e
MC
1206 256,
1207 256,
1208 },
0f113f3e
MC
1209 {
1210 1,
748f2546 1211 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
bbb4ceb8 1212 TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
748f2546
RS
1213 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
1214 SSL_kECDHE,
1215 SSL_aECDSA,
1216 SSL_AES128GCM,
1217 SSL_AEAD,
3eb2aff4
KR
1218 TLS1_2_VERSION, TLS1_2_VERSION,
1219 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 1220 SSL_HIGH | SSL_FIPS,
0f113f3e 1221 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
748f2546
RS
1222 128,
1223 128,
1224 },
1225 {
1226 1,
1227 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
bbb4ceb8 1228 TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
748f2546
RS
1229 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
1230 SSL_kECDHE,
1231 SSL_aECDSA,
1232 SSL_AES256GCM,
1233 SSL_AEAD,
1234 TLS1_2_VERSION, TLS1_2_VERSION,
1235 DTLS1_2_VERSION, DTLS1_2_VERSION,
1236 SSL_HIGH | SSL_FIPS,
1237 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
0f113f3e
MC
1238 256,
1239 256,
1240 },
0f113f3e
MC
1241 {
1242 1,
748f2546 1243 TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
bbb4ceb8 1244 TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
748f2546
RS
1245 TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
1246 SSL_kECDHE,
0f113f3e 1247 SSL_aRSA,
748f2546
RS
1248 SSL_AES128GCM,
1249 SSL_AEAD,
3eb2aff4
KR
1250 TLS1_2_VERSION, TLS1_2_VERSION,
1251 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546 1252 SSL_HIGH | SSL_FIPS,
0f113f3e 1253 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
748f2546
RS
1254 128,
1255 128,
0f113f3e 1256 },
0f113f3e
MC
1257 {
1258 1,
748f2546 1259 TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
bbb4ceb8 1260 TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
748f2546
RS
1261 TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
1262 SSL_kECDHE,
1263 SSL_aRSA,
1264 SSL_AES256GCM,
1265 SSL_AEAD,
3eb2aff4
KR
1266 TLS1_2_VERSION, TLS1_2_VERSION,
1267 DTLS1_2_VERSION, DTLS1_2_VERSION,
748f2546
RS
1268 SSL_HIGH | SSL_FIPS,
1269 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
0f113f3e
MC
1270 256,
1271 256,
1272 },
0f113f3e
MC
1273 {
1274 1,
748f2546 1275 TLS1_TXT_PSK_WITH_NULL_SHA,
bbb4ceb8 1276 TLS1_RFC_PSK_WITH_NULL_SHA,
748f2546
RS
1277 TLS1_CK_PSK_WITH_NULL_SHA,
1278 SSL_kPSK,
1279 SSL_aPSK,
0f113f3e
MC
1280 SSL_eNULL,
1281 SSL_SHA1,
3eb2aff4 1282 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1283 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 1284 SSL_STRONG_NONE | SSL_FIPS,
0f113f3e
MC
1285 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1286 0,
1287 0,
1288 },
0f113f3e
MC
1289 {
1290 1,
748f2546 1291 TLS1_TXT_DHE_PSK_WITH_NULL_SHA,
bbb4ceb8 1292 TLS1_RFC_DHE_PSK_WITH_NULL_SHA,
748f2546
RS
1293 TLS1_CK_DHE_PSK_WITH_NULL_SHA,
1294 SSL_kDHEPSK,
1295 SSL_aPSK,
1296 SSL_eNULL,
0f113f3e 1297 SSL_SHA1,
3eb2aff4 1298 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1299 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546 1300 SSL_STRONG_NONE | SSL_FIPS,
0f113f3e 1301 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
748f2546
RS
1302 0,
1303 0,
0f113f3e 1304 },
0f113f3e
MC
1305 {
1306 1,
748f2546 1307 TLS1_TXT_RSA_PSK_WITH_NULL_SHA,
bbb4ceb8 1308 TLS1_RFC_RSA_PSK_WITH_NULL_SHA,
748f2546
RS
1309 TLS1_CK_RSA_PSK_WITH_NULL_SHA,
1310 SSL_kRSAPSK,
1311 SSL_aRSA,
1312 SSL_eNULL,
1313 SSL_SHA1,
1314 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1315 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1316 SSL_STRONG_NONE | SSL_FIPS,
1317 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1318 0,
1319 0,
1320 },
d33726b9 1321# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
748f2546
RS
1322 {
1323 1,
1324 TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
bbb4ceb8 1325 TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA,
748f2546
RS
1326 TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
1327 SSL_kPSK,
1328 SSL_aPSK,
0f113f3e
MC
1329 SSL_3DES,
1330 SSL_SHA1,
3eb2aff4 1331 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1332 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 1333 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
0f113f3e
MC
1334 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1335 112,
1336 168,
1337 },
d33726b9 1338# endif
0f113f3e
MC
1339 {
1340 1,
748f2546 1341 TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
bbb4ceb8 1342 TLS1_RFC_PSK_WITH_AES_128_CBC_SHA,
748f2546
RS
1343 TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
1344 SSL_kPSK,
1345 SSL_aPSK,
0f113f3e
MC
1346 SSL_AES128,
1347 SSL_SHA1,
3eb2aff4 1348 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1349 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1350 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1351 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1352 128,
1353 128,
1354 },
0f113f3e
MC
1355 {
1356 1,
748f2546 1357 TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
bbb4ceb8 1358 TLS1_RFC_PSK_WITH_AES_256_CBC_SHA,
748f2546
RS
1359 TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
1360 SSL_kPSK,
1361 SSL_aPSK,
0f113f3e
MC
1362 SSL_AES256,
1363 SSL_SHA1,
3eb2aff4 1364 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1365 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1366 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1367 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1368 256,
1369 256,
1370 },
d33726b9 1371# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
0f113f3e
MC
1372 {
1373 1,
748f2546 1374 TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
bbb4ceb8 1375 TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
748f2546
RS
1376 TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
1377 SSL_kDHEPSK,
1378 SSL_aPSK,
1379 SSL_3DES,
0f113f3e 1380 SSL_SHA1,
3eb2aff4 1381 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1382 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 1383 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
0f113f3e 1384 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
748f2546
RS
1385 112,
1386 168,
0f113f3e 1387 },
d33726b9 1388# endif
0f113f3e
MC
1389 {
1390 1,
748f2546 1391 TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA,
bbb4ceb8 1392 TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA,
748f2546
RS
1393 TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA,
1394 SSL_kDHEPSK,
1395 SSL_aPSK,
1396 SSL_AES128,
1397 SSL_SHA1,
1398 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1399 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546 1400 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1401 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1402 128,
1403 128,
1404 },
0f113f3e
MC
1405 {
1406 1,
748f2546 1407 TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA,
bbb4ceb8 1408 TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA,
748f2546
RS
1409 TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA,
1410 SSL_kDHEPSK,
1411 SSL_aPSK,
1412 SSL_AES256,
1413 SSL_SHA1,
1414 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1415 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1416 SSL_HIGH | SSL_FIPS,
1417 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1418 256,
1419 256,
1420 },
d33726b9 1421# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
748f2546
RS
1422 {
1423 1,
1424 TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
bbb4ceb8 1425 TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
748f2546
RS
1426 TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
1427 SSL_kRSAPSK,
0f113f3e
MC
1428 SSL_aRSA,
1429 SSL_3DES,
1430 SSL_SHA1,
3eb2aff4 1431 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1432 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 1433 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
0f113f3e
MC
1434 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1435 112,
1436 168,
1437 },
d33726b9 1438# endif
0f113f3e
MC
1439 {
1440 1,
748f2546 1441 TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA,
bbb4ceb8 1442 TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA,
748f2546
RS
1443 TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA,
1444 SSL_kRSAPSK,
0f113f3e
MC
1445 SSL_aRSA,
1446 SSL_AES128,
1447 SSL_SHA1,
3eb2aff4 1448 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1449 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1450 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1451 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1452 128,
1453 128,
1454 },
0f113f3e
MC
1455 {
1456 1,
748f2546 1457 TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA,
bbb4ceb8 1458 TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA,
748f2546
RS
1459 TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA,
1460 SSL_kRSAPSK,
0f113f3e
MC
1461 SSL_aRSA,
1462 SSL_AES256,
1463 SSL_SHA1,
3eb2aff4 1464 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1465 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1466 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1467 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1468 256,
1469 256,
1470 },
0f113f3e
MC
1471 {
1472 1,
748f2546 1473 TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256,
bbb4ceb8 1474 TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256,
748f2546
RS
1475 TLS1_CK_PSK_WITH_AES_128_GCM_SHA256,
1476 SSL_kPSK,
1477 SSL_aPSK,
1478 SSL_AES128GCM,
1479 SSL_AEAD,
1480 TLS1_2_VERSION, TLS1_2_VERSION,
1481 DTLS1_2_VERSION, DTLS1_2_VERSION,
1482 SSL_HIGH | SSL_FIPS,
1483 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
0f113f3e
MC
1484 128,
1485 128,
1486 },
0f113f3e
MC
1487 {
1488 1,
748f2546 1489 TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384,
bbb4ceb8 1490 TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384,
748f2546
RS
1491 TLS1_CK_PSK_WITH_AES_256_GCM_SHA384,
1492 SSL_kPSK,
1493 SSL_aPSK,
1494 SSL_AES256GCM,
1495 SSL_AEAD,
1496 TLS1_2_VERSION, TLS1_2_VERSION,
1497 DTLS1_2_VERSION, DTLS1_2_VERSION,
1498 SSL_HIGH | SSL_FIPS,
1499 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1500 256,
1501 256,
0f113f3e 1502 },
0f113f3e
MC
1503 {
1504 1,
748f2546 1505 TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256,
bbb4ceb8 1506 TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256,
748f2546
RS
1507 TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256,
1508 SSL_kDHEPSK,
1509 SSL_aPSK,
1510 SSL_AES128GCM,
1511 SSL_AEAD,
1512 TLS1_2_VERSION, TLS1_2_VERSION,
1513 DTLS1_2_VERSION, DTLS1_2_VERSION,
1514 SSL_HIGH | SSL_FIPS,
1515 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
0f113f3e
MC
1516 128,
1517 128,
1518 },
0f113f3e
MC
1519 {
1520 1,
748f2546 1521 TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384,
bbb4ceb8 1522 TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384,
748f2546
RS
1523 TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384,
1524 SSL_kDHEPSK,
1525 SSL_aPSK,
1526 SSL_AES256GCM,
1527 SSL_AEAD,
1528 TLS1_2_VERSION, TLS1_2_VERSION,
1529 DTLS1_2_VERSION, DTLS1_2_VERSION,
1530 SSL_HIGH | SSL_FIPS,
1531 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
0f113f3e
MC
1532 256,
1533 256,
1534 },
0f113f3e
MC
1535 {
1536 1,
748f2546 1537 TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256,
bbb4ceb8 1538 TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256,
748f2546
RS
1539 TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256,
1540 SSL_kRSAPSK,
0f113f3e 1541 SSL_aRSA,
748f2546
RS
1542 SSL_AES128GCM,
1543 SSL_AEAD,
1544 TLS1_2_VERSION, TLS1_2_VERSION,
1545 DTLS1_2_VERSION, DTLS1_2_VERSION,
1546 SSL_HIGH | SSL_FIPS,
1547 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1548 128,
1549 128,
0f113f3e 1550 },
0f113f3e
MC
1551 {
1552 1,
748f2546 1553 TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384,
bbb4ceb8 1554 TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384,
748f2546
RS
1555 TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384,
1556 SSL_kRSAPSK,
1557 SSL_aRSA,
1558 SSL_AES256GCM,
1559 SSL_AEAD,
1560 TLS1_2_VERSION, TLS1_2_VERSION,
1561 DTLS1_2_VERSION, DTLS1_2_VERSION,
1562 SSL_HIGH | SSL_FIPS,
1563 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1564 256,
1565 256,
0f113f3e 1566 },
0f113f3e
MC
1567 {
1568 1,
748f2546 1569 TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256,
bbb4ceb8 1570 TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256,
748f2546
RS
1571 TLS1_CK_PSK_WITH_AES_128_CBC_SHA256,
1572 SSL_kPSK,
1573 SSL_aPSK,
0f113f3e 1574 SSL_AES128,
748f2546
RS
1575 SSL_SHA256,
1576 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1577 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546 1578 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1579 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1580 128,
1581 128,
1582 },
0f113f3e
MC
1583 {
1584 1,
748f2546 1585 TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384,
bbb4ceb8 1586 TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384,
748f2546
RS
1587 TLS1_CK_PSK_WITH_AES_256_CBC_SHA384,
1588 SSL_kPSK,
1589 SSL_aPSK,
1590 SSL_AES256,
1591 SSL_SHA384,
1592 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1593 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1594 SSL_HIGH | SSL_FIPS,
1595 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1596 256,
1597 256,
0f113f3e 1598 },
0f113f3e
MC
1599 {
1600 1,
748f2546 1601 TLS1_TXT_PSK_WITH_NULL_SHA256,
bbb4ceb8 1602 TLS1_RFC_PSK_WITH_NULL_SHA256,
748f2546
RS
1603 TLS1_CK_PSK_WITH_NULL_SHA256,
1604 SSL_kPSK,
1605 SSL_aPSK,
1606 SSL_eNULL,
1607 SSL_SHA256,
1608 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1609 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546 1610 SSL_STRONG_NONE | SSL_FIPS,
0f113f3e 1611 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
748f2546
RS
1612 0,
1613 0,
0f113f3e 1614 },
0f113f3e
MC
1615 {
1616 1,
748f2546 1617 TLS1_TXT_PSK_WITH_NULL_SHA384,
bbb4ceb8 1618 TLS1_RFC_PSK_WITH_NULL_SHA384,
748f2546
RS
1619 TLS1_CK_PSK_WITH_NULL_SHA384,
1620 SSL_kPSK,
1621 SSL_aPSK,
1622 SSL_eNULL,
1623 SSL_SHA384,
1624 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1625 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1626 SSL_STRONG_NONE | SSL_FIPS,
1627 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1628 0,
1629 0,
0f113f3e 1630 },
0f113f3e
MC
1631 {
1632 1,
748f2546 1633 TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256,
bbb4ceb8 1634 TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256,
748f2546
RS
1635 TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256,
1636 SSL_kDHEPSK,
1637 SSL_aPSK,
1638 SSL_AES128,
1639 SSL_SHA256,
1640 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1641 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546 1642 SSL_HIGH | SSL_FIPS,
0f113f3e 1643 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
748f2546
RS
1644 128,
1645 128,
0f113f3e 1646 },
0f113f3e
MC
1647 {
1648 1,
748f2546 1649 TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384,
bbb4ceb8 1650 TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384,
748f2546
RS
1651 TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384,
1652 SSL_kDHEPSK,
1653 SSL_aPSK,
0f113f3e 1654 SSL_AES256,
748f2546
RS
1655 SSL_SHA384,
1656 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1657 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1658 SSL_HIGH | SSL_FIPS,
1659 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
0f113f3e
MC
1660 256,
1661 256,
1662 },
0f113f3e
MC
1663 {
1664 1,
748f2546 1665 TLS1_TXT_DHE_PSK_WITH_NULL_SHA256,
bbb4ceb8 1666 TLS1_RFC_DHE_PSK_WITH_NULL_SHA256,
748f2546
RS
1667 TLS1_CK_DHE_PSK_WITH_NULL_SHA256,
1668 SSL_kDHEPSK,
1669 SSL_aPSK,
1670 SSL_eNULL,
0f113f3e 1671 SSL_SHA256,
748f2546 1672 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1673 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1674 SSL_STRONG_NONE | SSL_FIPS,
1675 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1676 0,
1677 0,
0f113f3e 1678 },
0f113f3e
MC
1679 {
1680 1,
748f2546 1681 TLS1_TXT_DHE_PSK_WITH_NULL_SHA384,
bbb4ceb8 1682 TLS1_RFC_DHE_PSK_WITH_NULL_SHA384,
748f2546
RS
1683 TLS1_CK_DHE_PSK_WITH_NULL_SHA384,
1684 SSL_kDHEPSK,
1685 SSL_aPSK,
1686 SSL_eNULL,
0f113f3e 1687 SSL_SHA384,
748f2546 1688 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1689 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546 1690 SSL_STRONG_NONE | SSL_FIPS,
0f113f3e 1691 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
748f2546
RS
1692 0,
1693 0,
0f113f3e 1694 },
0f113f3e
MC
1695 {
1696 1,
748f2546 1697 TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256,
bbb4ceb8 1698 TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256,
748f2546
RS
1699 TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256,
1700 SSL_kRSAPSK,
0f113f3e
MC
1701 SSL_aRSA,
1702 SSL_AES128,
1703 SSL_SHA256,
748f2546 1704 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1705 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1706 SSL_HIGH | SSL_FIPS,
748f2546 1707 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
0f113f3e
MC
1708 128,
1709 128,
1710 },
0f113f3e
MC
1711 {
1712 1,
748f2546 1713 TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384,
bbb4ceb8 1714 TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384,
748f2546
RS
1715 TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384,
1716 SSL_kRSAPSK,
0f113f3e
MC
1717 SSL_aRSA,
1718 SSL_AES256,
1719 SSL_SHA384,
748f2546 1720 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1721 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1722 SSL_HIGH | SSL_FIPS,
0f113f3e
MC
1723 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1724 256,
1725 256,
1726 },
0f113f3e
MC
1727 {
1728 1,
748f2546 1729 TLS1_TXT_RSA_PSK_WITH_NULL_SHA256,
bbb4ceb8 1730 TLS1_RFC_RSA_PSK_WITH_NULL_SHA256,
748f2546
RS
1731 TLS1_CK_RSA_PSK_WITH_NULL_SHA256,
1732 SSL_kRSAPSK,
0f113f3e 1733 SSL_aRSA,
748f2546
RS
1734 SSL_eNULL,
1735 SSL_SHA256,
1736 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1737 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1738 SSL_STRONG_NONE | SSL_FIPS,
1739 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1740 0,
1741 0,
0f113f3e 1742 },
0f113f3e
MC
1743 {
1744 1,
748f2546 1745 TLS1_TXT_RSA_PSK_WITH_NULL_SHA384,
bbb4ceb8 1746 TLS1_RFC_RSA_PSK_WITH_NULL_SHA384,
748f2546
RS
1747 TLS1_CK_RSA_PSK_WITH_NULL_SHA384,
1748 SSL_kRSAPSK,
0f113f3e 1749 SSL_aRSA,
748f2546
RS
1750 SSL_eNULL,
1751 SSL_SHA384,
1752 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1753 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546 1754 SSL_STRONG_NONE | SSL_FIPS,
0f113f3e 1755 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
748f2546
RS
1756 0,
1757 0,
ea6114c6 1758 },
d33726b9 1759# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
ea6114c6
DSH
1760 {
1761 1,
1762 TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
bbb4ceb8 1763 TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
ea6114c6
DSH
1764 TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
1765 SSL_kECDHEPSK,
1766 SSL_aPSK,
1767 SSL_3DES,
1768 SSL_SHA1,
fe55c4a2 1769 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1770 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 1771 SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
ea6114c6
DSH
1772 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1773 112,
1774 168,
1775 },
d33726b9 1776# endif
ea6114c6
DSH
1777 {
1778 1,
1779 TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA,
bbb4ceb8 1780 TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA,
ea6114c6
DSH
1781 TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA,
1782 SSL_kECDHEPSK,
1783 SSL_aPSK,
1784 SSL_AES128,
1785 SSL_SHA1,
fe55c4a2 1786 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1787 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1788 SSL_HIGH | SSL_FIPS,
ea6114c6
DSH
1789 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1790 128,
1791 128,
1792 },
ea6114c6
DSH
1793 {
1794 1,
1795 TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA,
bbb4ceb8 1796 TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA,
ea6114c6
DSH
1797 TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA,
1798 SSL_kECDHEPSK,
1799 SSL_aPSK,
1800 SSL_AES256,
1801 SSL_SHA1,
fe55c4a2 1802 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1803 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1804 SSL_HIGH | SSL_FIPS,
ea6114c6
DSH
1805 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1806 256,
1807 256,
1808 },
ea6114c6
DSH
1809 {
1810 1,
1811 TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
bbb4ceb8 1812 TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
ea6114c6
DSH
1813 TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
1814 SSL_kECDHEPSK,
1815 SSL_aPSK,
1816 SSL_AES128,
1817 SSL_SHA256,
3eb2aff4 1818 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1819 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1820 SSL_HIGH | SSL_FIPS,
ea6114c6
DSH
1821 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1822 128,
1823 128,
1824 },
ea6114c6
DSH
1825 {
1826 1,
1827 TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
bbb4ceb8 1828 TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
ea6114c6
DSH
1829 TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
1830 SSL_kECDHEPSK,
1831 SSL_aPSK,
1832 SSL_AES256,
1833 SSL_SHA384,
3eb2aff4 1834 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1835 DTLS1_BAD_VER, DTLS1_2_VERSION,
361a1191 1836 SSL_HIGH | SSL_FIPS,
ea6114c6
DSH
1837 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1838 256,
1839 256,
1840 },
ea6114c6
DSH
1841 {
1842 1,
1843 TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA,
bbb4ceb8 1844 TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA,
ea6114c6
DSH
1845 TLS1_CK_ECDHE_PSK_WITH_NULL_SHA,
1846 SSL_kECDHEPSK,
1847 SSL_aPSK,
1848 SSL_eNULL,
1849 SSL_SHA1,
fe55c4a2 1850 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1851 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 1852 SSL_STRONG_NONE | SSL_FIPS,
ea6114c6
DSH
1853 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1854 0,
1855 0,
1856 },
ea6114c6
DSH
1857 {
1858 1,
1859 TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256,
bbb4ceb8 1860 TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256,
ea6114c6
DSH
1861 TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256,
1862 SSL_kECDHEPSK,
1863 SSL_aPSK,
1864 SSL_eNULL,
1865 SSL_SHA256,
3eb2aff4 1866 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1867 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 1868 SSL_STRONG_NONE | SSL_FIPS,
ea6114c6
DSH
1869 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1870 0,
1871 0,
1872 },
ea6114c6
DSH
1873 {
1874 1,
1875 TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384,
bbb4ceb8 1876 TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384,
ea6114c6
DSH
1877 TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384,
1878 SSL_kECDHEPSK,
1879 SSL_aPSK,
1880 SSL_eNULL,
1881 SSL_SHA384,
3eb2aff4 1882 TLS1_VERSION, TLS1_2_VERSION,
387cf213 1883 DTLS1_BAD_VER, DTLS1_2_VERSION,
1510b5f7 1884 SSL_STRONG_NONE | SSL_FIPS,
ea6114c6
DSH
1885 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1886 0,
1887 0,
1888 },
1889
d33726b9 1890# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
748f2546
RS
1891 {
1892 1,
1893 TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
bbb4ceb8 1894 TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
748f2546
RS
1895 TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
1896 SSL_kSRP,
1897 SSL_aSRP,
1898 SSL_3DES,
1899 SSL_SHA1,
1900 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1901 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 1902 SSL_NOT_DEFAULT | SSL_MEDIUM,
748f2546
RS
1903 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1904 112,
1905 168,
1906 },
1907 {
1908 1,
1909 TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
bbb4ceb8 1910 TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
748f2546
RS
1911 TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
1912 SSL_kSRP,
1913 SSL_aRSA,
1914 SSL_3DES,
1915 SSL_SHA1,
1916 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1917 DTLS1_BAD_VER, DTLS1_2_VERSION,
ef28891b 1918 SSL_NOT_DEFAULT | SSL_MEDIUM,
748f2546
RS
1919 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1920 112,
1921 168,
1922 },
1923 {
1924 1,
1925 TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
bbb4ceb8 1926 TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
748f2546
RS
1927 TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
1928 SSL_kSRP,
1929 SSL_aDSS,
1930 SSL_3DES,
1931 SSL_SHA1,
1932 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1933 DTLS1_BAD_VER, DTLS1_2_VERSION,
4a8e9c22 1934 SSL_NOT_DEFAULT | SSL_MEDIUM,
748f2546
RS
1935 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1936 112,
1937 168,
1938 },
d33726b9 1939# endif
748f2546
RS
1940 {
1941 1,
1942 TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA,
bbb4ceb8 1943 TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA,
748f2546
RS
1944 TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA,
1945 SSL_kSRP,
1946 SSL_aSRP,
1947 SSL_AES128,
1948 SSL_SHA1,
1949 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1950 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1951 SSL_HIGH,
1952 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1953 128,
1954 128,
1955 },
1956 {
1957 1,
1958 TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
bbb4ceb8 1959 TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
748f2546
RS
1960 TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
1961 SSL_kSRP,
1962 SSL_aRSA,
1963 SSL_AES128,
1964 SSL_SHA1,
1965 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1966 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1967 SSL_HIGH,
1968 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1969 128,
1970 128,
1971 },
1972 {
1973 1,
1974 TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
bbb4ceb8 1975 TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
748f2546
RS
1976 TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
1977 SSL_kSRP,
1978 SSL_aDSS,
1979 SSL_AES128,
1980 SSL_SHA1,
1981 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1982 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1983 SSL_NOT_DEFAULT | SSL_HIGH,
1984 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1985 128,
1986 128,
1987 },
1988 {
1989 1,
1990 TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA,
bbb4ceb8 1991 TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA,
748f2546
RS
1992 TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA,
1993 SSL_kSRP,
1994 SSL_aSRP,
1995 SSL_AES256,
1996 SSL_SHA1,
1997 SSL3_VERSION, TLS1_2_VERSION,
387cf213 1998 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
1999 SSL_HIGH,
2000 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2001 256,
2002 256,
2003 },
2004 {
2005 1,
2006 TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
bbb4ceb8 2007 TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
748f2546
RS
2008 TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2009 SSL_kSRP,
2010 SSL_aRSA,
2011 SSL_AES256,
2012 SSL_SHA1,
2013 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2014 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2015 SSL_HIGH,
2016 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2017 256,
2018 256,
2019 },
2020 {
2021 1,
2022 TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
bbb4ceb8 2023 TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
748f2546
RS
2024 TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2025 SSL_kSRP,
2026 SSL_aDSS,
2027 SSL_AES256,
2028 SSL_SHA1,
2029 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2030 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2031 SSL_NOT_DEFAULT | SSL_HIGH,
2032 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2033 256,
2034 256,
2035 },
748f2546
RS
2036
2037#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
748f2546
RS
2038 {
2039 1,
2040 TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
bbb4ceb8 2041 TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305,
748f2546
RS
2042 TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305,
2043 SSL_kDHE,
2044 SSL_aRSA,
2045 SSL_CHACHA20POLY1305,
2046 SSL_AEAD,
2047 TLS1_2_VERSION, TLS1_2_VERSION,
2048 DTLS1_2_VERSION, DTLS1_2_VERSION,
2049 SSL_HIGH,
2050 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2051 256,
2052 256,
2053 },
748f2546
RS
2054 {
2055 1,
2056 TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
bbb4ceb8 2057 TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305,
748f2546
RS
2058 TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305,
2059 SSL_kECDHE,
2060 SSL_aRSA,
2061 SSL_CHACHA20POLY1305,
2062 SSL_AEAD,
2063 TLS1_2_VERSION, TLS1_2_VERSION,
2064 DTLS1_2_VERSION, DTLS1_2_VERSION,
2065 SSL_HIGH,
2066 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2067 256,
2068 256,
2069 },
2070 {
2071 1,
2072 TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
bbb4ceb8 2073 TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
748f2546
RS
2074 TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
2075 SSL_kECDHE,
2076 SSL_aECDSA,
2077 SSL_CHACHA20POLY1305,
2078 SSL_AEAD,
2079 TLS1_2_VERSION, TLS1_2_VERSION,
2080 DTLS1_2_VERSION, DTLS1_2_VERSION,
2081 SSL_HIGH,
2082 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2083 256,
2084 256,
2085 },
748f2546
RS
2086 {
2087 1,
2088 TLS1_TXT_PSK_WITH_CHACHA20_POLY1305,
bbb4ceb8 2089 TLS1_RFC_PSK_WITH_CHACHA20_POLY1305,
748f2546
RS
2090 TLS1_CK_PSK_WITH_CHACHA20_POLY1305,
2091 SSL_kPSK,
2092 SSL_aPSK,
2093 SSL_CHACHA20POLY1305,
2094 SSL_AEAD,
2095 TLS1_2_VERSION, TLS1_2_VERSION,
2096 DTLS1_2_VERSION, DTLS1_2_VERSION,
2097 SSL_HIGH,
2098 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2099 256,
2100 256,
2101 },
2102 {
2103 1,
2104 TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305,
bbb4ceb8 2105 TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305,
748f2546
RS
2106 TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305,
2107 SSL_kECDHEPSK,
2108 SSL_aPSK,
2109 SSL_CHACHA20POLY1305,
2110 SSL_AEAD,
2111 TLS1_2_VERSION, TLS1_2_VERSION,
2112 DTLS1_2_VERSION, DTLS1_2_VERSION,
2113 SSL_HIGH,
2114 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2115 256,
2116 256,
2117 },
2118 {
2119 1,
2120 TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305,
bbb4ceb8 2121 TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305,
748f2546
RS
2122 TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305,
2123 SSL_kDHEPSK,
2124 SSL_aPSK,
2125 SSL_CHACHA20POLY1305,
2126 SSL_AEAD,
2127 TLS1_2_VERSION, TLS1_2_VERSION,
2128 DTLS1_2_VERSION, DTLS1_2_VERSION,
2129 SSL_HIGH,
2130 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2131 256,
2132 256,
2133 },
2134 {
2135 1,
2136 TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305,
bbb4ceb8 2137 TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305,
748f2546
RS
2138 TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305,
2139 SSL_kRSAPSK,
2140 SSL_aRSA,
2141 SSL_CHACHA20POLY1305,
2142 SSL_AEAD,
2143 TLS1_2_VERSION, TLS1_2_VERSION,
2144 DTLS1_2_VERSION, DTLS1_2_VERSION,
2145 SSL_HIGH,
2146 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2147 256,
2148 256,
2149 },
a230b26e
EK
2150#endif /* !defined(OPENSSL_NO_CHACHA) &&
2151 * !defined(OPENSSL_NO_POLY1305) */
748f2546
RS
2152
2153#ifndef OPENSSL_NO_CAMELLIA
2154 {
2155 1,
2156 TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2157 TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256,
748f2546
RS
2158 TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2159 SSL_kRSA,
2160 SSL_aRSA,
2161 SSL_CAMELLIA128,
2162 SSL_SHA256,
2163 TLS1_2_VERSION, TLS1_2_VERSION,
2164 DTLS1_2_VERSION, DTLS1_2_VERSION,
2165 SSL_NOT_DEFAULT | SSL_HIGH,
2166 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2167 128,
2168 128,
2169 },
2170 {
2171 1,
2172 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2173 TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
748f2546
RS
2174 TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
2175 SSL_kEDH,
2176 SSL_aDSS,
2177 SSL_CAMELLIA128,
2178 SSL_SHA256,
2179 TLS1_2_VERSION, TLS1_2_VERSION,
2180 DTLS1_2_VERSION, DTLS1_2_VERSION,
2181 SSL_NOT_DEFAULT | SSL_HIGH,
2182 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2183 128,
2184 128,
2185 },
2186 {
2187 1,
2188 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2189 TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
748f2546
RS
2190 TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2191 SSL_kEDH,
2192 SSL_aRSA,
2193 SSL_CAMELLIA128,
2194 SSL_SHA256,
2195 TLS1_2_VERSION, TLS1_2_VERSION,
2196 DTLS1_2_VERSION, DTLS1_2_VERSION,
2197 SSL_NOT_DEFAULT | SSL_HIGH,
2198 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2199 128,
2200 128,
2201 },
2202 {
2203 1,
2204 TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2205 TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256,
748f2546
RS
2206 TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256,
2207 SSL_kEDH,
2208 SSL_aNULL,
2209 SSL_CAMELLIA128,
2210 SSL_SHA256,
2211 TLS1_2_VERSION, TLS1_2_VERSION,
2212 DTLS1_2_VERSION, DTLS1_2_VERSION,
2213 SSL_NOT_DEFAULT | SSL_HIGH,
2214 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2215 128,
2216 128,
2217 },
2218 {
2219 1,
2220 TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256,
bbb4ceb8 2221 TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256,
748f2546
RS
2222 TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2223 SSL_kRSA,
2224 SSL_aRSA,
2225 SSL_CAMELLIA256,
2226 SSL_SHA256,
2227 TLS1_2_VERSION, TLS1_2_VERSION,
2228 DTLS1_2_VERSION, DTLS1_2_VERSION,
2229 SSL_NOT_DEFAULT | SSL_HIGH,
2230 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2231 256,
2232 256,
2233 },
2234 {
2235 1,
2236 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
bbb4ceb8 2237 TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
748f2546
RS
2238 TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
2239 SSL_kEDH,
2240 SSL_aDSS,
2241 SSL_CAMELLIA256,
2242 SSL_SHA256,
2243 TLS1_2_VERSION, TLS1_2_VERSION,
2244 DTLS1_2_VERSION, DTLS1_2_VERSION,
2245 SSL_NOT_DEFAULT | SSL_HIGH,
2246 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2247 256,
2248 256,
2249 },
2250 {
2251 1,
2252 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
bbb4ceb8 2253 TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
748f2546
RS
2254 TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2255 SSL_kEDH,
2256 SSL_aRSA,
2257 SSL_CAMELLIA256,
2258 SSL_SHA256,
2259 TLS1_2_VERSION, TLS1_2_VERSION,
2260 DTLS1_2_VERSION, DTLS1_2_VERSION,
2261 SSL_NOT_DEFAULT | SSL_HIGH,
2262 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2263 256,
2264 256,
2265 },
2266 {
2267 1,
2268 TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256,
bbb4ceb8 2269 TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256,
748f2546
RS
2270 TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256,
2271 SSL_kEDH,
2272 SSL_aNULL,
2273 SSL_CAMELLIA256,
2274 SSL_SHA256,
2275 TLS1_2_VERSION, TLS1_2_VERSION,
2276 DTLS1_2_VERSION, DTLS1_2_VERSION,
2277 SSL_NOT_DEFAULT | SSL_HIGH,
2278 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2279 256,
2280 256,
2281 },
2282 {
2283 1,
2284 TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
bbb4ceb8 2285 TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA,
748f2546
RS
2286 TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
2287 SSL_kRSA,
2288 SSL_aRSA,
2289 SSL_CAMELLIA256,
2290 SSL_SHA1,
2291 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2292 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2293 SSL_NOT_DEFAULT | SSL_HIGH,
2294 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2295 256,
2296 256,
2297 },
2298 {
2299 1,
2300 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
bbb4ceb8 2301 TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
748f2546
RS
2302 TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
2303 SSL_kDHE,
2304 SSL_aDSS,
2305 SSL_CAMELLIA256,
2306 SSL_SHA1,
2307 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2308 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2309 SSL_NOT_DEFAULT | SSL_HIGH,
2310 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2311 256,
2312 256,
2313 },
2314 {
2315 1,
2316 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
bbb4ceb8 2317 TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
748f2546
RS
2318 TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
2319 SSL_kDHE,
2320 SSL_aRSA,
2321 SSL_CAMELLIA256,
2322 SSL_SHA1,
2323 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2324 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2325 SSL_NOT_DEFAULT | SSL_HIGH,
2326 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2327 256,
2328 256,
2329 },
2330 {
2331 1,
2332 TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
bbb4ceb8 2333 TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA,
748f2546
RS
2334 TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
2335 SSL_kDHE,
2336 SSL_aNULL,
2337 SSL_CAMELLIA256,
2338 SSL_SHA1,
2339 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2340 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2341 SSL_NOT_DEFAULT | SSL_HIGH,
2342 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2343 256,
2344 256,
2345 },
2346 {
2347 1,
2348 TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
bbb4ceb8 2349 TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA,
748f2546
RS
2350 TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
2351 SSL_kRSA,
2352 SSL_aRSA,
2353 SSL_CAMELLIA128,
2354 SSL_SHA1,
2355 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2356 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2357 SSL_NOT_DEFAULT | SSL_HIGH,
2358 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2359 128,
2360 128,
2361 },
2362 {
2363 1,
2364 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
bbb4ceb8 2365 TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
748f2546
RS
2366 TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
2367 SSL_kDHE,
2368 SSL_aDSS,
2369 SSL_CAMELLIA128,
2370 SSL_SHA1,
2371 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2372 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2373 SSL_NOT_DEFAULT | SSL_HIGH,
2374 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2375 128,
2376 128,
2377 },
2378 {
2379 1,
2380 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
bbb4ceb8 2381 TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
748f2546
RS
2382 TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
2383 SSL_kDHE,
2384 SSL_aRSA,
2385 SSL_CAMELLIA128,
2386 SSL_SHA1,
2387 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2388 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2389 SSL_NOT_DEFAULT | SSL_HIGH,
2390 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2391 128,
2392 128,
2393 },
2394 {
2395 1,
2396 TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
bbb4ceb8 2397 TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA,
748f2546
RS
2398 TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
2399 SSL_kDHE,
2400 SSL_aNULL,
2401 SSL_CAMELLIA128,
2402 SSL_SHA1,
2403 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2404 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2405 SSL_NOT_DEFAULT | SSL_HIGH,
2406 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2407 128,
2408 128,
2409 },
748f2546 2410 {
0f113f3e
MC
2411 1,
2412 TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2413 TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
0f113f3e
MC
2414 TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
2415 SSL_kECDHE,
2416 SSL_aECDSA,
2417 SSL_CAMELLIA128,
2418 SSL_SHA256,
3eb2aff4
KR
2419 TLS1_2_VERSION, TLS1_2_VERSION,
2420 DTLS1_2_VERSION, DTLS1_2_VERSION,
a556f342 2421 SSL_NOT_DEFAULT | SSL_HIGH,
0f113f3e
MC
2422 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2423 128,
a230b26e
EK
2424 128,
2425 },
748f2546 2426 {
0f113f3e
MC
2427 1,
2428 TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
bbb4ceb8 2429 TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
0f113f3e
MC
2430 TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
2431 SSL_kECDHE,
2432 SSL_aECDSA,
2433 SSL_CAMELLIA256,
2434 SSL_SHA384,
3eb2aff4
KR
2435 TLS1_2_VERSION, TLS1_2_VERSION,
2436 DTLS1_2_VERSION, DTLS1_2_VERSION,
a556f342 2437 SSL_NOT_DEFAULT | SSL_HIGH,
0f113f3e
MC
2438 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2439 256,
a230b26e
EK
2440 256,
2441 },
748f2546 2442 {
0f113f3e
MC
2443 1,
2444 TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2445 TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
0f113f3e
MC
2446 TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2447 SSL_kECDHE,
2448 SSL_aRSA,
2449 SSL_CAMELLIA128,
2450 SSL_SHA256,
3eb2aff4
KR
2451 TLS1_2_VERSION, TLS1_2_VERSION,
2452 DTLS1_2_VERSION, DTLS1_2_VERSION,
a556f342 2453 SSL_NOT_DEFAULT | SSL_HIGH,
0f113f3e
MC
2454 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2455 128,
a230b26e
EK
2456 128,
2457 },
748f2546 2458 {
0f113f3e
MC
2459 1,
2460 TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
bbb4ceb8 2461 TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
0f113f3e
MC
2462 TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
2463 SSL_kECDHE,
2464 SSL_aRSA,
2465 SSL_CAMELLIA256,
2466 SSL_SHA384,
3eb2aff4
KR
2467 TLS1_2_VERSION, TLS1_2_VERSION,
2468 DTLS1_2_VERSION, DTLS1_2_VERSION,
a556f342 2469 SSL_NOT_DEFAULT | SSL_HIGH,
0f113f3e
MC
2470 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2471 256,
a230b26e
EK
2472 256,
2473 },
748f2546 2474 {
69a3a9f5
DSH
2475 1,
2476 TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2477 TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256,
69a3a9f5
DSH
2478 TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2479 SSL_kPSK,
2480 SSL_aPSK,
2481 SSL_CAMELLIA128,
2482 SSL_SHA256,
3eb2aff4 2483 TLS1_VERSION, TLS1_2_VERSION,
387cf213 2484 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 2485 SSL_NOT_DEFAULT | SSL_HIGH,
69a3a9f5
DSH
2486 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2487 128,
a230b26e
EK
2488 128,
2489 },
748f2546 2490 {
69a3a9f5
DSH
2491 1,
2492 TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384,
bbb4ceb8 2493 TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384,
69a3a9f5
DSH
2494 TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2495 SSL_kPSK,
2496 SSL_aPSK,
2497 SSL_CAMELLIA256,
2498 SSL_SHA384,
3eb2aff4 2499 TLS1_VERSION, TLS1_2_VERSION,
387cf213 2500 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 2501 SSL_NOT_DEFAULT | SSL_HIGH,
69a3a9f5
DSH
2502 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2503 256,
a230b26e
EK
2504 256,
2505 },
748f2546 2506 {
69a3a9f5
DSH
2507 1,
2508 TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2509 TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
69a3a9f5
DSH
2510 TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2511 SSL_kDHEPSK,
2512 SSL_aPSK,
2513 SSL_CAMELLIA128,
2514 SSL_SHA256,
3eb2aff4 2515 TLS1_VERSION, TLS1_2_VERSION,
387cf213 2516 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 2517 SSL_NOT_DEFAULT | SSL_HIGH,
69a3a9f5
DSH
2518 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2519 128,
a230b26e
EK
2520 128,
2521 },
748f2546 2522 {
69a3a9f5
DSH
2523 1,
2524 TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
bbb4ceb8 2525 TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
69a3a9f5
DSH
2526 TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2527 SSL_kDHEPSK,
2528 SSL_aPSK,
2529 SSL_CAMELLIA256,
2530 SSL_SHA384,
3eb2aff4 2531 TLS1_VERSION, TLS1_2_VERSION,
387cf213 2532 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 2533 SSL_NOT_DEFAULT | SSL_HIGH,
69a3a9f5
DSH
2534 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2535 256,
a230b26e
EK
2536 256,
2537 },
748f2546 2538 {
69a3a9f5
DSH
2539 1,
2540 TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2541 TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
69a3a9f5
DSH
2542 TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2543 SSL_kRSAPSK,
2544 SSL_aRSA,
2545 SSL_CAMELLIA128,
2546 SSL_SHA256,
3eb2aff4 2547 TLS1_VERSION, TLS1_2_VERSION,
387cf213 2548 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 2549 SSL_NOT_DEFAULT | SSL_HIGH,
69a3a9f5
DSH
2550 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2551 128,
a230b26e
EK
2552 128,
2553 },
748f2546 2554 {
69a3a9f5
DSH
2555 1,
2556 TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
bbb4ceb8 2557 TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
69a3a9f5
DSH
2558 TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2559 SSL_kRSAPSK,
2560 SSL_aRSA,
2561 SSL_CAMELLIA256,
2562 SSL_SHA384,
3eb2aff4 2563 TLS1_VERSION, TLS1_2_VERSION,
387cf213 2564 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 2565 SSL_NOT_DEFAULT | SSL_HIGH,
69a3a9f5
DSH
2566 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2567 256,
a230b26e
EK
2568 256,
2569 },
176f85a2
DSH
2570 {
2571 1,
748f2546 2572 TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
bbb4ceb8 2573 TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
748f2546
RS
2574 TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2575 SSL_kECDHEPSK,
176f85a2 2576 SSL_aPSK,
748f2546
RS
2577 SSL_CAMELLIA128,
2578 SSL_SHA256,
2579 TLS1_VERSION, TLS1_2_VERSION,
387cf213 2580 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 2581 SSL_NOT_DEFAULT | SSL_HIGH,
748f2546 2582 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
176f85a2 2583 128,
a230b26e
EK
2584 128,
2585 },
176f85a2
DSH
2586 {
2587 1,
748f2546 2588 TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
bbb4ceb8 2589 TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
748f2546
RS
2590 TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2591 SSL_kECDHEPSK,
176f85a2 2592 SSL_aPSK,
748f2546
RS
2593 SSL_CAMELLIA256,
2594 SSL_SHA384,
2595 TLS1_VERSION, TLS1_2_VERSION,
387cf213 2596 DTLS1_BAD_VER, DTLS1_2_VERSION,
a556f342 2597 SSL_NOT_DEFAULT | SSL_HIGH,
748f2546 2598 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
176f85a2 2599 256,
a230b26e
EK
2600 256,
2601 },
a230b26e 2602#endif /* OPENSSL_NO_CAMELLIA */
176f85a2 2603
580731af 2604#ifndef OPENSSL_NO_GOST
176f85a2
DSH
2605 {
2606 1,
748f2546 2607 "GOST2001-GOST89-GOST89",
bbb4ceb8 2608 "TLS_GOSTR341001_WITH_28147_CNT_IMIT",
748f2546
RS
2609 0x3000081,
2610 SSL_kGOST,
2611 SSL_aGOST01,
2612 SSL_eGOST2814789CNT,
2613 SSL_GOST89MAC,
2614 TLS1_VERSION, TLS1_2_VERSION,
48c16012 2615 0, 0,
748f2546
RS
2616 SSL_HIGH,
2617 SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC,
176f85a2 2618 256,
a230b26e
EK
2619 256,
2620 },
748f2546
RS
2621 {
2622 1,
2623 "GOST2001-NULL-GOST94",
bbb4ceb8 2624 "TLS_GOSTR341001_WITH_NULL_GOSTR3411",
748f2546
RS
2625 0x3000083,
2626 SSL_kGOST,
2627 SSL_aGOST01,
2628 SSL_eNULL,
2629 SSL_GOST94,
2630 TLS1_VERSION, TLS1_2_VERSION,
48c16012 2631 0, 0,
748f2546
RS
2632 SSL_STRONG_NONE,
2633 SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94,
2634 0,
a230b26e
EK
2635 0,
2636 },
748f2546
RS
2637 {
2638 1,
2639 "GOST2012-GOST8912-GOST8912",
bbb4ceb8 2640 NULL,
748f2546
RS
2641 0x0300ff85,
2642 SSL_kGOST,
2643 SSL_aGOST12 | SSL_aGOST01,
2644 SSL_eGOST2814789CNT12,
2645 SSL_GOST89MAC12,
2646 TLS1_VERSION, TLS1_2_VERSION,
48c16012 2647 0, 0,
748f2546
RS
2648 SSL_HIGH,
2649 SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
176f85a2 2650 256,
a230b26e
EK
2651 256,
2652 },
748f2546
RS
2653 {
2654 1,
2655 "GOST2012-NULL-GOST12",
bbb4ceb8 2656 NULL,
748f2546
RS
2657 0x0300ff87,
2658 SSL_kGOST,
2659 SSL_aGOST12 | SSL_aGOST01,
2660 SSL_eNULL,
2661 SSL_GOST12_256,
2662 TLS1_VERSION, TLS1_2_VERSION,
48c16012 2663 0, 0,
748f2546
RS
2664 SSL_STRONG_NONE,
2665 SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
2666 0,
a230b26e
EK
2667 0,
2668 },
2669#endif /* OPENSSL_NO_GOST */
176f85a2 2670
748f2546 2671#ifndef OPENSSL_NO_IDEA
176f85a2
DSH
2672 {
2673 1,
748f2546 2674 SSL3_TXT_RSA_IDEA_128_SHA,
bbb4ceb8 2675 SSL3_RFC_RSA_IDEA_128_SHA,
748f2546
RS
2676 SSL3_CK_RSA_IDEA_128_SHA,
2677 SSL_kRSA,
2678 SSL_aRSA,
2679 SSL_IDEA,
2680 SSL_SHA1,
2681 SSL3_VERSION, TLS1_1_VERSION,
387cf213 2682 DTLS1_BAD_VER, DTLS1_VERSION,
748f2546
RS
2683 SSL_NOT_DEFAULT | SSL_MEDIUM,
2684 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
176f85a2
DSH
2685 128,
2686 128,
2687 },
748f2546 2688#endif
176f85a2 2689
748f2546 2690#ifndef OPENSSL_NO_SEED
176f85a2
DSH
2691 {
2692 1,
748f2546 2693 TLS1_TXT_RSA_WITH_SEED_SHA,
bbb4ceb8 2694 TLS1_RFC_RSA_WITH_SEED_SHA,
748f2546
RS
2695 TLS1_CK_RSA_WITH_SEED_SHA,
2696 SSL_kRSA,
2697 SSL_aRSA,
2698 SSL_SEED,
2699 SSL_SHA1,
2700 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2701 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2702 SSL_NOT_DEFAULT | SSL_MEDIUM,
2703 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2704 128,
2705 128,
176f85a2 2706 },
176f85a2
DSH
2707 {
2708 1,
748f2546 2709 TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
bbb4ceb8 2710 TLS1_RFC_DHE_DSS_WITH_SEED_SHA,
748f2546
RS
2711 TLS1_CK_DHE_DSS_WITH_SEED_SHA,
2712 SSL_kDHE,
2713 SSL_aDSS,
2714 SSL_SEED,
2715 SSL_SHA1,
2716 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2717 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2718 SSL_NOT_DEFAULT | SSL_MEDIUM,
2719 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
176f85a2
DSH
2720 128,
2721 128,
2722 },
176f85a2
DSH
2723 {
2724 1,
748f2546 2725 TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
bbb4ceb8 2726 TLS1_RFC_DHE_RSA_WITH_SEED_SHA,
748f2546
RS
2727 TLS1_CK_DHE_RSA_WITH_SEED_SHA,
2728 SSL_kDHE,
2729 SSL_aRSA,
2730 SSL_SEED,
2731 SSL_SHA1,
2732 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2733 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2734 SSL_NOT_DEFAULT | SSL_MEDIUM,
2735 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2736 128,
2737 128,
176f85a2 2738 },
176f85a2
DSH
2739 {
2740 1,
748f2546 2741 TLS1_TXT_ADH_WITH_SEED_SHA,
bbb4ceb8 2742 TLS1_RFC_ADH_WITH_SEED_SHA,
748f2546
RS
2743 TLS1_CK_ADH_WITH_SEED_SHA,
2744 SSL_kDHE,
2745 SSL_aNULL,
2746 SSL_SEED,
2747 SSL_SHA1,
2748 SSL3_VERSION, TLS1_2_VERSION,
387cf213 2749 DTLS1_BAD_VER, DTLS1_2_VERSION,
748f2546
RS
2750 SSL_NOT_DEFAULT | SSL_MEDIUM,
2751 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
176f85a2
DSH
2752 128,
2753 128,
2754 },
a230b26e 2755#endif /* OPENSSL_NO_SEED */
176f85a2 2756
748f2546
RS
2757#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
2758 {
2759 1,
2760 SSL3_TXT_RSA_RC4_128_MD5,
bbb4ceb8 2761 SSL3_RFC_RSA_RC4_128_MD5,
748f2546
RS
2762 SSL3_CK_RSA_RC4_128_MD5,
2763 SSL_kRSA,
2764 SSL_aRSA,
2765 SSL_RC4,
2766 SSL_MD5,
2767 SSL3_VERSION, TLS1_2_VERSION,
2768 0, 0,
2769 SSL_NOT_DEFAULT | SSL_MEDIUM,
2770 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2771 128,
2772 128,
2773 },
176f85a2
DSH
2774 {
2775 1,
748f2546 2776 SSL3_TXT_RSA_RC4_128_SHA,
bbb4ceb8 2777 SSL3_RFC_RSA_RC4_128_SHA,
748f2546
RS
2778 SSL3_CK_RSA_RC4_128_SHA,
2779 SSL_kRSA,
2780 SSL_aRSA,
2781 SSL_RC4,
2782 SSL_SHA1,
2783 SSL3_VERSION, TLS1_2_VERSION,
2784 0, 0,
2785 SSL_NOT_DEFAULT | SSL_MEDIUM,
2786 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2787 128,
2788 128,
176f85a2 2789 },
176f85a2
DSH
2790 {
2791 1,
748f2546 2792 SSL3_TXT_ADH_RC4_128_MD5,
bbb4ceb8 2793 SSL3_RFC_ADH_RC4_128_MD5,
748f2546
RS
2794 SSL3_CK_ADH_RC4_128_MD5,
2795 SSL_kDHE,
2796 SSL_aNULL,
2797 SSL_RC4,
2798 SSL_MD5,
2799 SSL3_VERSION, TLS1_2_VERSION,
2800 0, 0,
2801 SSL_NOT_DEFAULT | SSL_MEDIUM,
2802 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
176f85a2
DSH
2803 128,
2804 128,
2805 },
176f85a2
DSH
2806 {
2807 1,
748f2546 2808 TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA,
bbb4ceb8 2809 TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA,
748f2546
RS
2810 TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA,
2811 SSL_kECDHEPSK,
2812 SSL_aPSK,
2813 SSL_RC4,
2814 SSL_SHA1,
fe55c4a2 2815 TLS1_VERSION, TLS1_2_VERSION,
748f2546
RS
2816 0, 0,
2817 SSL_NOT_DEFAULT | SSL_MEDIUM,
2818 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2819 128,
2820 128,
176f85a2 2821 },
a76ba82c
AP
2822 {
2823 1,
748f2546 2824 TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
bbb4ceb8 2825 TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA,
748f2546 2826 TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
a76ba82c 2827 SSL_kECDHE,
748f2546
RS
2828 SSL_aNULL,
2829 SSL_RC4,
2830 SSL_SHA1,
fe55c4a2 2831 TLS1_VERSION, TLS1_2_VERSION,
748f2546
RS
2832 0, 0,
2833 SSL_NOT_DEFAULT | SSL_MEDIUM,
2834 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2835 128,
2836 128,
a76ba82c 2837 },
a76ba82c
AP
2838 {
2839 1,
748f2546 2840 TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
bbb4ceb8 2841 TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA,
748f2546 2842 TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
a76ba82c
AP
2843 SSL_kECDHE,
2844 SSL_aECDSA,
748f2546
RS
2845 SSL_RC4,
2846 SSL_SHA1,
fe55c4a2 2847 TLS1_VERSION, TLS1_2_VERSION,
748f2546
RS
2848 0, 0,
2849 SSL_NOT_DEFAULT | SSL_MEDIUM,
2850 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2851 128,
2852 128,
a76ba82c 2853 },
a76ba82c
AP
2854 {
2855 1,
748f2546 2856 TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
bbb4ceb8 2857 TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA,
748f2546
RS
2858 TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
2859 SSL_kECDHE,
a76ba82c 2860 SSL_aRSA,
748f2546
RS
2861 SSL_RC4,
2862 SSL_SHA1,
fe55c4a2 2863 TLS1_VERSION, TLS1_2_VERSION,
748f2546
RS
2864 0, 0,
2865 SSL_NOT_DEFAULT | SSL_MEDIUM,
2866 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2867 128,
2868 128,
a76ba82c 2869 },
a76ba82c
AP
2870 {
2871 1,
748f2546 2872 TLS1_TXT_PSK_WITH_RC4_128_SHA,
bbb4ceb8 2873 TLS1_RFC_PSK_WITH_RC4_128_SHA,
748f2546 2874 TLS1_CK_PSK_WITH_RC4_128_SHA,
a76ba82c
AP
2875 SSL_kPSK,
2876 SSL_aPSK,
748f2546
RS
2877 SSL_RC4,
2878 SSL_SHA1,
2879 SSL3_VERSION, TLS1_2_VERSION,
2880 0, 0,
2881 SSL_NOT_DEFAULT | SSL_MEDIUM,
2882 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2883 128,
2884 128,
a76ba82c 2885 },
a76ba82c
AP
2886 {
2887 1,
748f2546 2888 TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA,
bbb4ceb8 2889 TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA,
748f2546
RS
2890 TLS1_CK_RSA_PSK_WITH_RC4_128_SHA,
2891 SSL_kRSAPSK,
2892 SSL_aRSA,
2893 SSL_RC4,
2894 SSL_SHA1,
2895 SSL3_VERSION, TLS1_2_VERSION,
2896 0, 0,
2897 SSL_NOT_DEFAULT | SSL_MEDIUM,
2898 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2899 128,
2900 128,
a76ba82c 2901 },
a76ba82c
AP
2902 {
2903 1,
748f2546 2904 TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA,
bbb4ceb8 2905 TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA,
748f2546 2906 TLS1_CK_DHE_PSK_WITH_RC4_128_SHA,
a76ba82c
AP
2907 SSL_kDHEPSK,
2908 SSL_aPSK,
748f2546
RS
2909 SSL_RC4,
2910 SSL_SHA1,
2911 SSL3_VERSION, TLS1_2_VERSION,
2912 0, 0,
2913 SSL_NOT_DEFAULT | SSL_MEDIUM,
2914 SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2915 128,
2916 128,
a76ba82c 2917 },
a230b26e 2918#endif /* OPENSSL_NO_WEAK_SSL_CIPHERS */
e44380a9 2919
bc326738
JS
2920#ifndef OPENSSL_NO_ARIA
2921 {
2922 1,
2923 TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256,
2924 TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256,
2925 TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256,
2926 SSL_kRSA,
2927 SSL_aRSA,
2928 SSL_ARIA128GCM,
2929 SSL_AEAD,
2930 TLS1_2_VERSION, TLS1_2_VERSION,
2931 DTLS1_2_VERSION, DTLS1_2_VERSION,
2932 SSL_NOT_DEFAULT | SSL_HIGH,
2933 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2934 128,
2935 128,
2936 },
2937 {
2938 1,
2939 TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384,
2940 TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384,
2941 TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384,
2942 SSL_kRSA,
2943 SSL_aRSA,
2944 SSL_ARIA256GCM,
2945 SSL_AEAD,
2946 TLS1_2_VERSION, TLS1_2_VERSION,
2947 DTLS1_2_VERSION, DTLS1_2_VERSION,
2948 SSL_NOT_DEFAULT | SSL_HIGH,
2949 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2950 256,
2951 256,
2952 },
2953 {
2954 1,
2955 TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
2956 TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
2957 TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
2958 SSL_kDHE,
2959 SSL_aRSA,
2960 SSL_ARIA128GCM,
2961 SSL_AEAD,
2962 TLS1_2_VERSION, TLS1_2_VERSION,
2963 DTLS1_2_VERSION, DTLS1_2_VERSION,
2964 SSL_NOT_DEFAULT | SSL_HIGH,
2965 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2966 128,
2967 128,
2968 },
2969 {
2970 1,
2971 TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
2972 TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
2973 TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
2974 SSL_kDHE,
2975 SSL_aRSA,
2976 SSL_ARIA256GCM,
2977 SSL_AEAD,
2978 TLS1_2_VERSION, TLS1_2_VERSION,
2979 DTLS1_2_VERSION, DTLS1_2_VERSION,
2980 SSL_NOT_DEFAULT | SSL_HIGH,
2981 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2982 256,
2983 256,
2984 },
2985 {
2986 1,
2987 TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
2988 TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
2989 TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
2990 SSL_kDHE,
2991 SSL_aDSS,
2992 SSL_ARIA128GCM,
2993 SSL_AEAD,
2994 TLS1_2_VERSION, TLS1_2_VERSION,
2995 DTLS1_2_VERSION, DTLS1_2_VERSION,
2996 SSL_NOT_DEFAULT | SSL_HIGH,
2997 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2998 128,
2999 128,
3000 },
3001 {
3002 1,
3003 TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
3004 TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
3005 TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
3006 SSL_kDHE,
3007 SSL_aDSS,
3008 SSL_ARIA256GCM,
3009 SSL_AEAD,
3010 TLS1_2_VERSION, TLS1_2_VERSION,
3011 DTLS1_2_VERSION, DTLS1_2_VERSION,
3012 SSL_NOT_DEFAULT | SSL_HIGH,
3013 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3014 256,
3015 256,
3016 },
3017 {
3018 1,
3019 TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
3020 TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
3021 TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
3022 SSL_kECDHE,
3023 SSL_aECDSA,
3024 SSL_ARIA128GCM,
3025 SSL_AEAD,
3026 TLS1_2_VERSION, TLS1_2_VERSION,
3027 DTLS1_2_VERSION, DTLS1_2_VERSION,
3028 SSL_NOT_DEFAULT | SSL_HIGH,
3029 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3030 128,
3031 128,
3032 },
3033 {
3034 1,
3035 TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
3036 TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
3037 TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
3038 SSL_kECDHE,
3039 SSL_aECDSA,
3040 SSL_ARIA256GCM,
3041 SSL_AEAD,
3042 TLS1_2_VERSION, TLS1_2_VERSION,
3043 DTLS1_2_VERSION, DTLS1_2_VERSION,
3044 SSL_NOT_DEFAULT | SSL_HIGH,
3045 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3046 256,
3047 256,
3048 },
bc326738
JS
3049 {
3050 1,
3051 TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
3052 TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
3053 TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
3054 SSL_kECDHE,
3055 SSL_aRSA,
3056 SSL_ARIA128GCM,
3057 SSL_AEAD,
3058 TLS1_2_VERSION, TLS1_2_VERSION,
3059 DTLS1_2_VERSION, DTLS1_2_VERSION,
3060 SSL_NOT_DEFAULT | SSL_HIGH,
3061 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3062 128,
3063 128,
3064 },
3065 {
3066 1,
3067 TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
3068 TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
3069 TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
3070 SSL_kECDHE,
3071 SSL_aRSA,
3072 SSL_ARIA256GCM,
3073 SSL_AEAD,
3074 TLS1_2_VERSION, TLS1_2_VERSION,
3075 DTLS1_2_VERSION, DTLS1_2_VERSION,
3076 SSL_NOT_DEFAULT | SSL_HIGH,
3077 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3078 256,
3079 256,
3080 },
3081 {
3082 1,
3083 TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256,
3084 TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256,
3085 TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256,
3086 SSL_kPSK,
3087 SSL_aPSK,
3088 SSL_ARIA128GCM,
3089 SSL_AEAD,
3090 TLS1_2_VERSION, TLS1_2_VERSION,
3091 DTLS1_2_VERSION, DTLS1_2_VERSION,
3092 SSL_NOT_DEFAULT | SSL_HIGH,
3093 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3094 128,
3095 128,
3096 },
3097 {
3098 1,
3099 TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384,
3100 TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384,
3101 TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384,
3102 SSL_kPSK,
3103 SSL_aPSK,
3104 SSL_ARIA256GCM,
3105 SSL_AEAD,
3106 TLS1_2_VERSION, TLS1_2_VERSION,
3107 DTLS1_2_VERSION, DTLS1_2_VERSION,
3108 SSL_NOT_DEFAULT | SSL_HIGH,
3109 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3110 256,
3111 256,
3112 },
3113 {
3114 1,
3115 TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
3116 TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
3117 TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
3118 SSL_kDHEPSK,
3119 SSL_aPSK,
3120 SSL_ARIA128GCM,
3121 SSL_AEAD,
3122 TLS1_2_VERSION, TLS1_2_VERSION,
3123 DTLS1_2_VERSION, DTLS1_2_VERSION,
3124 SSL_NOT_DEFAULT | SSL_HIGH,
3125 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3126 128,
3127 128,
3128 },
3129 {
3130 1,
3131 TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
3132 TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
3133 TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
3134 SSL_kDHEPSK,
3135 SSL_aPSK,
3136 SSL_ARIA256GCM,
3137 SSL_AEAD,
3138 TLS1_2_VERSION, TLS1_2_VERSION,
3139 DTLS1_2_VERSION, DTLS1_2_VERSION,
3140 SSL_NOT_DEFAULT | SSL_HIGH,
3141 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3142 256,
3143 256,
3144 },
bc326738
JS
3145 {
3146 1,
3147 TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
3148 TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
3149 TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
3150 SSL_kRSAPSK,
3151 SSL_aRSA,
3152 SSL_ARIA128GCM,
3153 SSL_AEAD,
3154 TLS1_2_VERSION, TLS1_2_VERSION,
3155 DTLS1_2_VERSION, DTLS1_2_VERSION,
3156 SSL_NOT_DEFAULT | SSL_HIGH,
3157 SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3158 128,
3159 128,
3160 },
3161 {
3162 1,
3163 TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
3164 TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
3165 TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
3166 SSL_kRSAPSK,
3167 SSL_aRSA,
3168 SSL_ARIA256GCM,
3169 SSL_AEAD,
3170 TLS1_2_VERSION, TLS1_2_VERSION,
3171 DTLS1_2_VERSION, DTLS1_2_VERSION,
3172 SSL_NOT_DEFAULT | SSL_HIGH,
3173 SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3174 256,
3175 256,
3176 },
3177#endif /* OPENSSL_NO_ARIA */
0f113f3e
MC
3178};
3179
650c6e41
BK
3180/*
3181 * The list of known Signalling Cipher-Suite Value "ciphers", non-valid
3182 * values stuffed into the ciphers field of the wire protocol for signalling
3183 * purposes.
3184 */
3185static SSL_CIPHER ssl3_scsvs[] = {
3186 {
3187 0,
3188 "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
bbb4ceb8 3189 "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
650c6e41
BK
3190 SSL3_CK_SCSV,
3191 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3192 },
3193 {
3194 0,
3195 "TLS_FALLBACK_SCSV",
bbb4ceb8 3196 "TLS_FALLBACK_SCSV",
650c6e41
BK
3197 SSL3_CK_FALLBACK_SCSV,
3198 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3199 },
3200};
3201
748f2546
RS
3202static int cipher_compare(const void *a, const void *b)
3203{
3204 const SSL_CIPHER *ap = (const SSL_CIPHER *)a;
3205 const SSL_CIPHER *bp = (const SSL_CIPHER *)b;
3206
a7ff5796
RL
3207 if (ap->id == bp->id)
3208 return 0;
3209 return ap->id < bp->id ? -1 : 1;
748f2546
RS
3210}
3211
3212void ssl_sort_cipher_list(void)
3213{
f865b081
MC
3214 qsort(tls13_ciphers, TLS13_NUM_CIPHERS, sizeof(tls13_ciphers[0]),
3215 cipher_compare);
cbe29648 3216 qsort(ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(ssl3_ciphers[0]),
748f2546 3217 cipher_compare);
cbe29648 3218 qsort(ssl3_scsvs, SSL3_NUM_SCSVS, sizeof(ssl3_scsvs[0]), cipher_compare);
748f2546
RS
3219}
3220
fce78bd4
BE
3221static int ssl_undefined_function_1(SSL *ssl, unsigned char *r, size_t s,
3222 const char * t, size_t u,
3223 const unsigned char * v, size_t w, int x)
3224{
3225 (void)r;
3226 (void)s;
3227 (void)t;
3228 (void)u;
3229 (void)v;
3230 (void)w;
3231 (void)x;
3232 return ssl_undefined_function(ssl);
3233}
3234
0f113f3e
MC
3235const SSL3_ENC_METHOD SSLv3_enc_data = {
3236 ssl3_enc,
3237 n_ssl3_mac,
3238 ssl3_setup_key_block,
3239 ssl3_generate_master_secret,
3240 ssl3_change_cipher_state,
3241 ssl3_final_finish_mac,
0f113f3e
MC
3242 SSL3_MD_CLIENT_FINISHED_CONST, 4,
3243 SSL3_MD_SERVER_FINISHED_CONST, 4,
3244 ssl3_alert_code,
fce78bd4 3245 ssl_undefined_function_1,
0f113f3e 3246 0,
a29fa98c 3247 ssl3_set_handshake_header,
2c7b4dbc 3248 tls_close_construct_packet,
0f113f3e
MC
3249 ssl3_handshake_write
3250};
58964a49 3251
f3b656b2 3252long ssl3_default_timeout(void)
0f113f3e
MC
3253{
3254 /*
3255 * 2 hours, the 24 hours mentioned in the SSLv3 spec is way too long for
3256 * http, the cache would over fill
3257 */
3258 return (60 * 60 * 2);
3259}
d02b48c6 3260
6b691a5c 3261int ssl3_num_ciphers(void)
0f113f3e 3262{
26a7d938 3263 return SSL3_NUM_CIPHERS;
0f113f3e 3264}
d02b48c6 3265
babb3798 3266const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
0f113f3e
MC
3267{
3268 if (u < SSL3_NUM_CIPHERS)
26a7d938 3269 return &(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]);
0f113f3e 3270 else
26a7d938 3271 return NULL;
0f113f3e 3272}
d02b48c6 3273
a29fa98c 3274int ssl3_set_handshake_header(SSL *s, WPACKET *pkt, int htype)
2c7b4dbc 3275{
4a01c59f
MC
3276 /* No header in the event of a CCS */
3277 if (htype == SSL3_MT_CHANGE_CIPHER_SPEC)
3278 return 1;
3279
2c7b4dbc 3280 /* Set the content type and 3 bytes for the message len */
08029dfa 3281 if (!WPACKET_put_bytes_u8(pkt, htype)
de451856 3282 || !WPACKET_start_sub_packet_u24(pkt))
2c7b4dbc
MC
3283 return 0;
3284
3285 return 1;
3286}
3287
173e72e6 3288int ssl3_handshake_write(SSL *s)
0f113f3e
MC
3289{
3290 return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
3291}
173e72e6 3292
6b691a5c 3293int ssl3_new(SSL *s)
0f113f3e 3294{
edc032b5 3295#ifndef OPENSSL_NO_SRP
61986d32 3296 if (!SSL_SRP_CTX_init(s))
e8fb288c 3297 return 0;
edc032b5 3298#endif
b77f3ed1
MC
3299
3300 if (!s->method->ssl_clear(s))
3301 return 0;
3302
a89325e4 3303 return 1;
0f113f3e 3304}
d02b48c6 3305
6b691a5c 3306void ssl3_free(SSL *s)
0f113f3e 3307{
555cbb32 3308 if (s == NULL)
0f113f3e 3309 return;
e03ddfae 3310
0f113f3e 3311 ssl3_cleanup_key_block(s);
8d92c1f8 3312
fb79abe3 3313#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
555cbb32
TS
3314 EVP_PKEY_free(s->s3.peer_tmp);
3315 s->s3.peer_tmp = NULL;
3316 EVP_PKEY_free(s->s3.tmp.pkey);
3317 s->s3.tmp.pkey = NULL;
ea262260
BM
3318#endif
3319
c8f6c28a
MC
3320 ssl_evp_cipher_free(s->s3.tmp.new_sym_enc);
3321 ssl_evp_md_free(s->s3.tmp.new_hash);
3322
555cbb32
TS
3323 OPENSSL_free(s->s3.tmp.ctype);
3324 sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
3325 OPENSSL_free(s->s3.tmp.ciphers_raw);
3326 OPENSSL_clear_free(s->s3.tmp.pms, s->s3.tmp.pmslen);
3327 OPENSSL_free(s->s3.tmp.peer_sigalgs);
3328 OPENSSL_free(s->s3.tmp.peer_cert_sigalgs);
85fb6fda 3329 ssl3_free_digest_list(s);
555cbb32
TS
3330 OPENSSL_free(s->s3.alpn_selected);
3331 OPENSSL_free(s->s3.alpn_proposed);
6f017a8f 3332
edc032b5 3333#ifndef OPENSSL_NO_SRP
0f113f3e 3334 SSL_SRP_CTX_free(s);
edc032b5 3335#endif
555cbb32 3336 memset(&s->s3, 0, sizeof(s->s3));
0f113f3e 3337}
d02b48c6 3338
b77f3ed1 3339int ssl3_clear(SSL *s)
0f113f3e 3340{
0f113f3e 3341 ssl3_cleanup_key_block(s);
555cbb32
TS
3342 OPENSSL_free(s->s3.tmp.ctype);
3343 sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
3344 OPENSSL_free(s->s3.tmp.ciphers_raw);
3345 OPENSSL_clear_free(s->s3.tmp.pms, s->s3.tmp.pmslen);
3346 OPENSSL_free(s->s3.tmp.peer_sigalgs);
3347 OPENSSL_free(s->s3.tmp.peer_cert_sigalgs);
d02b48c6 3348
fb79abe3 3349#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
555cbb32
TS
3350 EVP_PKEY_free(s->s3.tmp.pkey);
3351 EVP_PKEY_free(s->s3.peer_tmp);
a230b26e 3352#endif /* !OPENSSL_NO_EC */
0f113f3e 3353
85fb6fda 3354 ssl3_free_digest_list(s);
e481f9b9 3355
555cbb32
TS
3356 OPENSSL_free(s->s3.alpn_selected);
3357 OPENSSL_free(s->s3.alpn_proposed);
e481f9b9 3358
817cd0d5 3359 /* NULL/zero-out everything in the s3 struct */
555cbb32 3360 memset(&s->s3, 0, sizeof(s->s3));
0f113f3e 3361
b77f3ed1
MC
3362 if (!ssl_free_wbio_buffer(s))
3363 return 0;
0f113f3e 3364
0f113f3e 3365 s->version = SSL3_VERSION;
ee2ffc27 3366
e481f9b9 3367#if !defined(OPENSSL_NO_NEXTPROTONEG)
aff8c126
RS
3368 OPENSSL_free(s->ext.npn);
3369 s->ext.npn = NULL;
3370 s->ext.npn_len = 0;
ee2ffc27 3371#endif
b77f3ed1
MC
3372
3373 return 1;
0f113f3e 3374}
d02b48c6 3375
edc032b5 3376#ifndef OPENSSL_NO_SRP
0f113f3e
MC
3377static char *srp_password_from_info_cb(SSL *s, void *arg)
3378{
7644a9ae 3379 return OPENSSL_strdup(s->srp_ctx.info);
0f113f3e 3380}
edc032b5
BL
3381#endif
3382
a230b26e 3383static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
9f27b1ee 3384
a661b653 3385long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
0f113f3e
MC
3386{
3387 int ret = 0;
58964a49 3388
0f113f3e 3389 switch (cmd) {
0f113f3e
MC
3390 case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
3391 break;
3392 case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
555cbb32 3393 ret = s->s3.num_renegotiations;
0f113f3e
MC
3394 break;
3395 case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
555cbb32
TS
3396 ret = s->s3.num_renegotiations;
3397 s->s3.num_renegotiations = 0;
0f113f3e
MC
3398 break;
3399 case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
555cbb32 3400 ret = s->s3.total_renegotiations;
0f113f3e
MC
3401 break;
3402 case SSL_CTRL_GET_FLAGS:
555cbb32 3403 ret = (int)(s->s3.flags);
0f113f3e 3404 break;
bc36ee62 3405#ifndef OPENSSL_NO_DH
0f113f3e
MC
3406 case SSL_CTRL_SET_TMP_DH:
3407 {
3408 DH *dh = (DH *)parg;
e2b420fd 3409 EVP_PKEY *pkdh = NULL;
0f113f3e
MC
3410 if (dh == NULL) {
3411 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
d9720a59 3412 return 0;
0f113f3e 3413 }
e2b420fd
DSH
3414 pkdh = ssl_dh_to_pkey(dh);
3415 if (pkdh == NULL) {
3416 SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
3417 return 0;
3418 }
0f113f3e 3419 if (!ssl_security(s, SSL_SECOP_TMP_DH,
e2b420fd 3420 EVP_PKEY_security_bits(pkdh), 0, pkdh)) {
0f113f3e 3421 SSLerr(SSL_F_SSL3_CTRL, SSL_R_DH_KEY_TOO_SMALL);
e2b420fd 3422 EVP_PKEY_free(pkdh);
d9720a59 3423 return 0;
0f113f3e 3424 }
e2b420fd
DSH
3425 EVP_PKEY_free(s->cert->dh_tmp);
3426 s->cert->dh_tmp = pkdh;
d9720a59 3427 return 1;
0f113f3e
MC
3428 }
3429 break;
3430 case SSL_CTRL_SET_TMP_DH_CB:
3431 {
3432 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
26a7d938 3433 return ret;
0f113f3e 3434 }
0f113f3e
MC
3435 case SSL_CTRL_SET_DH_AUTO:
3436 s->cert->dh_tmp_auto = larg;
3437 return 1;
d3442bc7 3438#endif
10bf4fc2 3439#ifndef OPENSSL_NO_EC
0f113f3e
MC
3440 case SSL_CTRL_SET_TMP_ECDH:
3441 {
6977e8ee
KR
3442 const EC_GROUP *group = NULL;
3443 int nid;
0f113f3e
MC
3444
3445 if (parg == NULL) {
3446 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
6977e8ee 3447 return 0;
0f113f3e 3448 }
6977e8ee
KR
3449 group = EC_KEY_get0_group((const EC_KEY *)parg);
3450 if (group == NULL) {
3451 SSLerr(SSL_F_SSL3_CTRL, EC_R_MISSING_PARAMETERS);
3452 return 0;
0f113f3e 3453 }
6977e8ee
KR
3454 nid = EC_GROUP_get_curve_name(group);
3455 if (nid == NID_undef)
3456 return 0;
aff8c126
RS
3457 return tls1_set_groups(&s->ext.supportedgroups,
3458 &s->ext.supportedgroups_len,
6977e8ee 3459 &nid, 1);
0f113f3e
MC
3460 }
3461 break;
10bf4fc2 3462#endif /* !OPENSSL_NO_EC */
0f113f3e 3463 case SSL_CTRL_SET_TLSEXT_HOSTNAME:
c5d1fb78
BK
3464 /*
3465 * TODO(OpenSSL1.2)
3466 * This API is only used for a client to set what SNI it will request
3467 * from the server, but we currently allow it to be used on servers
3468 * as well, which is a programming error. Currently we just clear
3469 * the field in SSL_do_handshake() for server SSLs, but when we can
3470 * make ABI-breaking changes, we may want to make use of this API
3471 * an error on server SSLs.
3472 */
0f113f3e 3473 if (larg == TLSEXT_NAMETYPE_host_name) {
0982ecaa
VD
3474 size_t len;
3475
aff8c126
RS
3476 OPENSSL_free(s->ext.hostname);
3477 s->ext.hostname = NULL;
0f113f3e
MC
3478
3479 ret = 1;
3480 if (parg == NULL)
3481 break;
0982ecaa
VD
3482 len = strlen((char *)parg);
3483 if (len == 0 || len > TLSEXT_MAXLEN_host_name) {
0f113f3e
MC
3484 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
3485 return 0;
3486 }
aff8c126 3487 if ((s->ext.hostname = OPENSSL_strdup((char *)parg)) == NULL) {
0f113f3e
MC
3488 SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
3489 return 0;
3490 }
3491 } else {
3492 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
3493 return 0;
3494 }
3495 break;
3496 case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
aff8c126 3497 s->ext.debug_arg = parg;
0f113f3e
MC
3498 ret = 1;
3499 break;
3500
4300aaf3 3501 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
aff8c126 3502 ret = s->ext.status_type;
4300aaf3
AG
3503 break;
3504
0f113f3e 3505 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
aff8c126 3506 s->ext.status_type = larg;
0f113f3e
MC
3507 ret = 1;
3508 break;
3509
3510 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
aff8c126 3511 *(STACK_OF(X509_EXTENSION) **)parg = s->ext.ocsp.exts;
0f113f3e
MC
3512 ret = 1;
3513 break;
3514
3515 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
aff8c126 3516 s->ext.ocsp.exts = parg;
0f113f3e
MC
3517 ret = 1;
3518 break;
3519
3520 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
aff8c126 3521 *(STACK_OF(OCSP_RESPID) **)parg = s->ext.ocsp.ids;
0f113f3e
MC
3522 ret = 1;
3523 break;
3524
3525 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
aff8c126 3526 s->ext.ocsp.ids = parg;
0f113f3e
MC
3527 ret = 1;
3528 break;
3529
3530 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
aff8c126
RS
3531 *(unsigned char **)parg = s->ext.ocsp.resp;
3532 if (s->ext.ocsp.resp_len == 0
3533 || s->ext.ocsp.resp_len > LONG_MAX)
8b0e934a 3534 return -1;
aff8c126 3535 return (long)s->ext.ocsp.resp_len;
0f113f3e
MC
3536
3537 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
aff8c126
RS
3538 OPENSSL_free(s->ext.ocsp.resp);
3539 s->ext.ocsp.resp = parg;
3540 s->ext.ocsp.resp_len = larg;
0f113f3e
MC
3541 ret = 1;
3542 break;
3543
0f113f3e
MC
3544 case SSL_CTRL_CHAIN:
3545 if (larg)
3546 return ssl_cert_set1_chain(s, NULL, (STACK_OF(X509) *)parg);
3547 else
3548 return ssl_cert_set0_chain(s, NULL, (STACK_OF(X509) *)parg);
3549
3550 case SSL_CTRL_CHAIN_CERT:
3551 if (larg)
3552 return ssl_cert_add1_chain_cert(s, NULL, (X509 *)parg);
3553 else
3554 return ssl_cert_add0_chain_cert(s, NULL, (X509 *)parg);
3555
3556 case SSL_CTRL_GET_CHAIN_CERTS:
3557 *(STACK_OF(X509) **)parg = s->cert->key->chain;
7bc82358 3558 ret = 1;
0f113f3e
MC
3559 break;
3560
3561 case SSL_CTRL_SELECT_CURRENT_CERT:
3562 return ssl_cert_select_current(s->cert, (X509 *)parg);
3563
3564 case SSL_CTRL_SET_CURRENT_CERT:
3565 if (larg == SSL_CERT_SET_SERVER) {
0f113f3e
MC
3566 const SSL_CIPHER *cipher;
3567 if (!s->server)
3568 return 0;
555cbb32 3569 cipher = s->s3.tmp.new_cipher;
f365a3e2 3570 if (cipher == NULL)
0f113f3e
MC
3571 return 0;
3572 /*
3573 * No certificate for unauthenticated ciphersuites or using SRP
3574 * authentication
3575 */
3576 if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
3577 return 2;
555cbb32 3578 if (s->s3.tmp.cert == NULL)
0f113f3e 3579 return 0;
555cbb32 3580 s->cert->key = s->s3.tmp.cert;
0f113f3e
MC
3581 return 1;
3582 }
3583 return ssl_cert_set_current(s->cert, larg);
0f78819c 3584
65dc5c3c 3585#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
de4d764e 3586 case SSL_CTRL_GET_GROUPS:
0f113f3e 3587 {
9e84a42d 3588 uint16_t *clist;
0f113f3e 3589 size_t clistlen;
aff8c126 3590
0f113f3e
MC
3591 if (!s->session)
3592 return 0;
45436e61
MC
3593 clist = s->ext.peer_supportedgroups;
3594 clistlen = s->ext.peer_supportedgroups_len;
0f113f3e
MC
3595 if (parg) {
3596 size_t i;
3597 int *cptr = parg;
43b95d73 3598
0f113f3e 3599 for (i = 0; i < clistlen; i++) {
43b95d73
DSH
3600 const TLS_GROUP_INFO *cinf = tls1_group_id_lookup(clist[i]);
3601
3602 if (cinf != NULL)
3603 cptr[i] = cinf->nid;
0f113f3e 3604 else
9e84a42d 3605 cptr[i] = TLSEXT_nid_unknown | clist[i];
0f113f3e
MC
3606 }
3607 }
3608 return (int)clistlen;
3609 }
3610
de4d764e 3611 case SSL_CTRL_SET_GROUPS:
aff8c126
RS
3612 return tls1_set_groups(&s->ext.supportedgroups,
3613 &s->ext.supportedgroups_len, parg, larg);
0f113f3e 3614
de4d764e 3615 case SSL_CTRL_SET_GROUPS_LIST:
aff8c126
RS
3616 return tls1_set_groups_list(&s->ext.supportedgroups,
3617 &s->ext.supportedgroups_len, parg);
0f113f3e 3618
de4d764e 3619 case SSL_CTRL_GET_SHARED_GROUP:
43b95d73
DSH
3620 {
3621 uint16_t id = tls1_shared_group(s, larg);
0f113f3e 3622
84d4b9e3 3623 if (larg != -1)
3624 return tls1_group_id2nid(id);
43b95d73
DSH
3625 return id;
3626 }
84d4b9e3 3627 case SSL_CTRL_GET_NEGOTIATED_GROUP:
3628 ret = tls1_group_id2nid(s->s3.group_id);
3629 break;
65dc5c3c 3630#endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
dbc6268f 3631
0f113f3e
MC
3632 case SSL_CTRL_SET_SIGALGS:
3633 return tls1_set_sigalgs(s->cert, parg, larg, 0);
3634
3635 case SSL_CTRL_SET_SIGALGS_LIST:
3636 return tls1_set_sigalgs_list(s->cert, parg, 0);
3637
3638 case SSL_CTRL_SET_CLIENT_SIGALGS:
3639 return tls1_set_sigalgs(s->cert, parg, larg, 1);
3640
3641 case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
3642 return tls1_set_sigalgs_list(s->cert, parg, 1);
3643
3644 case SSL_CTRL_GET_CLIENT_CERT_TYPES:
3645 {
3646 const unsigned char **pctype = parg;
555cbb32 3647 if (s->server || !s->s3.tmp.cert_req)
0f113f3e 3648 return 0;
0f113f3e 3649 if (pctype)
555cbb32
TS
3650 *pctype = s->s3.tmp.ctype;
3651 return s->s3.tmp.ctype_len;
0f113f3e
MC
3652 }
3653
3654 case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3655 if (!s->server)
3656 return 0;
3657 return ssl3_set_req_cert_type(s->cert, parg, larg);
3658
3659 case SSL_CTRL_BUILD_CERT_CHAIN:
3660 return ssl_build_cert_chain(s, NULL, larg);
3661
3662 case SSL_CTRL_SET_VERIFY_CERT_STORE:
3663 return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
3664
3665 case SSL_CTRL_SET_CHAIN_CERT_STORE:
3666 return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
3667
3668 case SSL_CTRL_GET_PEER_SIGNATURE_NID:
555cbb32 3669 if (s->s3.tmp.peer_sigalg == NULL)
0f113f3e 3670 return 0;
555cbb32 3671 *(int *)parg = s->s3.tmp.peer_sigalg->hash;
f742cda8 3672 return 1;
0f113f3e 3673
a51c9f63 3674 case SSL_CTRL_GET_SIGNATURE_NID:
555cbb32 3675 if (s->s3.tmp.sigalg == NULL)
a51c9f63 3676 return 0;
555cbb32 3677 *(int *)parg = s->s3.tmp.sigalg->hash;
a51c9f63
VD
3678 return 1;
3679
3680 case SSL_CTRL_GET_PEER_TMP_KEY:
fb79abe3 3681#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
555cbb32 3682 if (s->session == NULL || s->s3.peer_tmp == NULL) {
0f113f3e 3683 return 0;
fb79abe3 3684 } else {
555cbb32
TS
3685 EVP_PKEY_up_ref(s->s3.peer_tmp);
3686 *(EVP_PKEY **)parg = s->s3.peer_tmp;
fb79abe3 3687 return 1;
0f113f3e 3688 }
fb79abe3
DSH
3689#else
3690 return 0;
3691#endif
a51c9f63
VD
3692
3693 case SSL_CTRL_GET_TMP_KEY:
3694#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
555cbb32 3695 if (s->session == NULL || s->s3.tmp.pkey == NULL) {
a51c9f63
VD
3696 return 0;
3697 } else {
555cbb32
TS
3698 EVP_PKEY_up_ref(s->s3.tmp.pkey);
3699 *(EVP_PKEY **)parg = s->s3.tmp.pkey;
a51c9f63
VD
3700 return 1;
3701 }
3702#else
3703 return 0;
3704#endif
3705
14536c8c 3706#ifndef OPENSSL_NO_EC
0f113f3e
MC
3707 case SSL_CTRL_GET_EC_POINT_FORMATS:
3708 {
0f113f3e 3709 const unsigned char **pformat = parg;
aff8c126 3710
cd0fb43c 3711 if (s->ext.peer_ecpointformats == NULL)
0f113f3e 3712 return 0;
cd0fb43c
MC
3713 *pformat = s->ext.peer_ecpointformats;
3714 return (int)s->ext.peer_ecpointformats_len;
0f113f3e 3715 }
14536c8c 3716#endif
cf6da053 3717
0f113f3e
MC
3718 default:
3719 break;
3720 }
26a7d938 3721 return ret;
0f113f3e
MC
3722}
3723
3724long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
3725{
3726 int ret = 0;
d3442bc7 3727
0f113f3e 3728 switch (cmd) {
bc36ee62 3729#ifndef OPENSSL_NO_DH
0f113f3e
MC
3730 case SSL_CTRL_SET_TMP_DH_CB:
3731 {
3732 s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3733 }
3734 break;
6434abbf 3735#endif
0f113f3e 3736 case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
aff8c126 3737 s->ext.debug_cb = (void (*)(SSL *, int, int,
1ed327f7 3738 const unsigned char *, int, void *))fp;
0f113f3e 3739 break;
e481f9b9 3740
0f113f3e
MC
3741 case SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB:
3742 {
3743 s->not_resumable_session_cb = (int (*)(SSL *, int))fp;
3744 }
3745 break;
3746 default:
3747 break;
3748 }
26a7d938 3749 return ret;
0f113f3e 3750}
d02b48c6 3751
a661b653 3752long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
0f113f3e 3753{
0f113f3e 3754 switch (cmd) {
bc36ee62 3755#ifndef OPENSSL_NO_DH
0f113f3e
MC
3756 case SSL_CTRL_SET_TMP_DH:
3757 {
e2b420fd
DSH
3758 DH *dh = (DH *)parg;
3759 EVP_PKEY *pkdh = NULL;
3760 if (dh == NULL) {
3761 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_PASSED_NULL_PARAMETER);
0f113f3e
MC
3762 return 0;
3763 }
e2b420fd
DSH
3764 pkdh = ssl_dh_to_pkey(dh);
3765 if (pkdh == NULL) {
3766 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
0f113f3e
MC
3767 return 0;
3768 }
e2b420fd
DSH
3769 if (!ssl_ctx_security(ctx, SSL_SECOP_TMP_DH,
3770 EVP_PKEY_security_bits(pkdh), 0, pkdh)) {
3771 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_DH_KEY_TOO_SMALL);
3772 EVP_PKEY_free(pkdh);
d9720a59 3773 return 0;
0f113f3e 3774 }
e2b420fd
DSH
3775 EVP_PKEY_free(ctx->cert->dh_tmp);
3776 ctx->cert->dh_tmp = pkdh;
0f113f3e
MC
3777 return 1;
3778 }
0f113f3e
MC
3779 case SSL_CTRL_SET_TMP_DH_CB:
3780 {
3781 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
26a7d938 3782 return 0;
0f113f3e 3783 }
0f113f3e
MC
3784 case SSL_CTRL_SET_DH_AUTO:
3785 ctx->cert->dh_tmp_auto = larg;
3786 return 1;
d02b48c6 3787#endif
10bf4fc2 3788#ifndef OPENSSL_NO_EC
0f113f3e
MC
3789 case SSL_CTRL_SET_TMP_ECDH:
3790 {
6977e8ee
KR
3791 const EC_GROUP *group = NULL;
3792 int nid;
0f113f3e
MC
3793
3794 if (parg == NULL) {
6977e8ee 3795 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_PASSED_NULL_PARAMETER);
0f113f3e
MC
3796 return 0;
3797 }
6977e8ee
KR
3798 group = EC_KEY_get0_group((const EC_KEY *)parg);
3799 if (group == NULL) {
3800 SSLerr(SSL_F_SSL3_CTX_CTRL, EC_R_MISSING_PARAMETERS);
0f113f3e
MC
3801 return 0;
3802 }
6977e8ee
KR
3803 nid = EC_GROUP_get_curve_name(group);
3804 if (nid == NID_undef)
3805 return 0;
aff8c126
RS
3806 return tls1_set_groups(&ctx->ext.supportedgroups,
3807 &ctx->ext.supportedgroups_len,
6977e8ee 3808 &nid, 1);
0f113f3e 3809 }
10bf4fc2 3810#endif /* !OPENSSL_NO_EC */
0f113f3e 3811 case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
aff8c126 3812 ctx->ext.servername_arg = parg;
0f113f3e
MC
3813 break;
3814 case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
3815 case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
3816 {
3817 unsigned char *keys = parg;
aff8c126 3818 long tick_keylen = (sizeof(ctx->ext.tick_key_name) +
4bfb96f2
TS
3819 sizeof(ctx->ext.secure->tick_hmac_key) +
3820 sizeof(ctx->ext.secure->tick_aes_key));
d139723b 3821 if (keys == NULL)
aff8c126
RS
3822 return tick_keylen;
3823 if (larg != tick_keylen) {
0f113f3e
MC
3824 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
3825 return 0;
3826 }
3827 if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) {
aff8c126
RS
3828 memcpy(ctx->ext.tick_key_name, keys,
3829 sizeof(ctx->ext.tick_key_name));
4bfb96f2 3830 memcpy(ctx->ext.secure->tick_hmac_key,
aff8c126 3831 keys + sizeof(ctx->ext.tick_key_name),
4bfb96f2
TS
3832 sizeof(ctx->ext.secure->tick_hmac_key));
3833 memcpy(ctx->ext.secure->tick_aes_key,
aff8c126 3834 keys + sizeof(ctx->ext.tick_key_name) +
4bfb96f2
TS
3835 sizeof(ctx->ext.secure->tick_hmac_key),
3836 sizeof(ctx->ext.secure->tick_aes_key));
0f113f3e 3837 } else {
aff8c126
RS
3838 memcpy(keys, ctx->ext.tick_key_name,
3839 sizeof(ctx->ext.tick_key_name));
3840 memcpy(keys + sizeof(ctx->ext.tick_key_name),
4bfb96f2
TS
3841 ctx->ext.secure->tick_hmac_key,
3842 sizeof(ctx->ext.secure->tick_hmac_key));
aff8c126 3843 memcpy(keys + sizeof(ctx->ext.tick_key_name) +
4bfb96f2
TS
3844 sizeof(ctx->ext.secure->tick_hmac_key),
3845 ctx->ext.secure->tick_aes_key,
3846 sizeof(ctx->ext.secure->tick_aes_key));
0f113f3e
MC
3847 }
3848 return 1;
3849 }
3850
30b96765 3851 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
aff8c126 3852 return ctx->ext.status_type;
30b96765 3853
ba261f71 3854 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
aff8c126 3855 ctx->ext.status_type = larg;
ba261f71 3856 break;
3857
0f113f3e 3858 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
aff8c126 3859 ctx->ext.status_arg = parg;
0f113f3e 3860 return 1;
0f113f3e 3861
fddfc0af 3862 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG:
aff8c126 3863 *(void**)parg = ctx->ext.status_arg;
fddfc0af
RG
3864 break;
3865
3866 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB:
aff8c126 3867 *(int (**)(SSL*, void*))parg = ctx->ext.status_cb;
fddfc0af
RG
3868 break;
3869
e481f9b9 3870#ifndef OPENSSL_NO_SRP
0f113f3e
MC
3871 case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME:
3872 ctx->srp_ctx.srp_Mask |= SSL_kSRP;
b548a1f1 3873 OPENSSL_free(ctx->srp_ctx.login);
0f113f3e
MC
3874 ctx->srp_ctx.login = NULL;
3875 if (parg == NULL)
3876 break;
a230b26e 3877 if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) {
0f113f3e
MC
3878 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME);
3879 return 0;
3880 }
7644a9ae 3881 if ((ctx->srp_ctx.login = OPENSSL_strdup((char *)parg)) == NULL) {
0f113f3e
MC
3882 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
3883 return 0;
3884 }
3885 break;
3886 case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD:
3887 ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
3888 srp_password_from_info_cb;
e655f549
DSC
3889 if (ctx->srp_ctx.info != NULL)
3890 OPENSSL_free(ctx->srp_ctx.info);
3d484574 3891 if ((ctx->srp_ctx.info = OPENSSL_strdup((char *)parg)) == NULL) {
e655f549
DSC
3892 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
3893 return 0;
3894 }
0f113f3e
MC
3895 break;
3896 case SSL_CTRL_SET_SRP_ARG:
3897 ctx->srp_ctx.srp_Mask |= SSL_kSRP;
3898 ctx->srp_ctx.SRP_cb_arg = parg;
3899 break;
3900
3901 case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH:
3902 ctx->srp_ctx.strength = larg;
3903 break;
e481f9b9 3904#endif
0f113f3e 3905
65dc5c3c 3906#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
de4d764e 3907 case SSL_CTRL_SET_GROUPS:
aff8c126
RS
3908 return tls1_set_groups(&ctx->ext.supportedgroups,
3909 &ctx->ext.supportedgroups_len,
0f113f3e
MC
3910 parg, larg);
3911
de4d764e 3912 case SSL_CTRL_SET_GROUPS_LIST:
aff8c126
RS
3913 return tls1_set_groups_list(&ctx->ext.supportedgroups,
3914 &ctx->ext.supportedgroups_len,
0f113f3e 3915 parg);
65dc5c3c 3916#endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
dbc6268f 3917
0f113f3e
MC
3918 case SSL_CTRL_SET_SIGALGS:
3919 return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
3920
3921 case SSL_CTRL_SET_SIGALGS_LIST:
3922 return tls1_set_sigalgs_list(ctx->cert, parg, 0);
3923
3924 case SSL_CTRL_SET_CLIENT_SIGALGS:
3925 return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
3926
3927 case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
3928 return tls1_set_sigalgs_list(ctx->cert, parg, 1);
3929
3930 case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3931 return ssl3_set_req_cert_type(ctx->cert, parg, larg);
3932
3933 case SSL_CTRL_BUILD_CERT_CHAIN:
3934 return ssl_build_cert_chain(NULL, ctx, larg);
3935
3936 case SSL_CTRL_SET_VERIFY_CERT_STORE:
3937 return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
3938
3939 case SSL_CTRL_SET_CHAIN_CERT_STORE:
3940 return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
3941
0f113f3e
MC
3942 /* A Thawte special :-) */
3943 case SSL_CTRL_EXTRA_CHAIN_CERT:
3944 if (ctx->extra_certs == NULL) {
3c82e437
F
3945 if ((ctx->extra_certs = sk_X509_new_null()) == NULL) {
3946 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
3947 return 0;
3948 }
3949 }
3950 if (!sk_X509_push(ctx->extra_certs, (X509 *)parg)) {
3951 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
3952 return 0;
0f113f3e 3953 }
0f113f3e
MC
3954 break;
3955
3956 case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
3957 if (ctx->extra_certs == NULL && larg == 0)
3958 *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
3959 else
3960 *(STACK_OF(X509) **)parg = ctx->extra_certs;
3961 break;
3962
3963 case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
222561fe
RS
3964 sk_X509_pop_free(ctx->extra_certs, X509_free);
3965 ctx->extra_certs = NULL;
0f113f3e
MC
3966 break;
3967
3968 case SSL_CTRL_CHAIN:
3969 if (larg)
3970 return ssl_cert_set1_chain(NULL, ctx, (STACK_OF(X509) *)parg);
3971 else
3972 return ssl_cert_set0_chain(NULL, ctx, (STACK_OF(X509) *)parg);
3973
3974 case SSL_CTRL_CHAIN_CERT:
3975 if (larg)
3976 return ssl_cert_add1_chain_cert(NULL, ctx, (X509 *)parg);
3977 else
3978 return ssl_cert_add0_chain_cert(NULL, ctx, (X509 *)parg);
3979
3980 case SSL_CTRL_GET_CHAIN_CERTS:
3981 *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
3982 break;
3983
3984 case SSL_CTRL_SELECT_CURRENT_CERT:
3985 return ssl_cert_select_current(ctx->cert, (X509 *)parg);
3986
3987 case SSL_CTRL_SET_CURRENT_CERT:
3988 return ssl_cert_set_current(ctx->cert, larg);
3989
3990 default:
26a7d938 3991 return 0;
0f113f3e 3992 }
208fb891 3993 return 1;
0f113f3e
MC
3994}
3995
3996long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
3997{
0f113f3e 3998 switch (cmd) {
bc36ee62 3999#ifndef OPENSSL_NO_DH
0f113f3e
MC
4000 case SSL_CTRL_SET_TMP_DH_CB:
4001 {
8ca8fc48 4002 ctx->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
0f113f3e
MC
4003 }
4004 break;
ed3883d2 4005#endif
0f113f3e 4006 case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
aff8c126 4007 ctx->ext.servername_cb = (int (*)(SSL *, int *, void *))fp;
0f113f3e
MC
4008 break;
4009
0f113f3e 4010 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
aff8c126 4011 ctx->ext.status_cb = (int (*)(SSL *, void *))fp;
0f113f3e
MC
4012 break;
4013
a76ce286 4014# ifndef OPENSSL_NO_DEPRECATED_3_0
0f113f3e 4015 case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
aff8c126 4016 ctx->ext.ticket_key_cb = (int (*)(SSL *, unsigned char *,
0f113f3e
MC
4017 unsigned char *,
4018 EVP_CIPHER_CTX *,
4019 HMAC_CTX *, int))fp;
4020 break;
a76ce286 4021#endif
0f113f3e 4022
e481f9b9 4023#ifndef OPENSSL_NO_SRP
0f113f3e
MC
4024 case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB:
4025 ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4026 ctx->srp_ctx.SRP_verify_param_callback = (int (*)(SSL *, void *))fp;
4027 break;
4028 case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB:
4029 ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4030 ctx->srp_ctx.TLS_ext_srp_username_callback =
4031 (int (*)(SSL *, int *, void *))fp;
4032 break;
4033 case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB:
4034 ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4035 ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
4036 (char *(*)(SSL *, void *))fp;
4037 break;
761772d7 4038#endif
0f113f3e
MC
4039 case SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB:
4040 {
4041 ctx->not_resumable_session_cb = (int (*)(SSL *, int))fp;
4042 }
4043 break;
4044 default:
26a7d938 4045 return 0;
0f113f3e 4046 }
208fb891 4047 return 1;
0f113f3e 4048}
761772d7 4049
a76ce286
P
4050int SSL_CTX_set_tlsext_ticket_key_evp_cb
4051 (SSL_CTX *ctx, int (*fp)(SSL *, unsigned char *, unsigned char *,
4052 EVP_CIPHER_CTX *, EVP_MAC_CTX *, int))
4053{
4054 ctx->ext.ticket_key_evp_cb = fp;
4055 return 1;
4056}
4057
ec15acb6
MC
4058const SSL_CIPHER *ssl3_get_cipher_by_id(uint32_t id)
4059{
4060 SSL_CIPHER c;
650c6e41 4061 const SSL_CIPHER *cp;
ec15acb6
MC
4062
4063 c.id = id;
f865b081
MC
4064 cp = OBJ_bsearch_ssl_cipher_id(&c, tls13_ciphers, TLS13_NUM_CIPHERS);
4065 if (cp != NULL)
4066 return cp;
650c6e41
BK
4067 cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
4068 if (cp != NULL)
4069 return cp;
4070 return OBJ_bsearch_ssl_cipher_id(&c, ssl3_scsvs, SSL3_NUM_SCSVS);
ec15acb6
MC
4071}
4072
bbb4ceb8
PY
4073const SSL_CIPHER *ssl3_get_cipher_by_std_name(const char *stdname)
4074{
f865b081
MC
4075 SSL_CIPHER *c = NULL, *tbl;
4076 SSL_CIPHER *alltabs[] = {tls13_ciphers, ssl3_ciphers};
4077 size_t i, j, tblsize[] = {TLS13_NUM_CIPHERS, SSL3_NUM_CIPHERS};
bbb4ceb8 4078
3519bae5 4079 /* this is not efficient, necessary to optimize this? */
f865b081
MC
4080 for (j = 0; j < OSSL_NELEM(alltabs); j++) {
4081 for (i = 0, tbl = alltabs[j]; i < tblsize[j]; i++, tbl++) {
4082 if (tbl->stdname == NULL)
4083 continue;
4084 if (strcmp(stdname, tbl->stdname) == 0) {
4085 c = tbl;
4086 break;
4087 }
bbb4ceb8
PY
4088 }
4089 }
4090 if (c == NULL) {
4091 tbl = ssl3_scsvs;
4092 for (i = 0; i < SSL3_NUM_SCSVS; i++, tbl++) {
4093 if (strcmp(stdname, tbl->stdname) == 0) {
4094 c = tbl;
4095 break;
4096 }
4097 }
4098 }
4099 return c;
4100}
4101
0f113f3e
MC
4102/*
4103 * This function needs to check if the ciphers required are actually
4104 * available
4105 */
babb3798 4106const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
0f113f3e 4107{
1f5b44e9 4108 return ssl3_get_cipher_by_id(SSL3_CK_CIPHERSUITE_FLAG
ec15acb6
MC
4109 | ((uint32_t)p[0] << 8L)
4110 | (uint32_t)p[1]);
0f113f3e 4111}
d02b48c6 4112
ae2f7b37 4113int ssl3_put_cipher_by_char(const SSL_CIPHER *c, WPACKET *pkt, size_t *len)
2c7b4dbc 4114{
34f7245b 4115 if ((c->id & 0xff000000) != SSL3_CK_CIPHERSUITE_FLAG) {
2c7b4dbc
MC
4116 *len = 0;
4117 return 1;
4118 }
4119
08029dfa 4120 if (!WPACKET_put_bytes_u16(pkt, c->id & 0xffff))
2c7b4dbc
MC
4121 return 0;
4122
4123 *len = 2;
4124 return 1;
4125}
4126
3eb2aff4
KR
4127/*
4128 * ssl3_choose_cipher - choose a cipher from those offered by the client
4129 * @s: SSL connection
4130 * @clnt: ciphers offered by the client
4131 * @srvr: ciphers enabled on the server?
4132 *
4133 * Returns the selected cipher or NULL when no common ciphers.
4134 */
4a640fb6 4135const SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
a230b26e 4136 STACK_OF(SSL_CIPHER) *srvr)
0f113f3e 4137{
4a640fb6 4138 const SSL_CIPHER *c, *ret = NULL;
0f113f3e 4139 STACK_OF(SSL_CIPHER) *prio, *allow;
48a03162 4140 int i, ii, ok, prefer_sha256 = 0;
0de6d66d 4141 unsigned long alg_k = 0, alg_a = 0, mask_k = 0, mask_a = 0;
e1c7871d
TS
4142#ifndef OPENSSL_NO_CHACHA
4143 STACK_OF(SSL_CIPHER) *prio_chacha = NULL;
4144#endif
d02b48c6 4145
0f113f3e 4146 /* Let's see which ciphers we can support */
d02b48c6 4147
0f113f3e
MC
4148 /*
4149 * Do not set the compare functions, because this may lead to a
4150 * reordering by "id". We want to keep the original ordering. We may pay
4151 * a price in performance during sk_SSL_CIPHER_find(), but would have to
4152 * pay with the price of sk_SSL_CIPHER_dup().
4153 */
d02b48c6 4154
77359d22
RL
4155 OSSL_TRACE_BEGIN(TLS_CIPHER) {
4156 BIO_printf(trc_out, "Server has %d from %p:\n",
4157 sk_SSL_CIPHER_num(srvr), (void *)srvr);
4158 for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) {
4159 c = sk_SSL_CIPHER_value(srvr, i);
4160 BIO_printf(trc_out, "%p:%s\n", (void *)c, c->name);
4161 }
4162 BIO_printf(trc_out, "Client sent %d from %p:\n",
4163 sk_SSL_CIPHER_num(clnt), (void *)clnt);
4164 for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) {
4165 c = sk_SSL_CIPHER_value(clnt, i);
4166 BIO_printf(trc_out, "%p:%s\n", (void *)c, c->name);
4167 }
4168 } OSSL_TRACE_END(TLS_CIPHER);
f415fa32 4169
e1c7871d
TS
4170 /* SUITE-B takes precedence over server preference and ChaCha priortiy */
4171 if (tls1_suiteb(s)) {
4172 prio = srvr;
4173 allow = clnt;
4174 } else if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
0f113f3e
MC
4175 prio = srvr;
4176 allow = clnt;
e1c7871d
TS
4177#ifndef OPENSSL_NO_CHACHA
4178 /* If ChaCha20 is at the top of the client preference list,
4179 and there are ChaCha20 ciphers in the server list, then
4180 temporarily prioritize all ChaCha20 ciphers in the servers list. */
4181 if (s->options & SSL_OP_PRIORITIZE_CHACHA && sk_SSL_CIPHER_num(clnt) > 0) {
4182 c = sk_SSL_CIPHER_value(clnt, 0);
4183 if (c->algorithm_enc == SSL_CHACHA20POLY1305) {
4184 /* ChaCha20 is client preferred, check server... */
4185 int num = sk_SSL_CIPHER_num(srvr);
4186 int found = 0;
4187 for (i = 0; i < num; i++) {
4188 c = sk_SSL_CIPHER_value(srvr, i);
4189 if (c->algorithm_enc == SSL_CHACHA20POLY1305) {
4190 found = 1;
4191 break;
4192 }
4193 }
4194 if (found) {
e670e903 4195 prio_chacha = sk_SSL_CIPHER_new_reserve(NULL, num);
e1c7871d
TS
4196 /* if reserve fails, then there's likely a memory issue */
4197 if (prio_chacha != NULL) {
4198 /* Put all ChaCha20 at the top, starting with the one we just found */
4199 sk_SSL_CIPHER_push(prio_chacha, c);
4200 for (i++; i < num; i++) {
4201 c = sk_SSL_CIPHER_value(srvr, i);
4202 if (c->algorithm_enc == SSL_CHACHA20POLY1305)
4203 sk_SSL_CIPHER_push(prio_chacha, c);
4204 }
4205 /* Pull in the rest */
4206 for (i = 0; i < num; i++) {
4207 c = sk_SSL_CIPHER_value(srvr, i);
4208 if (c->algorithm_enc != SSL_CHACHA20POLY1305)
4209 sk_SSL_CIPHER_push(prio_chacha, c);
4210 }
4211 prio = prio_chacha;
4212 }
4213 }
4214 }
4215 }
4216# endif
0f113f3e
MC
4217 } else {
4218 prio = clnt;
4219 allow = srvr;
4220 }
4221
48a03162 4222 if (SSL_IS_TLS13(s)) {
199dc0d3 4223#ifndef OPENSSL_NO_PSK
48a03162
MC
4224 int j;
4225
4226 /*
4227 * If we allow "old" style PSK callbacks, and we have no certificate (so
4228 * we're not going to succeed without a PSK anyway), and we're in
4229 * TLSv1.3 then the default hash for a PSK is SHA-256 (as per the
4230 * TLSv1.3 spec). Therefore we should prioritise ciphersuites using
4231 * that.
4232 */
4233 if (s->psk_server_callback != NULL) {
4234 for (j = 0; j < SSL_PKEY_NUM && !ssl_has_cert(s, j); j++);
4235 if (j == SSL_PKEY_NUM) {
4236 /* There are no certificates */
4237 prefer_sha256 = 1;
4238 }
4239 }
199dc0d3 4240#endif
48a03162 4241 } else {
0de6d66d
MC
4242 tls1_set_cert_validity(s);
4243 ssl_set_masks(s);
4244 }
0f113f3e
MC
4245
4246 for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
4247 c = sk_SSL_CIPHER_value(prio, i);
4248
3eb2aff4
KR
4249 /* Skip ciphers not supported by the protocol version */
4250 if (!SSL_IS_DTLS(s) &&
a230b26e 4251 ((s->version < c->min_tls) || (s->version > c->max_tls)))
0f113f3e 4252 continue;
3eb2aff4 4253 if (SSL_IS_DTLS(s) &&
a230b26e
EK
4254 (DTLS_VERSION_LT(s->version, c->min_dtls) ||
4255 DTLS_VERSION_GT(s->version, c->max_dtls)))
2b573382 4256 continue;
a055a881 4257
0de6d66d
MC
4258 /*
4259 * Since TLS 1.3 ciphersuites can be used with any auth or
4260 * key exchange scheme skip tests.
4261 */
4262 if (!SSL_IS_TLS13(s)) {
555cbb32
TS
4263 mask_k = s->s3.tmp.mask_k;
4264 mask_a = s->s3.tmp.mask_a;
edc032b5 4265#ifndef OPENSSL_NO_SRP
612ca806
DSH
4266 if (s->srp_ctx.srp_Mask & SSL_kSRP) {
4267 mask_k |= SSL_kSRP;
4268 mask_a |= SSL_aSRP;
4269 }
edc032b5 4270#endif
0f113f3e 4271
612ca806
DSH
4272 alg_k = c->algorithm_mkey;
4273 alg_a = c->algorithm_auth;
52b8dad8 4274
ddac1974 4275#ifndef OPENSSL_NO_PSK
612ca806
DSH
4276 /* with PSK there must be server callback set */
4277 if ((alg_k & SSL_PSK) && s->psk_server_callback == NULL)
4278 continue;
0f113f3e
MC
4279#endif /* OPENSSL_NO_PSK */
4280
612ca806 4281 ok = (alg_k & mask_k) && (alg_a & mask_a);
77359d22
RL
4282 OSSL_TRACE7(TLS_CIPHER,
4283 "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",
4284 ok, alg_k, alg_a, mask_k, mask_a, (void *)c, c->name);
d02b48c6 4285
a230b26e 4286#ifndef OPENSSL_NO_EC
612ca806
DSH
4287 /*
4288 * if we are considering an ECC cipher suite that uses an ephemeral
4289 * EC key check it
4290 */
4291 if (alg_k & SSL_kECDHE)
4292 ok = ok && tls1_check_ec_tmp_key(s, c->id);
a230b26e 4293#endif /* OPENSSL_NO_EC */
0f113f3e 4294
612ca806
DSH
4295 if (!ok)
4296 continue;
4297 }
0f113f3e
MC
4298 ii = sk_SSL_CIPHER_find(allow, c);
4299 if (ii >= 0) {
4300 /* Check security callback permits this cipher */
4301 if (!ssl_security(s, SSL_SECOP_CIPHER_SHARED,
4a640fb6 4302 c->strength_bits, 0, (void *)c))
0f113f3e 4303 continue;
e481f9b9 4304#if !defined(OPENSSL_NO_EC)
0f113f3e 4305 if ((alg_k & SSL_kECDHE) && (alg_a & SSL_aECDSA)
555cbb32 4306 && s->s3.is_probably_safari) {
0f113f3e
MC
4307 if (!ret)
4308 ret = sk_SSL_CIPHER_value(allow, ii);
4309 continue;
4310 }
d89cd382 4311#endif
48a03162
MC
4312 if (prefer_sha256) {
4313 const SSL_CIPHER *tmp = sk_SSL_CIPHER_value(allow, ii);
4314
c8f6c28a
MC
4315 /*
4316 * TODO: When there are no more legacy digests we can just use
4317 * OSSL_DIGEST_NAME_SHA2_256 instead of calling OBJ_nid2sn
4318 */
4319 if (EVP_MD_is_a(ssl_md(s->ctx, tmp->algorithm2),
4320 OBJ_nid2sn(NID_sha256))) {
48a03162
MC
4321 ret = tmp;
4322 break;
4323 }
4324 if (ret == NULL)
4325 ret = tmp;
4326 continue;
4327 }
0f113f3e
MC
4328 ret = sk_SSL_CIPHER_value(allow, ii);
4329 break;
4330 }
4331 }
e1c7871d
TS
4332#ifndef OPENSSL_NO_CHACHA
4333 sk_SSL_CIPHER_free(prio_chacha);
4334#endif
26a7d938 4335 return ret;
0f113f3e 4336}
d02b48c6 4337
28ff8ef3 4338int ssl3_get_req_cert_type(SSL *s, WPACKET *pkt)
0f113f3e 4339{
90d9e49a 4340 uint32_t alg_k, alg_a = 0;
0f113f3e
MC
4341
4342 /* If we have custom certificate types set, use them */
75c13e78
DSH
4343 if (s->cert->ctype)
4344 return WPACKET_memcpy(pkt, s->cert->ctype, s->cert->ctype_len);
0f113f3e
MC
4345 /* Get mask of algorithms disabled by signature list */
4346 ssl_set_sig_mask(&alg_a, s, SSL_SECOP_SIGALG_MASK);
0f113f3e 4347
555cbb32 4348 alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
d02b48c6 4349
caa97ef1 4350#ifndef OPENSSL_NO_GOST
28ff8ef3
MC
4351 if (s->version >= TLS1_VERSION && (alg_k & SSL_kGOST))
4352 return WPACKET_put_bytes_u8(pkt, TLS_CT_GOST01_SIGN)
4353 && WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_SIGN)
4354 && WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_512_SIGN);
caa97ef1
DSH
4355#endif
4356
bc71f910 4357 if ((s->version == SSL3_VERSION) && (alg_k & SSL_kDHE)) {
bc36ee62 4358#ifndef OPENSSL_NO_DH
0f113f3e 4359# ifndef OPENSSL_NO_RSA
28ff8ef3
MC
4360 if (!WPACKET_put_bytes_u8(pkt, SSL3_CT_RSA_EPHEMERAL_DH))
4361 return 0;
0f113f3e
MC
4362# endif
4363# ifndef OPENSSL_NO_DSA
28ff8ef3
MC
4364 if (!WPACKET_put_bytes_u8(pkt, SSL3_CT_DSS_EPHEMERAL_DH))
4365 return 0;
0f113f3e 4366# endif
0f113f3e 4367#endif /* !OPENSSL_NO_DH */
1e0784ff 4368 }
bc36ee62 4369#ifndef OPENSSL_NO_RSA
28ff8ef3
MC
4370 if (!(alg_a & SSL_aRSA) && !WPACKET_put_bytes_u8(pkt, SSL3_CT_RSA_SIGN))
4371 return 0;
d02b48c6 4372#endif
bc36ee62 4373#ifndef OPENSSL_NO_DSA
28ff8ef3
MC
4374 if (!(alg_a & SSL_aDSS) && !WPACKET_put_bytes_u8(pkt, SSL3_CT_DSS_SIGN))
4375 return 0;
dfeab068 4376#endif
10bf4fc2 4377#ifndef OPENSSL_NO_EC
0f113f3e 4378 /*
c66ce5eb 4379 * ECDSA certs can be used with RSA cipher suites too so we don't
0f113f3e
MC
4380 * need to check for SSL_kECDH or SSL_kECDHE
4381 */
28ff8ef3
MC
4382 if (s->version >= TLS1_VERSION
4383 && !(alg_a & SSL_aECDSA)
4384 && !WPACKET_put_bytes_u8(pkt, TLS_CT_ECDSA_SIGN))
4385 return 0;
0f113f3e 4386#endif
28ff8ef3 4387 return 1;
0f113f3e 4388}
d02b48c6 4389
9f27b1ee 4390static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
0f113f3e 4391{
75c13e78
DSH
4392 OPENSSL_free(c->ctype);
4393 c->ctype = NULL;
4394 c->ctype_len = 0;
4395 if (p == NULL || len == 0)
0f113f3e
MC
4396 return 1;
4397 if (len > 0xff)
4398 return 0;
75c13e78
DSH
4399 c->ctype = OPENSSL_memdup(p, len);
4400 if (c->ctype == NULL)
0f113f3e 4401 return 0;
75c13e78 4402 c->ctype_len = len;
0f113f3e
MC
4403 return 1;
4404}
9f27b1ee 4405
6b691a5c 4406int ssl3_shutdown(SSL *s)
0f113f3e
MC
4407{
4408 int ret;
4409
4410 /*
4411 * Don't do anything much if we have not done the handshake or we don't
4412 * want to send messages :-)
4413 */
c874def6 4414 if (s->quiet_shutdown || SSL_in_before(s)) {
0f113f3e 4415 s->shutdown = (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
208fb891 4416 return 1;
0f113f3e
MC
4417 }
4418
4419 if (!(s->shutdown & SSL_SENT_SHUTDOWN)) {
4420 s->shutdown |= SSL_SENT_SHUTDOWN;
0f113f3e 4421 ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
0f113f3e
MC
4422 /*
4423 * our shutdown alert has been sent now, and if it still needs to be
555cbb32 4424 * written, s->s3.alert_dispatch will be true
0f113f3e 4425 */
555cbb32 4426 if (s->s3.alert_dispatch)
26a7d938 4427 return -1; /* return WANT_WRITE */
555cbb32 4428 } else if (s->s3.alert_dispatch) {
0f113f3e 4429 /* resend it if not sent */
0f113f3e
MC
4430 ret = s->method->ssl_dispatch_alert(s);
4431 if (ret == -1) {
4432 /*
4433 * we only get to return -1 here the 2nd/Nth invocation, we must
8483a003 4434 * have already signalled return 0 upon a previous invocation,
0f113f3e
MC
4435 * return WANT_WRITE
4436 */
26a7d938 4437 return ret;
0f113f3e 4438 }
0f113f3e 4439 } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
54105ddd 4440 size_t readbytes;
0f113f3e
MC
4441 /*
4442 * If we are waiting for a close from our peer, we are closed
4443 */
54105ddd 4444 s->method->ssl_read_bytes(s, 0, NULL, NULL, 0, 0, &readbytes);
0f113f3e 4445 if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
eda75751 4446 return -1; /* return WANT_READ */
0f113f3e
MC
4447 }
4448 }
4449
4450 if ((s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN)) &&
555cbb32 4451 !s->s3.alert_dispatch)
208fb891 4452 return 1;
0f113f3e 4453 else
26a7d938 4454 return 0;
0f113f3e 4455}
d02b48c6 4456
7ee8627f 4457int ssl3_write(SSL *s, const void *buf, size_t len, size_t *written)
0f113f3e 4458{
0f113f3e 4459 clear_sys_error();
555cbb32 4460 if (s->s3.renegotiate)
c7f47786 4461 ssl3_renegotiate_check(s, 0);
0f113f3e 4462
7ee8627f
MC
4463 return s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
4464 written);
0f113f3e 4465}
d02b48c6 4466
eda75751 4467static int ssl3_read_internal(SSL *s, void *buf, size_t len, int peek,
54105ddd 4468 size_t *readbytes)
0f113f3e
MC
4469{
4470 int ret;
4471
4472 clear_sys_error();
555cbb32 4473 if (s->s3.renegotiate)
c7f47786 4474 ssl3_renegotiate_check(s, 0);
555cbb32 4475 s->s3.in_read_app_data = 1;
0f113f3e 4476 ret =
657da85e 4477 s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, NULL, buf, len,
54105ddd 4478 peek, readbytes);
555cbb32 4479 if ((ret == -1) && (s->s3.in_read_app_data == 2)) {
0f113f3e
MC
4480 /*
4481 * ssl3_read_bytes decided to call s->handshake_func, which called
4482 * ssl3_read_bytes to read handshake data. However, ssl3_read_bytes
4483 * actually found application data and thinks that application data
4484 * makes sense here; so disable handshake processing and try to read
4485 * application data again.
4486 */
024f543c 4487 ossl_statem_set_in_handshake(s, 1);
0f113f3e 4488 ret =
657da85e 4489 s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, NULL, buf,
54105ddd 4490 len, peek, readbytes);
024f543c 4491 ossl_statem_set_in_handshake(s, 0);
0f113f3e 4492 } else
555cbb32 4493 s->s3.in_read_app_data = 0;
0f113f3e 4494
eda75751 4495 return ret;
0f113f3e 4496}
d02b48c6 4497
54105ddd 4498int ssl3_read(SSL *s, void *buf, size_t len, size_t *readbytes)
0f113f3e 4499{
54105ddd 4500 return ssl3_read_internal(s, buf, len, 0, readbytes);
0f113f3e 4501}
d02b48c6 4502
54105ddd 4503int ssl3_peek(SSL *s, void *buf, size_t len, size_t *readbytes)
0f113f3e 4504{
54105ddd 4505 return ssl3_read_internal(s, buf, len, 1, readbytes);
0f113f3e 4506}
d02b48c6 4507
6b691a5c 4508int ssl3_renegotiate(SSL *s)
0f113f3e
MC
4509{
4510 if (s->handshake_func == NULL)
208fb891 4511 return 1;
d02b48c6 4512
555cbb32 4513 s->s3.renegotiate = 1;
208fb891 4514 return 1;
0f113f3e 4515}
d02b48c6 4516
c7f47786
MC
4517/*
4518 * Check if we are waiting to do a renegotiation and if so whether now is a
4519 * good time to do it. If |initok| is true then we are being called from inside
4520 * the state machine so ignore the result of SSL_in_init(s). Otherwise we
4521 * should not do a renegotiation if SSL_in_init(s) is true. Returns 1 if we
4522 * should do a renegotiation now and sets up the state machine for it. Otherwise
4523 * returns 0.
4524 */
4525int ssl3_renegotiate_check(SSL *s, int initok)
0f113f3e
MC
4526{
4527 int ret = 0;
4528
555cbb32 4529 if (s->s3.renegotiate) {
f161995e
MC
4530 if (!RECORD_LAYER_read_pending(&s->rlayer)
4531 && !RECORD_LAYER_write_pending(&s->rlayer)
c7f47786 4532 && (initok || !SSL_in_init(s))) {
0f113f3e
MC
4533 /*
4534 * if we are the server, and we have sent a 'RENEGOTIATE'
49ae7423
MC
4535 * message, we need to set the state machine into the renegotiate
4536 * state.
0f113f3e 4537 */
fe3a3291 4538 ossl_statem_set_renegotiate(s);
555cbb32
TS
4539 s->s3.renegotiate = 0;
4540 s->s3.num_renegotiations++;
4541 s->s3.total_renegotiations++;
0f113f3e
MC
4542 ret = 1;
4543 }
4544 }
c7f47786 4545 return ret;
0f113f3e
MC
4546}
4547
58964a49 4548/*
0f113f3e
MC
4549 * If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF and
4550 * handshake macs if required.
12053a81
DSH
4551 *
4552 * If PSK and using SHA384 for TLS < 1.2 switch to default.
7409d7ad
DSH
4553 */
4554long ssl_get_algorithm2(SSL *s)
0f113f3e 4555{
52eede5a 4556 long alg2;
555cbb32 4557 if (s->s3.tmp.new_cipher == NULL)
52eede5a 4558 return -1;
555cbb32 4559 alg2 = s->s3.tmp.new_cipher->algorithm2;
12053a81
DSH
4560 if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF) {
4561 if (alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF))
4562 return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
555cbb32 4563 } else if (s->s3.tmp.new_cipher->algorithm_mkey & SSL_PSK) {
12053a81
DSH
4564 if (alg2 == (SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384))
4565 return SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF;
4566 }
0f113f3e
MC
4567 return alg2;
4568}
a3680c8f
MC
4569
4570/*
4571 * Fill a ClientRandom or ServerRandom field of length len. Returns <= 0 on
4572 * failure, 1 on success.
4573 */
f7f2a01d
MC
4574int ssl_fill_hello_random(SSL *s, int server, unsigned char *result, size_t len,
4575 DOWNGRADE dgrd)
a3680c8f 4576{
f7f2a01d 4577 int send_time = 0, ret;
a3680c8f
MC
4578
4579 if (len < 4)
4580 return 0;
4581 if (server)
4582 send_time = (s->mode & SSL_MODE_SEND_SERVERHELLO_TIME) != 0;
4583 else
4584 send_time = (s->mode & SSL_MODE_SEND_CLIENTHELLO_TIME) != 0;
4585 if (send_time) {
4586 unsigned long Time = (unsigned long)time(NULL);
4587 unsigned char *p = result;
ae3947de 4588
a3680c8f 4589 l2n(Time, p);
8f21260b 4590 ret = RAND_bytes_ex(s->ctx->libctx, p, len - 4);
f7f2a01d 4591 } else {
8f21260b 4592 ret = RAND_bytes_ex(s->ctx->libctx, result, len);
f7f2a01d 4593 }
9f22c527 4594
16cfc2c9 4595 if (ret > 0) {
b77f3ed1
MC
4596 if (!ossl_assert(sizeof(tls11downgrade) < len)
4597 || !ossl_assert(sizeof(tls12downgrade) < len))
4598 return 0;
f7f2a01d
MC
4599 if (dgrd == DOWNGRADE_TO_1_2)
4600 memcpy(result + len - sizeof(tls12downgrade), tls12downgrade,
4601 sizeof(tls12downgrade));
4602 else if (dgrd == DOWNGRADE_TO_1_1)
4603 memcpy(result + len - sizeof(tls11downgrade), tls11downgrade,
4604 sizeof(tls11downgrade));
4605 }
9f22c527 4606
f7f2a01d 4607 return ret;
a3680c8f 4608}
57b272b0
DSH
4609
4610int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
4611 int free_pms)
4612{
555cbb32 4613 unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
8c1a5343
MC
4614 int ret = 0;
4615
8a0a12e5 4616 if (alg_k & SSL_PSK) {
0907d710 4617#ifndef OPENSSL_NO_PSK
8a0a12e5 4618 unsigned char *pskpms, *t;
555cbb32 4619 size_t psklen = s->s3.tmp.psklen;
8a0a12e5
DSH
4620 size_t pskpmslen;
4621
4622 /* create PSK premaster_secret */
4623
4624 /* For plain PSK "other_secret" is psklen zeroes */
4625 if (alg_k & SSL_kPSK)
4626 pmslen = psklen;
4627
4628 pskpmslen = 4 + pmslen + psklen;
4629 pskpms = OPENSSL_malloc(pskpmslen);
8c1a5343 4630 if (pskpms == NULL)
a784665e 4631 goto err;
8a0a12e5
DSH
4632 t = pskpms;
4633 s2n(pmslen, t);
4634 if (alg_k & SSL_kPSK)
4635 memset(t, 0, pmslen);
4636 else
4637 memcpy(t, pms, pmslen);
4638 t += pmslen;
4639 s2n(psklen, t);
555cbb32 4640 memcpy(t, s->s3.tmp.psk, psklen);
8a0a12e5 4641
555cbb32
TS
4642 OPENSSL_clear_free(s->s3.tmp.psk, psklen);
4643 s->s3.tmp.psk = NULL;
8c1a5343
MC
4644 if (!s->method->ssl3_enc->generate_master_secret(s,
4645 s->session->master_key,pskpms, pskpmslen,
f63a17d6 4646 &s->session->master_key_length)) {
c2cb1a18 4647 OPENSSL_clear_free(pskpms, pskpmslen);
f63a17d6 4648 /* SSLfatal() already called */
8c1a5343 4649 goto err;
f63a17d6 4650 }
8a0a12e5 4651 OPENSSL_clear_free(pskpms, pskpmslen);
0907d710
MC
4652#else
4653 /* Should never happen */
0907d710 4654 goto err;
8a0a12e5 4655#endif
0907d710 4656 } else {
8c1a5343
MC
4657 if (!s->method->ssl3_enc->generate_master_secret(s,
4658 s->session->master_key, pms, pmslen,
f63a17d6
MC
4659 &s->session->master_key_length)) {
4660 /* SSLfatal() already called */
8c1a5343 4661 goto err;
f63a17d6 4662 }
0907d710
MC
4663 }
4664
8c1a5343 4665 ret = 1;
0907d710 4666 err:
8a0a12e5
DSH
4667 if (pms) {
4668 if (free_pms)
4669 OPENSSL_clear_free(pms, pmslen);
4670 else
4671 OPENSSL_cleanse(pms, pmslen);
4672 }
57b272b0 4673 if (s->server == 0)
555cbb32 4674 s->s3.tmp.pms = NULL;
8c1a5343 4675 return ret;
57b272b0 4676}
3f3504bd 4677
0a699a07 4678/* Generate a private key from parameters */
0f00ed77 4679EVP_PKEY *ssl_generate_pkey(SSL *s, EVP_PKEY *pm)
3f3504bd
DSH
4680{
4681 EVP_PKEY_CTX *pctx = NULL;
4682 EVP_PKEY *pkey = NULL;
0a699a07
DSH
4683
4684 if (pm == NULL)
4685 return NULL;
0f00ed77 4686 pctx = EVP_PKEY_CTX_new_from_pkey(s->ctx->libctx, pm, s->ctx->propq);
0a699a07
DSH
4687 if (pctx == NULL)
4688 goto err;
4689 if (EVP_PKEY_keygen_init(pctx) <= 0)
4690 goto err;
4691 if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
4692 EVP_PKEY_free(pkey);
4693 pkey = NULL;
4694 }
4695
4696 err:
4697 EVP_PKEY_CTX_free(pctx);
4698 return pkey;
4699}
9aaecbfc 4700
43b95d73 4701/* Generate a private key from a group ID */
65dc5c3c 4702#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
f63a17d6 4703EVP_PKEY *ssl_generate_pkey_group(SSL *s, uint16_t id)
0a699a07 4704{
9aaecbfc 4705 const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
0a699a07
DSH
4706 EVP_PKEY_CTX *pctx = NULL;
4707 EVP_PKEY *pkey = NULL;
43b95d73 4708 uint16_t gtype;
9aaecbfc 4709# ifndef OPENSSL_NO_DH
4710 DH *dh = NULL;
4711# endif
0a699a07 4712
f63a17d6
MC
4713 if (ginf == NULL) {
4714 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
4715 ERR_R_INTERNAL_ERROR);
0a699a07 4716 goto err;
f63a17d6 4717 }
9aaecbfc 4718 gtype = ginf->flags & TLS_GROUP_TYPE;
0f00ed77
MC
4719 /*
4720 * TODO(3.0): Convert these EVP_PKEY_CTX_new_id calls to ones that take
4721 * s->ctx->libctx and s->ctx->propq when keygen has been updated to be
4722 * provider aware.
4723 */
9aaecbfc 4724# ifndef OPENSSL_NO_DH
4725 if (gtype == TLS_GROUP_FFDHE)
4726 pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DH, NULL);
4727# ifndef OPENSSL_NO_EC
43b95d73 4728 else
9aaecbfc 4729# endif
4730# endif
4731# ifndef OPENSSL_NO_EC
4732 {
4733 if (gtype == TLS_GROUP_CURVE_CUSTOM)
4734 pctx = EVP_PKEY_CTX_new_id(ginf->nid, NULL);
4735 else
4736 pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
4737 }
4738# endif
f63a17d6
MC
4739 if (pctx == NULL) {
4740 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
4741 ERR_R_MALLOC_FAILURE);
3f3504bd 4742 goto err;
f63a17d6
MC
4743 }
4744 if (EVP_PKEY_keygen_init(pctx) <= 0) {
4745 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
4746 ERR_R_EVP_LIB);
3f3504bd 4747 goto err;
f63a17d6 4748 }
9aaecbfc 4749# ifndef OPENSSL_NO_DH
4750 if (gtype == TLS_GROUP_FFDHE) {
4751 if ((pkey = EVP_PKEY_new()) == NULL
4752 || (dh = DH_new_by_nid(ginf->nid)) == NULL
4753 || !EVP_PKEY_assign(pkey, EVP_PKEY_DH, dh)) {
4754 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
ada66e78 4755 ERR_R_EVP_LIB);
9aaecbfc 4756 DH_free(dh);
4757 EVP_PKEY_free(pkey);
4758 pkey = NULL;
4759 goto err;
4760 }
4761 if (EVP_PKEY_CTX_set_dh_nid(pctx, ginf->nid) <= 0) {
4762 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
ada66e78 4763 ERR_R_EVP_LIB);
9aaecbfc 4764 EVP_PKEY_free(pkey);
4765 pkey = NULL;
4766 goto err;
4767 }
4768 }
4769# ifndef OPENSSL_NO_EC
4770 else
4771# endif
4772# endif
4773# ifndef OPENSSL_NO_EC
4774 {
4775 if (gtype != TLS_GROUP_CURVE_CUSTOM
4776 && EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, ginf->nid) <= 0) {
4777 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
4778 ERR_R_EVP_LIB);
4779 goto err;
4780 }
f63a17d6 4781 }
9aaecbfc 4782# endif
3f3504bd 4783 if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
f63a17d6
MC
4784 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
4785 ERR_R_EVP_LIB);
3f3504bd
DSH
4786 EVP_PKEY_free(pkey);
4787 pkey = NULL;
4788 }
4789
a230b26e 4790 err:
3f3504bd
DSH
4791 EVP_PKEY_CTX_free(pctx);
4792 return pkey;
4793}
65dc5c3c 4794#endif
612f9d22
DSH
4795
4796/*
4797 * Generate parameters from a group ID
4798 */
ada66e78 4799EVP_PKEY *ssl_generate_param_group(SSL *s, uint16_t id)
612f9d22
DSH
4800{
4801 EVP_PKEY_CTX *pctx = NULL;
4802 EVP_PKEY *pkey = NULL;
4803 const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
9aaecbfc 4804 int pkey_ctx_id;
612f9d22
DSH
4805
4806 if (ginf == NULL)
4807 goto err;
4808
9aaecbfc 4809 if ((ginf->flags & TLS_GROUP_TYPE) == TLS_GROUP_CURVE_CUSTOM) {
612f9d22
DSH
4810 pkey = EVP_PKEY_new();
4811 if (pkey != NULL && EVP_PKEY_set_type(pkey, ginf->nid))
4812 return pkey;
4813 EVP_PKEY_free(pkey);
4814 return NULL;
4815 }
4816
0f00ed77
MC
4817 /*
4818 * TODO(3.0): Convert this EVP_PKEY_CTX_new_id call to one that takes
4819 * s->ctx->libctx and s->ctx->propq when paramgen has been updated to be
4820 * provider aware.
4821 */
9aaecbfc 4822 pkey_ctx_id = (ginf->flags & TLS_GROUP_FFDHE)
4823 ? EVP_PKEY_DH : EVP_PKEY_EC;
4824 pctx = EVP_PKEY_CTX_new_id(pkey_ctx_id, NULL);
612f9d22
DSH
4825 if (pctx == NULL)
4826 goto err;
4827 if (EVP_PKEY_paramgen_init(pctx) <= 0)
4828 goto err;
6597d62b 4829# ifndef OPENSSL_NO_DH
9aaecbfc 4830 if (ginf->flags & TLS_GROUP_FFDHE) {
4831 if (EVP_PKEY_CTX_set_dh_nid(pctx, ginf->nid) <= 0)
4832 goto err;
4833 }
4834# ifndef OPENSSL_NO_EC
4835 else
4836# endif
4837# endif
4838# ifndef OPENSSL_NO_EC
4839 {
4840 if (EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, ginf->nid) <= 0)
4841 goto err;
4842 }
4843# endif
612f9d22
DSH
4844 if (EVP_PKEY_paramgen(pctx, &pkey) <= 0) {
4845 EVP_PKEY_free(pkey);
4846 pkey = NULL;
4847 }
4848
4849 err:
4850 EVP_PKEY_CTX_free(pctx);
4851 return pkey;
4852}
a230b26e 4853
92760c21
MC
4854/* Derive secrets for ECDH/DH */
4855int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey, int gensecret)
3f3504bd
DSH
4856{
4857 int rv = 0;
4858 unsigned char *pms = NULL;
4859 size_t pmslen = 0;
4860 EVP_PKEY_CTX *pctx;
4861
f63a17d6
MC
4862 if (privkey == NULL || pubkey == NULL) {
4863 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
4864 ERR_R_INTERNAL_ERROR);
3f3504bd 4865 return 0;
f63a17d6 4866 }
3f3504bd 4867
0f00ed77 4868 pctx = EVP_PKEY_CTX_new_from_pkey(s->ctx->libctx, privkey, s->ctx->propq);
3f3504bd
DSH
4869
4870 if (EVP_PKEY_derive_init(pctx) <= 0
4871 || EVP_PKEY_derive_set_peer(pctx, pubkey) <= 0
4872 || EVP_PKEY_derive(pctx, NULL, &pmslen) <= 0) {
f63a17d6
MC
4873 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
4874 ERR_R_INTERNAL_ERROR);
3f3504bd
DSH
4875 goto err;
4876 }
4877
6597d62b 4878#ifndef OPENSSL_NO_DH
9aaecbfc 4879 if (SSL_IS_TLS13(s) && EVP_PKEY_id(privkey) == EVP_PKEY_DH)
4880 EVP_PKEY_CTX_set_dh_pad(pctx, 1);
6597d62b 4881#endif
9aaecbfc 4882
3f3504bd 4883 pms = OPENSSL_malloc(pmslen);
f63a17d6
MC
4884 if (pms == NULL) {
4885 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
4886 ERR_R_MALLOC_FAILURE);
3f3504bd 4887 goto err;
f63a17d6 4888 }
3f3504bd 4889
f63a17d6
MC
4890 if (EVP_PKEY_derive(pctx, pms, &pmslen) <= 0) {
4891 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
4892 ERR_R_INTERNAL_ERROR);
3f3504bd 4893 goto err;
f63a17d6 4894 }
3f3504bd 4895
92760c21 4896 if (gensecret) {
f63a17d6 4897 /* SSLfatal() called as appropriate in the below functions */
92760c21
MC
4898 if (SSL_IS_TLS13(s)) {
4899 /*
ec15acb6
MC
4900 * If we are resuming then we already generated the early secret
4901 * when we created the ClientHello, so don't recreate it.
92760c21 4902 */
ec15acb6
MC
4903 if (!s->hit)
4904 rv = tls13_generate_secret(s, ssl_handshake_md(s), NULL, NULL,
4905 0,
4906 (unsigned char *)&s->early_secret);
0247086d
MC
4907 else
4908 rv = 1;
4909
ec15acb6 4910 rv = rv && tls13_generate_handshake_secret(s, pms, pmslen);
92760c21 4911 } else {
c8ab3a46 4912 rv = ssl_generate_master_secret(s, pms, pmslen, 0);
92760c21 4913 }
3f3504bd 4914 } else {
0f1e51ea 4915 /* Save premaster secret */
555cbb32
TS
4916 s->s3.tmp.pms = pms;
4917 s->s3.tmp.pmslen = pmslen;
3f3504bd
DSH
4918 pms = NULL;
4919 rv = 1;
4920 }
4921
a230b26e 4922 err:
3f3504bd
DSH
4923 OPENSSL_clear_free(pms, pmslen);
4924 EVP_PKEY_CTX_free(pctx);
4925 return rv;
4926}
6c4e6670 4927
1e0784ff 4928#ifndef OPENSSL_NO_DH
6c4e6670
DSH
4929EVP_PKEY *ssl_dh_to_pkey(DH *dh)
4930{
4931 EVP_PKEY *ret;
4932 if (dh == NULL)
4933 return NULL;
4934 ret = EVP_PKEY_new();
4935 if (EVP_PKEY_set1_DH(ret, dh) <= 0) {
4936 EVP_PKEY_free(ret);
4937 return NULL;
4938 }
4939 return ret;
4940}
1e0784ff 4941#endif