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