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