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