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