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