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