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