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