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