blob: 8cc710c5d2cc87725b81f0a0966121d73508b393 [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
Adam Langleyc26c8022014-06-20 12:00:00 -07002479#ifndef OPENSSL_NO_PSK
2480 /* ECDH PSK ciphersuites */
2481 /* Cipher CAFE */
2482 {
2483 1,
2484 TLS1_TXT_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
2485 TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
2486 SSL_kEECDH,
2487 SSL_aPSK,
2488 SSL_AES128GCM,
2489 SSL_AEAD,
2490 SSL_TLSV1_2,
2491 SSL_NOT_EXP|SSL_HIGH,
2492 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
2493 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
2494 128,
2495 128,
2496 },
2497#endif /* OPENSSL_NO_PSK */
2498
Adam Langley95c29f32014-06-20 12:00:00 -07002499#endif /* OPENSSL_NO_ECDH */
2500
2501
2502#ifdef TEMP_GOST_TLS
2503/* Cipher FF00 */
2504 {
2505 1,
2506 "GOST-MD5",
2507 0x0300ff00,
2508 SSL_kRSA,
2509 SSL_aRSA,
2510 SSL_eGOST2814789CNT,
2511 SSL_MD5,
2512 SSL_TLSV1,
2513 SSL_NOT_EXP|SSL_HIGH,
2514 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2515 256,
2516 256,
2517 },
2518 {
2519 1,
2520 "GOST-GOST94",
2521 0x0300ff01,
2522 SSL_kRSA,
2523 SSL_aRSA,
2524 SSL_eGOST2814789CNT,
2525 SSL_GOST94,
2526 SSL_TLSV1,
2527 SSL_NOT_EXP|SSL_HIGH,
2528 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2529 256,
2530 256
2531 },
2532 {
2533 1,
2534 "GOST-GOST89MAC",
2535 0x0300ff02,
2536 SSL_kRSA,
2537 SSL_aRSA,
2538 SSL_eGOST2814789CNT,
2539 SSL_GOST89MAC,
2540 SSL_TLSV1,
2541 SSL_NOT_EXP|SSL_HIGH,
2542 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2543 256,
2544 256
2545 },
2546 {
2547 1,
2548 "GOST-GOST89STREAM",
2549 0x0300ff03,
2550 SSL_kRSA,
2551 SSL_aRSA,
2552 SSL_eGOST2814789CNT,
2553 SSL_GOST89MAC,
2554 SSL_TLSV1,
2555 SSL_NOT_EXP|SSL_HIGH,
2556 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC,
2557 256,
2558 256
2559 },
2560#endif
2561
Adam Langleyde0b2022014-06-20 12:00:00 -07002562 {
2563 1,
2564 TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
2565 TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305,
2566 SSL_kEECDH,
2567 SSL_aRSA,
2568 SSL_CHACHA20POLY1305,
2569 SSL_AEAD,
2570 SSL_TLSV1_2,
2571 SSL_NOT_EXP|SSL_HIGH,
2572 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
2573 256,
2574 0,
2575 },
2576
2577 {
2578 1,
2579 TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
2580 TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305,
2581 SSL_kEECDH,
2582 SSL_aECDSA,
2583 SSL_CHACHA20POLY1305,
2584 SSL_AEAD,
2585 SSL_TLSV1_2,
2586 SSL_NOT_EXP|SSL_HIGH,
2587 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
2588 256,
2589 0,
2590 },
2591
2592 {
2593 1,
2594 TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
2595 TLS1_CK_DHE_RSA_CHACHA20_POLY1305,
2596 SSL_kEDH,
2597 SSL_aRSA,
2598 SSL_CHACHA20POLY1305,
2599 SSL_AEAD,
2600 SSL_TLSV1_2,
2601 SSL_NOT_EXP|SSL_HIGH,
2602 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
2603 256,
2604 0,
2605 },
2606
Adam Langley95c29f32014-06-20 12:00:00 -07002607/* end of list */
2608 };
2609
2610SSL3_ENC_METHOD SSLv3_enc_data={
2611 ssl3_enc,
2612 n_ssl3_mac,
2613 ssl3_setup_key_block,
2614 ssl3_generate_master_secret,
2615 ssl3_change_cipher_state,
2616 ssl3_final_finish_mac,
2617 MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
2618 ssl3_cert_verify_mac,
2619 SSL3_MD_CLIENT_FINISHED_CONST,4,
2620 SSL3_MD_SERVER_FINISHED_CONST,4,
2621 ssl3_alert_code,
2622 (int (*)(SSL *, unsigned char *, size_t, const char *,
2623 size_t, const unsigned char *, size_t,
2624 int use_context))ssl_undefined_function,
2625 0,
2626 SSL3_HM_HEADER_LENGTH,
2627 ssl3_set_handshake_header,
2628 ssl3_handshake_write
2629 };
2630
2631long ssl3_default_timeout(void)
2632 {
2633 /* 2 hours, the 24 hours mentioned in the SSLv3 spec
2634 * is way too long for http, the cache would over fill */
2635 return(60*60*2);
2636 }
2637
2638int ssl3_num_ciphers(void)
2639 {
2640 return(SSL3_NUM_CIPHERS);
2641 }
2642
2643const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
2644 {
2645 if (u < SSL3_NUM_CIPHERS)
2646 return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
2647 else
2648 return(NULL);
2649 }
2650
2651int ssl3_pending(const SSL *s)
2652 {
2653 if (s->rstate == SSL_ST_READ_BODY)
2654 return 0;
2655
2656 return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
2657 }
2658
2659void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len)
2660 {
2661 unsigned char *p = (unsigned char *)s->init_buf->data;
2662 *(p++) = htype;
2663 l2n3(len, p);
2664 s->init_num = (int)len + SSL3_HM_HEADER_LENGTH;
2665 s->init_off = 0;
2666 }
2667
2668int ssl3_handshake_write(SSL *s)
2669 {
2670 return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
2671 }
2672
2673int ssl3_new(SSL *s)
2674 {
2675 SSL3_STATE *s3;
2676
2677 if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
2678 memset(s3,0,sizeof *s3);
2679 memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
2680 memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
2681
2682 s->s3=s3;
2683
Adam Langley1258b6a2014-06-20 12:00:00 -07002684#if !defined(OPENSSL_NO_TLSEXT)
2685 s->tlsext_channel_id_enabled = s->ctx->tlsext_channel_id_enabled;
2686 if (s->ctx->tlsext_channel_id_private)
2687 s->tlsext_channel_id_private = EVP_PKEY_dup(s->ctx->tlsext_channel_id_private);
2688#endif
Adam Langley95c29f32014-06-20 12:00:00 -07002689 s->method->ssl_clear(s);
2690 return(1);
2691err:
2692 return(0);
2693 }
2694
2695void ssl3_free(SSL *s)
2696 {
2697 if(s == NULL)
2698 return;
2699
2700#ifdef TLSEXT_TYPE_opaque_prf_input
2701 if (s->s3->client_opaque_prf_input != NULL)
2702 OPENSSL_free(s->s3->client_opaque_prf_input);
2703 if (s->s3->server_opaque_prf_input != NULL)
2704 OPENSSL_free(s->s3->server_opaque_prf_input);
2705#endif
2706
2707 ssl3_cleanup_key_block(s);
2708 if (s->s3->rbuf.buf != NULL)
2709 ssl3_release_read_buffer(s);
2710 if (s->s3->wbuf.buf != NULL)
2711 ssl3_release_write_buffer(s);
2712 if (s->s3->rrec.comp != NULL)
2713 OPENSSL_free(s->s3->rrec.comp);
2714#ifndef OPENSSL_NO_DH
2715 if (s->s3->tmp.dh != NULL)
2716 DH_free(s->s3->tmp.dh);
2717#endif
2718#ifndef OPENSSL_NO_ECDH
2719 if (s->s3->tmp.ecdh != NULL)
2720 EC_KEY_free(s->s3->tmp.ecdh);
2721#endif
2722
2723 if (s->s3->tmp.ca_names != NULL)
2724 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2725 if (s->s3->handshake_buffer) {
2726 BIO_free(s->s3->handshake_buffer);
2727 }
2728 if (s->s3->handshake_dgst) ssl3_free_digest_list(s);
2729#ifndef OPENSSL_NO_TLSEXT
2730 if (s->s3->alpn_selected)
2731 OPENSSL_free(s->s3->alpn_selected);
2732#endif
2733
2734#ifndef OPENSSL_NO_TLSEXT
2735 if (s->s3->tlsext_authz_client_types != NULL)
2736 OPENSSL_free(s->s3->tlsext_authz_client_types);
2737 if (s->s3->tlsext_custom_types != NULL)
2738 OPENSSL_free(s->s3->tlsext_custom_types);
2739#endif
2740 OPENSSL_cleanse(s->s3,sizeof *s->s3);
2741 OPENSSL_free(s->s3);
2742 s->s3=NULL;
2743 }
2744
2745void ssl3_clear(SSL *s)
2746 {
2747 unsigned char *rp,*wp;
2748 size_t rlen, wlen;
2749 int init_extra;
2750
2751#ifdef TLSEXT_TYPE_opaque_prf_input
2752 if (s->s3->client_opaque_prf_input != NULL)
2753 OPENSSL_free(s->s3->client_opaque_prf_input);
2754 s->s3->client_opaque_prf_input = NULL;
2755 if (s->s3->server_opaque_prf_input != NULL)
2756 OPENSSL_free(s->s3->server_opaque_prf_input);
2757 s->s3->server_opaque_prf_input = NULL;
2758#endif
2759
2760 ssl3_cleanup_key_block(s);
2761 if (s->s3->tmp.ca_names != NULL)
2762 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2763
2764 if (s->s3->rrec.comp != NULL)
2765 {
2766 OPENSSL_free(s->s3->rrec.comp);
2767 s->s3->rrec.comp=NULL;
2768 }
2769#ifndef OPENSSL_NO_DH
2770 if (s->s3->tmp.dh != NULL)
2771 {
2772 DH_free(s->s3->tmp.dh);
2773 s->s3->tmp.dh = NULL;
2774 }
2775#endif
2776#ifndef OPENSSL_NO_ECDH
2777 if (s->s3->tmp.ecdh != NULL)
2778 {
2779 EC_KEY_free(s->s3->tmp.ecdh);
2780 s->s3->tmp.ecdh = NULL;
2781 }
2782#endif
2783#ifndef OPENSSL_NO_TLSEXT
2784 if (s->s3->tlsext_authz_client_types != NULL)
2785 {
2786 OPENSSL_free(s->s3->tlsext_authz_client_types);
2787 s->s3->tlsext_authz_client_types = NULL;
2788 }
2789 if (s->s3->tlsext_custom_types != NULL)
2790 {
2791 OPENSSL_free(s->s3->tlsext_custom_types);
2792 s->s3->tlsext_custom_types = NULL;
2793 }
2794 s->s3->tlsext_custom_types_count = 0;
2795#ifndef OPENSSL_NO_EC
2796 s->s3->is_probably_safari = 0;
2797#endif /* !OPENSSL_NO_EC */
2798#endif /* !OPENSSL_NO_TLSEXT */
2799
2800 rp = s->s3->rbuf.buf;
2801 wp = s->s3->wbuf.buf;
2802 rlen = s->s3->rbuf.len;
2803 wlen = s->s3->wbuf.len;
2804 init_extra = s->s3->init_extra;
2805 if (s->s3->handshake_buffer) {
2806 BIO_free(s->s3->handshake_buffer);
2807 s->s3->handshake_buffer = NULL;
2808 }
2809 if (s->s3->handshake_dgst) {
2810 ssl3_free_digest_list(s);
2811 }
2812
2813#if !defined(OPENSSL_NO_TLSEXT)
2814 if (s->s3->alpn_selected)
2815 {
2816 free(s->s3->alpn_selected);
2817 s->s3->alpn_selected = NULL;
2818 }
2819#endif
2820 memset(s->s3,0,sizeof *s->s3);
2821 s->s3->rbuf.buf = rp;
2822 s->s3->wbuf.buf = wp;
2823 s->s3->rbuf.len = rlen;
2824 s->s3->wbuf.len = wlen;
2825 s->s3->init_extra = init_extra;
2826
2827 ssl_free_wbio_buffer(s);
2828
2829 s->packet_length=0;
2830 s->s3->renegotiate=0;
2831 s->s3->total_renegotiations=0;
2832 s->s3->num_renegotiations=0;
2833 s->s3->in_read_app_data=0;
2834 s->version=SSL3_VERSION;
2835
2836#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
2837 if (s->next_proto_negotiated)
2838 {
2839 OPENSSL_free(s->next_proto_negotiated);
2840 s->next_proto_negotiated = NULL;
2841 s->next_proto_negotiated_len = 0;
2842 }
2843#endif
Adam Langley1258b6a2014-06-20 12:00:00 -07002844
2845#if !defined(OPENSSL_NO_TLSEXT)
2846 s->s3->tlsext_channel_id_valid = 0;
2847#endif
Adam Langley95c29f32014-06-20 12:00:00 -07002848 }
2849
2850static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
2851
2852long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
2853 {
2854 int ret=0;
2855
2856#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
2857 if (
2858#ifndef OPENSSL_NO_RSA
2859 cmd == SSL_CTRL_SET_TMP_RSA ||
2860 cmd == SSL_CTRL_SET_TMP_RSA_CB ||
2861#endif
2862#ifndef OPENSSL_NO_DSA
2863 cmd == SSL_CTRL_SET_TMP_DH ||
2864 cmd == SSL_CTRL_SET_TMP_DH_CB ||
2865#endif
2866 0)
2867 {
2868 if (!ssl_cert_inst(&s->cert))
2869 {
2870 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_MALLOC_FAILURE);
2871 return(0);
2872 }
2873 }
2874#endif
2875
2876 switch (cmd)
2877 {
2878 case SSL_CTRL_GET_SESSION_REUSED:
2879 ret=s->hit;
2880 break;
2881 case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
2882 break;
2883 case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
2884 ret=s->s3->num_renegotiations;
2885 break;
2886 case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
2887 ret=s->s3->num_renegotiations;
2888 s->s3->num_renegotiations=0;
2889 break;
2890 case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
2891 ret=s->s3->total_renegotiations;
2892 break;
2893 case SSL_CTRL_GET_FLAGS:
2894 ret=(int)(s->s3->flags);
2895 break;
2896#ifndef OPENSSL_NO_RSA
2897 case SSL_CTRL_NEED_TMP_RSA:
2898 if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
2899 ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
2900 (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))))
2901 ret = 1;
2902 break;
2903 case SSL_CTRL_SET_TMP_RSA:
2904 {
2905 RSA *rsa = (RSA *)parg;
2906 if (rsa == NULL)
2907 {
2908 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
2909 return(ret);
2910 }
2911 if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
2912 {
2913 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_RSA_LIB);
2914 return(ret);
2915 }
2916 if (s->cert->rsa_tmp != NULL)
2917 RSA_free(s->cert->rsa_tmp);
2918 s->cert->rsa_tmp = rsa;
2919 ret = 1;
2920 }
2921 break;
2922 case SSL_CTRL_SET_TMP_RSA_CB:
2923 {
2924 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2925 return(ret);
2926 }
2927 break;
2928#endif
2929#ifndef OPENSSL_NO_DH
2930 case SSL_CTRL_SET_TMP_DH:
2931 {
2932 DH *dh = (DH *)parg;
2933 if (dh == NULL)
2934 {
2935 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
2936 return(ret);
2937 }
2938 if ((dh = DHparams_dup(dh)) == NULL)
2939 {
2940 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
2941 return(ret);
2942 }
2943 if (!(s->options & SSL_OP_SINGLE_DH_USE))
2944 {
2945 if (!DH_generate_key(dh))
2946 {
2947 DH_free(dh);
2948 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
2949 return(ret);
2950 }
2951 }
2952 if (s->cert->dh_tmp != NULL)
2953 DH_free(s->cert->dh_tmp);
2954 s->cert->dh_tmp = dh;
2955 ret = 1;
2956 }
2957 break;
2958 case SSL_CTRL_SET_TMP_DH_CB:
2959 {
2960 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2961 return(ret);
2962 }
2963 break;
2964#endif
2965#ifndef OPENSSL_NO_ECDH
2966 case SSL_CTRL_SET_TMP_ECDH:
2967 {
2968 EC_KEY *ecdh = NULL;
2969
2970 if (parg == NULL)
2971 {
2972 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
2973 return(ret);
2974 }
2975 if (!EC_KEY_up_ref((EC_KEY *)parg))
2976 {
2977 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
2978 return(ret);
2979 }
2980 ecdh = (EC_KEY *)parg;
2981 if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
2982 {
2983 if (!EC_KEY_generate_key(ecdh))
2984 {
2985 EC_KEY_free(ecdh);
2986 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
2987 return(ret);
2988 }
2989 }
2990 if (s->cert->ecdh_tmp != NULL)
2991 EC_KEY_free(s->cert->ecdh_tmp);
2992 s->cert->ecdh_tmp = ecdh;
2993 ret = 1;
2994 }
2995 break;
2996 case SSL_CTRL_SET_TMP_ECDH_CB:
2997 {
2998 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2999 return(ret);
3000 }
3001 break;
3002#endif /* !OPENSSL_NO_ECDH */
3003#ifndef OPENSSL_NO_TLSEXT
3004 case SSL_CTRL_SET_TLSEXT_HOSTNAME:
3005 if (larg == TLSEXT_NAMETYPE_host_name)
3006 {
3007 if (s->tlsext_hostname != NULL)
3008 OPENSSL_free(s->tlsext_hostname);
3009 s->tlsext_hostname = NULL;
3010
3011 ret = 1;
3012 if (parg == NULL)
3013 break;
3014 if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
3015 {
3016 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
3017 return 0;
3018 }
3019 if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
3020 {
3021 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_INTERNAL_ERROR);
3022 return 0;
3023 }
3024 }
3025 else
3026 {
3027 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
3028 return 0;
3029 }
3030 break;
3031 case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
3032 s->tlsext_debug_arg=parg;
3033 ret = 1;
3034 break;
3035
3036#ifdef TLSEXT_TYPE_opaque_prf_input
3037 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT:
3038 if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message
3039 * (including the cert chain and everything) */
3040 {
3041 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG);
3042 break;
3043 }
3044 if (s->tlsext_opaque_prf_input != NULL)
3045 OPENSSL_free(s->tlsext_opaque_prf_input);
3046 if ((size_t)larg == 0)
3047 s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
3048 else
3049 s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg);
3050 if (s->tlsext_opaque_prf_input != NULL)
3051 {
3052 s->tlsext_opaque_prf_input_len = (size_t)larg;
3053 ret = 1;
3054 }
3055 else
3056 s->tlsext_opaque_prf_input_len = 0;
3057 break;
3058#endif
3059
3060 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
3061 s->tlsext_status_type=larg;
3062 ret = 1;
3063 break;
3064
3065 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
3066 *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
3067 ret = 1;
3068 break;
3069
3070 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
3071 s->tlsext_ocsp_exts = parg;
3072 ret = 1;
3073 break;
3074
3075 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
3076 *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
3077 ret = 1;
3078 break;
3079
3080 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
3081 s->tlsext_ocsp_ids = parg;
3082 ret = 1;
3083 break;
3084
3085 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
3086 *(unsigned char **)parg = s->tlsext_ocsp_resp;
3087 return s->tlsext_ocsp_resplen;
3088
3089 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
3090 if (s->tlsext_ocsp_resp)
3091 OPENSSL_free(s->tlsext_ocsp_resp);
3092 s->tlsext_ocsp_resp = parg;
3093 s->tlsext_ocsp_resplen = larg;
3094 ret = 1;
3095 break;
3096
3097#ifndef OPENSSL_NO_HEARTBEATS
3098 case SSL_CTRL_TLS_EXT_SEND_HEARTBEAT:
3099 if (SSL_IS_DTLS(s))
3100 ret = dtls1_heartbeat(s);
3101 else
3102 ret = tls1_heartbeat(s);
3103 break;
3104
3105 case SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING:
3106 ret = s->tlsext_hb_pending;
3107 break;
3108
3109 case SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS:
3110 if (larg)
3111 s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
3112 else
3113 s->tlsext_heartbeat &= ~SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
3114 ret = 1;
3115 break;
3116#endif
3117
3118#endif /* !OPENSSL_NO_TLSEXT */
3119
3120 case SSL_CTRL_CHAIN:
3121 if (larg)
3122 return ssl_cert_set1_chain(s->cert,
3123 (STACK_OF (X509) *)parg);
3124 else
3125 return ssl_cert_set0_chain(s->cert,
3126 (STACK_OF (X509) *)parg);
3127
3128 case SSL_CTRL_CHAIN_CERT:
3129 if (larg)
3130 return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg);
3131 else
3132 return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg);
3133
3134 case SSL_CTRL_GET_CHAIN_CERTS:
3135 *(STACK_OF(X509) **)parg = s->cert->key->chain;
3136 break;
3137
3138 case SSL_CTRL_SELECT_CURRENT_CERT:
3139 return ssl_cert_select_current(s->cert, (X509 *)parg);
3140
3141#ifndef OPENSSL_NO_EC
3142 case SSL_CTRL_GET_CURVES:
3143 {
3144 unsigned char *clist;
3145 size_t clistlen;
3146 if (!s->session)
3147 return 0;
3148 clist = s->session->tlsext_ellipticcurvelist;
3149 clistlen = s->session->tlsext_ellipticcurvelist_length / 2;
3150 if (parg)
3151 {
3152 size_t i;
3153 int *cptr = parg;
3154 unsigned int cid, nid;
3155 for (i = 0; i < clistlen; i++)
3156 {
3157 n2s(clist, cid);
3158 nid = tls1_ec_curve_id2nid(cid);
3159 if (nid != 0)
3160 cptr[i] = nid;
3161 else
3162 cptr[i] = TLSEXT_nid_unknown | cid;
3163 }
3164 }
3165 return (int)clistlen;
3166 }
3167
3168 case SSL_CTRL_SET_CURVES:
3169 return tls1_set_curves(&s->tlsext_ellipticcurvelist,
3170 &s->tlsext_ellipticcurvelist_length,
3171 parg, larg);
3172
3173 case SSL_CTRL_GET_SHARED_CURVE:
3174 return tls1_shared_curve(s, larg);
3175
3176 case SSL_CTRL_SET_ECDH_AUTO:
3177 s->cert->ecdh_tmp_auto = larg;
3178 return 1;
3179#endif
3180 case SSL_CTRL_SET_SIGALGS:
3181 return tls1_set_sigalgs(s->cert, parg, larg, 0);
3182
3183 case SSL_CTRL_SET_CLIENT_SIGALGS:
3184 return tls1_set_sigalgs(s->cert, parg, larg, 1);
3185
3186 case SSL_CTRL_GET_CLIENT_CERT_TYPES:
3187 {
3188 const unsigned char **pctype = parg;
3189 if (s->server || !s->s3->tmp.cert_req)
3190 return 0;
3191 if (s->cert->ctypes)
3192 {
3193 if (pctype)
3194 *pctype = s->cert->ctypes;
3195 return (int)s->cert->ctype_num;
3196 }
3197 if (pctype)
3198 *pctype = (unsigned char *)s->s3->tmp.ctype;
3199 return s->s3->tmp.ctype_num;
3200 }
3201
3202 case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3203 if (!s->server)
3204 return 0;
3205 return ssl3_set_req_cert_type(s->cert, parg, larg);
3206
3207 case SSL_CTRL_BUILD_CERT_CHAIN:
3208 return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg);
3209
3210 case SSL_CTRL_SET_VERIFY_CERT_STORE:
3211 return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
3212
3213 case SSL_CTRL_SET_CHAIN_CERT_STORE:
3214 return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
3215
3216 case SSL_CTRL_GET_PEER_SIGNATURE_NID:
3217 if (SSL_USE_SIGALGS(s))
3218 {
3219 if (s->session && s->session->sess_cert)
3220 {
3221 const EVP_MD *sig;
3222 sig = s->session->sess_cert->peer_key->digest;
3223 if (sig)
3224 {
3225 *(int *)parg = EVP_MD_type(sig);
3226 return 1;
3227 }
3228 }
3229 return 0;
3230 }
3231 /* Might want to do something here for other versions */
3232 else
3233 return 0;
3234
3235 case SSL_CTRL_GET_SERVER_TMP_KEY:
3236 if (s->server || !s->session || !s->session->sess_cert)
3237 return 0;
3238 else
3239 {
3240 SESS_CERT *sc;
3241 EVP_PKEY *ptmp;
3242 int rv = 0;
3243 sc = s->session->sess_cert;
3244#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_EC)
3245 if (!sc->peer_rsa_tmp && !sc->peer_dh_tmp
3246 && !sc->peer_ecdh_tmp)
3247 return 0;
3248#endif
3249 ptmp = EVP_PKEY_new();
3250 if (!ptmp)
3251 return 0;
3252 if (0);
3253#ifndef OPENSSL_NO_RSA
3254 else if (sc->peer_rsa_tmp)
3255 rv = EVP_PKEY_set1_RSA(ptmp, sc->peer_rsa_tmp);
3256#endif
3257#ifndef OPENSSL_NO_DH
3258 else if (sc->peer_dh_tmp)
3259 rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp);
3260#endif
3261#ifndef OPENSSL_NO_ECDH
3262 else if (sc->peer_ecdh_tmp)
3263 rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp);
3264#endif
3265 if (rv)
3266 {
3267 *(EVP_PKEY **)parg = ptmp;
3268 return 1;
3269 }
3270 EVP_PKEY_free(ptmp);
3271 return 0;
3272 }
3273#ifndef OPENSSL_NO_EC
3274 case SSL_CTRL_GET_EC_POINT_FORMATS:
3275 {
3276 SSL_SESSION *sess = s->session;
3277 const unsigned char **pformat = parg;
3278 if (!sess || !sess->tlsext_ecpointformatlist)
3279 return 0;
3280 *pformat = sess->tlsext_ecpointformatlist;
3281 return (int)sess->tlsext_ecpointformatlist_length;
3282 }
3283#endif
Adam Langley1258b6a2014-06-20 12:00:00 -07003284
3285 case SSL_CTRL_CHANNEL_ID:
3286 s->tlsext_channel_id_enabled = 1;
3287 ret = 1;
3288 break;
3289
3290 case SSL_CTRL_SET_CHANNEL_ID:
3291 if (s->server)
3292 break;
3293 s->tlsext_channel_id_enabled = 1;
3294 if (EVP_PKEY_bits(parg) != 256)
3295 {
3296 OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
3297 break;
3298 }
3299 if (s->tlsext_channel_id_private)
3300 EVP_PKEY_free(s->tlsext_channel_id_private);
3301 s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
3302 ret = 1;
3303 break;
3304
3305 case SSL_CTRL_GET_CHANNEL_ID:
3306 if (!s->server)
3307 break;
3308 if (!s->s3->tlsext_channel_id_valid)
3309 break;
3310 memcpy(parg, s->s3->tlsext_channel_id, larg < 64 ? larg : 64);
3311 return 64;
3312
Adam Langley95c29f32014-06-20 12:00:00 -07003313 default:
3314 break;
3315 }
3316 return(ret);
3317 }
3318
3319long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
3320 {
3321 int ret=0;
3322
3323#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
3324 if (
3325#ifndef OPENSSL_NO_RSA
3326 cmd == SSL_CTRL_SET_TMP_RSA_CB ||
3327#endif
3328#ifndef OPENSSL_NO_DSA
3329 cmd == SSL_CTRL_SET_TMP_DH_CB ||
3330#endif
3331 0)
3332 {
3333 if (!ssl_cert_inst(&s->cert))
3334 {
3335 OPENSSL_PUT_ERROR(SSL, ssl3_callback_ctrl, ERR_R_MALLOC_FAILURE);
3336 return(0);
3337 }
3338 }
3339#endif
3340
3341 switch (cmd)
3342 {
3343#ifndef OPENSSL_NO_RSA
3344 case SSL_CTRL_SET_TMP_RSA_CB:
3345 {
3346 s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
3347 }
3348 break;
3349#endif
3350#ifndef OPENSSL_NO_DH
3351 case SSL_CTRL_SET_TMP_DH_CB:
3352 {
3353 s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3354 }
3355 break;
3356#endif
3357#ifndef OPENSSL_NO_ECDH
3358 case SSL_CTRL_SET_TMP_ECDH_CB:
3359 {
3360 s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
3361 }
3362 break;
3363#endif
3364#ifndef OPENSSL_NO_TLSEXT
3365 case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
3366 s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
3367 unsigned char *, int, void *))fp;
3368 break;
3369#endif
3370 default:
3371 break;
3372 }
3373 return(ret);
3374 }
3375
3376long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
3377 {
3378 CERT *cert;
3379
3380 cert=ctx->cert;
3381
3382 switch (cmd)
3383 {
3384#ifndef OPENSSL_NO_RSA
3385 case SSL_CTRL_NEED_TMP_RSA:
3386 if ( (cert->rsa_tmp == NULL) &&
3387 ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
3388 (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))
3389 )
3390 return(1);
3391 else
3392 return(0);
3393 /* break; */
3394 case SSL_CTRL_SET_TMP_RSA:
3395 {
3396 RSA *rsa;
3397 int i;
3398
3399 rsa=(RSA *)parg;
3400 i=1;
3401 if (rsa == NULL)
3402 i=0;
3403 else
3404 {
3405 if ((rsa=RSAPrivateKey_dup(rsa)) == NULL)
3406 i=0;
3407 }
3408 if (!i)
3409 {
3410 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_RSA_LIB);
3411 return(0);
3412 }
3413 else
3414 {
3415 if (cert->rsa_tmp != NULL)
3416 RSA_free(cert->rsa_tmp);
3417 cert->rsa_tmp=rsa;
3418 return(1);
3419 }
3420 }
3421 /* break; */
3422 case SSL_CTRL_SET_TMP_RSA_CB:
3423 {
3424 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3425 return(0);
3426 }
3427 break;
3428#endif
3429#ifndef OPENSSL_NO_DH
3430 case SSL_CTRL_SET_TMP_DH:
3431 {
3432 DH *new=NULL,*dh;
3433
3434 dh=(DH *)parg;
3435 if ((new=DHparams_dup(dh)) == NULL)
3436 {
3437 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
3438 return 0;
3439 }
3440 if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
3441 {
3442 if (!DH_generate_key(new))
3443 {
3444 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
3445 DH_free(new);
3446 return 0;
3447 }
3448 }
3449 if (cert->dh_tmp != NULL)
3450 DH_free(cert->dh_tmp);
3451 cert->dh_tmp=new;
3452 return 1;
3453 }
3454 /*break; */
3455 case SSL_CTRL_SET_TMP_DH_CB:
3456 {
3457 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3458 return(0);
3459 }
3460 break;
3461#endif
3462#ifndef OPENSSL_NO_ECDH
3463 case SSL_CTRL_SET_TMP_ECDH:
3464 {
3465 EC_KEY *ecdh = NULL;
3466
3467 if (parg == NULL)
3468 {
3469 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
3470 return 0;
3471 }
3472 ecdh = EC_KEY_dup((EC_KEY *)parg);
3473 if (ecdh == NULL)
3474 {
3475 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_EC_LIB);
3476 return 0;
3477 }
3478 if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
3479 {
3480 if (!EC_KEY_generate_key(ecdh))
3481 {
3482 EC_KEY_free(ecdh);
3483 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
3484 return 0;
3485 }
3486 }
3487
3488 if (cert->ecdh_tmp != NULL)
3489 {
3490 EC_KEY_free(cert->ecdh_tmp);
3491 }
3492 cert->ecdh_tmp = ecdh;
3493 return 1;
3494 }
3495 /* break; */
3496 case SSL_CTRL_SET_TMP_ECDH_CB:
3497 {
3498 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3499 return(0);
3500 }
3501 break;
3502#endif /* !OPENSSL_NO_ECDH */
3503#ifndef OPENSSL_NO_TLSEXT
3504 case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
3505 ctx->tlsext_servername_arg=parg;
3506 break;
3507 case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
3508 case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
3509 {
3510 unsigned char *keys = parg;
3511 if (!keys)
3512 return 48;
3513 if (larg != 48)
3514 {
3515 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_INVALID_TICKET_KEYS_LENGTH);
3516 return 0;
3517 }
3518 if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
3519 {
3520 memcpy(ctx->tlsext_tick_key_name, keys, 16);
3521 memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
3522 memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
3523 }
3524 else
3525 {
3526 memcpy(keys, ctx->tlsext_tick_key_name, 16);
3527 memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
3528 memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
3529 }
3530 return 1;
3531 }
3532
3533#ifdef TLSEXT_TYPE_opaque_prf_input
3534 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG:
3535 ctx->tlsext_opaque_prf_input_callback_arg = parg;
3536 return 1;
3537#endif
3538
3539 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
3540 ctx->tlsext_status_arg=parg;
3541 return 1;
3542 break;
3543
3544#ifndef OPENSSL_NO_EC
3545 case SSL_CTRL_SET_CURVES:
3546 return tls1_set_curves(&ctx->tlsext_ellipticcurvelist,
3547 &ctx->tlsext_ellipticcurvelist_length,
3548 parg, larg);
3549
3550 case SSL_CTRL_SET_ECDH_AUTO:
3551 ctx->cert->ecdh_tmp_auto = larg;
3552 return 1;
3553#endif
3554 case SSL_CTRL_SET_SIGALGS:
3555 return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
3556
3557 case SSL_CTRL_SET_CLIENT_SIGALGS:
3558 return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
3559
3560 case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3561 return ssl3_set_req_cert_type(ctx->cert, parg, larg);
3562
3563 case SSL_CTRL_BUILD_CERT_CHAIN:
3564 return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg);
3565
3566 case SSL_CTRL_SET_VERIFY_CERT_STORE:
3567 return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
3568
3569 case SSL_CTRL_SET_CHAIN_CERT_STORE:
3570 return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
3571
3572 case SSL_CTRL_SET_TLSEXT_AUTHZ_SERVER_AUDIT_PROOF_CB_ARG:
3573 ctx->tlsext_authz_server_audit_proof_cb_arg = parg;
3574 break;
3575
3576#endif /* !OPENSSL_NO_TLSEXT */
3577
3578 /* A Thawte special :-) */
3579 case SSL_CTRL_EXTRA_CHAIN_CERT:
3580 if (ctx->extra_certs == NULL)
3581 {
3582 if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
3583 return(0);
3584 }
3585 sk_X509_push(ctx->extra_certs,(X509 *)parg);
3586 break;
3587
3588 case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
3589 *(STACK_OF(X509) **)parg = ctx->extra_certs;
3590 break;
3591
3592 case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
3593 if (ctx->extra_certs)
3594 {
3595 sk_X509_pop_free(ctx->extra_certs, X509_free);
3596 ctx->extra_certs = NULL;
3597 }
3598 break;
3599
3600 case SSL_CTRL_CHAIN:
3601 if (larg)
3602 return ssl_cert_set1_chain(ctx->cert,
3603 (STACK_OF (X509) *)parg);
3604 else
3605 return ssl_cert_set0_chain(ctx->cert,
3606 (STACK_OF (X509) *)parg);
3607
3608 case SSL_CTRL_CHAIN_CERT:
3609 if (larg)
3610 return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg);
3611 else
3612 return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg);
3613
3614 case SSL_CTRL_GET_CHAIN_CERTS:
3615 *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
3616 break;
3617
3618 case SSL_CTRL_SELECT_CURRENT_CERT:
3619 return ssl_cert_select_current(ctx->cert, (X509 *)parg);
3620
Adam Langley1258b6a2014-06-20 12:00:00 -07003621 case SSL_CTRL_CHANNEL_ID:
3622 /* must be called on a server */
3623 if (ctx->method->ssl_accept == ssl_undefined_function)
3624 return 0;
3625 ctx->tlsext_channel_id_enabled=1;
3626 return 1;
3627
3628 case SSL_CTRL_SET_CHANNEL_ID:
3629 ctx->tlsext_channel_id_enabled = 1;
3630 if (EVP_PKEY_bits(parg) != 256)
3631 {
3632 OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
3633 break;
3634 }
3635 if (ctx->tlsext_channel_id_private)
3636 EVP_PKEY_free(ctx->tlsext_channel_id_private);
3637 ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
3638 break;
3639
Adam Langley95c29f32014-06-20 12:00:00 -07003640 default:
3641 return(0);
3642 }
3643 return(1);
3644 }
3645
3646long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
3647 {
3648 CERT *cert;
3649
3650 cert=ctx->cert;
3651
3652 switch (cmd)
3653 {
3654#ifndef OPENSSL_NO_RSA
3655 case SSL_CTRL_SET_TMP_RSA_CB:
3656 {
3657 cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
3658 }
3659 break;
3660#endif
3661#ifndef OPENSSL_NO_DH
3662 case SSL_CTRL_SET_TMP_DH_CB:
3663 {
3664 cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3665 }
3666 break;
3667#endif
3668#ifndef OPENSSL_NO_ECDH
3669 case SSL_CTRL_SET_TMP_ECDH_CB:
3670 {
3671 cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
3672 }
3673 break;
3674#endif
3675#ifndef OPENSSL_NO_TLSEXT
3676 case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
3677 ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
3678 break;
3679
3680#ifdef TLSEXT_TYPE_opaque_prf_input
3681 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB:
3682 ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, size_t, void *))fp;
3683 break;
3684#endif
3685
3686 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
3687 ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
3688 break;
3689
3690 case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
3691 ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *,
3692 unsigned char *,
3693 EVP_CIPHER_CTX *,
3694 HMAC_CTX *, int))fp;
3695 break;
3696
3697 case SSL_CTRL_SET_TLSEXT_AUTHZ_SERVER_AUDIT_PROOF_CB:
3698 ctx->tlsext_authz_server_audit_proof_cb =
3699 (int (*)(SSL *, void *))fp;
3700 break;
3701
3702#endif
3703 default:
3704 return(0);
3705 }
3706 return(1);
3707 }
3708
3709/* This function needs to check if the ciphers required are actually
3710 * available */
3711const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
3712 {
3713 SSL_CIPHER c;
3714 const SSL_CIPHER *cp;
3715 unsigned long id;
3716
3717 id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
3718 c.id=id;
3719 cp = bsearch(&c, ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(SSL_CIPHER), ssl_cipher_id_cmp);
3720#ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES
3721if (cp == NULL) fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]);
3722#endif
3723 return cp;
3724 }
3725
3726int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
3727 {
3728 long l;
3729
3730 if (p != NULL)
3731 {
3732 l=c->id;
3733 if ((l & 0xff000000) != 0x03000000) return(0);
3734 p[0]=((unsigned char)(l>> 8L))&0xFF;
3735 p[1]=((unsigned char)(l ))&0xFF;
3736 }
3737 return(2);
3738 }
3739
Adam Langley858a88d2014-06-20 12:00:00 -07003740struct ssl_cipher_preference_list_st* ssl_get_cipher_preferences(SSL *s)
3741 {
3742 if (s->cipher_list != NULL)
3743 return(s->cipher_list);
3744
3745 if (s->version >= TLS1_1_VERSION)
3746 {
3747 if (s->ctx != NULL && s->ctx->cipher_list_tls11 != NULL)
3748 return s->ctx->cipher_list_tls11;
3749 }
3750
3751 if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL))
3752 return(s->ctx->cipher_list);
3753
3754 return NULL;
3755 }
3756
Adam Langley95c29f32014-06-20 12:00:00 -07003757SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
Adam Langley858a88d2014-06-20 12:00:00 -07003758 struct ssl_cipher_preference_list_st *server_pref)
Adam Langley95c29f32014-06-20 12:00:00 -07003759 {
3760 SSL_CIPHER *c,*ret=NULL;
Adam Langley858a88d2014-06-20 12:00:00 -07003761 STACK_OF(SSL_CIPHER) *srvr = server_pref->ciphers, *prio, *allow;
Adam Langley95c29f32014-06-20 12:00:00 -07003762 int i,ok;
3763 size_t cipher_index;
3764 CERT *cert;
3765 unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a;
Adam Langley858a88d2014-06-20 12:00:00 -07003766 /* in_group_flags will either be NULL, or will point to an array of
3767 * bytes which indicate equal-preference groups in the |prio| stack.
3768 * See the comment about |in_group_flags| in the
3769 * |ssl_cipher_preference_list_st| struct. */
3770 const unsigned char *in_group_flags;
3771 /* group_min contains the minimal index so far found in a group, or -1
3772 * if no such value exists yet. */
3773 int group_min = -1;
Adam Langley95c29f32014-06-20 12:00:00 -07003774
3775 /* Let's see which ciphers we can support */
3776 cert=s->cert;
3777
3778#if 0
3779 /* Do not set the compare functions, because this may lead to a
3780 * reordering by "id". We want to keep the original ordering.
3781 * We may pay a price in performance during sk_SSL_CIPHER_find(),
3782 * but would have to pay with the price of sk_SSL_CIPHER_dup().
3783 */
3784 sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
3785 sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
3786#endif
3787
3788#ifdef CIPHER_DEBUG
3789 printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr);
3790 for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
3791 {
3792 c=sk_SSL_CIPHER_value(srvr,i);
3793 printf("%p:%s\n",(void *)c,c->name);
3794 }
3795 printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt);
3796 for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
3797 {
3798 c=sk_SSL_CIPHER_value(clnt,i);
3799 printf("%p:%s\n",(void *)c,c->name);
3800 }
3801#endif
3802
3803 if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || tls1_suiteb(s))
3804 {
3805 prio = srvr;
Adam Langley858a88d2014-06-20 12:00:00 -07003806 in_group_flags = server_pref->in_group_flags;
Adam Langley95c29f32014-06-20 12:00:00 -07003807 allow = clnt;
3808 }
3809 else
3810 {
3811 prio = clnt;
Adam Langley858a88d2014-06-20 12:00:00 -07003812 in_group_flags = NULL;
Adam Langley95c29f32014-06-20 12:00:00 -07003813 allow = srvr;
3814 }
3815
3816 tls1_set_cert_validity(s);
3817
3818 for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
3819 {
3820 c=sk_SSL_CIPHER_value(prio,i);
3821
Adam Langley858a88d2014-06-20 12:00:00 -07003822 ok = 1;
3823
Adam Langley95c29f32014-06-20 12:00:00 -07003824 /* Skip TLS v1.2 only ciphersuites if not supported */
Adam Langley858a88d2014-06-20 12:00:00 -07003825 if ((c->algorithm_ssl & SSL_TLSV1_2) &&
Adam Langley95c29f32014-06-20 12:00:00 -07003826 !SSL_USE_TLS1_2_CIPHERS(s))
Adam Langley858a88d2014-06-20 12:00:00 -07003827 ok = 0;
Adam Langley95c29f32014-06-20 12:00:00 -07003828
3829 ssl_set_cert_masks(cert,c);
3830 mask_k = cert->mask_k;
3831 mask_a = cert->mask_a;
3832 emask_k = cert->export_mask_k;
3833 emask_a = cert->export_mask_a;
3834
3835#ifdef KSSL_DEBUG
3836/* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/
3837#endif /* KSSL_DEBUG */
3838
3839 alg_k=c->algorithm_mkey;
3840 alg_a=c->algorithm_auth;
3841
3842#ifndef OPENSSL_NO_PSK
3843 /* with PSK there must be server callback set */
Adam Langleyc26c8022014-06-20 12:00:00 -07003844 if ((alg_a & SSL_aPSK) && s->psk_server_callback == NULL)
Adam Langley858a88d2014-06-20 12:00:00 -07003845 ok = 0;
Adam Langley95c29f32014-06-20 12:00:00 -07003846#endif /* OPENSSL_NO_PSK */
3847
3848 if (SSL_C_IS_EXPORT(c))
3849 {
Adam Langley858a88d2014-06-20 12:00:00 -07003850 ok = ok && (alg_k & emask_k) && (alg_a & emask_a);
Adam Langley95c29f32014-06-20 12:00:00 -07003851#ifdef CIPHER_DEBUG
3852 printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a,
3853 (void *)c,c->name);
3854#endif
3855 }
3856 else
3857 {
Adam Langley858a88d2014-06-20 12:00:00 -07003858 ok = ok && (alg_k & mask_k) && (alg_a & mask_a);
Adam Langley95c29f32014-06-20 12:00:00 -07003859#ifdef CIPHER_DEBUG
3860 printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c,
3861 c->name);
3862#endif
3863 }
3864
3865#ifndef OPENSSL_NO_TLSEXT
3866#ifndef OPENSSL_NO_EC
3867 /* if we are considering an ECC cipher suite that uses
3868 * an ephemeral EC key check it */
3869 if (alg_k & SSL_kEECDH)
3870 ok = ok && tls1_check_ec_tmp_key(s, c->id);
3871#endif /* OPENSSL_NO_EC */
3872#endif /* OPENSSL_NO_TLSEXT */
3873
Adam Langley858a88d2014-06-20 12:00:00 -07003874 if (ok && sk_SSL_CIPHER_find(allow, &cipher_index, c))
Adam Langley95c29f32014-06-20 12:00:00 -07003875 {
Adam Langley858a88d2014-06-20 12:00:00 -07003876 if (in_group_flags != NULL && in_group_flags[i] == 1)
Adam Langley95c29f32014-06-20 12:00:00 -07003877 {
Adam Langley858a88d2014-06-20 12:00:00 -07003878 /* This element of |prio| is in a group. Update
3879 * the minimum index found so far and continue
3880 * looking. */
3881 if (group_min == -1 || group_min > cipher_index)
3882 group_min = cipher_index;
Adam Langley95c29f32014-06-20 12:00:00 -07003883 }
Adam Langley858a88d2014-06-20 12:00:00 -07003884 else
3885 {
3886 if (group_min != -1 && group_min < cipher_index)
3887 cipher_index = group_min;
3888 ret=sk_SSL_CIPHER_value(allow,cipher_index);
3889 break;
3890 }
3891 }
3892
3893 if (in_group_flags != NULL &&
3894 in_group_flags[i] == 0 &&
3895 group_min != -1)
3896 {
3897 /* We are about to leave a group, but we found a match
3898 * in it, so that's our answer. */
3899 ret=sk_SSL_CIPHER_value(allow,group_min);
Adam Langley95c29f32014-06-20 12:00:00 -07003900 break;
3901 }
3902 }
3903 return(ret);
3904 }
3905
3906int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
3907 {
3908 int ret=0;
3909 const unsigned char *sig;
3910 size_t i, siglen;
3911 int have_rsa_sign = 0, have_dsa_sign = 0;
3912#ifndef OPENSSL_NO_ECDSA
3913 int have_ecdsa_sign = 0;
3914#endif
3915 int nostrict = 1;
3916 unsigned long alg_k;
3917
3918 /* If we have custom certificate types set, use them */
3919 if (s->cert->ctypes)
3920 {
3921 memcpy(p, s->cert->ctypes, s->cert->ctype_num);
3922 return (int)s->cert->ctype_num;
3923 }
3924 /* get configured sigalgs */
3925 siglen = tls12_get_psigalgs(s, &sig);
3926 if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
3927 nostrict = 0;
3928 for (i = 0; i < siglen; i+=2, sig+=2)
3929 {
3930 switch(sig[1])
3931 {
3932 case TLSEXT_signature_rsa:
3933 have_rsa_sign = 1;
3934 break;
3935
3936 case TLSEXT_signature_dsa:
3937 have_dsa_sign = 1;
3938 break;
3939#ifndef OPENSSL_NO_ECDSA
3940 case TLSEXT_signature_ecdsa:
3941 have_ecdsa_sign = 1;
3942 break;
3943#endif
3944 }
3945 }
3946
3947 alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
3948
3949#ifndef OPENSSL_NO_GOST
3950 if (s->version >= TLS1_VERSION)
3951 {
3952 if (alg_k & SSL_kGOST)
3953 {
3954 p[ret++]=TLS_CT_GOST94_SIGN;
3955 p[ret++]=TLS_CT_GOST01_SIGN;
3956 return(ret);
3957 }
3958 }
3959#endif
3960
3961#ifndef OPENSSL_NO_DH
3962 if (alg_k & (SSL_kDHr|SSL_kEDH))
3963 {
3964# ifndef OPENSSL_NO_RSA
3965 /* Since this refers to a certificate signed with an RSA
3966 * algorithm, only check for rsa signing in strict mode.
3967 */
3968 if (nostrict || have_rsa_sign)
3969 p[ret++]=SSL3_CT_RSA_FIXED_DH;
3970# endif
3971# ifndef OPENSSL_NO_DSA
3972 if (nostrict || have_dsa_sign)
3973 p[ret++]=SSL3_CT_DSS_FIXED_DH;
3974# endif
3975 }
3976 if ((s->version == SSL3_VERSION) &&
3977 (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
3978 {
3979# ifndef OPENSSL_NO_RSA
3980 p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
3981# endif
3982# ifndef OPENSSL_NO_DSA
3983 p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
3984# endif
3985 }
3986#endif /* !OPENSSL_NO_DH */
3987#ifndef OPENSSL_NO_RSA
3988 if (have_rsa_sign)
3989 p[ret++]=SSL3_CT_RSA_SIGN;
3990#endif
3991#ifndef OPENSSL_NO_DSA
3992 if (have_dsa_sign)
3993 p[ret++]=SSL3_CT_DSS_SIGN;
3994#endif
3995#ifndef OPENSSL_NO_ECDH
3996 if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION))
3997 {
3998 if (nostrict || have_rsa_sign)
3999 p[ret++]=TLS_CT_RSA_FIXED_ECDH;
4000 if (nostrict || have_ecdsa_sign)
4001 p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
4002 }
4003#endif
4004
4005#ifndef OPENSSL_NO_ECDSA
4006 /* ECDSA certs can be used with RSA cipher suites as well
4007 * so we don't need to check for SSL_kECDH or SSL_kEECDH
4008 */
4009 if (s->version >= TLS1_VERSION)
4010 {
4011 if (have_ecdsa_sign)
4012 p[ret++]=TLS_CT_ECDSA_SIGN;
4013 }
4014#endif
4015 return(ret);
4016 }
4017
4018static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
4019 {
4020 if (c->ctypes)
4021 {
4022 OPENSSL_free(c->ctypes);
4023 c->ctypes = NULL;
4024 }
4025 if (!p || !len)
4026 return 1;
4027 if (len > 0xff)
4028 return 0;
4029 c->ctypes = OPENSSL_malloc(len);
4030 if (!c->ctypes)
4031 return 0;
4032 memcpy(c->ctypes, p, len);
4033 c->ctype_num = len;
4034 return 1;
4035 }
4036
4037int ssl3_shutdown(SSL *s)
4038 {
4039 int ret;
4040
4041 /* Don't do anything much if we have not done the handshake or
4042 * we don't want to send messages :-) */
4043 if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
4044 {
4045 s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
4046 return(1);
4047 }
4048
4049 if (!(s->shutdown & SSL_SENT_SHUTDOWN))
4050 {
4051 s->shutdown|=SSL_SENT_SHUTDOWN;
4052#if 1
4053 ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
4054#endif
4055 /* our shutdown alert has been sent now, and if it still needs
4056 * to be written, s->s3->alert_dispatch will be true */
4057 if (s->s3->alert_dispatch)
4058 return(-1); /* return WANT_WRITE */
4059 }
4060 else if (s->s3->alert_dispatch)
4061 {
4062 /* resend it if not sent */
4063#if 1
4064 ret=s->method->ssl_dispatch_alert(s);
4065 if(ret == -1)
4066 {
4067 /* we only get to return -1 here the 2nd/Nth
4068 * invocation, we must have already signalled
4069 * return 0 upon a previous invoation,
4070 * return WANT_WRITE */
4071 return(ret);
4072 }
4073#endif
4074 }
4075 else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
4076 {
4077 /* If we are waiting for a close from our peer, we are closed */
4078 s->method->ssl_read_bytes(s,0,NULL,0,0);
4079 if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
4080 {
4081 return(-1); /* return WANT_READ */
4082 }
4083 }
4084
4085 if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
4086 !s->s3->alert_dispatch)
4087 return(1);
4088 else
4089 return(0);
4090 }
4091
4092int ssl3_write(SSL *s, const void *buf, int len)
4093 {
4094 int ret,n;
4095
4096#if 0
4097 if (s->shutdown & SSL_SEND_SHUTDOWN)
4098 {
4099 s->rwstate=SSL_NOTHING;
4100 return(0);
4101 }
4102#endif
4103 ERR_clear_system_error();
4104 if (s->s3->renegotiate) ssl3_renegotiate_check(s);
4105
4106 /* This is an experimental flag that sends the
4107 * last handshake message in the same packet as the first
4108 * use data - used to see if it helps the TCP protocol during
4109 * session-id reuse */
4110 /* The second test is because the buffer may have been removed */
4111 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
4112 {
4113 /* First time through, we write into the buffer */
4114 if (s->s3->delay_buf_pop_ret == 0)
4115 {
4116 ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
4117 buf,len);
4118 if (ret <= 0) return(ret);
4119
4120 s->s3->delay_buf_pop_ret=ret;
4121 }
4122
4123 s->rwstate=SSL_WRITING;
4124 n=BIO_flush(s->wbio);
4125 if (n <= 0) return(n);
4126 s->rwstate=SSL_NOTHING;
4127
4128 /* We have flushed the buffer, so remove it */
4129 ssl_free_wbio_buffer(s);
4130 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
4131
4132 ret=s->s3->delay_buf_pop_ret;
4133 s->s3->delay_buf_pop_ret=0;
4134 }
4135 else
4136 {
4137 ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
4138 buf,len);
4139 if (ret <= 0) return(ret);
4140 }
4141
4142 return(ret);
4143 }
4144
4145static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
4146 {
Adam Langleyadb739e2014-06-20 12:00:00 -07004147 int n,ret;
Adam Langley95c29f32014-06-20 12:00:00 -07004148
4149 ERR_clear_system_error();
Adam Langleyadb739e2014-06-20 12:00:00 -07004150 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
4151 {
4152 /* Deal with an application that calls SSL_read() when handshake data
4153 * is yet to be written.
4154 */
4155 if (BIO_wpending(s->wbio) > 0)
4156 {
4157 s->rwstate=SSL_WRITING;
4158 n=BIO_flush(s->wbio);
4159 if (n <= 0) return(n);
4160 s->rwstate=SSL_NOTHING;
4161 }
4162 }
Adam Langley95c29f32014-06-20 12:00:00 -07004163 if (s->s3->renegotiate) ssl3_renegotiate_check(s);
4164 s->s3->in_read_app_data=1;
4165 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
4166 if ((ret == -1) && (s->s3->in_read_app_data == 2))
4167 {
4168 /* ssl3_read_bytes decided to call s->handshake_func, which
4169 * called ssl3_read_bytes to read handshake data.
4170 * However, ssl3_read_bytes actually found application data
4171 * and thinks that application data makes sense here; so disable
4172 * handshake processing and try to read application data again. */
4173 s->in_handshake++;
4174 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
4175 s->in_handshake--;
4176 }
4177 else
4178 s->s3->in_read_app_data=0;
4179
4180 return(ret);
4181 }
4182
4183int ssl3_read(SSL *s, void *buf, int len)
4184 {
4185 return ssl3_read_internal(s, buf, len, 0);
4186 }
4187
4188int ssl3_peek(SSL *s, void *buf, int len)
4189 {
4190 return ssl3_read_internal(s, buf, len, 1);
4191 }
4192
4193int ssl3_renegotiate(SSL *s)
4194 {
4195 if (s->handshake_func == NULL)
4196 return(1);
4197
4198 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
4199 return(0);
4200
4201 s->s3->renegotiate=1;
4202 return(1);
4203 }
4204
4205int ssl3_renegotiate_check(SSL *s)
4206 {
4207 int ret=0;
4208
4209 if (s->s3->renegotiate)
4210 {
4211 if ( (s->s3->rbuf.left == 0) &&
4212 (s->s3->wbuf.left == 0) &&
4213 !SSL_in_init(s))
4214 {
4215/*
4216if we are the server, and we have sent a 'RENEGOTIATE' message, we
4217need to go to SSL_ST_ACCEPT.
4218*/
4219 /* SSL_ST_ACCEPT */
4220 s->state=SSL_ST_RENEGOTIATE;
4221 s->s3->renegotiate=0;
4222 s->s3->num_renegotiations++;
4223 s->s3->total_renegotiations++;
4224 ret=1;
4225 }
4226 }
4227 return(ret);
4228 }
4229/* If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF
4230 * and handshake macs if required.
4231 */
4232long ssl_get_algorithm2(SSL *s)
4233 {
4234 long alg2 = s->s3->tmp.new_cipher->algorithm2;
4235 if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF
4236 && alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF))
4237 return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
4238 return alg2;
4239 }
4240