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