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