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