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