blob: 328bff97454311ea40d10f576fd547b8ea6d1f16 [file] [log] [blame]
Adam Langley95c29f32014-06-20 12:00:00 -07001/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
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.
7 *
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).
14 *
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.
21 *
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 :-).
36 * 4. If you include any Windows specific code (or a derivative thereof) from
37 * the apps directory (application code) you must include an acknowledgement:
38 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39 *
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.
51 *
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 */
57/* ====================================================================
58 * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
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
65 * notice, this list of conditions and the following disclaimer.
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 */
110/* ====================================================================
111 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
112 *
113 * Portions of the attached software ("Contribution") are developed by
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 *
119 * ECC cipher suite support in OpenSSL originally written by
120 * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
121 *
122 */
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
149#include <stdio.h>
150
151#include <openssl/dh.h>
152#include <openssl/md5.h>
153#include <openssl/mem.h>
154#include <openssl/obj.h>
155
156#include "ssl_locl.h"
157
158#define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
159
Adam Langleyd8983ce2014-06-20 12:00:00 -0700160/* FIXED_NONCE_LEN is a macro that results in the correct value to set the
161 * fixed nonce length in SSL_CIPHER.algorithms2. It's the inverse of
162 * SSL_CIPHER_AEAD_FIXED_NONCE_LEN. */
163#define FIXED_NONCE_LEN(x) ((x/2)<<24)
164
Adam Langley95c29f32014-06-20 12:00:00 -0700165/* list of available SSLv3 ciphers (sorted by id) */
166SSL_CIPHER ssl3_ciphers[]={
167
168/* The RSA ciphers */
169/* Cipher 01 */
170 {
171 1,
172 SSL3_TXT_RSA_NULL_MD5,
173 SSL3_CK_RSA_NULL_MD5,
174 SSL_kRSA,
175 SSL_aRSA,
176 SSL_eNULL,
177 SSL_MD5,
178 SSL_SSLV3,
179 SSL_NOT_EXP|SSL_STRONG_NONE,
180 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
181 0,
182 0,
183 },
184
185/* Cipher 02 */
186 {
187 1,
188 SSL3_TXT_RSA_NULL_SHA,
189 SSL3_CK_RSA_NULL_SHA,
190 SSL_kRSA,
191 SSL_aRSA,
192 SSL_eNULL,
193 SSL_SHA1,
194 SSL_SSLV3,
195 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
196 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
197 0,
198 0,
199 },
200
201/* Cipher 03 */
202 {
203 1,
204 SSL3_TXT_RSA_RC4_40_MD5,
205 SSL3_CK_RSA_RC4_40_MD5,
206 SSL_kRSA,
207 SSL_aRSA,
208 SSL_RC4,
209 SSL_MD5,
210 SSL_SSLV3,
211 SSL_EXPORT|SSL_EXP40,
212 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
213 40,
214 128,
215 },
216
217/* Cipher 04 */
218 {
219 1,
220 SSL3_TXT_RSA_RC4_128_MD5,
221 SSL3_CK_RSA_RC4_128_MD5,
222 SSL_kRSA,
223 SSL_aRSA,
224 SSL_RC4,
225 SSL_MD5,
226 SSL_SSLV3,
227 SSL_NOT_EXP|SSL_MEDIUM,
228 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
229 128,
230 128,
231 },
232
233/* Cipher 05 */
234 {
235 1,
236 SSL3_TXT_RSA_RC4_128_SHA,
237 SSL3_CK_RSA_RC4_128_SHA,
238 SSL_kRSA,
239 SSL_aRSA,
240 SSL_RC4,
241 SSL_SHA1,
242 SSL_SSLV3,
243 SSL_NOT_EXP|SSL_MEDIUM,
244 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
245 128,
246 128,
247 },
248
249/* Cipher 06 */
250 {
251 1,
252 SSL3_TXT_RSA_RC2_40_MD5,
253 SSL3_CK_RSA_RC2_40_MD5,
254 SSL_kRSA,
255 SSL_aRSA,
256 SSL_RC2,
257 SSL_MD5,
258 SSL_SSLV3,
259 SSL_EXPORT|SSL_EXP40,
260 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
261 40,
262 128,
263 },
264
265/* Cipher 07 */
266#ifndef OPENSSL_NO_IDEA
267 {
268 1,
269 SSL3_TXT_RSA_IDEA_128_SHA,
270 SSL3_CK_RSA_IDEA_128_SHA,
271 SSL_kRSA,
272 SSL_aRSA,
273 SSL_IDEA,
274 SSL_SHA1,
275 SSL_SSLV3,
276 SSL_NOT_EXP|SSL_MEDIUM,
277 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
278 128,
279 128,
280 },
281#endif
282
283/* Cipher 08 */
284 {
285 1,
286 SSL3_TXT_RSA_DES_40_CBC_SHA,
287 SSL3_CK_RSA_DES_40_CBC_SHA,
288 SSL_kRSA,
289 SSL_aRSA,
290 SSL_DES,
291 SSL_SHA1,
292 SSL_SSLV3,
293 SSL_EXPORT|SSL_EXP40,
294 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
295 40,
296 56,
297 },
298
299/* Cipher 09 */
300 {
301 1,
302 SSL3_TXT_RSA_DES_64_CBC_SHA,
303 SSL3_CK_RSA_DES_64_CBC_SHA,
304 SSL_kRSA,
305 SSL_aRSA,
306 SSL_DES,
307 SSL_SHA1,
308 SSL_SSLV3,
309 SSL_NOT_EXP|SSL_LOW,
310 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
311 56,
312 56,
313 },
314
315/* Cipher 0A */
316 {
317 1,
318 SSL3_TXT_RSA_DES_192_CBC3_SHA,
319 SSL3_CK_RSA_DES_192_CBC3_SHA,
320 SSL_kRSA,
321 SSL_aRSA,
322 SSL_3DES,
323 SSL_SHA1,
324 SSL_SSLV3,
325 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
326 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
327 168,
328 168,
329 },
330
331/* The DH ciphers */
332/* Cipher 0B */
333 {
334 1,
335 SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
336 SSL3_CK_DH_DSS_DES_40_CBC_SHA,
337 SSL_kDHd,
338 SSL_aDH,
339 SSL_DES,
340 SSL_SHA1,
341 SSL_SSLV3,
342 SSL_EXPORT|SSL_EXP40,
343 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
344 40,
345 56,
346 },
347
348/* Cipher 0C */
349 {
350 1,
351 SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
352 SSL3_CK_DH_DSS_DES_64_CBC_SHA,
353 SSL_kDHd,
354 SSL_aDH,
355 SSL_DES,
356 SSL_SHA1,
357 SSL_SSLV3,
358 SSL_NOT_EXP|SSL_LOW,
359 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
360 56,
361 56,
362 },
363
364/* Cipher 0D */
365 {
366 1,
367 SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
368 SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
369 SSL_kDHd,
370 SSL_aDH,
371 SSL_3DES,
372 SSL_SHA1,
373 SSL_SSLV3,
374 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
375 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
376 168,
377 168,
378 },
379
380/* Cipher 0E */
381 {
382 1,
383 SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
384 SSL3_CK_DH_RSA_DES_40_CBC_SHA,
385 SSL_kDHr,
386 SSL_aDH,
387 SSL_DES,
388 SSL_SHA1,
389 SSL_SSLV3,
390 SSL_EXPORT|SSL_EXP40,
391 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
392 40,
393 56,
394 },
395
396/* Cipher 0F */
397 {
398 1,
399 SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
400 SSL3_CK_DH_RSA_DES_64_CBC_SHA,
401 SSL_kDHr,
402 SSL_aDH,
403 SSL_DES,
404 SSL_SHA1,
405 SSL_SSLV3,
406 SSL_NOT_EXP|SSL_LOW,
407 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
408 56,
409 56,
410 },
411
412/* Cipher 10 */
413 {
414 1,
415 SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
416 SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
417 SSL_kDHr,
418 SSL_aDH,
419 SSL_3DES,
420 SSL_SHA1,
421 SSL_SSLV3,
422 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
423 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
424 168,
425 168,
426 },
427
428/* The Ephemeral DH ciphers */
429/* Cipher 11 */
430 {
431 1,
432 SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
433 SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
434 SSL_kEDH,
435 SSL_aDSS,
436 SSL_DES,
437 SSL_SHA1,
438 SSL_SSLV3,
439 SSL_EXPORT|SSL_EXP40,
440 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
441 40,
442 56,
443 },
444
445/* Cipher 12 */
446 {
447 1,
448 SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
449 SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
450 SSL_kEDH,
451 SSL_aDSS,
452 SSL_DES,
453 SSL_SHA1,
454 SSL_SSLV3,
455 SSL_NOT_EXP|SSL_LOW,
456 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
457 56,
458 56,
459 },
460
461/* Cipher 13 */
462 {
463 1,
464 SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
465 SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
466 SSL_kEDH,
467 SSL_aDSS,
468 SSL_3DES,
469 SSL_SHA1,
470 SSL_SSLV3,
471 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
472 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
473 168,
474 168,
475 },
476
477/* Cipher 14 */
478 {
479 1,
480 SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
481 SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
482 SSL_kEDH,
483 SSL_aRSA,
484 SSL_DES,
485 SSL_SHA1,
486 SSL_SSLV3,
487 SSL_EXPORT|SSL_EXP40,
488 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
489 40,
490 56,
491 },
492
493/* Cipher 15 */
494 {
495 1,
496 SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
497 SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
498 SSL_kEDH,
499 SSL_aRSA,
500 SSL_DES,
501 SSL_SHA1,
502 SSL_SSLV3,
503 SSL_NOT_EXP|SSL_LOW,
504 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
505 56,
506 56,
507 },
508
509/* Cipher 16 */
510 {
511 1,
512 SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
513 SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
514 SSL_kEDH,
515 SSL_aRSA,
516 SSL_3DES,
517 SSL_SHA1,
518 SSL_SSLV3,
519 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
520 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
521 168,
522 168,
523 },
524
525/* Cipher 17 */
526 {
527 1,
528 SSL3_TXT_ADH_RC4_40_MD5,
529 SSL3_CK_ADH_RC4_40_MD5,
530 SSL_kEDH,
531 SSL_aNULL,
532 SSL_RC4,
533 SSL_MD5,
534 SSL_SSLV3,
535 SSL_EXPORT|SSL_EXP40,
536 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
537 40,
538 128,
539 },
540
541/* Cipher 18 */
542 {
543 1,
544 SSL3_TXT_ADH_RC4_128_MD5,
545 SSL3_CK_ADH_RC4_128_MD5,
546 SSL_kEDH,
547 SSL_aNULL,
548 SSL_RC4,
549 SSL_MD5,
550 SSL_SSLV3,
551 SSL_NOT_EXP|SSL_MEDIUM,
552 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
553 128,
554 128,
555 },
556
557/* Cipher 19 */
558 {
559 1,
560 SSL3_TXT_ADH_DES_40_CBC_SHA,
561 SSL3_CK_ADH_DES_40_CBC_SHA,
562 SSL_kEDH,
563 SSL_aNULL,
564 SSL_DES,
565 SSL_SHA1,
566 SSL_SSLV3,
567 SSL_EXPORT|SSL_EXP40,
568 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
569 40,
570 128,
571 },
572
573/* Cipher 1A */
574 {
575 1,
576 SSL3_TXT_ADH_DES_64_CBC_SHA,
577 SSL3_CK_ADH_DES_64_CBC_SHA,
578 SSL_kEDH,
579 SSL_aNULL,
580 SSL_DES,
581 SSL_SHA1,
582 SSL_SSLV3,
583 SSL_NOT_EXP|SSL_LOW,
584 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
585 56,
586 56,
587 },
588
589/* Cipher 1B */
590 {
591 1,
592 SSL3_TXT_ADH_DES_192_CBC_SHA,
593 SSL3_CK_ADH_DES_192_CBC_SHA,
594 SSL_kEDH,
595 SSL_aNULL,
596 SSL_3DES,
597 SSL_SHA1,
598 SSL_SSLV3,
599 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
600 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
601 168,
602 168,
603 },
604
605/* Fortezza ciphersuite from SSL 3.0 spec */
606#if 0
607/* Cipher 1C */
608 {
609 0,
610 SSL3_TXT_FZA_DMS_NULL_SHA,
611 SSL3_CK_FZA_DMS_NULL_SHA,
612 SSL_kFZA,
613 SSL_aFZA,
614 SSL_eNULL,
615 SSL_SHA1,
616 SSL_SSLV3,
617 SSL_NOT_EXP|SSL_STRONG_NONE,
618 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
619 0,
620 0,
621 },
622
623/* Cipher 1D */
624 {
625 0,
626 SSL3_TXT_FZA_DMS_FZA_SHA,
627 SSL3_CK_FZA_DMS_FZA_SHA,
628 SSL_kFZA,
629 SSL_aFZA,
630 SSL_eFZA,
631 SSL_SHA1,
632 SSL_SSLV3,
633 SSL_NOT_EXP|SSL_STRONG_NONE,
634 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
635 0,
636 0,
637 },
638
639/* Cipher 1E */
640 {
641 0,
642 SSL3_TXT_FZA_DMS_RC4_SHA,
643 SSL3_CK_FZA_DMS_RC4_SHA,
644 SSL_kFZA,
645 SSL_aFZA,
646 SSL_RC4,
647 SSL_SHA1,
648 SSL_SSLV3,
649 SSL_NOT_EXP|SSL_MEDIUM,
650 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
651 128,
652 128,
653 },
654#endif
655
656/* New AES ciphersuites */
657/* Cipher 2F */
658 {
659 1,
660 TLS1_TXT_RSA_WITH_AES_128_SHA,
661 TLS1_CK_RSA_WITH_AES_128_SHA,
662 SSL_kRSA,
663 SSL_aRSA,
664 SSL_AES128,
665 SSL_SHA1,
666 SSL_TLSV1,
667 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
668 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
669 128,
670 128,
671 },
672/* Cipher 30 */
673 {
674 1,
675 TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
676 TLS1_CK_DH_DSS_WITH_AES_128_SHA,
677 SSL_kDHd,
678 SSL_aDH,
679 SSL_AES128,
680 SSL_SHA1,
681 SSL_TLSV1,
682 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
683 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
684 128,
685 128,
686 },
687/* Cipher 31 */
688 {
689 1,
690 TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
691 TLS1_CK_DH_RSA_WITH_AES_128_SHA,
692 SSL_kDHr,
693 SSL_aDH,
694 SSL_AES128,
695 SSL_SHA1,
696 SSL_TLSV1,
697 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
698 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
699 128,
700 128,
701 },
702/* Cipher 32 */
703 {
704 1,
705 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
706 TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
707 SSL_kEDH,
708 SSL_aDSS,
709 SSL_AES128,
710 SSL_SHA1,
711 SSL_TLSV1,
712 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
713 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
714 128,
715 128,
716 },
717/* Cipher 33 */
718 {
719 1,
720 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
721 TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
722 SSL_kEDH,
723 SSL_aRSA,
724 SSL_AES128,
725 SSL_SHA1,
726 SSL_TLSV1,
727 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
728 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
729 128,
730 128,
731 },
732/* Cipher 34 */
733 {
734 1,
735 TLS1_TXT_ADH_WITH_AES_128_SHA,
736 TLS1_CK_ADH_WITH_AES_128_SHA,
737 SSL_kEDH,
738 SSL_aNULL,
739 SSL_AES128,
740 SSL_SHA1,
741 SSL_TLSV1,
742 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
743 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
744 128,
745 128,
746 },
747
748/* Cipher 35 */
749 {
750 1,
751 TLS1_TXT_RSA_WITH_AES_256_SHA,
752 TLS1_CK_RSA_WITH_AES_256_SHA,
753 SSL_kRSA,
754 SSL_aRSA,
755 SSL_AES256,
756 SSL_SHA1,
757 SSL_TLSV1,
758 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
759 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
760 256,
761 256,
762 },
763/* Cipher 36 */
764 {
765 1,
766 TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
767 TLS1_CK_DH_DSS_WITH_AES_256_SHA,
768 SSL_kDHd,
769 SSL_aDH,
770 SSL_AES256,
771 SSL_SHA1,
772 SSL_TLSV1,
773 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
774 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
775 256,
776 256,
777 },
778
779/* Cipher 37 */
780 {
781 1,
782 TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
783 TLS1_CK_DH_RSA_WITH_AES_256_SHA,
784 SSL_kDHr,
785 SSL_aDH,
786 SSL_AES256,
787 SSL_SHA1,
788 SSL_TLSV1,
789 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
790 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
791 256,
792 256,
793 },
794
795/* Cipher 38 */
796 {
797 1,
798 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
799 TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
800 SSL_kEDH,
801 SSL_aDSS,
802 SSL_AES256,
803 SSL_SHA1,
804 SSL_TLSV1,
805 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
806 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
807 256,
808 256,
809 },
810
811/* Cipher 39 */
812 {
813 1,
814 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
815 TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
816 SSL_kEDH,
817 SSL_aRSA,
818 SSL_AES256,
819 SSL_SHA1,
820 SSL_TLSV1,
821 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
822 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
823 256,
824 256,
825 },
826
827 /* Cipher 3A */
828 {
829 1,
830 TLS1_TXT_ADH_WITH_AES_256_SHA,
831 TLS1_CK_ADH_WITH_AES_256_SHA,
832 SSL_kEDH,
833 SSL_aNULL,
834 SSL_AES256,
835 SSL_SHA1,
836 SSL_TLSV1,
837 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
838 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
839 256,
840 256,
841 },
842
843 /* TLS v1.2 ciphersuites */
844 /* Cipher 3B */
845 {
846 1,
847 TLS1_TXT_RSA_WITH_NULL_SHA256,
848 TLS1_CK_RSA_WITH_NULL_SHA256,
849 SSL_kRSA,
850 SSL_aRSA,
851 SSL_eNULL,
852 SSL_SHA256,
853 SSL_TLSV1_2,
854 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
855 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
856 0,
857 0,
858 },
859
860 /* Cipher 3C */
861 {
862 1,
863 TLS1_TXT_RSA_WITH_AES_128_SHA256,
864 TLS1_CK_RSA_WITH_AES_128_SHA256,
865 SSL_kRSA,
866 SSL_aRSA,
867 SSL_AES128,
868 SSL_SHA256,
869 SSL_TLSV1_2,
870 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
871 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
872 128,
873 128,
874 },
875
876 /* Cipher 3D */
877 {
878 1,
879 TLS1_TXT_RSA_WITH_AES_256_SHA256,
880 TLS1_CK_RSA_WITH_AES_256_SHA256,
881 SSL_kRSA,
882 SSL_aRSA,
883 SSL_AES256,
884 SSL_SHA256,
885 SSL_TLSV1_2,
886 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
887 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
888 256,
889 256,
890 },
891
892 /* Cipher 3E */
893 {
894 1,
895 TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
896 TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
897 SSL_kDHd,
898 SSL_aDH,
899 SSL_AES128,
900 SSL_SHA256,
901 SSL_TLSV1_2,
902 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
903 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
904 128,
905 128,
906 },
907
908 /* Cipher 3F */
909 {
910 1,
911 TLS1_TXT_DH_RSA_WITH_AES_128_SHA256,
912 TLS1_CK_DH_RSA_WITH_AES_128_SHA256,
913 SSL_kDHr,
914 SSL_aDH,
915 SSL_AES128,
916 SSL_SHA256,
917 SSL_TLSV1_2,
918 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
919 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
920 128,
921 128,
922 },
923
924 /* Cipher 40 */
925 {
926 1,
927 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
928 TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
929 SSL_kEDH,
930 SSL_aDSS,
931 SSL_AES128,
932 SSL_SHA256,
933 SSL_TLSV1_2,
934 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
935 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
936 128,
937 128,
938 },
939
940#ifndef OPENSSL_NO_CAMELLIA
941 /* Camellia ciphersuites from RFC4132 (128-bit portion) */
942
943 /* Cipher 41 */
944 {
945 1,
946 TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
947 TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
948 SSL_kRSA,
949 SSL_aRSA,
950 SSL_CAMELLIA128,
951 SSL_SHA1,
952 SSL_TLSV1,
953 SSL_NOT_EXP|SSL_HIGH,
954 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
955 128,
956 128,
957 },
958
959 /* Cipher 42 */
960 {
961 1,
962 TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
963 TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
964 SSL_kDHd,
965 SSL_aDH,
966 SSL_CAMELLIA128,
967 SSL_SHA1,
968 SSL_TLSV1,
969 SSL_NOT_EXP|SSL_HIGH,
970 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
971 128,
972 128,
973 },
974
975 /* Cipher 43 */
976 {
977 1,
978 TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
979 TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
980 SSL_kDHr,
981 SSL_aDH,
982 SSL_CAMELLIA128,
983 SSL_SHA1,
984 SSL_TLSV1,
985 SSL_NOT_EXP|SSL_HIGH,
986 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
987 128,
988 128,
989 },
990
991 /* Cipher 44 */
992 {
993 1,
994 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
995 TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
996 SSL_kEDH,
997 SSL_aDSS,
998 SSL_CAMELLIA128,
999 SSL_SHA1,
1000 SSL_TLSV1,
1001 SSL_NOT_EXP|SSL_HIGH,
1002 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1003 128,
1004 128,
1005 },
1006
1007 /* Cipher 45 */
1008 {
1009 1,
1010 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1011 TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1012 SSL_kEDH,
1013 SSL_aRSA,
1014 SSL_CAMELLIA128,
1015 SSL_SHA1,
1016 SSL_TLSV1,
1017 SSL_NOT_EXP|SSL_HIGH,
1018 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1019 128,
1020 128,
1021 },
1022
1023 /* Cipher 46 */
1024 {
1025 1,
1026 TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
1027 TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
1028 SSL_kEDH,
1029 SSL_aNULL,
1030 SSL_CAMELLIA128,
1031 SSL_SHA1,
1032 SSL_TLSV1,
1033 SSL_NOT_EXP|SSL_HIGH,
1034 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1035 128,
1036 128,
1037 },
1038#endif /* OPENSSL_NO_CAMELLIA */
1039
1040#if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
1041 /* New TLS Export CipherSuites from expired ID */
1042#if 0
1043 /* Cipher 60 */
1044 {
1045 1,
1046 TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
1047 TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
1048 SSL_kRSA,
1049 SSL_aRSA,
1050 SSL_RC4,
1051 SSL_MD5,
1052 SSL_TLSV1,
1053 SSL_EXPORT|SSL_EXP56,
1054 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1055 56,
1056 128,
1057 },
1058
1059 /* Cipher 61 */
1060 {
1061 1,
1062 TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1063 TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1064 SSL_kRSA,
1065 SSL_aRSA,
1066 SSL_RC2,
1067 SSL_MD5,
1068 SSL_TLSV1,
1069 SSL_EXPORT|SSL_EXP56,
1070 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1071 56,
1072 128,
1073 },
1074#endif
1075
1076 /* Cipher 62 */
1077 {
1078 1,
1079 TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1080 TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1081 SSL_kRSA,
1082 SSL_aRSA,
1083 SSL_DES,
1084 SSL_SHA1,
1085 SSL_TLSV1,
1086 SSL_EXPORT|SSL_EXP56,
1087 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1088 56,
1089 56,
1090 },
1091
1092 /* Cipher 63 */
1093 {
1094 1,
1095 TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1096 TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1097 SSL_kEDH,
1098 SSL_aDSS,
1099 SSL_DES,
1100 SSL_SHA1,
1101 SSL_TLSV1,
1102 SSL_EXPORT|SSL_EXP56,
1103 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1104 56,
1105 56,
1106 },
1107
1108 /* Cipher 64 */
1109 {
1110 1,
1111 TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
1112 TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
1113 SSL_kRSA,
1114 SSL_aRSA,
1115 SSL_RC4,
1116 SSL_SHA1,
1117 SSL_TLSV1,
1118 SSL_EXPORT|SSL_EXP56,
1119 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1120 56,
1121 128,
1122 },
1123
1124 /* Cipher 65 */
1125 {
1126 1,
1127 TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1128 TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1129 SSL_kEDH,
1130 SSL_aDSS,
1131 SSL_RC4,
1132 SSL_SHA1,
1133 SSL_TLSV1,
1134 SSL_EXPORT|SSL_EXP56,
1135 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1136 56,
1137 128,
1138 },
1139
1140 /* Cipher 66 */
1141 {
1142 1,
1143 TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
1144 TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
1145 SSL_kEDH,
1146 SSL_aDSS,
1147 SSL_RC4,
1148 SSL_SHA1,
1149 SSL_TLSV1,
1150 SSL_NOT_EXP|SSL_MEDIUM,
1151 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1152 128,
1153 128,
1154 },
1155#endif
1156
1157 /* TLS v1.2 ciphersuites */
1158 /* Cipher 67 */
1159 {
1160 1,
1161 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
1162 TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
1163 SSL_kEDH,
1164 SSL_aRSA,
1165 SSL_AES128,
1166 SSL_SHA256,
1167 SSL_TLSV1_2,
1168 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1169 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1170 128,
1171 128,
1172 },
1173
1174 /* Cipher 68 */
1175 {
1176 1,
1177 TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
1178 TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
1179 SSL_kDHd,
1180 SSL_aDH,
1181 SSL_AES256,
1182 SSL_SHA256,
1183 SSL_TLSV1_2,
1184 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1185 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1186 256,
1187 256,
1188 },
1189
1190 /* Cipher 69 */
1191 {
1192 1,
1193 TLS1_TXT_DH_RSA_WITH_AES_256_SHA256,
1194 TLS1_CK_DH_RSA_WITH_AES_256_SHA256,
1195 SSL_kDHr,
1196 SSL_aDH,
1197 SSL_AES256,
1198 SSL_SHA256,
1199 SSL_TLSV1_2,
1200 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1201 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1202 256,
1203 256,
1204 },
1205
1206 /* Cipher 6A */
1207 {
1208 1,
1209 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
1210 TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
1211 SSL_kEDH,
1212 SSL_aDSS,
1213 SSL_AES256,
1214 SSL_SHA256,
1215 SSL_TLSV1_2,
1216 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1217 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1218 256,
1219 256,
1220 },
1221
1222 /* Cipher 6B */
1223 {
1224 1,
1225 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
1226 TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
1227 SSL_kEDH,
1228 SSL_aRSA,
1229 SSL_AES256,
1230 SSL_SHA256,
1231 SSL_TLSV1_2,
1232 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1233 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1234 256,
1235 256,
1236 },
1237
1238 /* Cipher 6C */
1239 {
1240 1,
1241 TLS1_TXT_ADH_WITH_AES_128_SHA256,
1242 TLS1_CK_ADH_WITH_AES_128_SHA256,
1243 SSL_kEDH,
1244 SSL_aNULL,
1245 SSL_AES128,
1246 SSL_SHA256,
1247 SSL_TLSV1_2,
1248 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1249 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1250 128,
1251 128,
1252 },
1253
1254 /* Cipher 6D */
1255 {
1256 1,
1257 TLS1_TXT_ADH_WITH_AES_256_SHA256,
1258 TLS1_CK_ADH_WITH_AES_256_SHA256,
1259 SSL_kEDH,
1260 SSL_aNULL,
1261 SSL_AES256,
1262 SSL_SHA256,
1263 SSL_TLSV1_2,
1264 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1265 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1266 256,
1267 256,
1268 },
1269
1270 /* GOST Ciphersuites */
1271
1272 {
1273 1,
1274 "GOST94-GOST89-GOST89",
1275 0x3000080,
1276 SSL_kGOST,
1277 SSL_aGOST94,
1278 SSL_eGOST2814789CNT,
1279 SSL_GOST89MAC,
1280 SSL_TLSV1,
1281 SSL_NOT_EXP|SSL_HIGH,
1282 SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC,
1283 256,
1284 256
1285 },
1286 {
1287 1,
1288 "GOST2001-GOST89-GOST89",
1289 0x3000081,
1290 SSL_kGOST,
1291 SSL_aGOST01,
1292 SSL_eGOST2814789CNT,
1293 SSL_GOST89MAC,
1294 SSL_TLSV1,
1295 SSL_NOT_EXP|SSL_HIGH,
1296 SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC,
1297 256,
1298 256
1299 },
1300 {
1301 1,
1302 "GOST94-NULL-GOST94",
1303 0x3000082,
1304 SSL_kGOST,
1305 SSL_aGOST94,
1306 SSL_eNULL,
1307 SSL_GOST94,
1308 SSL_TLSV1,
1309 SSL_NOT_EXP|SSL_STRONG_NONE,
1310 SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
1311 0,
1312 0
1313 },
1314 {
1315 1,
1316 "GOST2001-NULL-GOST94",
1317 0x3000083,
1318 SSL_kGOST,
1319 SSL_aGOST01,
1320 SSL_eNULL,
1321 SSL_GOST94,
1322 SSL_TLSV1,
1323 SSL_NOT_EXP|SSL_STRONG_NONE,
1324 SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
1325 0,
1326 0
1327 },
1328
1329#ifndef OPENSSL_NO_CAMELLIA
1330 /* Camellia ciphersuites from RFC4132 (256-bit portion) */
1331
1332 /* Cipher 84 */
1333 {
1334 1,
1335 TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
1336 TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
1337 SSL_kRSA,
1338 SSL_aRSA,
1339 SSL_CAMELLIA256,
1340 SSL_SHA1,
1341 SSL_TLSV1,
1342 SSL_NOT_EXP|SSL_HIGH,
1343 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1344 256,
1345 256,
1346 },
1347 /* Cipher 85 */
1348 {
1349 1,
1350 TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1351 TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1352 SSL_kDHd,
1353 SSL_aDH,
1354 SSL_CAMELLIA256,
1355 SSL_SHA1,
1356 SSL_TLSV1,
1357 SSL_NOT_EXP|SSL_HIGH,
1358 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1359 256,
1360 256,
1361 },
1362
1363 /* Cipher 86 */
1364 {
1365 1,
1366 TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1367 TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1368 SSL_kDHr,
1369 SSL_aDH,
1370 SSL_CAMELLIA256,
1371 SSL_SHA1,
1372 SSL_TLSV1,
1373 SSL_NOT_EXP|SSL_HIGH,
1374 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1375 256,
1376 256,
1377 },
1378
1379 /* Cipher 87 */
1380 {
1381 1,
1382 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1383 TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1384 SSL_kEDH,
1385 SSL_aDSS,
1386 SSL_CAMELLIA256,
1387 SSL_SHA1,
1388 SSL_TLSV1,
1389 SSL_NOT_EXP|SSL_HIGH,
1390 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1391 256,
1392 256,
1393 },
1394
1395 /* Cipher 88 */
1396 {
1397 1,
1398 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1399 TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1400 SSL_kEDH,
1401 SSL_aRSA,
1402 SSL_CAMELLIA256,
1403 SSL_SHA1,
1404 SSL_TLSV1,
1405 SSL_NOT_EXP|SSL_HIGH,
1406 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1407 256,
1408 256,
1409 },
1410
1411 /* Cipher 89 */
1412 {
1413 1,
1414 TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
1415 TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
1416 SSL_kEDH,
1417 SSL_aNULL,
1418 SSL_CAMELLIA256,
1419 SSL_SHA1,
1420 SSL_TLSV1,
1421 SSL_NOT_EXP|SSL_HIGH,
1422 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1423 256,
1424 256,
1425 },
1426#endif /* OPENSSL_NO_CAMELLIA */
1427
1428#ifndef OPENSSL_NO_PSK
1429 /* Cipher 8A */
1430 {
1431 1,
1432 TLS1_TXT_PSK_WITH_RC4_128_SHA,
1433 TLS1_CK_PSK_WITH_RC4_128_SHA,
1434 SSL_kPSK,
1435 SSL_aPSK,
1436 SSL_RC4,
1437 SSL_SHA1,
1438 SSL_TLSV1,
1439 SSL_NOT_EXP|SSL_MEDIUM,
1440 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1441 128,
1442 128,
1443 },
1444
1445 /* Cipher 8B */
1446 {
1447 1,
1448 TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
1449 TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
1450 SSL_kPSK,
1451 SSL_aPSK,
1452 SSL_3DES,
1453 SSL_SHA1,
1454 SSL_TLSV1,
1455 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1456 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1457 168,
1458 168,
1459 },
1460
1461 /* Cipher 8C */
1462 {
1463 1,
1464 TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
1465 TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
1466 SSL_kPSK,
1467 SSL_aPSK,
1468 SSL_AES128,
1469 SSL_SHA1,
1470 SSL_TLSV1,
1471 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1472 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1473 128,
1474 128,
1475 },
1476
1477 /* Cipher 8D */
1478 {
1479 1,
1480 TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
1481 TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
1482 SSL_kPSK,
1483 SSL_aPSK,
1484 SSL_AES256,
1485 SSL_SHA1,
1486 SSL_TLSV1,
1487 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1488 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1489 256,
1490 256,
1491 },
1492#endif /* OPENSSL_NO_PSK */
1493
1494#ifndef OPENSSL_NO_SEED
1495 /* SEED ciphersuites from RFC4162 */
1496
1497 /* Cipher 96 */
1498 {
1499 1,
1500 TLS1_TXT_RSA_WITH_SEED_SHA,
1501 TLS1_CK_RSA_WITH_SEED_SHA,
1502 SSL_kRSA,
1503 SSL_aRSA,
1504 SSL_SEED,
1505 SSL_SHA1,
1506 SSL_TLSV1,
1507 SSL_NOT_EXP|SSL_MEDIUM,
1508 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1509 128,
1510 128,
1511 },
1512
1513 /* Cipher 97 */
1514 {
1515 1,
1516 TLS1_TXT_DH_DSS_WITH_SEED_SHA,
1517 TLS1_CK_DH_DSS_WITH_SEED_SHA,
1518 SSL_kDHd,
1519 SSL_aDH,
1520 SSL_SEED,
1521 SSL_SHA1,
1522 SSL_TLSV1,
1523 SSL_NOT_EXP|SSL_MEDIUM,
1524 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1525 128,
1526 128,
1527 },
1528
1529 /* Cipher 98 */
1530 {
1531 1,
1532 TLS1_TXT_DH_RSA_WITH_SEED_SHA,
1533 TLS1_CK_DH_RSA_WITH_SEED_SHA,
1534 SSL_kDHr,
1535 SSL_aDH,
1536 SSL_SEED,
1537 SSL_SHA1,
1538 SSL_TLSV1,
1539 SSL_NOT_EXP|SSL_MEDIUM,
1540 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1541 128,
1542 128,
1543 },
1544
1545 /* Cipher 99 */
1546 {
1547 1,
1548 TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
1549 TLS1_CK_DHE_DSS_WITH_SEED_SHA,
1550 SSL_kEDH,
1551 SSL_aDSS,
1552 SSL_SEED,
1553 SSL_SHA1,
1554 SSL_TLSV1,
1555 SSL_NOT_EXP|SSL_MEDIUM,
1556 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1557 128,
1558 128,
1559 },
1560
1561 /* Cipher 9A */
1562 {
1563 1,
1564 TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
1565 TLS1_CK_DHE_RSA_WITH_SEED_SHA,
1566 SSL_kEDH,
1567 SSL_aRSA,
1568 SSL_SEED,
1569 SSL_SHA1,
1570 SSL_TLSV1,
1571 SSL_NOT_EXP|SSL_MEDIUM,
1572 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1573 128,
1574 128,
1575 },
1576
1577 /* Cipher 9B */
1578 {
1579 1,
1580 TLS1_TXT_ADH_WITH_SEED_SHA,
1581 TLS1_CK_ADH_WITH_SEED_SHA,
1582 SSL_kEDH,
1583 SSL_aNULL,
1584 SSL_SEED,
1585 SSL_SHA1,
1586 SSL_TLSV1,
1587 SSL_NOT_EXP|SSL_MEDIUM,
1588 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1589 128,
1590 128,
1591 },
1592
1593#endif /* OPENSSL_NO_SEED */
1594
1595 /* GCM ciphersuites from RFC5288 */
1596
1597 /* Cipher 9C */
1598 {
1599 1,
1600 TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
1601 TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
1602 SSL_kRSA,
1603 SSL_aRSA,
1604 SSL_AES128GCM,
1605 SSL_AEAD,
1606 SSL_TLSV1_2,
1607 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07001608 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001609 128,
1610 128,
1611 },
1612
1613 /* Cipher 9D */
1614 {
1615 1,
1616 TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
1617 TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
1618 SSL_kRSA,
1619 SSL_aRSA,
1620 SSL_AES256GCM,
1621 SSL_AEAD,
1622 SSL_TLSV1_2,
1623 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07001624 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1625 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001626 256,
1627 256,
1628 },
1629
1630 /* Cipher 9E */
1631 {
1632 1,
1633 TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
1634 TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
1635 SSL_kEDH,
1636 SSL_aRSA,
1637 SSL_AES128GCM,
1638 SSL_AEAD,
1639 SSL_TLSV1_2,
1640 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07001641 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001642 128,
1643 128,
1644 },
1645
1646 /* Cipher 9F */
1647 {
1648 1,
1649 TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
1650 TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
1651 SSL_kEDH,
1652 SSL_aRSA,
1653 SSL_AES256GCM,
1654 SSL_AEAD,
1655 SSL_TLSV1_2,
1656 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07001657 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1658 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001659 256,
1660 256,
1661 },
1662
1663 /* Cipher A0 */
1664 {
1665 1,
1666 TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256,
1667 TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256,
1668 SSL_kDHr,
1669 SSL_aDH,
1670 SSL_AES128GCM,
1671 SSL_AEAD,
1672 SSL_TLSV1_2,
1673 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07001674 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001675 128,
1676 128,
1677 },
1678
1679 /* Cipher A1 */
1680 {
1681 1,
1682 TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384,
1683 TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384,
1684 SSL_kDHr,
1685 SSL_aDH,
1686 SSL_AES256GCM,
1687 SSL_AEAD,
1688 SSL_TLSV1_2,
1689 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07001690 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1691 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001692 256,
1693 256,
1694 },
1695
1696 /* Cipher A2 */
1697 {
1698 1,
1699 TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
1700 TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
1701 SSL_kEDH,
1702 SSL_aDSS,
1703 SSL_AES128GCM,
1704 SSL_AEAD,
1705 SSL_TLSV1_2,
1706 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07001707 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001708 128,
1709 128,
1710 },
1711
1712 /* Cipher A3 */
1713 {
1714 1,
1715 TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
1716 TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
1717 SSL_kEDH,
1718 SSL_aDSS,
1719 SSL_AES256GCM,
1720 SSL_AEAD,
1721 SSL_TLSV1_2,
1722 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07001723 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1724 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001725 256,
1726 256,
1727 },
1728
1729 /* Cipher A4 */
1730 {
1731 1,
1732 TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
1733 TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
1734 SSL_kDHd,
1735 SSL_aDH,
1736 SSL_AES128GCM,
1737 SSL_AEAD,
1738 SSL_TLSV1_2,
1739 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07001740 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001741 128,
1742 128,
1743 },
1744
1745 /* Cipher A5 */
1746 {
1747 1,
1748 TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
1749 TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
1750 SSL_kDHd,
1751 SSL_aDH,
1752 SSL_AES256GCM,
1753 SSL_AEAD,
1754 SSL_TLSV1_2,
1755 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07001756 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1757 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001758 256,
1759 256,
1760 },
1761
1762 /* Cipher A6 */
1763 {
1764 1,
1765 TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
1766 TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
1767 SSL_kEDH,
1768 SSL_aNULL,
1769 SSL_AES128GCM,
1770 SSL_AEAD,
1771 SSL_TLSV1_2,
1772 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07001773 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001774 128,
1775 128,
1776 },
1777
1778 /* Cipher A7 */
1779 {
1780 1,
1781 TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
1782 TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
1783 SSL_kEDH,
1784 SSL_aNULL,
1785 SSL_AES256GCM,
1786 SSL_AEAD,
1787 SSL_TLSV1_2,
1788 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07001789 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1790 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07001791 256,
1792 256,
1793 },
1794#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
1795 {
1796 1,
1797 "SCSV",
1798 SSL3_CK_SCSV,
1799 0,
1800 0,
1801 0,
1802 0,
1803 0,
1804 0,
1805 0,
1806 0,
1807 0
1808 },
1809#endif
1810
1811#ifndef OPENSSL_NO_ECDH
1812 /* Cipher C001 */
1813 {
1814 1,
1815 TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
1816 TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
1817 SSL_kECDHe,
1818 SSL_aECDH,
1819 SSL_eNULL,
1820 SSL_SHA1,
1821 SSL_TLSV1,
1822 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
1823 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1824 0,
1825 0,
1826 },
1827
1828 /* Cipher C002 */
1829 {
1830 1,
1831 TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
1832 TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
1833 SSL_kECDHe,
1834 SSL_aECDH,
1835 SSL_RC4,
1836 SSL_SHA1,
1837 SSL_TLSV1,
1838 SSL_NOT_EXP|SSL_MEDIUM,
1839 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1840 128,
1841 128,
1842 },
1843
1844 /* Cipher C003 */
1845 {
1846 1,
1847 TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
1848 TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
1849 SSL_kECDHe,
1850 SSL_aECDH,
1851 SSL_3DES,
1852 SSL_SHA1,
1853 SSL_TLSV1,
1854 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1855 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1856 168,
1857 168,
1858 },
1859
1860 /* Cipher C004 */
1861 {
1862 1,
1863 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1864 TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1865 SSL_kECDHe,
1866 SSL_aECDH,
1867 SSL_AES128,
1868 SSL_SHA1,
1869 SSL_TLSV1,
1870 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1871 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1872 128,
1873 128,
1874 },
1875
1876 /* Cipher C005 */
1877 {
1878 1,
1879 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
1880 TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
1881 SSL_kECDHe,
1882 SSL_aECDH,
1883 SSL_AES256,
1884 SSL_SHA1,
1885 SSL_TLSV1,
1886 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1887 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1888 256,
1889 256,
1890 },
1891
1892 /* Cipher C006 */
1893 {
1894 1,
1895 TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
1896 TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
1897 SSL_kEECDH,
1898 SSL_aECDSA,
1899 SSL_eNULL,
1900 SSL_SHA1,
1901 SSL_TLSV1,
1902 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
1903 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1904 0,
1905 0,
1906 },
1907
1908 /* Cipher C007 */
1909 {
1910 1,
1911 TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
1912 TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
1913 SSL_kEECDH,
1914 SSL_aECDSA,
1915 SSL_RC4,
1916 SSL_SHA1,
1917 SSL_TLSV1,
1918 SSL_NOT_EXP|SSL_MEDIUM,
1919 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1920 128,
1921 128,
1922 },
1923
1924 /* Cipher C008 */
1925 {
1926 1,
1927 TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
1928 TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
1929 SSL_kEECDH,
1930 SSL_aECDSA,
1931 SSL_3DES,
1932 SSL_SHA1,
1933 SSL_TLSV1,
1934 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1935 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1936 168,
1937 168,
1938 },
1939
1940 /* Cipher C009 */
1941 {
1942 1,
1943 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
1944 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
1945 SSL_kEECDH,
1946 SSL_aECDSA,
1947 SSL_AES128,
1948 SSL_SHA1,
1949 SSL_TLSV1,
1950 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1951 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1952 128,
1953 128,
1954 },
1955
1956 /* Cipher C00A */
1957 {
1958 1,
1959 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1960 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1961 SSL_kEECDH,
1962 SSL_aECDSA,
1963 SSL_AES256,
1964 SSL_SHA1,
1965 SSL_TLSV1,
1966 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1967 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1968 256,
1969 256,
1970 },
1971
1972 /* Cipher C00B */
1973 {
1974 1,
1975 TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
1976 TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
1977 SSL_kECDHr,
1978 SSL_aECDH,
1979 SSL_eNULL,
1980 SSL_SHA1,
1981 SSL_TLSV1,
1982 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
1983 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1984 0,
1985 0,
1986 },
1987
1988 /* Cipher C00C */
1989 {
1990 1,
1991 TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
1992 TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
1993 SSL_kECDHr,
1994 SSL_aECDH,
1995 SSL_RC4,
1996 SSL_SHA1,
1997 SSL_TLSV1,
1998 SSL_NOT_EXP|SSL_MEDIUM,
1999 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2000 128,
2001 128,
2002 },
2003
2004 /* Cipher C00D */
2005 {
2006 1,
2007 TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
2008 TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
2009 SSL_kECDHr,
2010 SSL_aECDH,
2011 SSL_3DES,
2012 SSL_SHA1,
2013 SSL_TLSV1,
2014 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2015 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2016 168,
2017 168,
2018 },
2019
2020 /* Cipher C00E */
2021 {
2022 1,
2023 TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
2024 TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
2025 SSL_kECDHr,
2026 SSL_aECDH,
2027 SSL_AES128,
2028 SSL_SHA1,
2029 SSL_TLSV1,
2030 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2031 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2032 128,
2033 128,
2034 },
2035
2036 /* Cipher C00F */
2037 {
2038 1,
2039 TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
2040 TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
2041 SSL_kECDHr,
2042 SSL_aECDH,
2043 SSL_AES256,
2044 SSL_SHA1,
2045 SSL_TLSV1,
2046 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2047 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2048 256,
2049 256,
2050 },
2051
2052 /* Cipher C010 */
2053 {
2054 1,
2055 TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
2056 TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
2057 SSL_kEECDH,
2058 SSL_aRSA,
2059 SSL_eNULL,
2060 SSL_SHA1,
2061 SSL_TLSV1,
2062 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
2063 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2064 0,
2065 0,
2066 },
2067
2068 /* Cipher C011 */
2069 {
2070 1,
2071 TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
2072 TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
2073 SSL_kEECDH,
2074 SSL_aRSA,
2075 SSL_RC4,
2076 SSL_SHA1,
2077 SSL_TLSV1,
2078 SSL_NOT_EXP|SSL_MEDIUM,
2079 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2080 128,
2081 128,
2082 },
2083
2084 /* Cipher C012 */
2085 {
2086 1,
2087 TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
2088 TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
2089 SSL_kEECDH,
2090 SSL_aRSA,
2091 SSL_3DES,
2092 SSL_SHA1,
2093 SSL_TLSV1,
2094 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2095 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2096 168,
2097 168,
2098 },
2099
2100 /* Cipher C013 */
2101 {
2102 1,
2103 TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
2104 TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
2105 SSL_kEECDH,
2106 SSL_aRSA,
2107 SSL_AES128,
2108 SSL_SHA1,
2109 SSL_TLSV1,
2110 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2111 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2112 128,
2113 128,
2114 },
2115
2116 /* Cipher C014 */
2117 {
2118 1,
2119 TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
2120 TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
2121 SSL_kEECDH,
2122 SSL_aRSA,
2123 SSL_AES256,
2124 SSL_SHA1,
2125 SSL_TLSV1,
2126 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2127 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2128 256,
2129 256,
2130 },
2131
2132 /* Cipher C015 */
2133 {
2134 1,
2135 TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
2136 TLS1_CK_ECDH_anon_WITH_NULL_SHA,
2137 SSL_kEECDH,
2138 SSL_aNULL,
2139 SSL_eNULL,
2140 SSL_SHA1,
2141 SSL_TLSV1,
2142 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
2143 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2144 0,
2145 0,
2146 },
2147
2148 /* Cipher C016 */
2149 {
2150 1,
2151 TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
2152 TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
2153 SSL_kEECDH,
2154 SSL_aNULL,
2155 SSL_RC4,
2156 SSL_SHA1,
2157 SSL_TLSV1,
2158 SSL_NOT_EXP|SSL_MEDIUM,
2159 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2160 128,
2161 128,
2162 },
2163
2164 /* Cipher C017 */
2165 {
2166 1,
2167 TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
2168 TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
2169 SSL_kEECDH,
2170 SSL_aNULL,
2171 SSL_3DES,
2172 SSL_SHA1,
2173 SSL_TLSV1,
2174 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2175 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2176 168,
2177 168,
2178 },
2179
2180 /* Cipher C018 */
2181 {
2182 1,
2183 TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
2184 TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
2185 SSL_kEECDH,
2186 SSL_aNULL,
2187 SSL_AES128,
2188 SSL_SHA1,
2189 SSL_TLSV1,
2190 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2191 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2192 128,
2193 128,
2194 },
2195
2196 /* Cipher C019 */
2197 {
2198 1,
2199 TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
2200 TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
2201 SSL_kEECDH,
2202 SSL_aNULL,
2203 SSL_AES256,
2204 SSL_SHA1,
2205 SSL_TLSV1,
2206 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2207 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2208 256,
2209 256,
2210 },
2211#endif /* OPENSSL_NO_ECDH */
2212
2213#ifndef OPENSSL_NO_ECDH
2214
2215 /* HMAC based TLS v1.2 ciphersuites from RFC5289 */
2216
2217 /* Cipher C023 */
2218 {
2219 1,
2220 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
2221 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
2222 SSL_kEECDH,
2223 SSL_aECDSA,
2224 SSL_AES128,
2225 SSL_SHA256,
2226 SSL_TLSV1_2,
2227 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2228 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
2229 128,
2230 128,
2231 },
2232
2233 /* Cipher C024 */
2234 {
2235 1,
2236 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
2237 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
2238 SSL_kEECDH,
2239 SSL_aECDSA,
2240 SSL_AES256,
2241 SSL_SHA384,
2242 SSL_TLSV1_2,
2243 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2244 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2245 256,
2246 256,
2247 },
2248
2249 /* Cipher C025 */
2250 {
2251 1,
2252 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256,
2253 TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256,
2254 SSL_kECDHe,
2255 SSL_aECDH,
2256 SSL_AES128,
2257 SSL_SHA256,
2258 SSL_TLSV1_2,
2259 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2260 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
2261 128,
2262 128,
2263 },
2264
2265 /* Cipher C026 */
2266 {
2267 1,
2268 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384,
2269 TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384,
2270 SSL_kECDHe,
2271 SSL_aECDH,
2272 SSL_AES256,
2273 SSL_SHA384,
2274 SSL_TLSV1_2,
2275 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2276 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2277 256,
2278 256,
2279 },
2280
2281 /* Cipher C027 */
2282 {
2283 1,
2284 TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
2285 TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
2286 SSL_kEECDH,
2287 SSL_aRSA,
2288 SSL_AES128,
2289 SSL_SHA256,
2290 SSL_TLSV1_2,
2291 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2292 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
2293 128,
2294 128,
2295 },
2296
2297 /* Cipher C028 */
2298 {
2299 1,
2300 TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
2301 TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
2302 SSL_kEECDH,
2303 SSL_aRSA,
2304 SSL_AES256,
2305 SSL_SHA384,
2306 SSL_TLSV1_2,
2307 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2308 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2309 256,
2310 256,
2311 },
2312
2313 /* Cipher C029 */
2314 {
2315 1,
2316 TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
2317 TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
2318 SSL_kECDHr,
2319 SSL_aECDH,
2320 SSL_AES128,
2321 SSL_SHA256,
2322 SSL_TLSV1_2,
2323 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2324 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
2325 128,
2326 128,
2327 },
2328
2329 /* Cipher C02A */
2330 {
2331 1,
2332 TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
2333 TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
2334 SSL_kECDHr,
2335 SSL_aECDH,
2336 SSL_AES256,
2337 SSL_SHA384,
2338 SSL_TLSV1_2,
2339 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2340 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2341 256,
2342 256,
2343 },
2344
2345 /* GCM based TLS v1.2 ciphersuites from RFC5289 */
2346
2347 /* Cipher C02B */
2348 {
2349 1,
2350 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
2351 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
2352 SSL_kEECDH,
2353 SSL_aECDSA,
2354 SSL_AES128GCM,
2355 SSL_AEAD,
2356 SSL_TLSV1_2,
2357 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07002358 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07002359 128,
2360 128,
2361 },
2362
2363 /* Cipher C02C */
2364 {
2365 1,
2366 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
2367 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
2368 SSL_kEECDH,
2369 SSL_aECDSA,
2370 SSL_AES256GCM,
2371 SSL_AEAD,
2372 SSL_TLSV1_2,
2373 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07002374 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
2375 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07002376 256,
2377 256,
2378 },
2379
2380 /* Cipher C02D */
2381 {
2382 1,
2383 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
2384 TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
2385 SSL_kECDHe,
2386 SSL_aECDH,
2387 SSL_AES128GCM,
2388 SSL_AEAD,
2389 SSL_TLSV1_2,
2390 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07002391 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07002392 128,
2393 128,
2394 },
2395
2396 /* Cipher C02E */
2397 {
2398 1,
2399 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
2400 TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
2401 SSL_kECDHe,
2402 SSL_aECDH,
2403 SSL_AES256GCM,
2404 SSL_AEAD,
2405 SSL_TLSV1_2,
2406 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07002407 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
2408 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07002409 256,
2410 256,
2411 },
2412
2413 /* Cipher C02F */
2414 {
2415 1,
2416 TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
2417 TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
2418 SSL_kEECDH,
2419 SSL_aRSA,
2420 SSL_AES128GCM,
2421 SSL_AEAD,
2422 SSL_TLSV1_2,
2423 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07002424 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07002425 128,
2426 128,
2427 },
2428
2429 /* Cipher C030 */
2430 {
2431 1,
2432 TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
2433 TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
2434 SSL_kEECDH,
2435 SSL_aRSA,
2436 SSL_AES256GCM,
2437 SSL_AEAD,
2438 SSL_TLSV1_2,
2439 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07002440 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
2441 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07002442 256,
2443 256,
2444 },
2445
2446 /* Cipher C031 */
2447 {
2448 1,
2449 TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2450 TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2451 SSL_kECDHr,
2452 SSL_aECDH,
2453 SSL_AES128GCM,
2454 SSL_AEAD,
2455 SSL_TLSV1_2,
2456 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langleyde0b2022014-06-20 12:00:00 -07002457 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07002458 128,
2459 128,
2460 },
2461
2462 /* Cipher C032 */
2463 {
2464 1,
2465 TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2466 TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2467 SSL_kECDHr,
2468 SSL_aECDH,
2469 SSL_AES256GCM,
2470 SSL_AEAD,
2471 SSL_TLSV1_2,
2472 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
Adam Langley5c270c52014-06-20 12:00:00 -07002473 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
2474 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
Adam Langley95c29f32014-06-20 12:00:00 -07002475 256,
2476 256,
2477 },
2478
2479#endif /* OPENSSL_NO_ECDH */
2480
2481
2482#ifdef TEMP_GOST_TLS
2483/* Cipher FF00 */
2484 {
2485 1,
2486 "GOST-MD5",
2487 0x0300ff00,
2488 SSL_kRSA,
2489 SSL_aRSA,
2490 SSL_eGOST2814789CNT,
2491 SSL_MD5,
2492 SSL_TLSV1,
2493 SSL_NOT_EXP|SSL_HIGH,
2494 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2495 256,
2496 256,
2497 },
2498 {
2499 1,
2500 "GOST-GOST94",
2501 0x0300ff01,
2502 SSL_kRSA,
2503 SSL_aRSA,
2504 SSL_eGOST2814789CNT,
2505 SSL_GOST94,
2506 SSL_TLSV1,
2507 SSL_NOT_EXP|SSL_HIGH,
2508 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2509 256,
2510 256
2511 },
2512 {
2513 1,
2514 "GOST-GOST89MAC",
2515 0x0300ff02,
2516 SSL_kRSA,
2517 SSL_aRSA,
2518 SSL_eGOST2814789CNT,
2519 SSL_GOST89MAC,
2520 SSL_TLSV1,
2521 SSL_NOT_EXP|SSL_HIGH,
2522 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2523 256,
2524 256
2525 },
2526 {
2527 1,
2528 "GOST-GOST89STREAM",
2529 0x0300ff03,
2530 SSL_kRSA,
2531 SSL_aRSA,
2532 SSL_eGOST2814789CNT,
2533 SSL_GOST89MAC,
2534 SSL_TLSV1,
2535 SSL_NOT_EXP|SSL_HIGH,
2536 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC,
2537 256,
2538 256
2539 },
2540#endif
2541
Adam Langleyde0b2022014-06-20 12:00:00 -07002542 {
2543 1,
2544 TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
2545 TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305,
2546 SSL_kEECDH,
2547 SSL_aRSA,
2548 SSL_CHACHA20POLY1305,
2549 SSL_AEAD,
2550 SSL_TLSV1_2,
2551 SSL_NOT_EXP|SSL_HIGH,
2552 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
2553 256,
2554 0,
2555 },
2556
2557 {
2558 1,
2559 TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
2560 TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305,
2561 SSL_kEECDH,
2562 SSL_aECDSA,
2563 SSL_CHACHA20POLY1305,
2564 SSL_AEAD,
2565 SSL_TLSV1_2,
2566 SSL_NOT_EXP|SSL_HIGH,
2567 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
2568 256,
2569 0,
2570 },
2571
2572 {
2573 1,
2574 TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
2575 TLS1_CK_DHE_RSA_CHACHA20_POLY1305,
2576 SSL_kEDH,
2577 SSL_aRSA,
2578 SSL_CHACHA20POLY1305,
2579 SSL_AEAD,
2580 SSL_TLSV1_2,
2581 SSL_NOT_EXP|SSL_HIGH,
2582 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
2583 256,
2584 0,
2585 },
2586
Adam Langley95c29f32014-06-20 12:00:00 -07002587/* end of list */
2588 };
2589
2590SSL3_ENC_METHOD SSLv3_enc_data={
2591 ssl3_enc,
2592 n_ssl3_mac,
2593 ssl3_setup_key_block,
2594 ssl3_generate_master_secret,
2595 ssl3_change_cipher_state,
2596 ssl3_final_finish_mac,
2597 MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
2598 ssl3_cert_verify_mac,
2599 SSL3_MD_CLIENT_FINISHED_CONST,4,
2600 SSL3_MD_SERVER_FINISHED_CONST,4,
2601 ssl3_alert_code,
2602 (int (*)(SSL *, unsigned char *, size_t, const char *,
2603 size_t, const unsigned char *, size_t,
2604 int use_context))ssl_undefined_function,
2605 0,
2606 SSL3_HM_HEADER_LENGTH,
2607 ssl3_set_handshake_header,
2608 ssl3_handshake_write
2609 };
2610
2611long ssl3_default_timeout(void)
2612 {
2613 /* 2 hours, the 24 hours mentioned in the SSLv3 spec
2614 * is way too long for http, the cache would over fill */
2615 return(60*60*2);
2616 }
2617
2618int ssl3_num_ciphers(void)
2619 {
2620 return(SSL3_NUM_CIPHERS);
2621 }
2622
2623const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
2624 {
2625 if (u < SSL3_NUM_CIPHERS)
2626 return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
2627 else
2628 return(NULL);
2629 }
2630
2631int ssl3_pending(const SSL *s)
2632 {
2633 if (s->rstate == SSL_ST_READ_BODY)
2634 return 0;
2635
2636 return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
2637 }
2638
2639void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len)
2640 {
2641 unsigned char *p = (unsigned char *)s->init_buf->data;
2642 *(p++) = htype;
2643 l2n3(len, p);
2644 s->init_num = (int)len + SSL3_HM_HEADER_LENGTH;
2645 s->init_off = 0;
2646 }
2647
2648int ssl3_handshake_write(SSL *s)
2649 {
2650 return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
2651 }
2652
2653int ssl3_new(SSL *s)
2654 {
2655 SSL3_STATE *s3;
2656
2657 if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
2658 memset(s3,0,sizeof *s3);
2659 memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
2660 memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
2661
2662 s->s3=s3;
2663
Adam Langley1258b6a2014-06-20 12:00:00 -07002664#if !defined(OPENSSL_NO_TLSEXT)
2665 s->tlsext_channel_id_enabled = s->ctx->tlsext_channel_id_enabled;
2666 if (s->ctx->tlsext_channel_id_private)
2667 s->tlsext_channel_id_private = EVP_PKEY_dup(s->ctx->tlsext_channel_id_private);
2668#endif
Adam Langley95c29f32014-06-20 12:00:00 -07002669 s->method->ssl_clear(s);
2670 return(1);
2671err:
2672 return(0);
2673 }
2674
2675void ssl3_free(SSL *s)
2676 {
2677 if(s == NULL)
2678 return;
2679
2680#ifdef TLSEXT_TYPE_opaque_prf_input
2681 if (s->s3->client_opaque_prf_input != NULL)
2682 OPENSSL_free(s->s3->client_opaque_prf_input);
2683 if (s->s3->server_opaque_prf_input != NULL)
2684 OPENSSL_free(s->s3->server_opaque_prf_input);
2685#endif
2686
2687 ssl3_cleanup_key_block(s);
2688 if (s->s3->rbuf.buf != NULL)
2689 ssl3_release_read_buffer(s);
2690 if (s->s3->wbuf.buf != NULL)
2691 ssl3_release_write_buffer(s);
2692 if (s->s3->rrec.comp != NULL)
2693 OPENSSL_free(s->s3->rrec.comp);
2694#ifndef OPENSSL_NO_DH
2695 if (s->s3->tmp.dh != NULL)
2696 DH_free(s->s3->tmp.dh);
2697#endif
2698#ifndef OPENSSL_NO_ECDH
2699 if (s->s3->tmp.ecdh != NULL)
2700 EC_KEY_free(s->s3->tmp.ecdh);
2701#endif
2702
2703 if (s->s3->tmp.ca_names != NULL)
2704 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2705 if (s->s3->handshake_buffer) {
2706 BIO_free(s->s3->handshake_buffer);
2707 }
2708 if (s->s3->handshake_dgst) ssl3_free_digest_list(s);
2709#ifndef OPENSSL_NO_TLSEXT
2710 if (s->s3->alpn_selected)
2711 OPENSSL_free(s->s3->alpn_selected);
2712#endif
2713
2714#ifndef OPENSSL_NO_TLSEXT
2715 if (s->s3->tlsext_authz_client_types != NULL)
2716 OPENSSL_free(s->s3->tlsext_authz_client_types);
2717 if (s->s3->tlsext_custom_types != NULL)
2718 OPENSSL_free(s->s3->tlsext_custom_types);
2719#endif
2720 OPENSSL_cleanse(s->s3,sizeof *s->s3);
2721 OPENSSL_free(s->s3);
2722 s->s3=NULL;
2723 }
2724
2725void ssl3_clear(SSL *s)
2726 {
2727 unsigned char *rp,*wp;
2728 size_t rlen, wlen;
2729 int init_extra;
2730
2731#ifdef TLSEXT_TYPE_opaque_prf_input
2732 if (s->s3->client_opaque_prf_input != NULL)
2733 OPENSSL_free(s->s3->client_opaque_prf_input);
2734 s->s3->client_opaque_prf_input = NULL;
2735 if (s->s3->server_opaque_prf_input != NULL)
2736 OPENSSL_free(s->s3->server_opaque_prf_input);
2737 s->s3->server_opaque_prf_input = NULL;
2738#endif
2739
2740 ssl3_cleanup_key_block(s);
2741 if (s->s3->tmp.ca_names != NULL)
2742 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2743
2744 if (s->s3->rrec.comp != NULL)
2745 {
2746 OPENSSL_free(s->s3->rrec.comp);
2747 s->s3->rrec.comp=NULL;
2748 }
2749#ifndef OPENSSL_NO_DH
2750 if (s->s3->tmp.dh != NULL)
2751 {
2752 DH_free(s->s3->tmp.dh);
2753 s->s3->tmp.dh = NULL;
2754 }
2755#endif
2756#ifndef OPENSSL_NO_ECDH
2757 if (s->s3->tmp.ecdh != NULL)
2758 {
2759 EC_KEY_free(s->s3->tmp.ecdh);
2760 s->s3->tmp.ecdh = NULL;
2761 }
2762#endif
2763#ifndef OPENSSL_NO_TLSEXT
2764 if (s->s3->tlsext_authz_client_types != NULL)
2765 {
2766 OPENSSL_free(s->s3->tlsext_authz_client_types);
2767 s->s3->tlsext_authz_client_types = NULL;
2768 }
2769 if (s->s3->tlsext_custom_types != NULL)
2770 {
2771 OPENSSL_free(s->s3->tlsext_custom_types);
2772 s->s3->tlsext_custom_types = NULL;
2773 }
2774 s->s3->tlsext_custom_types_count = 0;
2775#ifndef OPENSSL_NO_EC
2776 s->s3->is_probably_safari = 0;
2777#endif /* !OPENSSL_NO_EC */
2778#endif /* !OPENSSL_NO_TLSEXT */
2779
2780 rp = s->s3->rbuf.buf;
2781 wp = s->s3->wbuf.buf;
2782 rlen = s->s3->rbuf.len;
2783 wlen = s->s3->wbuf.len;
2784 init_extra = s->s3->init_extra;
2785 if (s->s3->handshake_buffer) {
2786 BIO_free(s->s3->handshake_buffer);
2787 s->s3->handshake_buffer = NULL;
2788 }
2789 if (s->s3->handshake_dgst) {
2790 ssl3_free_digest_list(s);
2791 }
2792
2793#if !defined(OPENSSL_NO_TLSEXT)
2794 if (s->s3->alpn_selected)
2795 {
2796 free(s->s3->alpn_selected);
2797 s->s3->alpn_selected = NULL;
2798 }
2799#endif
2800 memset(s->s3,0,sizeof *s->s3);
2801 s->s3->rbuf.buf = rp;
2802 s->s3->wbuf.buf = wp;
2803 s->s3->rbuf.len = rlen;
2804 s->s3->wbuf.len = wlen;
2805 s->s3->init_extra = init_extra;
2806
2807 ssl_free_wbio_buffer(s);
2808
2809 s->packet_length=0;
2810 s->s3->renegotiate=0;
2811 s->s3->total_renegotiations=0;
2812 s->s3->num_renegotiations=0;
2813 s->s3->in_read_app_data=0;
2814 s->version=SSL3_VERSION;
2815
2816#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
2817 if (s->next_proto_negotiated)
2818 {
2819 OPENSSL_free(s->next_proto_negotiated);
2820 s->next_proto_negotiated = NULL;
2821 s->next_proto_negotiated_len = 0;
2822 }
2823#endif
Adam Langley1258b6a2014-06-20 12:00:00 -07002824
2825#if !defined(OPENSSL_NO_TLSEXT)
2826 s->s3->tlsext_channel_id_valid = 0;
2827#endif
Adam Langley95c29f32014-06-20 12:00:00 -07002828 }
2829
2830static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
2831
2832long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
2833 {
2834 int ret=0;
2835
2836#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
2837 if (
2838#ifndef OPENSSL_NO_RSA
2839 cmd == SSL_CTRL_SET_TMP_RSA ||
2840 cmd == SSL_CTRL_SET_TMP_RSA_CB ||
2841#endif
2842#ifndef OPENSSL_NO_DSA
2843 cmd == SSL_CTRL_SET_TMP_DH ||
2844 cmd == SSL_CTRL_SET_TMP_DH_CB ||
2845#endif
2846 0)
2847 {
2848 if (!ssl_cert_inst(&s->cert))
2849 {
2850 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_MALLOC_FAILURE);
2851 return(0);
2852 }
2853 }
2854#endif
2855
2856 switch (cmd)
2857 {
2858 case SSL_CTRL_GET_SESSION_REUSED:
2859 ret=s->hit;
2860 break;
2861 case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
2862 break;
2863 case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
2864 ret=s->s3->num_renegotiations;
2865 break;
2866 case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
2867 ret=s->s3->num_renegotiations;
2868 s->s3->num_renegotiations=0;
2869 break;
2870 case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
2871 ret=s->s3->total_renegotiations;
2872 break;
2873 case SSL_CTRL_GET_FLAGS:
2874 ret=(int)(s->s3->flags);
2875 break;
2876#ifndef OPENSSL_NO_RSA
2877 case SSL_CTRL_NEED_TMP_RSA:
2878 if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
2879 ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
2880 (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))))
2881 ret = 1;
2882 break;
2883 case SSL_CTRL_SET_TMP_RSA:
2884 {
2885 RSA *rsa = (RSA *)parg;
2886 if (rsa == NULL)
2887 {
2888 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
2889 return(ret);
2890 }
2891 if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
2892 {
2893 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_RSA_LIB);
2894 return(ret);
2895 }
2896 if (s->cert->rsa_tmp != NULL)
2897 RSA_free(s->cert->rsa_tmp);
2898 s->cert->rsa_tmp = rsa;
2899 ret = 1;
2900 }
2901 break;
2902 case SSL_CTRL_SET_TMP_RSA_CB:
2903 {
2904 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2905 return(ret);
2906 }
2907 break;
2908#endif
2909#ifndef OPENSSL_NO_DH
2910 case SSL_CTRL_SET_TMP_DH:
2911 {
2912 DH *dh = (DH *)parg;
2913 if (dh == NULL)
2914 {
2915 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
2916 return(ret);
2917 }
2918 if ((dh = DHparams_dup(dh)) == NULL)
2919 {
2920 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
2921 return(ret);
2922 }
2923 if (!(s->options & SSL_OP_SINGLE_DH_USE))
2924 {
2925 if (!DH_generate_key(dh))
2926 {
2927 DH_free(dh);
2928 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
2929 return(ret);
2930 }
2931 }
2932 if (s->cert->dh_tmp != NULL)
2933 DH_free(s->cert->dh_tmp);
2934 s->cert->dh_tmp = dh;
2935 ret = 1;
2936 }
2937 break;
2938 case SSL_CTRL_SET_TMP_DH_CB:
2939 {
2940 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2941 return(ret);
2942 }
2943 break;
2944#endif
2945#ifndef OPENSSL_NO_ECDH
2946 case SSL_CTRL_SET_TMP_ECDH:
2947 {
2948 EC_KEY *ecdh = NULL;
2949
2950 if (parg == NULL)
2951 {
2952 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
2953 return(ret);
2954 }
2955 if (!EC_KEY_up_ref((EC_KEY *)parg))
2956 {
2957 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
2958 return(ret);
2959 }
2960 ecdh = (EC_KEY *)parg;
2961 if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
2962 {
2963 if (!EC_KEY_generate_key(ecdh))
2964 {
2965 EC_KEY_free(ecdh);
2966 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
2967 return(ret);
2968 }
2969 }
2970 if (s->cert->ecdh_tmp != NULL)
2971 EC_KEY_free(s->cert->ecdh_tmp);
2972 s->cert->ecdh_tmp = ecdh;
2973 ret = 1;
2974 }
2975 break;
2976 case SSL_CTRL_SET_TMP_ECDH_CB:
2977 {
2978 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2979 return(ret);
2980 }
2981 break;
2982#endif /* !OPENSSL_NO_ECDH */
2983#ifndef OPENSSL_NO_TLSEXT
2984 case SSL_CTRL_SET_TLSEXT_HOSTNAME:
2985 if (larg == TLSEXT_NAMETYPE_host_name)
2986 {
2987 if (s->tlsext_hostname != NULL)
2988 OPENSSL_free(s->tlsext_hostname);
2989 s->tlsext_hostname = NULL;
2990
2991 ret = 1;
2992 if (parg == NULL)
2993 break;
2994 if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
2995 {
2996 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
2997 return 0;
2998 }
2999 if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
3000 {
3001 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_INTERNAL_ERROR);
3002 return 0;
3003 }
3004 }
3005 else
3006 {
3007 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
3008 return 0;
3009 }
3010 break;
3011 case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
3012 s->tlsext_debug_arg=parg;
3013 ret = 1;
3014 break;
3015
3016#ifdef TLSEXT_TYPE_opaque_prf_input
3017 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT:
3018 if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message
3019 * (including the cert chain and everything) */
3020 {
3021 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG);
3022 break;
3023 }
3024 if (s->tlsext_opaque_prf_input != NULL)
3025 OPENSSL_free(s->tlsext_opaque_prf_input);
3026 if ((size_t)larg == 0)
3027 s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
3028 else
3029 s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg);
3030 if (s->tlsext_opaque_prf_input != NULL)
3031 {
3032 s->tlsext_opaque_prf_input_len = (size_t)larg;
3033 ret = 1;
3034 }
3035 else
3036 s->tlsext_opaque_prf_input_len = 0;
3037 break;
3038#endif
3039
3040 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
3041 s->tlsext_status_type=larg;
3042 ret = 1;
3043 break;
3044
3045 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
3046 *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
3047 ret = 1;
3048 break;
3049
3050 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
3051 s->tlsext_ocsp_exts = parg;
3052 ret = 1;
3053 break;
3054
3055 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
3056 *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
3057 ret = 1;
3058 break;
3059
3060 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
3061 s->tlsext_ocsp_ids = parg;
3062 ret = 1;
3063 break;
3064
3065 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
3066 *(unsigned char **)parg = s->tlsext_ocsp_resp;
3067 return s->tlsext_ocsp_resplen;
3068
3069 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
3070 if (s->tlsext_ocsp_resp)
3071 OPENSSL_free(s->tlsext_ocsp_resp);
3072 s->tlsext_ocsp_resp = parg;
3073 s->tlsext_ocsp_resplen = larg;
3074 ret = 1;
3075 break;
3076
3077#ifndef OPENSSL_NO_HEARTBEATS
3078 case SSL_CTRL_TLS_EXT_SEND_HEARTBEAT:
3079 if (SSL_IS_DTLS(s))
3080 ret = dtls1_heartbeat(s);
3081 else
3082 ret = tls1_heartbeat(s);
3083 break;
3084
3085 case SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING:
3086 ret = s->tlsext_hb_pending;
3087 break;
3088
3089 case SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS:
3090 if (larg)
3091 s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
3092 else
3093 s->tlsext_heartbeat &= ~SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
3094 ret = 1;
3095 break;
3096#endif
3097
3098#endif /* !OPENSSL_NO_TLSEXT */
3099
3100 case SSL_CTRL_CHAIN:
3101 if (larg)
3102 return ssl_cert_set1_chain(s->cert,
3103 (STACK_OF (X509) *)parg);
3104 else
3105 return ssl_cert_set0_chain(s->cert,
3106 (STACK_OF (X509) *)parg);
3107
3108 case SSL_CTRL_CHAIN_CERT:
3109 if (larg)
3110 return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg);
3111 else
3112 return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg);
3113
3114 case SSL_CTRL_GET_CHAIN_CERTS:
3115 *(STACK_OF(X509) **)parg = s->cert->key->chain;
3116 break;
3117
3118 case SSL_CTRL_SELECT_CURRENT_CERT:
3119 return ssl_cert_select_current(s->cert, (X509 *)parg);
3120
3121#ifndef OPENSSL_NO_EC
3122 case SSL_CTRL_GET_CURVES:
3123 {
3124 unsigned char *clist;
3125 size_t clistlen;
3126 if (!s->session)
3127 return 0;
3128 clist = s->session->tlsext_ellipticcurvelist;
3129 clistlen = s->session->tlsext_ellipticcurvelist_length / 2;
3130 if (parg)
3131 {
3132 size_t i;
3133 int *cptr = parg;
3134 unsigned int cid, nid;
3135 for (i = 0; i < clistlen; i++)
3136 {
3137 n2s(clist, cid);
3138 nid = tls1_ec_curve_id2nid(cid);
3139 if (nid != 0)
3140 cptr[i] = nid;
3141 else
3142 cptr[i] = TLSEXT_nid_unknown | cid;
3143 }
3144 }
3145 return (int)clistlen;
3146 }
3147
3148 case SSL_CTRL_SET_CURVES:
3149 return tls1_set_curves(&s->tlsext_ellipticcurvelist,
3150 &s->tlsext_ellipticcurvelist_length,
3151 parg, larg);
3152
3153 case SSL_CTRL_GET_SHARED_CURVE:
3154 return tls1_shared_curve(s, larg);
3155
3156 case SSL_CTRL_SET_ECDH_AUTO:
3157 s->cert->ecdh_tmp_auto = larg;
3158 return 1;
3159#endif
3160 case SSL_CTRL_SET_SIGALGS:
3161 return tls1_set_sigalgs(s->cert, parg, larg, 0);
3162
3163 case SSL_CTRL_SET_CLIENT_SIGALGS:
3164 return tls1_set_sigalgs(s->cert, parg, larg, 1);
3165
3166 case SSL_CTRL_GET_CLIENT_CERT_TYPES:
3167 {
3168 const unsigned char **pctype = parg;
3169 if (s->server || !s->s3->tmp.cert_req)
3170 return 0;
3171 if (s->cert->ctypes)
3172 {
3173 if (pctype)
3174 *pctype = s->cert->ctypes;
3175 return (int)s->cert->ctype_num;
3176 }
3177 if (pctype)
3178 *pctype = (unsigned char *)s->s3->tmp.ctype;
3179 return s->s3->tmp.ctype_num;
3180 }
3181
3182 case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3183 if (!s->server)
3184 return 0;
3185 return ssl3_set_req_cert_type(s->cert, parg, larg);
3186
3187 case SSL_CTRL_BUILD_CERT_CHAIN:
3188 return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg);
3189
3190 case SSL_CTRL_SET_VERIFY_CERT_STORE:
3191 return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
3192
3193 case SSL_CTRL_SET_CHAIN_CERT_STORE:
3194 return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
3195
3196 case SSL_CTRL_GET_PEER_SIGNATURE_NID:
3197 if (SSL_USE_SIGALGS(s))
3198 {
3199 if (s->session && s->session->sess_cert)
3200 {
3201 const EVP_MD *sig;
3202 sig = s->session->sess_cert->peer_key->digest;
3203 if (sig)
3204 {
3205 *(int *)parg = EVP_MD_type(sig);
3206 return 1;
3207 }
3208 }
3209 return 0;
3210 }
3211 /* Might want to do something here for other versions */
3212 else
3213 return 0;
3214
3215 case SSL_CTRL_GET_SERVER_TMP_KEY:
3216 if (s->server || !s->session || !s->session->sess_cert)
3217 return 0;
3218 else
3219 {
3220 SESS_CERT *sc;
3221 EVP_PKEY *ptmp;
3222 int rv = 0;
3223 sc = s->session->sess_cert;
3224#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_EC)
3225 if (!sc->peer_rsa_tmp && !sc->peer_dh_tmp
3226 && !sc->peer_ecdh_tmp)
3227 return 0;
3228#endif
3229 ptmp = EVP_PKEY_new();
3230 if (!ptmp)
3231 return 0;
3232 if (0);
3233#ifndef OPENSSL_NO_RSA
3234 else if (sc->peer_rsa_tmp)
3235 rv = EVP_PKEY_set1_RSA(ptmp, sc->peer_rsa_tmp);
3236#endif
3237#ifndef OPENSSL_NO_DH
3238 else if (sc->peer_dh_tmp)
3239 rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp);
3240#endif
3241#ifndef OPENSSL_NO_ECDH
3242 else if (sc->peer_ecdh_tmp)
3243 rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp);
3244#endif
3245 if (rv)
3246 {
3247 *(EVP_PKEY **)parg = ptmp;
3248 return 1;
3249 }
3250 EVP_PKEY_free(ptmp);
3251 return 0;
3252 }
3253#ifndef OPENSSL_NO_EC
3254 case SSL_CTRL_GET_EC_POINT_FORMATS:
3255 {
3256 SSL_SESSION *sess = s->session;
3257 const unsigned char **pformat = parg;
3258 if (!sess || !sess->tlsext_ecpointformatlist)
3259 return 0;
3260 *pformat = sess->tlsext_ecpointformatlist;
3261 return (int)sess->tlsext_ecpointformatlist_length;
3262 }
3263#endif
Adam Langley1258b6a2014-06-20 12:00:00 -07003264
3265 case SSL_CTRL_CHANNEL_ID:
3266 s->tlsext_channel_id_enabled = 1;
3267 ret = 1;
3268 break;
3269
3270 case SSL_CTRL_SET_CHANNEL_ID:
3271 if (s->server)
3272 break;
3273 s->tlsext_channel_id_enabled = 1;
3274 if (EVP_PKEY_bits(parg) != 256)
3275 {
3276 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
3277 break;
3278 }
3279 if (s->tlsext_channel_id_private)
3280 EVP_PKEY_free(s->tlsext_channel_id_private);
3281 s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
3282 ret = 1;
3283 break;
3284
3285 case SSL_CTRL_GET_CHANNEL_ID:
3286 if (!s->server)
3287 break;
3288 if (!s->s3->tlsext_channel_id_valid)
3289 break;
3290 memcpy(parg, s->s3->tlsext_channel_id, larg < 64 ? larg : 64);
3291 return 64;
3292
Adam Langley95c29f32014-06-20 12:00:00 -07003293 default:
3294 break;
3295 }
3296 return(ret);
3297 }
3298
3299long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
3300 {
3301 int ret=0;
3302
3303#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
3304 if (
3305#ifndef OPENSSL_NO_RSA
3306 cmd == SSL_CTRL_SET_TMP_RSA_CB ||
3307#endif
3308#ifndef OPENSSL_NO_DSA
3309 cmd == SSL_CTRL_SET_TMP_DH_CB ||
3310#endif
3311 0)
3312 {
3313 if (!ssl_cert_inst(&s->cert))
3314 {
3315 OPENSSL_PUT_ERROR(SSL, ssl3_callback_ctrl, ERR_R_MALLOC_FAILURE);
3316 return(0);
3317 }
3318 }
3319#endif
3320
3321 switch (cmd)
3322 {
3323#ifndef OPENSSL_NO_RSA
3324 case SSL_CTRL_SET_TMP_RSA_CB:
3325 {
3326 s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
3327 }
3328 break;
3329#endif
3330#ifndef OPENSSL_NO_DH
3331 case SSL_CTRL_SET_TMP_DH_CB:
3332 {
3333 s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3334 }
3335 break;
3336#endif
3337#ifndef OPENSSL_NO_ECDH
3338 case SSL_CTRL_SET_TMP_ECDH_CB:
3339 {
3340 s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
3341 }
3342 break;
3343#endif
3344#ifndef OPENSSL_NO_TLSEXT
3345 case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
3346 s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
3347 unsigned char *, int, void *))fp;
3348 break;
3349#endif
3350 default:
3351 break;
3352 }
3353 return(ret);
3354 }
3355
3356long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
3357 {
3358 CERT *cert;
3359
3360 cert=ctx->cert;
3361
3362 switch (cmd)
3363 {
3364#ifndef OPENSSL_NO_RSA
3365 case SSL_CTRL_NEED_TMP_RSA:
3366 if ( (cert->rsa_tmp == NULL) &&
3367 ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
3368 (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))
3369 )
3370 return(1);
3371 else
3372 return(0);
3373 /* break; */
3374 case SSL_CTRL_SET_TMP_RSA:
3375 {
3376 RSA *rsa;
3377 int i;
3378
3379 rsa=(RSA *)parg;
3380 i=1;
3381 if (rsa == NULL)
3382 i=0;
3383 else
3384 {
3385 if ((rsa=RSAPrivateKey_dup(rsa)) == NULL)
3386 i=0;
3387 }
3388 if (!i)
3389 {
3390 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_RSA_LIB);
3391 return(0);
3392 }
3393 else
3394 {
3395 if (cert->rsa_tmp != NULL)
3396 RSA_free(cert->rsa_tmp);
3397 cert->rsa_tmp=rsa;
3398 return(1);
3399 }
3400 }
3401 /* break; */
3402 case SSL_CTRL_SET_TMP_RSA_CB:
3403 {
3404 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3405 return(0);
3406 }
3407 break;
3408#endif
3409#ifndef OPENSSL_NO_DH
3410 case SSL_CTRL_SET_TMP_DH:
3411 {
3412 DH *new=NULL,*dh;
3413
3414 dh=(DH *)parg;
3415 if ((new=DHparams_dup(dh)) == NULL)
3416 {
3417 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
3418 return 0;
3419 }
3420 if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
3421 {
3422 if (!DH_generate_key(new))
3423 {
3424 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
3425 DH_free(new);
3426 return 0;
3427 }
3428 }
3429 if (cert->dh_tmp != NULL)
3430 DH_free(cert->dh_tmp);
3431 cert->dh_tmp=new;
3432 return 1;
3433 }
3434 /*break; */
3435 case SSL_CTRL_SET_TMP_DH_CB:
3436 {
3437 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3438 return(0);
3439 }
3440 break;
3441#endif
3442#ifndef OPENSSL_NO_ECDH
3443 case SSL_CTRL_SET_TMP_ECDH:
3444 {
3445 EC_KEY *ecdh = NULL;
3446
3447 if (parg == NULL)
3448 {
3449 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
3450 return 0;
3451 }
3452 ecdh = EC_KEY_dup((EC_KEY *)parg);
3453 if (ecdh == NULL)
3454 {
3455 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_EC_LIB);
3456 return 0;
3457 }
3458 if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
3459 {
3460 if (!EC_KEY_generate_key(ecdh))
3461 {
3462 EC_KEY_free(ecdh);
3463 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
3464 return 0;
3465 }
3466 }
3467
3468 if (cert->ecdh_tmp != NULL)
3469 {
3470 EC_KEY_free(cert->ecdh_tmp);
3471 }
3472 cert->ecdh_tmp = ecdh;
3473 return 1;
3474 }
3475 /* break; */
3476 case SSL_CTRL_SET_TMP_ECDH_CB:
3477 {
3478 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3479 return(0);
3480 }
3481 break;
3482#endif /* !OPENSSL_NO_ECDH */
3483#ifndef OPENSSL_NO_TLSEXT
3484 case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
3485 ctx->tlsext_servername_arg=parg;
3486 break;
3487 case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
3488 case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
3489 {
3490 unsigned char *keys = parg;
3491 if (!keys)
3492 return 48;
3493 if (larg != 48)
3494 {
3495 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_INVALID_TICKET_KEYS_LENGTH);
3496 return 0;
3497 }
3498 if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
3499 {
3500 memcpy(ctx->tlsext_tick_key_name, keys, 16);
3501 memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
3502 memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
3503 }
3504 else
3505 {
3506 memcpy(keys, ctx->tlsext_tick_key_name, 16);
3507 memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
3508 memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
3509 }
3510 return 1;
3511 }
3512
3513#ifdef TLSEXT_TYPE_opaque_prf_input
3514 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG:
3515 ctx->tlsext_opaque_prf_input_callback_arg = parg;
3516 return 1;
3517#endif
3518
3519 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
3520 ctx->tlsext_status_arg=parg;
3521 return 1;
3522 break;
3523
3524#ifndef OPENSSL_NO_EC
3525 case SSL_CTRL_SET_CURVES:
3526 return tls1_set_curves(&ctx->tlsext_ellipticcurvelist,
3527 &ctx->tlsext_ellipticcurvelist_length,
3528 parg, larg);
3529
3530 case SSL_CTRL_SET_ECDH_AUTO:
3531 ctx->cert->ecdh_tmp_auto = larg;
3532 return 1;
3533#endif
3534 case SSL_CTRL_SET_SIGALGS:
3535 return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
3536
3537 case SSL_CTRL_SET_CLIENT_SIGALGS:
3538 return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
3539
3540 case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3541 return ssl3_set_req_cert_type(ctx->cert, parg, larg);
3542
3543 case SSL_CTRL_BUILD_CERT_CHAIN:
3544 return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg);
3545
3546 case SSL_CTRL_SET_VERIFY_CERT_STORE:
3547 return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
3548
3549 case SSL_CTRL_SET_CHAIN_CERT_STORE:
3550 return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
3551
3552 case SSL_CTRL_SET_TLSEXT_AUTHZ_SERVER_AUDIT_PROOF_CB_ARG:
3553 ctx->tlsext_authz_server_audit_proof_cb_arg = parg;
3554 break;
3555
3556#endif /* !OPENSSL_NO_TLSEXT */
3557
3558 /* A Thawte special :-) */
3559 case SSL_CTRL_EXTRA_CHAIN_CERT:
3560 if (ctx->extra_certs == NULL)
3561 {
3562 if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
3563 return(0);
3564 }
3565 sk_X509_push(ctx->extra_certs,(X509 *)parg);
3566 break;
3567
3568 case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
3569 *(STACK_OF(X509) **)parg = ctx->extra_certs;
3570 break;
3571
3572 case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
3573 if (ctx->extra_certs)
3574 {
3575 sk_X509_pop_free(ctx->extra_certs, X509_free);
3576 ctx->extra_certs = NULL;
3577 }
3578 break;
3579
3580 case SSL_CTRL_CHAIN:
3581 if (larg)
3582 return ssl_cert_set1_chain(ctx->cert,
3583 (STACK_OF (X509) *)parg);
3584 else
3585 return ssl_cert_set0_chain(ctx->cert,
3586 (STACK_OF (X509) *)parg);
3587
3588 case SSL_CTRL_CHAIN_CERT:
3589 if (larg)
3590 return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg);
3591 else
3592 return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg);
3593
3594 case SSL_CTRL_GET_CHAIN_CERTS:
3595 *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
3596 break;
3597
3598 case SSL_CTRL_SELECT_CURRENT_CERT:
3599 return ssl_cert_select_current(ctx->cert, (X509 *)parg);
3600
Adam Langley1258b6a2014-06-20 12:00:00 -07003601 case SSL_CTRL_CHANNEL_ID:
3602 /* must be called on a server */
3603 if (ctx->method->ssl_accept == ssl_undefined_function)
3604 return 0;
3605 ctx->tlsext_channel_id_enabled=1;
3606 return 1;
3607
3608 case SSL_CTRL_SET_CHANNEL_ID:
3609 ctx->tlsext_channel_id_enabled = 1;
3610 if (EVP_PKEY_bits(parg) != 256)
3611 {
3612 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
3613 break;
3614 }
3615 if (ctx->tlsext_channel_id_private)
3616 EVP_PKEY_free(ctx->tlsext_channel_id_private);
3617 ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
3618 break;
3619
Adam Langley95c29f32014-06-20 12:00:00 -07003620 default:
3621 return(0);
3622 }
3623 return(1);
3624 }
3625
3626long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
3627 {
3628 CERT *cert;
3629
3630 cert=ctx->cert;
3631
3632 switch (cmd)
3633 {
3634#ifndef OPENSSL_NO_RSA
3635 case SSL_CTRL_SET_TMP_RSA_CB:
3636 {
3637 cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
3638 }
3639 break;
3640#endif
3641#ifndef OPENSSL_NO_DH
3642 case SSL_CTRL_SET_TMP_DH_CB:
3643 {
3644 cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3645 }
3646 break;
3647#endif
3648#ifndef OPENSSL_NO_ECDH
3649 case SSL_CTRL_SET_TMP_ECDH_CB:
3650 {
3651 cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
3652 }
3653 break;
3654#endif
3655#ifndef OPENSSL_NO_TLSEXT
3656 case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
3657 ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
3658 break;
3659
3660#ifdef TLSEXT_TYPE_opaque_prf_input
3661 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB:
3662 ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, size_t, void *))fp;
3663 break;
3664#endif
3665
3666 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
3667 ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
3668 break;
3669
3670 case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
3671 ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *,
3672 unsigned char *,
3673 EVP_CIPHER_CTX *,
3674 HMAC_CTX *, int))fp;
3675 break;
3676
3677 case SSL_CTRL_SET_TLSEXT_AUTHZ_SERVER_AUDIT_PROOF_CB:
3678 ctx->tlsext_authz_server_audit_proof_cb =
3679 (int (*)(SSL *, void *))fp;
3680 break;
3681
3682#endif
3683 default:
3684 return(0);
3685 }
3686 return(1);
3687 }
3688
3689/* This function needs to check if the ciphers required are actually
3690 * available */
3691const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
3692 {
3693 SSL_CIPHER c;
3694 const SSL_CIPHER *cp;
3695 unsigned long id;
3696
3697 id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
3698 c.id=id;
3699 cp = bsearch(&c, ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(SSL_CIPHER), ssl_cipher_id_cmp);
3700#ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES
3701if (cp == NULL) fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]);
3702#endif
3703 return cp;
3704 }
3705
3706int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
3707 {
3708 long l;
3709
3710 if (p != NULL)
3711 {
3712 l=c->id;
3713 if ((l & 0xff000000) != 0x03000000) return(0);
3714 p[0]=((unsigned char)(l>> 8L))&0xFF;
3715 p[1]=((unsigned char)(l ))&0xFF;
3716 }
3717 return(2);
3718 }
3719
3720SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
3721 STACK_OF(SSL_CIPHER) *srvr)
3722 {
3723 SSL_CIPHER *c,*ret=NULL;
3724 STACK_OF(SSL_CIPHER) *prio, *allow;
3725 int i,ok;
3726 size_t cipher_index;
3727 CERT *cert;
3728 unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a;
3729
3730 /* Let's see which ciphers we can support */
3731 cert=s->cert;
3732
3733#if 0
3734 /* Do not set the compare functions, because this may lead to a
3735 * reordering by "id". We want to keep the original ordering.
3736 * We may pay a price in performance during sk_SSL_CIPHER_find(),
3737 * but would have to pay with the price of sk_SSL_CIPHER_dup().
3738 */
3739 sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
3740 sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
3741#endif
3742
3743#ifdef CIPHER_DEBUG
3744 printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr);
3745 for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
3746 {
3747 c=sk_SSL_CIPHER_value(srvr,i);
3748 printf("%p:%s\n",(void *)c,c->name);
3749 }
3750 printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt);
3751 for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
3752 {
3753 c=sk_SSL_CIPHER_value(clnt,i);
3754 printf("%p:%s\n",(void *)c,c->name);
3755 }
3756#endif
3757
3758 if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || tls1_suiteb(s))
3759 {
3760 prio = srvr;
3761 allow = clnt;
3762 }
3763 else
3764 {
3765 prio = clnt;
3766 allow = srvr;
3767 }
3768
3769 tls1_set_cert_validity(s);
3770
3771 for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
3772 {
3773 c=sk_SSL_CIPHER_value(prio,i);
3774
3775 /* Skip TLS v1.2 only ciphersuites if not supported */
3776 if ((c->algorithm_ssl & SSL_TLSV1_2) &&
3777 !SSL_USE_TLS1_2_CIPHERS(s))
3778 continue;
3779
3780 ssl_set_cert_masks(cert,c);
3781 mask_k = cert->mask_k;
3782 mask_a = cert->mask_a;
3783 emask_k = cert->export_mask_k;
3784 emask_a = cert->export_mask_a;
3785
3786#ifdef KSSL_DEBUG
3787/* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/
3788#endif /* KSSL_DEBUG */
3789
3790 alg_k=c->algorithm_mkey;
3791 alg_a=c->algorithm_auth;
3792
3793#ifndef OPENSSL_NO_PSK
3794 /* with PSK there must be server callback set */
3795 if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)
3796 continue;
3797#endif /* OPENSSL_NO_PSK */
3798
3799 if (SSL_C_IS_EXPORT(c))
3800 {
3801 ok = (alg_k & emask_k) && (alg_a & emask_a);
3802#ifdef CIPHER_DEBUG
3803 printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a,
3804 (void *)c,c->name);
3805#endif
3806 }
3807 else
3808 {
3809 ok = (alg_k & mask_k) && (alg_a & mask_a);
3810#ifdef CIPHER_DEBUG
3811 printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c,
3812 c->name);
3813#endif
3814 }
3815
3816#ifndef OPENSSL_NO_TLSEXT
3817#ifndef OPENSSL_NO_EC
3818 /* if we are considering an ECC cipher suite that uses
3819 * an ephemeral EC key check it */
3820 if (alg_k & SSL_kEECDH)
3821 ok = ok && tls1_check_ec_tmp_key(s, c->id);
3822#endif /* OPENSSL_NO_EC */
3823#endif /* OPENSSL_NO_TLSEXT */
3824
3825 if (!ok) continue;
3826 if (sk_SSL_CIPHER_find(allow, &cipher_index, c))
3827 {
3828#if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT)
3829 if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari)
3830 {
3831 if (!ret) ret=sk_SSL_CIPHER_value(allow, cipher_index);
3832 continue;
3833 }
3834#endif
3835 ret=sk_SSL_CIPHER_value(allow, cipher_index);
3836 break;
3837 }
3838 }
3839 return(ret);
3840 }
3841
3842int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
3843 {
3844 int ret=0;
3845 const unsigned char *sig;
3846 size_t i, siglen;
3847 int have_rsa_sign = 0, have_dsa_sign = 0;
3848#ifndef OPENSSL_NO_ECDSA
3849 int have_ecdsa_sign = 0;
3850#endif
3851 int nostrict = 1;
3852 unsigned long alg_k;
3853
3854 /* If we have custom certificate types set, use them */
3855 if (s->cert->ctypes)
3856 {
3857 memcpy(p, s->cert->ctypes, s->cert->ctype_num);
3858 return (int)s->cert->ctype_num;
3859 }
3860 /* get configured sigalgs */
3861 siglen = tls12_get_psigalgs(s, &sig);
3862 if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
3863 nostrict = 0;
3864 for (i = 0; i < siglen; i+=2, sig+=2)
3865 {
3866 switch(sig[1])
3867 {
3868 case TLSEXT_signature_rsa:
3869 have_rsa_sign = 1;
3870 break;
3871
3872 case TLSEXT_signature_dsa:
3873 have_dsa_sign = 1;
3874 break;
3875#ifndef OPENSSL_NO_ECDSA
3876 case TLSEXT_signature_ecdsa:
3877 have_ecdsa_sign = 1;
3878 break;
3879#endif
3880 }
3881 }
3882
3883 alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
3884
3885#ifndef OPENSSL_NO_GOST
3886 if (s->version >= TLS1_VERSION)
3887 {
3888 if (alg_k & SSL_kGOST)
3889 {
3890 p[ret++]=TLS_CT_GOST94_SIGN;
3891 p[ret++]=TLS_CT_GOST01_SIGN;
3892 return(ret);
3893 }
3894 }
3895#endif
3896
3897#ifndef OPENSSL_NO_DH
3898 if (alg_k & (SSL_kDHr|SSL_kEDH))
3899 {
3900# ifndef OPENSSL_NO_RSA
3901 /* Since this refers to a certificate signed with an RSA
3902 * algorithm, only check for rsa signing in strict mode.
3903 */
3904 if (nostrict || have_rsa_sign)
3905 p[ret++]=SSL3_CT_RSA_FIXED_DH;
3906# endif
3907# ifndef OPENSSL_NO_DSA
3908 if (nostrict || have_dsa_sign)
3909 p[ret++]=SSL3_CT_DSS_FIXED_DH;
3910# endif
3911 }
3912 if ((s->version == SSL3_VERSION) &&
3913 (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
3914 {
3915# ifndef OPENSSL_NO_RSA
3916 p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
3917# endif
3918# ifndef OPENSSL_NO_DSA
3919 p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
3920# endif
3921 }
3922#endif /* !OPENSSL_NO_DH */
3923#ifndef OPENSSL_NO_RSA
3924 if (have_rsa_sign)
3925 p[ret++]=SSL3_CT_RSA_SIGN;
3926#endif
3927#ifndef OPENSSL_NO_DSA
3928 if (have_dsa_sign)
3929 p[ret++]=SSL3_CT_DSS_SIGN;
3930#endif
3931#ifndef OPENSSL_NO_ECDH
3932 if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION))
3933 {
3934 if (nostrict || have_rsa_sign)
3935 p[ret++]=TLS_CT_RSA_FIXED_ECDH;
3936 if (nostrict || have_ecdsa_sign)
3937 p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
3938 }
3939#endif
3940
3941#ifndef OPENSSL_NO_ECDSA
3942 /* ECDSA certs can be used with RSA cipher suites as well
3943 * so we don't need to check for SSL_kECDH or SSL_kEECDH
3944 */
3945 if (s->version >= TLS1_VERSION)
3946 {
3947 if (have_ecdsa_sign)
3948 p[ret++]=TLS_CT_ECDSA_SIGN;
3949 }
3950#endif
3951 return(ret);
3952 }
3953
3954static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
3955 {
3956 if (c->ctypes)
3957 {
3958 OPENSSL_free(c->ctypes);
3959 c->ctypes = NULL;
3960 }
3961 if (!p || !len)
3962 return 1;
3963 if (len > 0xff)
3964 return 0;
3965 c->ctypes = OPENSSL_malloc(len);
3966 if (!c->ctypes)
3967 return 0;
3968 memcpy(c->ctypes, p, len);
3969 c->ctype_num = len;
3970 return 1;
3971 }
3972
3973int ssl3_shutdown(SSL *s)
3974 {
3975 int ret;
3976
3977 /* Don't do anything much if we have not done the handshake or
3978 * we don't want to send messages :-) */
3979 if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
3980 {
3981 s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
3982 return(1);
3983 }
3984
3985 if (!(s->shutdown & SSL_SENT_SHUTDOWN))
3986 {
3987 s->shutdown|=SSL_SENT_SHUTDOWN;
3988#if 1
3989 ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
3990#endif
3991 /* our shutdown alert has been sent now, and if it still needs
3992 * to be written, s->s3->alert_dispatch will be true */
3993 if (s->s3->alert_dispatch)
3994 return(-1); /* return WANT_WRITE */
3995 }
3996 else if (s->s3->alert_dispatch)
3997 {
3998 /* resend it if not sent */
3999#if 1
4000 ret=s->method->ssl_dispatch_alert(s);
4001 if(ret == -1)
4002 {
4003 /* we only get to return -1 here the 2nd/Nth
4004 * invocation, we must have already signalled
4005 * return 0 upon a previous invoation,
4006 * return WANT_WRITE */
4007 return(ret);
4008 }
4009#endif
4010 }
4011 else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
4012 {
4013 /* If we are waiting for a close from our peer, we are closed */
4014 s->method->ssl_read_bytes(s,0,NULL,0,0);
4015 if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
4016 {
4017 return(-1); /* return WANT_READ */
4018 }
4019 }
4020
4021 if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
4022 !s->s3->alert_dispatch)
4023 return(1);
4024 else
4025 return(0);
4026 }
4027
4028int ssl3_write(SSL *s, const void *buf, int len)
4029 {
4030 int ret,n;
4031
4032#if 0
4033 if (s->shutdown & SSL_SEND_SHUTDOWN)
4034 {
4035 s->rwstate=SSL_NOTHING;
4036 return(0);
4037 }
4038#endif
4039 ERR_clear_system_error();
4040 if (s->s3->renegotiate) ssl3_renegotiate_check(s);
4041
4042 /* This is an experimental flag that sends the
4043 * last handshake message in the same packet as the first
4044 * use data - used to see if it helps the TCP protocol during
4045 * session-id reuse */
4046 /* The second test is because the buffer may have been removed */
4047 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
4048 {
4049 /* First time through, we write into the buffer */
4050 if (s->s3->delay_buf_pop_ret == 0)
4051 {
4052 ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
4053 buf,len);
4054 if (ret <= 0) return(ret);
4055
4056 s->s3->delay_buf_pop_ret=ret;
4057 }
4058
4059 s->rwstate=SSL_WRITING;
4060 n=BIO_flush(s->wbio);
4061 if (n <= 0) return(n);
4062 s->rwstate=SSL_NOTHING;
4063
4064 /* We have flushed the buffer, so remove it */
4065 ssl_free_wbio_buffer(s);
4066 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
4067
4068 ret=s->s3->delay_buf_pop_ret;
4069 s->s3->delay_buf_pop_ret=0;
4070 }
4071 else
4072 {
4073 ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
4074 buf,len);
4075 if (ret <= 0) return(ret);
4076 }
4077
4078 return(ret);
4079 }
4080
4081static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
4082 {
Adam Langleyadb739e2014-06-20 12:00:00 -07004083 int n,ret;
Adam Langley95c29f32014-06-20 12:00:00 -07004084
4085 ERR_clear_system_error();
Adam Langleyadb739e2014-06-20 12:00:00 -07004086 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
4087 {
4088 /* Deal with an application that calls SSL_read() when handshake data
4089 * is yet to be written.
4090 */
4091 if (BIO_wpending(s->wbio) > 0)
4092 {
4093 s->rwstate=SSL_WRITING;
4094 n=BIO_flush(s->wbio);
4095 if (n <= 0) return(n);
4096 s->rwstate=SSL_NOTHING;
4097 }
4098 }
Adam Langley95c29f32014-06-20 12:00:00 -07004099 if (s->s3->renegotiate) ssl3_renegotiate_check(s);
4100 s->s3->in_read_app_data=1;
4101 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
4102 if ((ret == -1) && (s->s3->in_read_app_data == 2))
4103 {
4104 /* ssl3_read_bytes decided to call s->handshake_func, which
4105 * called ssl3_read_bytes to read handshake data.
4106 * However, ssl3_read_bytes actually found application data
4107 * and thinks that application data makes sense here; so disable
4108 * handshake processing and try to read application data again. */
4109 s->in_handshake++;
4110 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
4111 s->in_handshake--;
4112 }
4113 else
4114 s->s3->in_read_app_data=0;
4115
4116 return(ret);
4117 }
4118
4119int ssl3_read(SSL *s, void *buf, int len)
4120 {
4121 return ssl3_read_internal(s, buf, len, 0);
4122 }
4123
4124int ssl3_peek(SSL *s, void *buf, int len)
4125 {
4126 return ssl3_read_internal(s, buf, len, 1);
4127 }
4128
4129int ssl3_renegotiate(SSL *s)
4130 {
4131 if (s->handshake_func == NULL)
4132 return(1);
4133
4134 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
4135 return(0);
4136
4137 s->s3->renegotiate=1;
4138 return(1);
4139 }
4140
4141int ssl3_renegotiate_check(SSL *s)
4142 {
4143 int ret=0;
4144
4145 if (s->s3->renegotiate)
4146 {
4147 if ( (s->s3->rbuf.left == 0) &&
4148 (s->s3->wbuf.left == 0) &&
4149 !SSL_in_init(s))
4150 {
4151/*
4152if we are the server, and we have sent a 'RENEGOTIATE' message, we
4153need to go to SSL_ST_ACCEPT.
4154*/
4155 /* SSL_ST_ACCEPT */
4156 s->state=SSL_ST_RENEGOTIATE;
4157 s->s3->renegotiate=0;
4158 s->s3->num_renegotiations++;
4159 s->s3->total_renegotiations++;
4160 ret=1;
4161 }
4162 }
4163 return(ret);
4164 }
4165/* If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF
4166 * and handshake macs if required.
4167 */
4168long ssl_get_algorithm2(SSL *s)
4169 {
4170 long alg2 = s->s3->tmp.new_cipher->algorithm2;
4171 if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF
4172 && alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF))
4173 return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
4174 return alg2;
4175 }
4176