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