Implement a replacement for SSL_set_tmp_dh()
[openssl.git] / ssl / s3_lib.c
1 /*
2  * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
3  * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
4  * Copyright 2005 Nokia. All rights reserved.
5  *
6  * Licensed under the Apache License 2.0 (the "License").  You may not use
7  * this file except in compliance with the License.  You can obtain a copy
8  * in the file LICENSE in the source distribution or at
9  * https://www.openssl.org/source/license.html
10  */
11
12 #include <stdio.h>
13 #include <openssl/objects.h>
14 #include "internal/nelem.h"
15 #include "ssl_local.h"
16 #include <openssl/md5.h>
17 #include <openssl/dh.h>
18 #include <openssl/rand.h>
19 #include <openssl/trace.h>
20 #include <openssl/x509v3.h>
21 #include "internal/cryptlib.h"
22
23 #define TLS13_NUM_CIPHERS       OSSL_NELEM(tls13_ciphers)
24 #define SSL3_NUM_CIPHERS        OSSL_NELEM(ssl3_ciphers)
25 #define SSL3_NUM_SCSVS          OSSL_NELEM(ssl3_scsvs)
26
27 /* TLSv1.3 downgrade protection sentinel values */
28 const unsigned char tls11downgrade[] = {
29     0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x00
30 };
31 const unsigned char tls12downgrade[] = {
32     0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x01
33 };
34
35 /* The list of available TLSv1.3 ciphers */
36 static SSL_CIPHER tls13_ciphers[] = {
37     {
38         1,
39         TLS1_3_RFC_AES_128_GCM_SHA256,
40         TLS1_3_RFC_AES_128_GCM_SHA256,
41         TLS1_3_CK_AES_128_GCM_SHA256,
42         SSL_kANY,
43         SSL_aANY,
44         SSL_AES128GCM,
45         SSL_AEAD,
46         TLS1_3_VERSION, TLS1_3_VERSION,
47         0, 0,
48         SSL_HIGH,
49         SSL_HANDSHAKE_MAC_SHA256,
50         128,
51         128,
52     }, {
53         1,
54         TLS1_3_RFC_AES_256_GCM_SHA384,
55         TLS1_3_RFC_AES_256_GCM_SHA384,
56         TLS1_3_CK_AES_256_GCM_SHA384,
57         SSL_kANY,
58         SSL_aANY,
59         SSL_AES256GCM,
60         SSL_AEAD,
61         TLS1_3_VERSION, TLS1_3_VERSION,
62         0, 0,
63         SSL_HIGH,
64         SSL_HANDSHAKE_MAC_SHA384,
65         256,
66         256,
67     },
68 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
69     {
70         1,
71         TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
72         TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
73         TLS1_3_CK_CHACHA20_POLY1305_SHA256,
74         SSL_kANY,
75         SSL_aANY,
76         SSL_CHACHA20POLY1305,
77         SSL_AEAD,
78         TLS1_3_VERSION, TLS1_3_VERSION,
79         0, 0,
80         SSL_HIGH,
81         SSL_HANDSHAKE_MAC_SHA256,
82         256,
83         256,
84     },
85 #endif
86     {
87         1,
88         TLS1_3_RFC_AES_128_CCM_SHA256,
89         TLS1_3_RFC_AES_128_CCM_SHA256,
90         TLS1_3_CK_AES_128_CCM_SHA256,
91         SSL_kANY,
92         SSL_aANY,
93         SSL_AES128CCM,
94         SSL_AEAD,
95         TLS1_3_VERSION, TLS1_3_VERSION,
96         0, 0,
97         SSL_NOT_DEFAULT | SSL_HIGH,
98         SSL_HANDSHAKE_MAC_SHA256,
99         128,
100         128,
101     }, {
102         1,
103         TLS1_3_RFC_AES_128_CCM_8_SHA256,
104         TLS1_3_RFC_AES_128_CCM_8_SHA256,
105         TLS1_3_CK_AES_128_CCM_8_SHA256,
106         SSL_kANY,
107         SSL_aANY,
108         SSL_AES128CCM8,
109         SSL_AEAD,
110         TLS1_3_VERSION, TLS1_3_VERSION,
111         0, 0,
112         SSL_NOT_DEFAULT | SSL_HIGH,
113         SSL_HANDSHAKE_MAC_SHA256,
114         128,
115         128,
116     }
117 };
118
119 /*
120  * The list of available ciphers, mostly organized into the following
121  * groups:
122  *      Always there
123  *      EC
124  *      PSK
125  *      SRP (within that: RSA EC PSK)
126  *      Cipher families: Chacha/poly, Camellia, Gost, IDEA, SEED
127  *      Weak ciphers
128  */
129 static SSL_CIPHER ssl3_ciphers[] = {
130     {
131      1,
132      SSL3_TXT_RSA_NULL_MD5,
133      SSL3_RFC_RSA_NULL_MD5,
134      SSL3_CK_RSA_NULL_MD5,
135      SSL_kRSA,
136      SSL_aRSA,
137      SSL_eNULL,
138      SSL_MD5,
139      SSL3_VERSION, TLS1_2_VERSION,
140      DTLS1_BAD_VER, DTLS1_2_VERSION,
141      SSL_STRONG_NONE,
142      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
143      0,
144      0,
145      },
146     {
147      1,
148      SSL3_TXT_RSA_NULL_SHA,
149      SSL3_RFC_RSA_NULL_SHA,
150      SSL3_CK_RSA_NULL_SHA,
151      SSL_kRSA,
152      SSL_aRSA,
153      SSL_eNULL,
154      SSL_SHA1,
155      SSL3_VERSION, TLS1_2_VERSION,
156      DTLS1_BAD_VER, DTLS1_2_VERSION,
157      SSL_STRONG_NONE | SSL_FIPS,
158      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
159      0,
160      0,
161      },
162 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
163     {
164      1,
165      SSL3_TXT_RSA_DES_192_CBC3_SHA,
166      SSL3_RFC_RSA_DES_192_CBC3_SHA,
167      SSL3_CK_RSA_DES_192_CBC3_SHA,
168      SSL_kRSA,
169      SSL_aRSA,
170      SSL_3DES,
171      SSL_SHA1,
172      SSL3_VERSION, TLS1_2_VERSION,
173      DTLS1_BAD_VER, DTLS1_2_VERSION,
174      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
175      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
176      112,
177      168,
178      },
179     {
180      1,
181      SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA,
182      SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA,
183      SSL3_CK_DHE_DSS_DES_192_CBC3_SHA,
184      SSL_kDHE,
185      SSL_aDSS,
186      SSL_3DES,
187      SSL_SHA1,
188      SSL3_VERSION, TLS1_2_VERSION,
189      DTLS1_BAD_VER, DTLS1_2_VERSION,
190      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
191      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
192      112,
193      168,
194      },
195     {
196      1,
197      SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA,
198      SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA,
199      SSL3_CK_DHE_RSA_DES_192_CBC3_SHA,
200      SSL_kDHE,
201      SSL_aRSA,
202      SSL_3DES,
203      SSL_SHA1,
204      SSL3_VERSION, TLS1_2_VERSION,
205      DTLS1_BAD_VER, DTLS1_2_VERSION,
206      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
207      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
208      112,
209      168,
210      },
211     {
212      1,
213      SSL3_TXT_ADH_DES_192_CBC_SHA,
214      SSL3_RFC_ADH_DES_192_CBC_SHA,
215      SSL3_CK_ADH_DES_192_CBC_SHA,
216      SSL_kDHE,
217      SSL_aNULL,
218      SSL_3DES,
219      SSL_SHA1,
220      SSL3_VERSION, TLS1_2_VERSION,
221      DTLS1_BAD_VER, DTLS1_2_VERSION,
222      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
223      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
224      112,
225      168,
226      },
227 #endif
228     {
229      1,
230      TLS1_TXT_RSA_WITH_AES_128_SHA,
231      TLS1_RFC_RSA_WITH_AES_128_SHA,
232      TLS1_CK_RSA_WITH_AES_128_SHA,
233      SSL_kRSA,
234      SSL_aRSA,
235      SSL_AES128,
236      SSL_SHA1,
237      SSL3_VERSION, TLS1_2_VERSION,
238      DTLS1_BAD_VER, DTLS1_2_VERSION,
239      SSL_HIGH | SSL_FIPS,
240      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
241      128,
242      128,
243      },
244     {
245      1,
246      TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
247      TLS1_RFC_DHE_DSS_WITH_AES_128_SHA,
248      TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
249      SSL_kDHE,
250      SSL_aDSS,
251      SSL_AES128,
252      SSL_SHA1,
253      SSL3_VERSION, TLS1_2_VERSION,
254      DTLS1_BAD_VER, DTLS1_2_VERSION,
255      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
256      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
257      128,
258      128,
259      },
260     {
261      1,
262      TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
263      TLS1_RFC_DHE_RSA_WITH_AES_128_SHA,
264      TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
265      SSL_kDHE,
266      SSL_aRSA,
267      SSL_AES128,
268      SSL_SHA1,
269      SSL3_VERSION, TLS1_2_VERSION,
270      DTLS1_BAD_VER, DTLS1_2_VERSION,
271      SSL_HIGH | SSL_FIPS,
272      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
273      128,
274      128,
275      },
276     {
277      1,
278      TLS1_TXT_ADH_WITH_AES_128_SHA,
279      TLS1_RFC_ADH_WITH_AES_128_SHA,
280      TLS1_CK_ADH_WITH_AES_128_SHA,
281      SSL_kDHE,
282      SSL_aNULL,
283      SSL_AES128,
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      128,
290      128,
291      },
292     {
293      1,
294      TLS1_TXT_RSA_WITH_AES_256_SHA,
295      TLS1_RFC_RSA_WITH_AES_256_SHA,
296      TLS1_CK_RSA_WITH_AES_256_SHA,
297      SSL_kRSA,
298      SSL_aRSA,
299      SSL_AES256,
300      SSL_SHA1,
301      SSL3_VERSION, TLS1_2_VERSION,
302      DTLS1_BAD_VER, DTLS1_2_VERSION,
303      SSL_HIGH | SSL_FIPS,
304      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
305      256,
306      256,
307      },
308     {
309      1,
310      TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
311      TLS1_RFC_DHE_DSS_WITH_AES_256_SHA,
312      TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
313      SSL_kDHE,
314      SSL_aDSS,
315      SSL_AES256,
316      SSL_SHA1,
317      SSL3_VERSION, TLS1_2_VERSION,
318      DTLS1_BAD_VER, DTLS1_2_VERSION,
319      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
320      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
321      256,
322      256,
323      },
324     {
325      1,
326      TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
327      TLS1_RFC_DHE_RSA_WITH_AES_256_SHA,
328      TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
329      SSL_kDHE,
330      SSL_aRSA,
331      SSL_AES256,
332      SSL_SHA1,
333      SSL3_VERSION, TLS1_2_VERSION,
334      DTLS1_BAD_VER, DTLS1_2_VERSION,
335      SSL_HIGH | SSL_FIPS,
336      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
337      256,
338      256,
339      },
340     {
341      1,
342      TLS1_TXT_ADH_WITH_AES_256_SHA,
343      TLS1_RFC_ADH_WITH_AES_256_SHA,
344      TLS1_CK_ADH_WITH_AES_256_SHA,
345      SSL_kDHE,
346      SSL_aNULL,
347      SSL_AES256,
348      SSL_SHA1,
349      SSL3_VERSION, TLS1_2_VERSION,
350      DTLS1_BAD_VER, DTLS1_2_VERSION,
351      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
352      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
353      256,
354      256,
355      },
356     {
357      1,
358      TLS1_TXT_RSA_WITH_NULL_SHA256,
359      TLS1_RFC_RSA_WITH_NULL_SHA256,
360      TLS1_CK_RSA_WITH_NULL_SHA256,
361      SSL_kRSA,
362      SSL_aRSA,
363      SSL_eNULL,
364      SSL_SHA256,
365      TLS1_2_VERSION, TLS1_2_VERSION,
366      DTLS1_2_VERSION, DTLS1_2_VERSION,
367      SSL_STRONG_NONE | SSL_FIPS,
368      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
369      0,
370      0,
371      },
372     {
373      1,
374      TLS1_TXT_RSA_WITH_AES_128_SHA256,
375      TLS1_RFC_RSA_WITH_AES_128_SHA256,
376      TLS1_CK_RSA_WITH_AES_128_SHA256,
377      SSL_kRSA,
378      SSL_aRSA,
379      SSL_AES128,
380      SSL_SHA256,
381      TLS1_2_VERSION, TLS1_2_VERSION,
382      DTLS1_2_VERSION, DTLS1_2_VERSION,
383      SSL_HIGH | SSL_FIPS,
384      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
385      128,
386      128,
387      },
388     {
389      1,
390      TLS1_TXT_RSA_WITH_AES_256_SHA256,
391      TLS1_RFC_RSA_WITH_AES_256_SHA256,
392      TLS1_CK_RSA_WITH_AES_256_SHA256,
393      SSL_kRSA,
394      SSL_aRSA,
395      SSL_AES256,
396      SSL_SHA256,
397      TLS1_2_VERSION, TLS1_2_VERSION,
398      DTLS1_2_VERSION, DTLS1_2_VERSION,
399      SSL_HIGH | SSL_FIPS,
400      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
401      256,
402      256,
403      },
404     {
405      1,
406      TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
407      TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256,
408      TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
409      SSL_kDHE,
410      SSL_aDSS,
411      SSL_AES128,
412      SSL_SHA256,
413      TLS1_2_VERSION, TLS1_2_VERSION,
414      DTLS1_2_VERSION, DTLS1_2_VERSION,
415      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
416      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
417      128,
418      128,
419      },
420     {
421      1,
422      TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
423      TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256,
424      TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
425      SSL_kDHE,
426      SSL_aRSA,
427      SSL_AES128,
428      SSL_SHA256,
429      TLS1_2_VERSION, TLS1_2_VERSION,
430      DTLS1_2_VERSION, DTLS1_2_VERSION,
431      SSL_HIGH | SSL_FIPS,
432      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
433      128,
434      128,
435      },
436     {
437      1,
438      TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
439      TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256,
440      TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
441      SSL_kDHE,
442      SSL_aDSS,
443      SSL_AES256,
444      SSL_SHA256,
445      TLS1_2_VERSION, TLS1_2_VERSION,
446      DTLS1_2_VERSION, DTLS1_2_VERSION,
447      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
448      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
449      256,
450      256,
451      },
452     {
453      1,
454      TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
455      TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256,
456      TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
457      SSL_kDHE,
458      SSL_aRSA,
459      SSL_AES256,
460      SSL_SHA256,
461      TLS1_2_VERSION, TLS1_2_VERSION,
462      DTLS1_2_VERSION, DTLS1_2_VERSION,
463      SSL_HIGH | SSL_FIPS,
464      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
465      256,
466      256,
467      },
468     {
469      1,
470      TLS1_TXT_ADH_WITH_AES_128_SHA256,
471      TLS1_RFC_ADH_WITH_AES_128_SHA256,
472      TLS1_CK_ADH_WITH_AES_128_SHA256,
473      SSL_kDHE,
474      SSL_aNULL,
475      SSL_AES128,
476      SSL_SHA256,
477      TLS1_2_VERSION, TLS1_2_VERSION,
478      DTLS1_2_VERSION, DTLS1_2_VERSION,
479      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
480      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
481      128,
482      128,
483      },
484     {
485      1,
486      TLS1_TXT_ADH_WITH_AES_256_SHA256,
487      TLS1_RFC_ADH_WITH_AES_256_SHA256,
488      TLS1_CK_ADH_WITH_AES_256_SHA256,
489      SSL_kDHE,
490      SSL_aNULL,
491      SSL_AES256,
492      SSL_SHA256,
493      TLS1_2_VERSION, TLS1_2_VERSION,
494      DTLS1_2_VERSION, DTLS1_2_VERSION,
495      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
496      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
497      256,
498      256,
499      },
500     {
501      1,
502      TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
503      TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256,
504      TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
505      SSL_kRSA,
506      SSL_aRSA,
507      SSL_AES128GCM,
508      SSL_AEAD,
509      TLS1_2_VERSION, TLS1_2_VERSION,
510      DTLS1_2_VERSION, DTLS1_2_VERSION,
511      SSL_HIGH | SSL_FIPS,
512      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
513      128,
514      128,
515      },
516     {
517      1,
518      TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
519      TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384,
520      TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
521      SSL_kRSA,
522      SSL_aRSA,
523      SSL_AES256GCM,
524      SSL_AEAD,
525      TLS1_2_VERSION, TLS1_2_VERSION,
526      DTLS1_2_VERSION, DTLS1_2_VERSION,
527      SSL_HIGH | SSL_FIPS,
528      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
529      256,
530      256,
531      },
532     {
533      1,
534      TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
535      TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256,
536      TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
537      SSL_kDHE,
538      SSL_aRSA,
539      SSL_AES128GCM,
540      SSL_AEAD,
541      TLS1_2_VERSION, TLS1_2_VERSION,
542      DTLS1_2_VERSION, DTLS1_2_VERSION,
543      SSL_HIGH | SSL_FIPS,
544      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
545      128,
546      128,
547      },
548     {
549      1,
550      TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
551      TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384,
552      TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
553      SSL_kDHE,
554      SSL_aRSA,
555      SSL_AES256GCM,
556      SSL_AEAD,
557      TLS1_2_VERSION, TLS1_2_VERSION,
558      DTLS1_2_VERSION, DTLS1_2_VERSION,
559      SSL_HIGH | SSL_FIPS,
560      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
561      256,
562      256,
563      },
564     {
565      1,
566      TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
567      TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256,
568      TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
569      SSL_kDHE,
570      SSL_aDSS,
571      SSL_AES128GCM,
572      SSL_AEAD,
573      TLS1_2_VERSION, TLS1_2_VERSION,
574      DTLS1_2_VERSION, DTLS1_2_VERSION,
575      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
576      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
577      128,
578      128,
579      },
580     {
581      1,
582      TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
583      TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384,
584      TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
585      SSL_kDHE,
586      SSL_aDSS,
587      SSL_AES256GCM,
588      SSL_AEAD,
589      TLS1_2_VERSION, TLS1_2_VERSION,
590      DTLS1_2_VERSION, DTLS1_2_VERSION,
591      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
592      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
593      256,
594      256,
595      },
596     {
597      1,
598      TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
599      TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256,
600      TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
601      SSL_kDHE,
602      SSL_aNULL,
603      SSL_AES128GCM,
604      SSL_AEAD,
605      TLS1_2_VERSION, TLS1_2_VERSION,
606      DTLS1_2_VERSION, DTLS1_2_VERSION,
607      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
608      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
609      128,
610      128,
611      },
612     {
613      1,
614      TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
615      TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384,
616      TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
617      SSL_kDHE,
618      SSL_aNULL,
619      SSL_AES256GCM,
620      SSL_AEAD,
621      TLS1_2_VERSION, TLS1_2_VERSION,
622      DTLS1_2_VERSION, DTLS1_2_VERSION,
623      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
624      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
625      256,
626      256,
627      },
628     {
629      1,
630      TLS1_TXT_RSA_WITH_AES_128_CCM,
631      TLS1_RFC_RSA_WITH_AES_128_CCM,
632      TLS1_CK_RSA_WITH_AES_128_CCM,
633      SSL_kRSA,
634      SSL_aRSA,
635      SSL_AES128CCM,
636      SSL_AEAD,
637      TLS1_2_VERSION, TLS1_2_VERSION,
638      DTLS1_2_VERSION, DTLS1_2_VERSION,
639      SSL_NOT_DEFAULT | SSL_HIGH,
640      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
641      128,
642      128,
643      },
644     {
645      1,
646      TLS1_TXT_RSA_WITH_AES_256_CCM,
647      TLS1_RFC_RSA_WITH_AES_256_CCM,
648      TLS1_CK_RSA_WITH_AES_256_CCM,
649      SSL_kRSA,
650      SSL_aRSA,
651      SSL_AES256CCM,
652      SSL_AEAD,
653      TLS1_2_VERSION, TLS1_2_VERSION,
654      DTLS1_2_VERSION, DTLS1_2_VERSION,
655      SSL_NOT_DEFAULT | SSL_HIGH,
656      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
657      256,
658      256,
659      },
660     {
661      1,
662      TLS1_TXT_DHE_RSA_WITH_AES_128_CCM,
663      TLS1_RFC_DHE_RSA_WITH_AES_128_CCM,
664      TLS1_CK_DHE_RSA_WITH_AES_128_CCM,
665      SSL_kDHE,
666      SSL_aRSA,
667      SSL_AES128CCM,
668      SSL_AEAD,
669      TLS1_2_VERSION, TLS1_2_VERSION,
670      DTLS1_2_VERSION, DTLS1_2_VERSION,
671      SSL_NOT_DEFAULT | SSL_HIGH,
672      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
673      128,
674      128,
675      },
676     {
677      1,
678      TLS1_TXT_DHE_RSA_WITH_AES_256_CCM,
679      TLS1_RFC_DHE_RSA_WITH_AES_256_CCM,
680      TLS1_CK_DHE_RSA_WITH_AES_256_CCM,
681      SSL_kDHE,
682      SSL_aRSA,
683      SSL_AES256CCM,
684      SSL_AEAD,
685      TLS1_2_VERSION, TLS1_2_VERSION,
686      DTLS1_2_VERSION, DTLS1_2_VERSION,
687      SSL_NOT_DEFAULT | SSL_HIGH,
688      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
689      256,
690      256,
691      },
692     {
693      1,
694      TLS1_TXT_RSA_WITH_AES_128_CCM_8,
695      TLS1_RFC_RSA_WITH_AES_128_CCM_8,
696      TLS1_CK_RSA_WITH_AES_128_CCM_8,
697      SSL_kRSA,
698      SSL_aRSA,
699      SSL_AES128CCM8,
700      SSL_AEAD,
701      TLS1_2_VERSION, TLS1_2_VERSION,
702      DTLS1_2_VERSION, DTLS1_2_VERSION,
703      SSL_NOT_DEFAULT | SSL_HIGH,
704      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
705      128,
706      128,
707      },
708     {
709      1,
710      TLS1_TXT_RSA_WITH_AES_256_CCM_8,
711      TLS1_RFC_RSA_WITH_AES_256_CCM_8,
712      TLS1_CK_RSA_WITH_AES_256_CCM_8,
713      SSL_kRSA,
714      SSL_aRSA,
715      SSL_AES256CCM8,
716      SSL_AEAD,
717      TLS1_2_VERSION, TLS1_2_VERSION,
718      DTLS1_2_VERSION, DTLS1_2_VERSION,
719      SSL_NOT_DEFAULT | SSL_HIGH,
720      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
721      256,
722      256,
723      },
724     {
725      1,
726      TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8,
727      TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8,
728      TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8,
729      SSL_kDHE,
730      SSL_aRSA,
731      SSL_AES128CCM8,
732      SSL_AEAD,
733      TLS1_2_VERSION, TLS1_2_VERSION,
734      DTLS1_2_VERSION, DTLS1_2_VERSION,
735      SSL_NOT_DEFAULT | SSL_HIGH,
736      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
737      128,
738      128,
739      },
740     {
741      1,
742      TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8,
743      TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8,
744      TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8,
745      SSL_kDHE,
746      SSL_aRSA,
747      SSL_AES256CCM8,
748      SSL_AEAD,
749      TLS1_2_VERSION, TLS1_2_VERSION,
750      DTLS1_2_VERSION, DTLS1_2_VERSION,
751      SSL_NOT_DEFAULT | SSL_HIGH,
752      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
753      256,
754      256,
755      },
756     {
757      1,
758      TLS1_TXT_PSK_WITH_AES_128_CCM,
759      TLS1_RFC_PSK_WITH_AES_128_CCM,
760      TLS1_CK_PSK_WITH_AES_128_CCM,
761      SSL_kPSK,
762      SSL_aPSK,
763      SSL_AES128CCM,
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_PSK_WITH_AES_256_CCM,
775      TLS1_RFC_PSK_WITH_AES_256_CCM,
776      TLS1_CK_PSK_WITH_AES_256_CCM,
777      SSL_kPSK,
778      SSL_aPSK,
779      SSL_AES256CCM,
780      SSL_AEAD,
781      TLS1_2_VERSION, TLS1_2_VERSION,
782      DTLS1_2_VERSION, DTLS1_2_VERSION,
783      SSL_NOT_DEFAULT | SSL_HIGH,
784      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
785      256,
786      256,
787      },
788     {
789      1,
790      TLS1_TXT_DHE_PSK_WITH_AES_128_CCM,
791      TLS1_RFC_DHE_PSK_WITH_AES_128_CCM,
792      TLS1_CK_DHE_PSK_WITH_AES_128_CCM,
793      SSL_kDHEPSK,
794      SSL_aPSK,
795      SSL_AES128CCM,
796      SSL_AEAD,
797      TLS1_2_VERSION, TLS1_2_VERSION,
798      DTLS1_2_VERSION, DTLS1_2_VERSION,
799      SSL_NOT_DEFAULT | SSL_HIGH,
800      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
801      128,
802      128,
803      },
804     {
805      1,
806      TLS1_TXT_DHE_PSK_WITH_AES_256_CCM,
807      TLS1_RFC_DHE_PSK_WITH_AES_256_CCM,
808      TLS1_CK_DHE_PSK_WITH_AES_256_CCM,
809      SSL_kDHEPSK,
810      SSL_aPSK,
811      SSL_AES256CCM,
812      SSL_AEAD,
813      TLS1_2_VERSION, TLS1_2_VERSION,
814      DTLS1_2_VERSION, DTLS1_2_VERSION,
815      SSL_NOT_DEFAULT | SSL_HIGH,
816      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
817      256,
818      256,
819      },
820     {
821      1,
822      TLS1_TXT_PSK_WITH_AES_128_CCM_8,
823      TLS1_RFC_PSK_WITH_AES_128_CCM_8,
824      TLS1_CK_PSK_WITH_AES_128_CCM_8,
825      SSL_kPSK,
826      SSL_aPSK,
827      SSL_AES128CCM8,
828      SSL_AEAD,
829      TLS1_2_VERSION, TLS1_2_VERSION,
830      DTLS1_2_VERSION, DTLS1_2_VERSION,
831      SSL_NOT_DEFAULT | SSL_HIGH,
832      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
833      128,
834      128,
835      },
836     {
837      1,
838      TLS1_TXT_PSK_WITH_AES_256_CCM_8,
839      TLS1_RFC_PSK_WITH_AES_256_CCM_8,
840      TLS1_CK_PSK_WITH_AES_256_CCM_8,
841      SSL_kPSK,
842      SSL_aPSK,
843      SSL_AES256CCM8,
844      SSL_AEAD,
845      TLS1_2_VERSION, TLS1_2_VERSION,
846      DTLS1_2_VERSION, DTLS1_2_VERSION,
847      SSL_NOT_DEFAULT | SSL_HIGH,
848      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
849      256,
850      256,
851      },
852     {
853      1,
854      TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8,
855      TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8,
856      TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8,
857      SSL_kDHEPSK,
858      SSL_aPSK,
859      SSL_AES128CCM8,
860      SSL_AEAD,
861      TLS1_2_VERSION, TLS1_2_VERSION,
862      DTLS1_2_VERSION, DTLS1_2_VERSION,
863      SSL_NOT_DEFAULT | SSL_HIGH,
864      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
865      128,
866      128,
867      },
868     {
869      1,
870      TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8,
871      TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8,
872      TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8,
873      SSL_kDHEPSK,
874      SSL_aPSK,
875      SSL_AES256CCM8,
876      SSL_AEAD,
877      TLS1_2_VERSION, TLS1_2_VERSION,
878      DTLS1_2_VERSION, DTLS1_2_VERSION,
879      SSL_NOT_DEFAULT | SSL_HIGH,
880      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
881      256,
882      256,
883      },
884     {
885      1,
886      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM,
887      TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM,
888      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM,
889      SSL_kECDHE,
890      SSL_aECDSA,
891      SSL_AES128CCM,
892      SSL_AEAD,
893      TLS1_2_VERSION, TLS1_2_VERSION,
894      DTLS1_2_VERSION, DTLS1_2_VERSION,
895      SSL_NOT_DEFAULT | SSL_HIGH,
896      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
897      128,
898      128,
899      },
900     {
901      1,
902      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM,
903      TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM,
904      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM,
905      SSL_kECDHE,
906      SSL_aECDSA,
907      SSL_AES256CCM,
908      SSL_AEAD,
909      TLS1_2_VERSION, TLS1_2_VERSION,
910      DTLS1_2_VERSION, DTLS1_2_VERSION,
911      SSL_NOT_DEFAULT | SSL_HIGH,
912      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
913      256,
914      256,
915      },
916     {
917      1,
918      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8,
919      TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8,
920      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8,
921      SSL_kECDHE,
922      SSL_aECDSA,
923      SSL_AES128CCM8,
924      SSL_AEAD,
925      TLS1_2_VERSION, TLS1_2_VERSION,
926      DTLS1_2_VERSION, DTLS1_2_VERSION,
927      SSL_NOT_DEFAULT | SSL_HIGH,
928      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
929      128,
930      128,
931      },
932     {
933      1,
934      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8,
935      TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8,
936      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8,
937      SSL_kECDHE,
938      SSL_aECDSA,
939      SSL_AES256CCM8,
940      SSL_AEAD,
941      TLS1_2_VERSION, TLS1_2_VERSION,
942      DTLS1_2_VERSION, DTLS1_2_VERSION,
943      SSL_NOT_DEFAULT | SSL_HIGH,
944      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
945      256,
946      256,
947      },
948     {
949      1,
950      TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
951      TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA,
952      TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
953      SSL_kECDHE,
954      SSL_aECDSA,
955      SSL_eNULL,
956      SSL_SHA1,
957      TLS1_VERSION, TLS1_2_VERSION,
958      DTLS1_BAD_VER, DTLS1_2_VERSION,
959      SSL_STRONG_NONE | SSL_FIPS,
960      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
961      0,
962      0,
963      },
964 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
965     {
966      1,
967      TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
968      TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
969      TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
970      SSL_kECDHE,
971      SSL_aECDSA,
972      SSL_3DES,
973      SSL_SHA1,
974      TLS1_VERSION, TLS1_2_VERSION,
975      DTLS1_BAD_VER, DTLS1_2_VERSION,
976      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
977      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
978      112,
979      168,
980      },
981 # endif
982     {
983      1,
984      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
985      TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
986      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
987      SSL_kECDHE,
988      SSL_aECDSA,
989      SSL_AES128,
990      SSL_SHA1,
991      TLS1_VERSION, TLS1_2_VERSION,
992      DTLS1_BAD_VER, DTLS1_2_VERSION,
993      SSL_HIGH | SSL_FIPS,
994      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
995      128,
996      128,
997      },
998     {
999      1,
1000      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1001      TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1002      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1003      SSL_kECDHE,
1004      SSL_aECDSA,
1005      SSL_AES256,
1006      SSL_SHA1,
1007      TLS1_VERSION, TLS1_2_VERSION,
1008      DTLS1_BAD_VER, DTLS1_2_VERSION,
1009      SSL_HIGH | SSL_FIPS,
1010      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1011      256,
1012      256,
1013      },
1014     {
1015      1,
1016      TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
1017      TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA,
1018      TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
1019      SSL_kECDHE,
1020      SSL_aRSA,
1021      SSL_eNULL,
1022      SSL_SHA1,
1023      TLS1_VERSION, TLS1_2_VERSION,
1024      DTLS1_BAD_VER, DTLS1_2_VERSION,
1025      SSL_STRONG_NONE | SSL_FIPS,
1026      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1027      0,
1028      0,
1029      },
1030 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1031     {
1032      1,
1033      TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1034      TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1035      TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1036      SSL_kECDHE,
1037      SSL_aRSA,
1038      SSL_3DES,
1039      SSL_SHA1,
1040      TLS1_VERSION, TLS1_2_VERSION,
1041      DTLS1_BAD_VER, DTLS1_2_VERSION,
1042      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1043      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1044      112,
1045      168,
1046      },
1047 # endif
1048     {
1049      1,
1050      TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1051      TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1052      TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1053      SSL_kECDHE,
1054      SSL_aRSA,
1055      SSL_AES128,
1056      SSL_SHA1,
1057      TLS1_VERSION, TLS1_2_VERSION,
1058      DTLS1_BAD_VER, DTLS1_2_VERSION,
1059      SSL_HIGH | SSL_FIPS,
1060      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1061      128,
1062      128,
1063      },
1064     {
1065      1,
1066      TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1067      TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1068      TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1069      SSL_kECDHE,
1070      SSL_aRSA,
1071      SSL_AES256,
1072      SSL_SHA1,
1073      TLS1_VERSION, TLS1_2_VERSION,
1074      DTLS1_BAD_VER, DTLS1_2_VERSION,
1075      SSL_HIGH | SSL_FIPS,
1076      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1077      256,
1078      256,
1079      },
1080     {
1081      1,
1082      TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
1083      TLS1_RFC_ECDH_anon_WITH_NULL_SHA,
1084      TLS1_CK_ECDH_anon_WITH_NULL_SHA,
1085      SSL_kECDHE,
1086      SSL_aNULL,
1087      SSL_eNULL,
1088      SSL_SHA1,
1089      TLS1_VERSION, TLS1_2_VERSION,
1090      DTLS1_BAD_VER, DTLS1_2_VERSION,
1091      SSL_STRONG_NONE | SSL_FIPS,
1092      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1093      0,
1094      0,
1095      },
1096 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1097     {
1098      1,
1099      TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
1100      TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA,
1101      TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
1102      SSL_kECDHE,
1103      SSL_aNULL,
1104      SSL_3DES,
1105      SSL_SHA1,
1106      TLS1_VERSION, TLS1_2_VERSION,
1107      DTLS1_BAD_VER, DTLS1_2_VERSION,
1108      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1109      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1110      112,
1111      168,
1112      },
1113 # endif
1114     {
1115      1,
1116      TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
1117      TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA,
1118      TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
1119      SSL_kECDHE,
1120      SSL_aNULL,
1121      SSL_AES128,
1122      SSL_SHA1,
1123      TLS1_VERSION, TLS1_2_VERSION,
1124      DTLS1_BAD_VER, DTLS1_2_VERSION,
1125      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
1126      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1127      128,
1128      128,
1129      },
1130     {
1131      1,
1132      TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
1133      TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA,
1134      TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
1135      SSL_kECDHE,
1136      SSL_aNULL,
1137      SSL_AES256,
1138      SSL_SHA1,
1139      TLS1_VERSION, TLS1_2_VERSION,
1140      DTLS1_BAD_VER, DTLS1_2_VERSION,
1141      SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
1142      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1143      256,
1144      256,
1145      },
1146     {
1147      1,
1148      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
1149      TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256,
1150      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
1151      SSL_kECDHE,
1152      SSL_aECDSA,
1153      SSL_AES128,
1154      SSL_SHA256,
1155      TLS1_2_VERSION, TLS1_2_VERSION,
1156      DTLS1_2_VERSION, DTLS1_2_VERSION,
1157      SSL_HIGH | SSL_FIPS,
1158      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1159      128,
1160      128,
1161      },
1162     {
1163      1,
1164      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
1165      TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384,
1166      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
1167      SSL_kECDHE,
1168      SSL_aECDSA,
1169      SSL_AES256,
1170      SSL_SHA384,
1171      TLS1_2_VERSION, TLS1_2_VERSION,
1172      DTLS1_2_VERSION, DTLS1_2_VERSION,
1173      SSL_HIGH | SSL_FIPS,
1174      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1175      256,
1176      256,
1177      },
1178     {
1179      1,
1180      TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
1181      TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256,
1182      TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
1183      SSL_kECDHE,
1184      SSL_aRSA,
1185      SSL_AES128,
1186      SSL_SHA256,
1187      TLS1_2_VERSION, TLS1_2_VERSION,
1188      DTLS1_2_VERSION, DTLS1_2_VERSION,
1189      SSL_HIGH | SSL_FIPS,
1190      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1191      128,
1192      128,
1193      },
1194     {
1195      1,
1196      TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
1197      TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384,
1198      TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
1199      SSL_kECDHE,
1200      SSL_aRSA,
1201      SSL_AES256,
1202      SSL_SHA384,
1203      TLS1_2_VERSION, TLS1_2_VERSION,
1204      DTLS1_2_VERSION, DTLS1_2_VERSION,
1205      SSL_HIGH | SSL_FIPS,
1206      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1207      256,
1208      256,
1209      },
1210     {
1211      1,
1212      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
1213      TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
1214      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
1215      SSL_kECDHE,
1216      SSL_aECDSA,
1217      SSL_AES128GCM,
1218      SSL_AEAD,
1219      TLS1_2_VERSION, TLS1_2_VERSION,
1220      DTLS1_2_VERSION, DTLS1_2_VERSION,
1221      SSL_HIGH | SSL_FIPS,
1222      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1223      128,
1224      128,
1225      },
1226     {
1227      1,
1228      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
1229      TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
1230      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
1231      SSL_kECDHE,
1232      SSL_aECDSA,
1233      SSL_AES256GCM,
1234      SSL_AEAD,
1235      TLS1_2_VERSION, TLS1_2_VERSION,
1236      DTLS1_2_VERSION, DTLS1_2_VERSION,
1237      SSL_HIGH | SSL_FIPS,
1238      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1239      256,
1240      256,
1241      },
1242     {
1243      1,
1244      TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
1245      TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
1246      TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
1247      SSL_kECDHE,
1248      SSL_aRSA,
1249      SSL_AES128GCM,
1250      SSL_AEAD,
1251      TLS1_2_VERSION, TLS1_2_VERSION,
1252      DTLS1_2_VERSION, DTLS1_2_VERSION,
1253      SSL_HIGH | SSL_FIPS,
1254      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1255      128,
1256      128,
1257      },
1258     {
1259      1,
1260      TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
1261      TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
1262      TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
1263      SSL_kECDHE,
1264      SSL_aRSA,
1265      SSL_AES256GCM,
1266      SSL_AEAD,
1267      TLS1_2_VERSION, TLS1_2_VERSION,
1268      DTLS1_2_VERSION, DTLS1_2_VERSION,
1269      SSL_HIGH | SSL_FIPS,
1270      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1271      256,
1272      256,
1273      },
1274     {
1275      1,
1276      TLS1_TXT_PSK_WITH_NULL_SHA,
1277      TLS1_RFC_PSK_WITH_NULL_SHA,
1278      TLS1_CK_PSK_WITH_NULL_SHA,
1279      SSL_kPSK,
1280      SSL_aPSK,
1281      SSL_eNULL,
1282      SSL_SHA1,
1283      SSL3_VERSION, TLS1_2_VERSION,
1284      DTLS1_BAD_VER, DTLS1_2_VERSION,
1285      SSL_STRONG_NONE | SSL_FIPS,
1286      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1287      0,
1288      0,
1289      },
1290     {
1291      1,
1292      TLS1_TXT_DHE_PSK_WITH_NULL_SHA,
1293      TLS1_RFC_DHE_PSK_WITH_NULL_SHA,
1294      TLS1_CK_DHE_PSK_WITH_NULL_SHA,
1295      SSL_kDHEPSK,
1296      SSL_aPSK,
1297      SSL_eNULL,
1298      SSL_SHA1,
1299      SSL3_VERSION, TLS1_2_VERSION,
1300      DTLS1_BAD_VER, DTLS1_2_VERSION,
1301      SSL_STRONG_NONE | SSL_FIPS,
1302      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1303      0,
1304      0,
1305      },
1306     {
1307      1,
1308      TLS1_TXT_RSA_PSK_WITH_NULL_SHA,
1309      TLS1_RFC_RSA_PSK_WITH_NULL_SHA,
1310      TLS1_CK_RSA_PSK_WITH_NULL_SHA,
1311      SSL_kRSAPSK,
1312      SSL_aRSA,
1313      SSL_eNULL,
1314      SSL_SHA1,
1315      SSL3_VERSION, TLS1_2_VERSION,
1316      DTLS1_BAD_VER, DTLS1_2_VERSION,
1317      SSL_STRONG_NONE | SSL_FIPS,
1318      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1319      0,
1320      0,
1321      },
1322 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1323     {
1324      1,
1325      TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
1326      TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA,
1327      TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
1328      SSL_kPSK,
1329      SSL_aPSK,
1330      SSL_3DES,
1331      SSL_SHA1,
1332      SSL3_VERSION, TLS1_2_VERSION,
1333      DTLS1_BAD_VER, DTLS1_2_VERSION,
1334      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1335      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1336      112,
1337      168,
1338      },
1339 # endif
1340     {
1341      1,
1342      TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
1343      TLS1_RFC_PSK_WITH_AES_128_CBC_SHA,
1344      TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
1345      SSL_kPSK,
1346      SSL_aPSK,
1347      SSL_AES128,
1348      SSL_SHA1,
1349      SSL3_VERSION, TLS1_2_VERSION,
1350      DTLS1_BAD_VER, DTLS1_2_VERSION,
1351      SSL_HIGH | SSL_FIPS,
1352      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1353      128,
1354      128,
1355      },
1356     {
1357      1,
1358      TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
1359      TLS1_RFC_PSK_WITH_AES_256_CBC_SHA,
1360      TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
1361      SSL_kPSK,
1362      SSL_aPSK,
1363      SSL_AES256,
1364      SSL_SHA1,
1365      SSL3_VERSION, TLS1_2_VERSION,
1366      DTLS1_BAD_VER, DTLS1_2_VERSION,
1367      SSL_HIGH | SSL_FIPS,
1368      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1369      256,
1370      256,
1371      },
1372 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1373     {
1374      1,
1375      TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
1376      TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
1377      TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
1378      SSL_kDHEPSK,
1379      SSL_aPSK,
1380      SSL_3DES,
1381      SSL_SHA1,
1382      SSL3_VERSION, TLS1_2_VERSION,
1383      DTLS1_BAD_VER, DTLS1_2_VERSION,
1384      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1385      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1386      112,
1387      168,
1388      },
1389 # endif
1390     {
1391      1,
1392      TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA,
1393      TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA,
1394      TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA,
1395      SSL_kDHEPSK,
1396      SSL_aPSK,
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_DHE_PSK_WITH_AES_256_CBC_SHA,
1409      TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA,
1410      TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA,
1411      SSL_kDHEPSK,
1412      SSL_aPSK,
1413      SSL_AES256,
1414      SSL_SHA1,
1415      SSL3_VERSION, TLS1_2_VERSION,
1416      DTLS1_BAD_VER, DTLS1_2_VERSION,
1417      SSL_HIGH | SSL_FIPS,
1418      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1419      256,
1420      256,
1421      },
1422 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1423     {
1424      1,
1425      TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
1426      TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
1427      TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
1428      SSL_kRSAPSK,
1429      SSL_aRSA,
1430      SSL_3DES,
1431      SSL_SHA1,
1432      SSL3_VERSION, TLS1_2_VERSION,
1433      DTLS1_BAD_VER, DTLS1_2_VERSION,
1434      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1435      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1436      112,
1437      168,
1438      },
1439 # endif
1440     {
1441      1,
1442      TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA,
1443      TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA,
1444      TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA,
1445      SSL_kRSAPSK,
1446      SSL_aRSA,
1447      SSL_AES128,
1448      SSL_SHA1,
1449      SSL3_VERSION, TLS1_2_VERSION,
1450      DTLS1_BAD_VER, DTLS1_2_VERSION,
1451      SSL_HIGH | SSL_FIPS,
1452      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1453      128,
1454      128,
1455      },
1456     {
1457      1,
1458      TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA,
1459      TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA,
1460      TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA,
1461      SSL_kRSAPSK,
1462      SSL_aRSA,
1463      SSL_AES256,
1464      SSL_SHA1,
1465      SSL3_VERSION, TLS1_2_VERSION,
1466      DTLS1_BAD_VER, DTLS1_2_VERSION,
1467      SSL_HIGH | SSL_FIPS,
1468      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1469      256,
1470      256,
1471      },
1472     {
1473      1,
1474      TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256,
1475      TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256,
1476      TLS1_CK_PSK_WITH_AES_128_GCM_SHA256,
1477      SSL_kPSK,
1478      SSL_aPSK,
1479      SSL_AES128GCM,
1480      SSL_AEAD,
1481      TLS1_2_VERSION, TLS1_2_VERSION,
1482      DTLS1_2_VERSION, DTLS1_2_VERSION,
1483      SSL_HIGH | SSL_FIPS,
1484      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1485      128,
1486      128,
1487      },
1488     {
1489      1,
1490      TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384,
1491      TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384,
1492      TLS1_CK_PSK_WITH_AES_256_GCM_SHA384,
1493      SSL_kPSK,
1494      SSL_aPSK,
1495      SSL_AES256GCM,
1496      SSL_AEAD,
1497      TLS1_2_VERSION, TLS1_2_VERSION,
1498      DTLS1_2_VERSION, DTLS1_2_VERSION,
1499      SSL_HIGH | SSL_FIPS,
1500      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1501      256,
1502      256,
1503      },
1504     {
1505      1,
1506      TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256,
1507      TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256,
1508      TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256,
1509      SSL_kDHEPSK,
1510      SSL_aPSK,
1511      SSL_AES128GCM,
1512      SSL_AEAD,
1513      TLS1_2_VERSION, TLS1_2_VERSION,
1514      DTLS1_2_VERSION, DTLS1_2_VERSION,
1515      SSL_HIGH | SSL_FIPS,
1516      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1517      128,
1518      128,
1519      },
1520     {
1521      1,
1522      TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384,
1523      TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384,
1524      TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384,
1525      SSL_kDHEPSK,
1526      SSL_aPSK,
1527      SSL_AES256GCM,
1528      SSL_AEAD,
1529      TLS1_2_VERSION, TLS1_2_VERSION,
1530      DTLS1_2_VERSION, DTLS1_2_VERSION,
1531      SSL_HIGH | SSL_FIPS,
1532      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1533      256,
1534      256,
1535      },
1536     {
1537      1,
1538      TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256,
1539      TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256,
1540      TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256,
1541      SSL_kRSAPSK,
1542      SSL_aRSA,
1543      SSL_AES128GCM,
1544      SSL_AEAD,
1545      TLS1_2_VERSION, TLS1_2_VERSION,
1546      DTLS1_2_VERSION, DTLS1_2_VERSION,
1547      SSL_HIGH | SSL_FIPS,
1548      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1549      128,
1550      128,
1551      },
1552     {
1553      1,
1554      TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384,
1555      TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384,
1556      TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384,
1557      SSL_kRSAPSK,
1558      SSL_aRSA,
1559      SSL_AES256GCM,
1560      SSL_AEAD,
1561      TLS1_2_VERSION, TLS1_2_VERSION,
1562      DTLS1_2_VERSION, DTLS1_2_VERSION,
1563      SSL_HIGH | SSL_FIPS,
1564      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1565      256,
1566      256,
1567      },
1568     {
1569      1,
1570      TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256,
1571      TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256,
1572      TLS1_CK_PSK_WITH_AES_128_CBC_SHA256,
1573      SSL_kPSK,
1574      SSL_aPSK,
1575      SSL_AES128,
1576      SSL_SHA256,
1577      TLS1_VERSION, TLS1_2_VERSION,
1578      DTLS1_BAD_VER, DTLS1_2_VERSION,
1579      SSL_HIGH | SSL_FIPS,
1580      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1581      128,
1582      128,
1583      },
1584     {
1585      1,
1586      TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384,
1587      TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384,
1588      TLS1_CK_PSK_WITH_AES_256_CBC_SHA384,
1589      SSL_kPSK,
1590      SSL_aPSK,
1591      SSL_AES256,
1592      SSL_SHA384,
1593      TLS1_VERSION, TLS1_2_VERSION,
1594      DTLS1_BAD_VER, DTLS1_2_VERSION,
1595      SSL_HIGH | SSL_FIPS,
1596      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1597      256,
1598      256,
1599      },
1600     {
1601      1,
1602      TLS1_TXT_PSK_WITH_NULL_SHA256,
1603      TLS1_RFC_PSK_WITH_NULL_SHA256,
1604      TLS1_CK_PSK_WITH_NULL_SHA256,
1605      SSL_kPSK,
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_PSK_WITH_NULL_SHA384,
1619      TLS1_RFC_PSK_WITH_NULL_SHA384,
1620      TLS1_CK_PSK_WITH_NULL_SHA384,
1621      SSL_kPSK,
1622      SSL_aPSK,
1623      SSL_eNULL,
1624      SSL_SHA384,
1625      TLS1_VERSION, TLS1_2_VERSION,
1626      DTLS1_BAD_VER, DTLS1_2_VERSION,
1627      SSL_STRONG_NONE | SSL_FIPS,
1628      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1629      0,
1630      0,
1631      },
1632     {
1633      1,
1634      TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256,
1635      TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256,
1636      TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256,
1637      SSL_kDHEPSK,
1638      SSL_aPSK,
1639      SSL_AES128,
1640      SSL_SHA256,
1641      TLS1_VERSION, TLS1_2_VERSION,
1642      DTLS1_BAD_VER, DTLS1_2_VERSION,
1643      SSL_HIGH | SSL_FIPS,
1644      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1645      128,
1646      128,
1647      },
1648     {
1649      1,
1650      TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384,
1651      TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384,
1652      TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384,
1653      SSL_kDHEPSK,
1654      SSL_aPSK,
1655      SSL_AES256,
1656      SSL_SHA384,
1657      TLS1_VERSION, TLS1_2_VERSION,
1658      DTLS1_BAD_VER, DTLS1_2_VERSION,
1659      SSL_HIGH | SSL_FIPS,
1660      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1661      256,
1662      256,
1663      },
1664     {
1665      1,
1666      TLS1_TXT_DHE_PSK_WITH_NULL_SHA256,
1667      TLS1_RFC_DHE_PSK_WITH_NULL_SHA256,
1668      TLS1_CK_DHE_PSK_WITH_NULL_SHA256,
1669      SSL_kDHEPSK,
1670      SSL_aPSK,
1671      SSL_eNULL,
1672      SSL_SHA256,
1673      TLS1_VERSION, TLS1_2_VERSION,
1674      DTLS1_BAD_VER, DTLS1_2_VERSION,
1675      SSL_STRONG_NONE | SSL_FIPS,
1676      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1677      0,
1678      0,
1679      },
1680     {
1681      1,
1682      TLS1_TXT_DHE_PSK_WITH_NULL_SHA384,
1683      TLS1_RFC_DHE_PSK_WITH_NULL_SHA384,
1684      TLS1_CK_DHE_PSK_WITH_NULL_SHA384,
1685      SSL_kDHEPSK,
1686      SSL_aPSK,
1687      SSL_eNULL,
1688      SSL_SHA384,
1689      TLS1_VERSION, TLS1_2_VERSION,
1690      DTLS1_BAD_VER, DTLS1_2_VERSION,
1691      SSL_STRONG_NONE | SSL_FIPS,
1692      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1693      0,
1694      0,
1695      },
1696     {
1697      1,
1698      TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256,
1699      TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256,
1700      TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256,
1701      SSL_kRSAPSK,
1702      SSL_aRSA,
1703      SSL_AES128,
1704      SSL_SHA256,
1705      TLS1_VERSION, TLS1_2_VERSION,
1706      DTLS1_BAD_VER, DTLS1_2_VERSION,
1707      SSL_HIGH | SSL_FIPS,
1708      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1709      128,
1710      128,
1711      },
1712     {
1713      1,
1714      TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384,
1715      TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384,
1716      TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384,
1717      SSL_kRSAPSK,
1718      SSL_aRSA,
1719      SSL_AES256,
1720      SSL_SHA384,
1721      TLS1_VERSION, TLS1_2_VERSION,
1722      DTLS1_BAD_VER, DTLS1_2_VERSION,
1723      SSL_HIGH | SSL_FIPS,
1724      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1725      256,
1726      256,
1727      },
1728     {
1729      1,
1730      TLS1_TXT_RSA_PSK_WITH_NULL_SHA256,
1731      TLS1_RFC_RSA_PSK_WITH_NULL_SHA256,
1732      TLS1_CK_RSA_PSK_WITH_NULL_SHA256,
1733      SSL_kRSAPSK,
1734      SSL_aRSA,
1735      SSL_eNULL,
1736      SSL_SHA256,
1737      TLS1_VERSION, TLS1_2_VERSION,
1738      DTLS1_BAD_VER, DTLS1_2_VERSION,
1739      SSL_STRONG_NONE | SSL_FIPS,
1740      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1741      0,
1742      0,
1743      },
1744     {
1745      1,
1746      TLS1_TXT_RSA_PSK_WITH_NULL_SHA384,
1747      TLS1_RFC_RSA_PSK_WITH_NULL_SHA384,
1748      TLS1_CK_RSA_PSK_WITH_NULL_SHA384,
1749      SSL_kRSAPSK,
1750      SSL_aRSA,
1751      SSL_eNULL,
1752      SSL_SHA384,
1753      TLS1_VERSION, TLS1_2_VERSION,
1754      DTLS1_BAD_VER, DTLS1_2_VERSION,
1755      SSL_STRONG_NONE | SSL_FIPS,
1756      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1757      0,
1758      0,
1759      },
1760 #  ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1761     {
1762      1,
1763      TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
1764      TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
1765      TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
1766      SSL_kECDHEPSK,
1767      SSL_aPSK,
1768      SSL_3DES,
1769      SSL_SHA1,
1770      TLS1_VERSION, TLS1_2_VERSION,
1771      DTLS1_BAD_VER, DTLS1_2_VERSION,
1772      SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1773      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1774      112,
1775      168,
1776      },
1777 #  endif
1778     {
1779      1,
1780      TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA,
1781      TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA,
1782      TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA,
1783      SSL_kECDHEPSK,
1784      SSL_aPSK,
1785      SSL_AES128,
1786      SSL_SHA1,
1787      TLS1_VERSION, TLS1_2_VERSION,
1788      DTLS1_BAD_VER, DTLS1_2_VERSION,
1789      SSL_HIGH | SSL_FIPS,
1790      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1791      128,
1792      128,
1793      },
1794     {
1795      1,
1796      TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA,
1797      TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA,
1798      TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA,
1799      SSL_kECDHEPSK,
1800      SSL_aPSK,
1801      SSL_AES256,
1802      SSL_SHA1,
1803      TLS1_VERSION, TLS1_2_VERSION,
1804      DTLS1_BAD_VER, DTLS1_2_VERSION,
1805      SSL_HIGH | SSL_FIPS,
1806      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1807      256,
1808      256,
1809      },
1810     {
1811      1,
1812      TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
1813      TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
1814      TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
1815      SSL_kECDHEPSK,
1816      SSL_aPSK,
1817      SSL_AES128,
1818      SSL_SHA256,
1819      TLS1_VERSION, TLS1_2_VERSION,
1820      DTLS1_BAD_VER, DTLS1_2_VERSION,
1821      SSL_HIGH | SSL_FIPS,
1822      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1823      128,
1824      128,
1825      },
1826     {
1827      1,
1828      TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
1829      TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
1830      TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
1831      SSL_kECDHEPSK,
1832      SSL_aPSK,
1833      SSL_AES256,
1834      SSL_SHA384,
1835      TLS1_VERSION, TLS1_2_VERSION,
1836      DTLS1_BAD_VER, DTLS1_2_VERSION,
1837      SSL_HIGH | SSL_FIPS,
1838      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1839      256,
1840      256,
1841      },
1842     {
1843      1,
1844      TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA,
1845      TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA,
1846      TLS1_CK_ECDHE_PSK_WITH_NULL_SHA,
1847      SSL_kECDHEPSK,
1848      SSL_aPSK,
1849      SSL_eNULL,
1850      SSL_SHA1,
1851      TLS1_VERSION, TLS1_2_VERSION,
1852      DTLS1_BAD_VER, DTLS1_2_VERSION,
1853      SSL_STRONG_NONE | SSL_FIPS,
1854      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1855      0,
1856      0,
1857      },
1858     {
1859      1,
1860      TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256,
1861      TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256,
1862      TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256,
1863      SSL_kECDHEPSK,
1864      SSL_aPSK,
1865      SSL_eNULL,
1866      SSL_SHA256,
1867      TLS1_VERSION, TLS1_2_VERSION,
1868      DTLS1_BAD_VER, DTLS1_2_VERSION,
1869      SSL_STRONG_NONE | SSL_FIPS,
1870      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1871      0,
1872      0,
1873      },
1874     {
1875      1,
1876      TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384,
1877      TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384,
1878      TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384,
1879      SSL_kECDHEPSK,
1880      SSL_aPSK,
1881      SSL_eNULL,
1882      SSL_SHA384,
1883      TLS1_VERSION, TLS1_2_VERSION,
1884      DTLS1_BAD_VER, DTLS1_2_VERSION,
1885      SSL_STRONG_NONE | SSL_FIPS,
1886      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1887      0,
1888      0,
1889      },
1890
1891 # ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1892     {
1893      1,
1894      TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
1895      TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
1896      TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
1897      SSL_kSRP,
1898      SSL_aSRP,
1899      SSL_3DES,
1900      SSL_SHA1,
1901      SSL3_VERSION, TLS1_2_VERSION,
1902      DTLS1_BAD_VER, DTLS1_2_VERSION,
1903      SSL_NOT_DEFAULT | SSL_MEDIUM,
1904      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1905      112,
1906      168,
1907      },
1908     {
1909      1,
1910      TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
1911      TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
1912      TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
1913      SSL_kSRP,
1914      SSL_aRSA,
1915      SSL_3DES,
1916      SSL_SHA1,
1917      SSL3_VERSION, TLS1_2_VERSION,
1918      DTLS1_BAD_VER, DTLS1_2_VERSION,
1919      SSL_NOT_DEFAULT | SSL_MEDIUM,
1920      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1921      112,
1922      168,
1923      },
1924     {
1925      1,
1926      TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
1927      TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
1928      TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
1929      SSL_kSRP,
1930      SSL_aDSS,
1931      SSL_3DES,
1932      SSL_SHA1,
1933      SSL3_VERSION, TLS1_2_VERSION,
1934      DTLS1_BAD_VER, DTLS1_2_VERSION,
1935      SSL_NOT_DEFAULT | SSL_MEDIUM,
1936      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1937      112,
1938      168,
1939      },
1940 # endif
1941     {
1942      1,
1943      TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA,
1944      TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA,
1945      TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA,
1946      SSL_kSRP,
1947      SSL_aSRP,
1948      SSL_AES128,
1949      SSL_SHA1,
1950      SSL3_VERSION, TLS1_2_VERSION,
1951      DTLS1_BAD_VER, DTLS1_2_VERSION,
1952      SSL_HIGH,
1953      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1954      128,
1955      128,
1956      },
1957     {
1958      1,
1959      TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
1960      TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
1961      TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
1962      SSL_kSRP,
1963      SSL_aRSA,
1964      SSL_AES128,
1965      SSL_SHA1,
1966      SSL3_VERSION, TLS1_2_VERSION,
1967      DTLS1_BAD_VER, DTLS1_2_VERSION,
1968      SSL_HIGH,
1969      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1970      128,
1971      128,
1972      },
1973     {
1974      1,
1975      TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
1976      TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
1977      TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
1978      SSL_kSRP,
1979      SSL_aDSS,
1980      SSL_AES128,
1981      SSL_SHA1,
1982      SSL3_VERSION, TLS1_2_VERSION,
1983      DTLS1_BAD_VER, DTLS1_2_VERSION,
1984      SSL_NOT_DEFAULT | SSL_HIGH,
1985      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1986      128,
1987      128,
1988      },
1989     {
1990      1,
1991      TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA,
1992      TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA,
1993      TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA,
1994      SSL_kSRP,
1995      SSL_aSRP,
1996      SSL_AES256,
1997      SSL_SHA1,
1998      SSL3_VERSION, TLS1_2_VERSION,
1999      DTLS1_BAD_VER, DTLS1_2_VERSION,
2000      SSL_HIGH,
2001      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2002      256,
2003      256,
2004      },
2005     {
2006      1,
2007      TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2008      TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2009      TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2010      SSL_kSRP,
2011      SSL_aRSA,
2012      SSL_AES256,
2013      SSL_SHA1,
2014      SSL3_VERSION, TLS1_2_VERSION,
2015      DTLS1_BAD_VER, DTLS1_2_VERSION,
2016      SSL_HIGH,
2017      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2018      256,
2019      256,
2020      },
2021     {
2022      1,
2023      TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2024      TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2025      TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2026      SSL_kSRP,
2027      SSL_aDSS,
2028      SSL_AES256,
2029      SSL_SHA1,
2030      SSL3_VERSION, TLS1_2_VERSION,
2031      DTLS1_BAD_VER, DTLS1_2_VERSION,
2032      SSL_NOT_DEFAULT | SSL_HIGH,
2033      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2034      256,
2035      256,
2036      },
2037
2038 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
2039     {
2040      1,
2041      TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
2042      TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305,
2043      TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305,
2044      SSL_kDHE,
2045      SSL_aRSA,
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_ECDHE_RSA_WITH_CHACHA20_POLY1305,
2058      TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305,
2059      TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305,
2060      SSL_kECDHE,
2061      SSL_aRSA,
2062      SSL_CHACHA20POLY1305,
2063      SSL_AEAD,
2064      TLS1_2_VERSION, TLS1_2_VERSION,
2065      DTLS1_2_VERSION, DTLS1_2_VERSION,
2066      SSL_HIGH,
2067      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2068      256,
2069      256,
2070      },
2071     {
2072      1,
2073      TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
2074      TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
2075      TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
2076      SSL_kECDHE,
2077      SSL_aECDSA,
2078      SSL_CHACHA20POLY1305,
2079      SSL_AEAD,
2080      TLS1_2_VERSION, TLS1_2_VERSION,
2081      DTLS1_2_VERSION, DTLS1_2_VERSION,
2082      SSL_HIGH,
2083      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2084      256,
2085      256,
2086      },
2087     {
2088      1,
2089      TLS1_TXT_PSK_WITH_CHACHA20_POLY1305,
2090      TLS1_RFC_PSK_WITH_CHACHA20_POLY1305,
2091      TLS1_CK_PSK_WITH_CHACHA20_POLY1305,
2092      SSL_kPSK,
2093      SSL_aPSK,
2094      SSL_CHACHA20POLY1305,
2095      SSL_AEAD,
2096      TLS1_2_VERSION, TLS1_2_VERSION,
2097      DTLS1_2_VERSION, DTLS1_2_VERSION,
2098      SSL_HIGH,
2099      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2100      256,
2101      256,
2102      },
2103     {
2104      1,
2105      TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305,
2106      TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305,
2107      TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305,
2108      SSL_kECDHEPSK,
2109      SSL_aPSK,
2110      SSL_CHACHA20POLY1305,
2111      SSL_AEAD,
2112      TLS1_2_VERSION, TLS1_2_VERSION,
2113      DTLS1_2_VERSION, DTLS1_2_VERSION,
2114      SSL_HIGH,
2115      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2116      256,
2117      256,
2118      },
2119     {
2120      1,
2121      TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305,
2122      TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305,
2123      TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305,
2124      SSL_kDHEPSK,
2125      SSL_aPSK,
2126      SSL_CHACHA20POLY1305,
2127      SSL_AEAD,
2128      TLS1_2_VERSION, TLS1_2_VERSION,
2129      DTLS1_2_VERSION, DTLS1_2_VERSION,
2130      SSL_HIGH,
2131      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2132      256,
2133      256,
2134      },
2135     {
2136      1,
2137      TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305,
2138      TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305,
2139      TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305,
2140      SSL_kRSAPSK,
2141      SSL_aRSA,
2142      SSL_CHACHA20POLY1305,
2143      SSL_AEAD,
2144      TLS1_2_VERSION, TLS1_2_VERSION,
2145      DTLS1_2_VERSION, DTLS1_2_VERSION,
2146      SSL_HIGH,
2147      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2148      256,
2149      256,
2150      },
2151 #endif                          /* !defined(OPENSSL_NO_CHACHA) &&
2152                                  * !defined(OPENSSL_NO_POLY1305) */
2153
2154 #ifndef OPENSSL_NO_CAMELLIA
2155     {
2156      1,
2157      TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2158      TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2159      TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2160      SSL_kRSA,
2161      SSL_aRSA,
2162      SSL_CAMELLIA128,
2163      SSL_SHA256,
2164      TLS1_2_VERSION, TLS1_2_VERSION,
2165      DTLS1_2_VERSION, DTLS1_2_VERSION,
2166      SSL_NOT_DEFAULT | SSL_HIGH,
2167      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2168      128,
2169      128,
2170      },
2171     {
2172      1,
2173      TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
2174      TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
2175      TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
2176      SSL_kEDH,
2177      SSL_aDSS,
2178      SSL_CAMELLIA128,
2179      SSL_SHA256,
2180      TLS1_2_VERSION, TLS1_2_VERSION,
2181      DTLS1_2_VERSION, DTLS1_2_VERSION,
2182      SSL_NOT_DEFAULT | SSL_HIGH,
2183      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2184      128,
2185      128,
2186      },
2187     {
2188      1,
2189      TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2190      TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2191      TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2192      SSL_kEDH,
2193      SSL_aRSA,
2194      SSL_CAMELLIA128,
2195      SSL_SHA256,
2196      TLS1_2_VERSION, TLS1_2_VERSION,
2197      DTLS1_2_VERSION, DTLS1_2_VERSION,
2198      SSL_NOT_DEFAULT | SSL_HIGH,
2199      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2200      128,
2201      128,
2202      },
2203     {
2204      1,
2205      TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256,
2206      TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256,
2207      TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256,
2208      SSL_kEDH,
2209      SSL_aNULL,
2210      SSL_CAMELLIA128,
2211      SSL_SHA256,
2212      TLS1_2_VERSION, TLS1_2_VERSION,
2213      DTLS1_2_VERSION, DTLS1_2_VERSION,
2214      SSL_NOT_DEFAULT | SSL_HIGH,
2215      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2216      128,
2217      128,
2218      },
2219     {
2220      1,
2221      TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2222      TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2223      TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2224      SSL_kRSA,
2225      SSL_aRSA,
2226      SSL_CAMELLIA256,
2227      SSL_SHA256,
2228      TLS1_2_VERSION, TLS1_2_VERSION,
2229      DTLS1_2_VERSION, DTLS1_2_VERSION,
2230      SSL_NOT_DEFAULT | SSL_HIGH,
2231      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2232      256,
2233      256,
2234      },
2235     {
2236      1,
2237      TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
2238      TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
2239      TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
2240      SSL_kEDH,
2241      SSL_aDSS,
2242      SSL_CAMELLIA256,
2243      SSL_SHA256,
2244      TLS1_2_VERSION, TLS1_2_VERSION,
2245      DTLS1_2_VERSION, DTLS1_2_VERSION,
2246      SSL_NOT_DEFAULT | SSL_HIGH,
2247      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2248      256,
2249      256,
2250      },
2251     {
2252      1,
2253      TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2254      TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2255      TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2256      SSL_kEDH,
2257      SSL_aRSA,
2258      SSL_CAMELLIA256,
2259      SSL_SHA256,
2260      TLS1_2_VERSION, TLS1_2_VERSION,
2261      DTLS1_2_VERSION, DTLS1_2_VERSION,
2262      SSL_NOT_DEFAULT | SSL_HIGH,
2263      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2264      256,
2265      256,
2266      },
2267     {
2268      1,
2269      TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256,
2270      TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256,
2271      TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256,
2272      SSL_kEDH,
2273      SSL_aNULL,
2274      SSL_CAMELLIA256,
2275      SSL_SHA256,
2276      TLS1_2_VERSION, TLS1_2_VERSION,
2277      DTLS1_2_VERSION, DTLS1_2_VERSION,
2278      SSL_NOT_DEFAULT | SSL_HIGH,
2279      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2280      256,
2281      256,
2282      },
2283     {
2284      1,
2285      TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
2286      TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA,
2287      TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
2288      SSL_kRSA,
2289      SSL_aRSA,
2290      SSL_CAMELLIA256,
2291      SSL_SHA1,
2292      SSL3_VERSION, TLS1_2_VERSION,
2293      DTLS1_BAD_VER, DTLS1_2_VERSION,
2294      SSL_NOT_DEFAULT | SSL_HIGH,
2295      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2296      256,
2297      256,
2298      },
2299     {
2300      1,
2301      TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
2302      TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
2303      TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
2304      SSL_kDHE,
2305      SSL_aDSS,
2306      SSL_CAMELLIA256,
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      256,
2313      256,
2314      },
2315     {
2316      1,
2317      TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
2318      TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
2319      TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
2320      SSL_kDHE,
2321      SSL_aRSA,
2322      SSL_CAMELLIA256,
2323      SSL_SHA1,
2324      SSL3_VERSION, TLS1_2_VERSION,
2325      DTLS1_BAD_VER, DTLS1_2_VERSION,
2326      SSL_NOT_DEFAULT | SSL_HIGH,
2327      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2328      256,
2329      256,
2330      },
2331     {
2332      1,
2333      TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
2334      TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA,
2335      TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
2336      SSL_kDHE,
2337      SSL_aNULL,
2338      SSL_CAMELLIA256,
2339      SSL_SHA1,
2340      SSL3_VERSION, TLS1_2_VERSION,
2341      DTLS1_BAD_VER, DTLS1_2_VERSION,
2342      SSL_NOT_DEFAULT | SSL_HIGH,
2343      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2344      256,
2345      256,
2346      },
2347     {
2348      1,
2349      TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
2350      TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA,
2351      TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
2352      SSL_kRSA,
2353      SSL_aRSA,
2354      SSL_CAMELLIA128,
2355      SSL_SHA1,
2356      SSL3_VERSION, TLS1_2_VERSION,
2357      DTLS1_BAD_VER, DTLS1_2_VERSION,
2358      SSL_NOT_DEFAULT | SSL_HIGH,
2359      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2360      128,
2361      128,
2362      },
2363     {
2364      1,
2365      TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
2366      TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
2367      TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
2368      SSL_kDHE,
2369      SSL_aDSS,
2370      SSL_CAMELLIA128,
2371      SSL_SHA1,
2372      SSL3_VERSION, TLS1_2_VERSION,
2373      DTLS1_BAD_VER, DTLS1_2_VERSION,
2374      SSL_NOT_DEFAULT | SSL_HIGH,
2375      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2376      128,
2377      128,
2378      },
2379     {
2380      1,
2381      TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
2382      TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
2383      TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
2384      SSL_kDHE,
2385      SSL_aRSA,
2386      SSL_CAMELLIA128,
2387      SSL_SHA1,
2388      SSL3_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_ADH_WITH_CAMELLIA_128_CBC_SHA,
2398      TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA,
2399      TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
2400      SSL_kDHE,
2401      SSL_aNULL,
2402      SSL_CAMELLIA128,
2403      SSL_SHA1,
2404      SSL3_VERSION, TLS1_2_VERSION,
2405      DTLS1_BAD_VER, DTLS1_2_VERSION,
2406      SSL_NOT_DEFAULT | SSL_HIGH,
2407      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2408      128,
2409      128,
2410      },
2411     {
2412      1,
2413      TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
2414      TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
2415      TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
2416      SSL_kECDHE,
2417      SSL_aECDSA,
2418      SSL_CAMELLIA128,
2419      SSL_SHA256,
2420      TLS1_2_VERSION, TLS1_2_VERSION,
2421      DTLS1_2_VERSION, DTLS1_2_VERSION,
2422      SSL_NOT_DEFAULT | SSL_HIGH,
2423      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2424      128,
2425      128,
2426      },
2427     {
2428      1,
2429      TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
2430      TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
2431      TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
2432      SSL_kECDHE,
2433      SSL_aECDSA,
2434      SSL_CAMELLIA256,
2435      SSL_SHA384,
2436      TLS1_2_VERSION, TLS1_2_VERSION,
2437      DTLS1_2_VERSION, DTLS1_2_VERSION,
2438      SSL_NOT_DEFAULT | SSL_HIGH,
2439      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2440      256,
2441      256,
2442      },
2443     {
2444      1,
2445      TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2446      TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2447      TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2448      SSL_kECDHE,
2449      SSL_aRSA,
2450      SSL_CAMELLIA128,
2451      SSL_SHA256,
2452      TLS1_2_VERSION, TLS1_2_VERSION,
2453      DTLS1_2_VERSION, DTLS1_2_VERSION,
2454      SSL_NOT_DEFAULT | SSL_HIGH,
2455      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2456      128,
2457      128,
2458      },
2459     {
2460      1,
2461      TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
2462      TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
2463      TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
2464      SSL_kECDHE,
2465      SSL_aRSA,
2466      SSL_CAMELLIA256,
2467      SSL_SHA384,
2468      TLS1_2_VERSION, TLS1_2_VERSION,
2469      DTLS1_2_VERSION, DTLS1_2_VERSION,
2470      SSL_NOT_DEFAULT | SSL_HIGH,
2471      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2472      256,
2473      256,
2474      },
2475     {
2476      1,
2477      TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2478      TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2479      TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2480      SSL_kPSK,
2481      SSL_aPSK,
2482      SSL_CAMELLIA128,
2483      SSL_SHA256,
2484      TLS1_VERSION, TLS1_2_VERSION,
2485      DTLS1_BAD_VER, DTLS1_2_VERSION,
2486      SSL_NOT_DEFAULT | SSL_HIGH,
2487      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2488      128,
2489      128,
2490      },
2491     {
2492      1,
2493      TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2494      TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2495      TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2496      SSL_kPSK,
2497      SSL_aPSK,
2498      SSL_CAMELLIA256,
2499      SSL_SHA384,
2500      TLS1_VERSION, TLS1_2_VERSION,
2501      DTLS1_BAD_VER, DTLS1_2_VERSION,
2502      SSL_NOT_DEFAULT | SSL_HIGH,
2503      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2504      256,
2505      256,
2506      },
2507     {
2508      1,
2509      TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2510      TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2511      TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2512      SSL_kDHEPSK,
2513      SSL_aPSK,
2514      SSL_CAMELLIA128,
2515      SSL_SHA256,
2516      TLS1_VERSION, TLS1_2_VERSION,
2517      DTLS1_BAD_VER, DTLS1_2_VERSION,
2518      SSL_NOT_DEFAULT | SSL_HIGH,
2519      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2520      128,
2521      128,
2522      },
2523     {
2524      1,
2525      TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2526      TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2527      TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2528      SSL_kDHEPSK,
2529      SSL_aPSK,
2530      SSL_CAMELLIA256,
2531      SSL_SHA384,
2532      TLS1_VERSION, TLS1_2_VERSION,
2533      DTLS1_BAD_VER, DTLS1_2_VERSION,
2534      SSL_NOT_DEFAULT | SSL_HIGH,
2535      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2536      256,
2537      256,
2538      },
2539     {
2540      1,
2541      TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2542      TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2543      TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2544      SSL_kRSAPSK,
2545      SSL_aRSA,
2546      SSL_CAMELLIA128,
2547      SSL_SHA256,
2548      TLS1_VERSION, TLS1_2_VERSION,
2549      DTLS1_BAD_VER, DTLS1_2_VERSION,
2550      SSL_NOT_DEFAULT | SSL_HIGH,
2551      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2552      128,
2553      128,
2554      },
2555     {
2556      1,
2557      TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2558      TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2559      TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2560      SSL_kRSAPSK,
2561      SSL_aRSA,
2562      SSL_CAMELLIA256,
2563      SSL_SHA384,
2564      TLS1_VERSION, TLS1_2_VERSION,
2565      DTLS1_BAD_VER, DTLS1_2_VERSION,
2566      SSL_NOT_DEFAULT | SSL_HIGH,
2567      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2568      256,
2569      256,
2570      },
2571     {
2572      1,
2573      TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2574      TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2575      TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2576      SSL_kECDHEPSK,
2577      SSL_aPSK,
2578      SSL_CAMELLIA128,
2579      SSL_SHA256,
2580      TLS1_VERSION, TLS1_2_VERSION,
2581      DTLS1_BAD_VER, DTLS1_2_VERSION,
2582      SSL_NOT_DEFAULT | SSL_HIGH,
2583      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2584      128,
2585      128,
2586      },
2587     {
2588      1,
2589      TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2590      TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2591      TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2592      SSL_kECDHEPSK,
2593      SSL_aPSK,
2594      SSL_CAMELLIA256,
2595      SSL_SHA384,
2596      TLS1_VERSION, TLS1_2_VERSION,
2597      DTLS1_BAD_VER, DTLS1_2_VERSION,
2598      SSL_NOT_DEFAULT | SSL_HIGH,
2599      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2600      256,
2601      256,
2602      },
2603 #endif                          /* OPENSSL_NO_CAMELLIA */
2604
2605 #ifndef OPENSSL_NO_GOST
2606     {
2607      1,
2608      "GOST2001-GOST89-GOST89",
2609      "TLS_GOSTR341001_WITH_28147_CNT_IMIT",
2610      0x3000081,
2611      SSL_kGOST,
2612      SSL_aGOST01,
2613      SSL_eGOST2814789CNT,
2614      SSL_GOST89MAC,
2615      TLS1_VERSION, TLS1_2_VERSION,
2616      0, 0,
2617      SSL_HIGH,
2618      SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC,
2619      256,
2620      256,
2621      },
2622     {
2623      1,
2624      "GOST2001-NULL-GOST94",
2625      "TLS_GOSTR341001_WITH_NULL_GOSTR3411",
2626      0x3000083,
2627      SSL_kGOST,
2628      SSL_aGOST01,
2629      SSL_eNULL,
2630      SSL_GOST94,
2631      TLS1_VERSION, TLS1_2_VERSION,
2632      0, 0,
2633      SSL_STRONG_NONE,
2634      SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94,
2635      0,
2636      0,
2637      },
2638     {
2639      1,
2640      "IANA-GOST2012-GOST8912-GOST8912",
2641      NULL,
2642      0x0300c102,
2643      SSL_kGOST,
2644      SSL_aGOST12 | SSL_aGOST01,
2645      SSL_eGOST2814789CNT12,
2646      SSL_GOST89MAC12,
2647      TLS1_VERSION, TLS1_2_VERSION,
2648      0, 0,
2649      SSL_HIGH,
2650      SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
2651      256,
2652      256,
2653      },
2654     {
2655      1,
2656      "LEGACY-GOST2012-GOST8912-GOST8912",
2657      NULL,
2658      0x0300ff85,
2659      SSL_kGOST,
2660      SSL_aGOST12 | SSL_aGOST01,
2661      SSL_eGOST2814789CNT12,
2662      SSL_GOST89MAC12,
2663      TLS1_VERSION, TLS1_2_VERSION,
2664      0, 0,
2665      SSL_HIGH,
2666      SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
2667      256,
2668      256,
2669      },
2670     {
2671      1,
2672      "GOST2012-NULL-GOST12",
2673      NULL,
2674      0x0300ff87,
2675      SSL_kGOST,
2676      SSL_aGOST12 | SSL_aGOST01,
2677      SSL_eNULL,
2678      SSL_GOST12_256,
2679      TLS1_VERSION, TLS1_2_VERSION,
2680      0, 0,
2681      SSL_STRONG_NONE,
2682      SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
2683      0,
2684      0,
2685      },
2686     {
2687      1,
2688      "GOST2012-KUZNYECHIK-KUZNYECHIKOMAC",
2689      NULL,
2690      0x0300C100,
2691      SSL_kGOST18,
2692      SSL_aGOST12,
2693      SSL_KUZNYECHIK,
2694      SSL_KUZNYECHIKOMAC,
2695      TLS1_2_VERSION, TLS1_2_VERSION,
2696      0, 0,
2697      SSL_HIGH,
2698      SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_TLSTREE,
2699      256,
2700      256,
2701      },
2702     {
2703      1,
2704      "GOST2012-MAGMA-MAGMAOMAC",
2705      NULL,
2706      0x0300C101,
2707      SSL_kGOST18,
2708      SSL_aGOST12,
2709      SSL_MAGMA,
2710      SSL_MAGMAOMAC,
2711      TLS1_2_VERSION, TLS1_2_VERSION,
2712      0, 0,
2713      SSL_HIGH,
2714      SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_TLSTREE,
2715      256,
2716      256,
2717      },
2718 #endif                          /* OPENSSL_NO_GOST */
2719
2720 #ifndef OPENSSL_NO_IDEA
2721     {
2722      1,
2723      SSL3_TXT_RSA_IDEA_128_SHA,
2724      SSL3_RFC_RSA_IDEA_128_SHA,
2725      SSL3_CK_RSA_IDEA_128_SHA,
2726      SSL_kRSA,
2727      SSL_aRSA,
2728      SSL_IDEA,
2729      SSL_SHA1,
2730      SSL3_VERSION, TLS1_1_VERSION,
2731      DTLS1_BAD_VER, DTLS1_VERSION,
2732      SSL_NOT_DEFAULT | SSL_MEDIUM,
2733      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2734      128,
2735      128,
2736      },
2737 #endif
2738
2739 #ifndef OPENSSL_NO_SEED
2740     {
2741      1,
2742      TLS1_TXT_RSA_WITH_SEED_SHA,
2743      TLS1_RFC_RSA_WITH_SEED_SHA,
2744      TLS1_CK_RSA_WITH_SEED_SHA,
2745      SSL_kRSA,
2746      SSL_aRSA,
2747      SSL_SEED,
2748      SSL_SHA1,
2749      SSL3_VERSION, TLS1_2_VERSION,
2750      DTLS1_BAD_VER, DTLS1_2_VERSION,
2751      SSL_NOT_DEFAULT | SSL_MEDIUM,
2752      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2753      128,
2754      128,
2755      },
2756     {
2757      1,
2758      TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
2759      TLS1_RFC_DHE_DSS_WITH_SEED_SHA,
2760      TLS1_CK_DHE_DSS_WITH_SEED_SHA,
2761      SSL_kDHE,
2762      SSL_aDSS,
2763      SSL_SEED,
2764      SSL_SHA1,
2765      SSL3_VERSION, TLS1_2_VERSION,
2766      DTLS1_BAD_VER, DTLS1_2_VERSION,
2767      SSL_NOT_DEFAULT | SSL_MEDIUM,
2768      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2769      128,
2770      128,
2771      },
2772     {
2773      1,
2774      TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
2775      TLS1_RFC_DHE_RSA_WITH_SEED_SHA,
2776      TLS1_CK_DHE_RSA_WITH_SEED_SHA,
2777      SSL_kDHE,
2778      SSL_aRSA,
2779      SSL_SEED,
2780      SSL_SHA1,
2781      SSL3_VERSION, TLS1_2_VERSION,
2782      DTLS1_BAD_VER, DTLS1_2_VERSION,
2783      SSL_NOT_DEFAULT | SSL_MEDIUM,
2784      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2785      128,
2786      128,
2787      },
2788     {
2789      1,
2790      TLS1_TXT_ADH_WITH_SEED_SHA,
2791      TLS1_RFC_ADH_WITH_SEED_SHA,
2792      TLS1_CK_ADH_WITH_SEED_SHA,
2793      SSL_kDHE,
2794      SSL_aNULL,
2795      SSL_SEED,
2796      SSL_SHA1,
2797      SSL3_VERSION, TLS1_2_VERSION,
2798      DTLS1_BAD_VER, DTLS1_2_VERSION,
2799      SSL_NOT_DEFAULT | SSL_MEDIUM,
2800      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2801      128,
2802      128,
2803      },
2804 #endif                          /* OPENSSL_NO_SEED */
2805
2806 #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
2807     {
2808      1,
2809      SSL3_TXT_RSA_RC4_128_MD5,
2810      SSL3_RFC_RSA_RC4_128_MD5,
2811      SSL3_CK_RSA_RC4_128_MD5,
2812      SSL_kRSA,
2813      SSL_aRSA,
2814      SSL_RC4,
2815      SSL_MD5,
2816      SSL3_VERSION, TLS1_2_VERSION,
2817      0, 0,
2818      SSL_NOT_DEFAULT | SSL_MEDIUM,
2819      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2820      128,
2821      128,
2822      },
2823     {
2824      1,
2825      SSL3_TXT_RSA_RC4_128_SHA,
2826      SSL3_RFC_RSA_RC4_128_SHA,
2827      SSL3_CK_RSA_RC4_128_SHA,
2828      SSL_kRSA,
2829      SSL_aRSA,
2830      SSL_RC4,
2831      SSL_SHA1,
2832      SSL3_VERSION, TLS1_2_VERSION,
2833      0, 0,
2834      SSL_NOT_DEFAULT | SSL_MEDIUM,
2835      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2836      128,
2837      128,
2838      },
2839     {
2840      1,
2841      SSL3_TXT_ADH_RC4_128_MD5,
2842      SSL3_RFC_ADH_RC4_128_MD5,
2843      SSL3_CK_ADH_RC4_128_MD5,
2844      SSL_kDHE,
2845      SSL_aNULL,
2846      SSL_RC4,
2847      SSL_MD5,
2848      SSL3_VERSION, TLS1_2_VERSION,
2849      0, 0,
2850      SSL_NOT_DEFAULT | SSL_MEDIUM,
2851      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2852      128,
2853      128,
2854      },
2855     {
2856      1,
2857      TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA,
2858      TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA,
2859      TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA,
2860      SSL_kECDHEPSK,
2861      SSL_aPSK,
2862      SSL_RC4,
2863      SSL_SHA1,
2864      TLS1_VERSION, TLS1_2_VERSION,
2865      0, 0,
2866      SSL_NOT_DEFAULT | SSL_MEDIUM,
2867      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2868      128,
2869      128,
2870      },
2871     {
2872      1,
2873      TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
2874      TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA,
2875      TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
2876      SSL_kECDHE,
2877      SSL_aNULL,
2878      SSL_RC4,
2879      SSL_SHA1,
2880      TLS1_VERSION, TLS1_2_VERSION,
2881      0, 0,
2882      SSL_NOT_DEFAULT | SSL_MEDIUM,
2883      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2884      128,
2885      128,
2886      },
2887     {
2888      1,
2889      TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
2890      TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA,
2891      TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
2892      SSL_kECDHE,
2893      SSL_aECDSA,
2894      SSL_RC4,
2895      SSL_SHA1,
2896      TLS1_VERSION, TLS1_2_VERSION,
2897      0, 0,
2898      SSL_NOT_DEFAULT | SSL_MEDIUM,
2899      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2900      128,
2901      128,
2902      },
2903     {
2904      1,
2905      TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
2906      TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA,
2907      TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
2908      SSL_kECDHE,
2909      SSL_aRSA,
2910      SSL_RC4,
2911      SSL_SHA1,
2912      TLS1_VERSION, TLS1_2_VERSION,
2913      0, 0,
2914      SSL_NOT_DEFAULT | SSL_MEDIUM,
2915      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2916      128,
2917      128,
2918      },
2919     {
2920      1,
2921      TLS1_TXT_PSK_WITH_RC4_128_SHA,
2922      TLS1_RFC_PSK_WITH_RC4_128_SHA,
2923      TLS1_CK_PSK_WITH_RC4_128_SHA,
2924      SSL_kPSK,
2925      SSL_aPSK,
2926      SSL_RC4,
2927      SSL_SHA1,
2928      SSL3_VERSION, TLS1_2_VERSION,
2929      0, 0,
2930      SSL_NOT_DEFAULT | SSL_MEDIUM,
2931      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2932      128,
2933      128,
2934      },
2935     {
2936      1,
2937      TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA,
2938      TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA,
2939      TLS1_CK_RSA_PSK_WITH_RC4_128_SHA,
2940      SSL_kRSAPSK,
2941      SSL_aRSA,
2942      SSL_RC4,
2943      SSL_SHA1,
2944      SSL3_VERSION, TLS1_2_VERSION,
2945      0, 0,
2946      SSL_NOT_DEFAULT | SSL_MEDIUM,
2947      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2948      128,
2949      128,
2950      },
2951     {
2952      1,
2953      TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA,
2954      TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA,
2955      TLS1_CK_DHE_PSK_WITH_RC4_128_SHA,
2956      SSL_kDHEPSK,
2957      SSL_aPSK,
2958      SSL_RC4,
2959      SSL_SHA1,
2960      SSL3_VERSION, TLS1_2_VERSION,
2961      0, 0,
2962      SSL_NOT_DEFAULT | SSL_MEDIUM,
2963      SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2964      128,
2965      128,
2966      },
2967 #endif                          /* OPENSSL_NO_WEAK_SSL_CIPHERS */
2968
2969 #ifndef OPENSSL_NO_ARIA
2970     {
2971      1,
2972      TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256,
2973      TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256,
2974      TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256,
2975      SSL_kRSA,
2976      SSL_aRSA,
2977      SSL_ARIA128GCM,
2978      SSL_AEAD,
2979      TLS1_2_VERSION, TLS1_2_VERSION,
2980      DTLS1_2_VERSION, DTLS1_2_VERSION,
2981      SSL_NOT_DEFAULT | SSL_HIGH,
2982      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2983      128,
2984      128,
2985      },
2986     {
2987      1,
2988      TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384,
2989      TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384,
2990      TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384,
2991      SSL_kRSA,
2992      SSL_aRSA,
2993      SSL_ARIA256GCM,
2994      SSL_AEAD,
2995      TLS1_2_VERSION, TLS1_2_VERSION,
2996      DTLS1_2_VERSION, DTLS1_2_VERSION,
2997      SSL_NOT_DEFAULT | SSL_HIGH,
2998      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2999      256,
3000      256,
3001      },
3002     {
3003      1,
3004      TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
3005      TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
3006      TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
3007      SSL_kDHE,
3008      SSL_aRSA,
3009      SSL_ARIA128GCM,
3010      SSL_AEAD,
3011      TLS1_2_VERSION, TLS1_2_VERSION,
3012      DTLS1_2_VERSION, DTLS1_2_VERSION,
3013      SSL_NOT_DEFAULT | SSL_HIGH,
3014      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3015      128,
3016      128,
3017      },
3018     {
3019      1,
3020      TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
3021      TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
3022      TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
3023      SSL_kDHE,
3024      SSL_aRSA,
3025      SSL_ARIA256GCM,
3026      SSL_AEAD,
3027      TLS1_2_VERSION, TLS1_2_VERSION,
3028      DTLS1_2_VERSION, DTLS1_2_VERSION,
3029      SSL_NOT_DEFAULT | SSL_HIGH,
3030      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3031      256,
3032      256,
3033      },
3034     {
3035      1,
3036      TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
3037      TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
3038      TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
3039      SSL_kDHE,
3040      SSL_aDSS,
3041      SSL_ARIA128GCM,
3042      SSL_AEAD,
3043      TLS1_2_VERSION, TLS1_2_VERSION,
3044      DTLS1_2_VERSION, DTLS1_2_VERSION,
3045      SSL_NOT_DEFAULT | SSL_HIGH,
3046      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3047      128,
3048      128,
3049      },
3050     {
3051      1,
3052      TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
3053      TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
3054      TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
3055      SSL_kDHE,
3056      SSL_aDSS,
3057      SSL_ARIA256GCM,
3058      SSL_AEAD,
3059      TLS1_2_VERSION, TLS1_2_VERSION,
3060      DTLS1_2_VERSION, DTLS1_2_VERSION,
3061      SSL_NOT_DEFAULT | SSL_HIGH,
3062      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3063      256,
3064      256,
3065      },
3066     {
3067      1,
3068      TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
3069      TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
3070      TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
3071      SSL_kECDHE,
3072      SSL_aECDSA,
3073      SSL_ARIA128GCM,
3074      SSL_AEAD,
3075      TLS1_2_VERSION, TLS1_2_VERSION,
3076      DTLS1_2_VERSION, DTLS1_2_VERSION,
3077      SSL_NOT_DEFAULT | SSL_HIGH,
3078      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3079      128,
3080      128,
3081      },
3082     {
3083      1,
3084      TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
3085      TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
3086      TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
3087      SSL_kECDHE,
3088      SSL_aECDSA,
3089      SSL_ARIA256GCM,
3090      SSL_AEAD,
3091      TLS1_2_VERSION, TLS1_2_VERSION,
3092      DTLS1_2_VERSION, DTLS1_2_VERSION,
3093      SSL_NOT_DEFAULT | SSL_HIGH,
3094      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3095      256,
3096      256,
3097      },
3098     {
3099      1,
3100      TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
3101      TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
3102      TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
3103      SSL_kECDHE,
3104      SSL_aRSA,
3105      SSL_ARIA128GCM,
3106      SSL_AEAD,
3107      TLS1_2_VERSION, TLS1_2_VERSION,
3108      DTLS1_2_VERSION, DTLS1_2_VERSION,
3109      SSL_NOT_DEFAULT | SSL_HIGH,
3110      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3111      128,
3112      128,
3113      },
3114     {
3115      1,
3116      TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
3117      TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
3118      TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
3119      SSL_kECDHE,
3120      SSL_aRSA,
3121      SSL_ARIA256GCM,
3122      SSL_AEAD,
3123      TLS1_2_VERSION, TLS1_2_VERSION,
3124      DTLS1_2_VERSION, DTLS1_2_VERSION,
3125      SSL_NOT_DEFAULT | SSL_HIGH,
3126      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3127      256,
3128      256,
3129      },
3130     {
3131      1,
3132      TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256,
3133      TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256,
3134      TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256,
3135      SSL_kPSK,
3136      SSL_aPSK,
3137      SSL_ARIA128GCM,
3138      SSL_AEAD,
3139      TLS1_2_VERSION, TLS1_2_VERSION,
3140      DTLS1_2_VERSION, DTLS1_2_VERSION,
3141      SSL_NOT_DEFAULT | SSL_HIGH,
3142      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3143      128,
3144      128,
3145      },
3146     {
3147      1,
3148      TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384,
3149      TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384,
3150      TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384,
3151      SSL_kPSK,
3152      SSL_aPSK,
3153      SSL_ARIA256GCM,
3154      SSL_AEAD,
3155      TLS1_2_VERSION, TLS1_2_VERSION,
3156      DTLS1_2_VERSION, DTLS1_2_VERSION,
3157      SSL_NOT_DEFAULT | SSL_HIGH,
3158      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3159      256,
3160      256,
3161      },
3162     {
3163      1,
3164      TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
3165      TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
3166      TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
3167      SSL_kDHEPSK,
3168      SSL_aPSK,
3169      SSL_ARIA128GCM,
3170      SSL_AEAD,
3171      TLS1_2_VERSION, TLS1_2_VERSION,
3172      DTLS1_2_VERSION, DTLS1_2_VERSION,
3173      SSL_NOT_DEFAULT | SSL_HIGH,
3174      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3175      128,
3176      128,
3177      },
3178     {
3179      1,
3180      TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
3181      TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
3182      TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
3183      SSL_kDHEPSK,
3184      SSL_aPSK,
3185      SSL_ARIA256GCM,
3186      SSL_AEAD,
3187      TLS1_2_VERSION, TLS1_2_VERSION,
3188      DTLS1_2_VERSION, DTLS1_2_VERSION,
3189      SSL_NOT_DEFAULT | SSL_HIGH,
3190      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3191      256,
3192      256,
3193      },
3194     {
3195      1,
3196      TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
3197      TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
3198      TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
3199      SSL_kRSAPSK,
3200      SSL_aRSA,
3201      SSL_ARIA128GCM,
3202      SSL_AEAD,
3203      TLS1_2_VERSION, TLS1_2_VERSION,
3204      DTLS1_2_VERSION, DTLS1_2_VERSION,
3205      SSL_NOT_DEFAULT | SSL_HIGH,
3206      SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
3207      128,
3208      128,
3209      },
3210     {
3211      1,
3212      TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
3213      TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
3214      TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
3215      SSL_kRSAPSK,
3216      SSL_aRSA,
3217      SSL_ARIA256GCM,
3218      SSL_AEAD,
3219      TLS1_2_VERSION, TLS1_2_VERSION,
3220      DTLS1_2_VERSION, DTLS1_2_VERSION,
3221      SSL_NOT_DEFAULT | SSL_HIGH,
3222      SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
3223      256,
3224      256,
3225      },
3226 #endif /* OPENSSL_NO_ARIA */
3227 };
3228
3229 /*
3230  * The list of known Signalling Cipher-Suite Value "ciphers", non-valid
3231  * values stuffed into the ciphers field of the wire protocol for signalling
3232  * purposes.
3233  */
3234 static SSL_CIPHER ssl3_scsvs[] = {
3235     {
3236      0,
3237      "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
3238      "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
3239      SSL3_CK_SCSV,
3240      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3241     },
3242     {
3243      0,
3244      "TLS_FALLBACK_SCSV",
3245      "TLS_FALLBACK_SCSV",
3246      SSL3_CK_FALLBACK_SCSV,
3247      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3248     },
3249 };
3250
3251 static int cipher_compare(const void *a, const void *b)
3252 {
3253     const SSL_CIPHER *ap = (const SSL_CIPHER *)a;
3254     const SSL_CIPHER *bp = (const SSL_CIPHER *)b;
3255
3256     if (ap->id == bp->id)
3257         return 0;
3258     return ap->id < bp->id ? -1 : 1;
3259 }
3260
3261 void ssl_sort_cipher_list(void)
3262 {
3263     qsort(tls13_ciphers, TLS13_NUM_CIPHERS, sizeof(tls13_ciphers[0]),
3264           cipher_compare);
3265     qsort(ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(ssl3_ciphers[0]),
3266           cipher_compare);
3267     qsort(ssl3_scsvs, SSL3_NUM_SCSVS, sizeof(ssl3_scsvs[0]), cipher_compare);
3268 }
3269
3270 static int ssl_undefined_function_1(SSL *ssl, unsigned char *r, size_t s,
3271                                     const char * t, size_t u,
3272                                     const unsigned char * v, size_t w, int x)
3273 {
3274     (void)r;
3275     (void)s;
3276     (void)t;
3277     (void)u;
3278     (void)v;
3279     (void)w;
3280     (void)x;
3281     return ssl_undefined_function(ssl);
3282 }
3283
3284 const SSL3_ENC_METHOD SSLv3_enc_data = {
3285     ssl3_enc,
3286     n_ssl3_mac,
3287     ssl3_setup_key_block,
3288     ssl3_generate_master_secret,
3289     ssl3_change_cipher_state,
3290     ssl3_final_finish_mac,
3291     SSL3_MD_CLIENT_FINISHED_CONST, 4,
3292     SSL3_MD_SERVER_FINISHED_CONST, 4,
3293     ssl3_alert_code,
3294     ssl_undefined_function_1,
3295     0,
3296     ssl3_set_handshake_header,
3297     tls_close_construct_packet,
3298     ssl3_handshake_write
3299 };
3300
3301 long ssl3_default_timeout(void)
3302 {
3303     /*
3304      * 2 hours, the 24 hours mentioned in the SSLv3 spec is way too long for
3305      * http, the cache would over fill
3306      */
3307     return (60 * 60 * 2);
3308 }
3309
3310 int ssl3_num_ciphers(void)
3311 {
3312     return SSL3_NUM_CIPHERS;
3313 }
3314
3315 const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
3316 {
3317     if (u < SSL3_NUM_CIPHERS)
3318         return &(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]);
3319     else
3320         return NULL;
3321 }
3322
3323 int ssl3_set_handshake_header(SSL *s, WPACKET *pkt, int htype)
3324 {
3325     /* No header in the event of a CCS */
3326     if (htype == SSL3_MT_CHANGE_CIPHER_SPEC)
3327         return 1;
3328
3329     /* Set the content type and 3 bytes for the message len */
3330     if (!WPACKET_put_bytes_u8(pkt, htype)
3331             || !WPACKET_start_sub_packet_u24(pkt))
3332         return 0;
3333
3334     return 1;
3335 }
3336
3337 int ssl3_handshake_write(SSL *s)
3338 {
3339     return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
3340 }
3341
3342 int ssl3_new(SSL *s)
3343 {
3344 #ifndef OPENSSL_NO_SRP
3345     if (!SSL_SRP_CTX_init(s))
3346         return 0;
3347 #endif
3348
3349     if (!s->method->ssl_clear(s))
3350         return 0;
3351
3352     return 1;
3353 }
3354
3355 void ssl3_free(SSL *s)
3356 {
3357     if (s == NULL)
3358         return;
3359
3360     ssl3_cleanup_key_block(s);
3361
3362 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
3363     EVP_PKEY_free(s->s3.peer_tmp);
3364     s->s3.peer_tmp = NULL;
3365     EVP_PKEY_free(s->s3.tmp.pkey);
3366     s->s3.tmp.pkey = NULL;
3367 #endif
3368
3369     ssl_evp_cipher_free(s->s3.tmp.new_sym_enc);
3370     ssl_evp_md_free(s->s3.tmp.new_hash);
3371
3372     OPENSSL_free(s->s3.tmp.ctype);
3373     sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
3374     OPENSSL_free(s->s3.tmp.ciphers_raw);
3375     OPENSSL_clear_free(s->s3.tmp.pms, s->s3.tmp.pmslen);
3376     OPENSSL_free(s->s3.tmp.peer_sigalgs);
3377     OPENSSL_free(s->s3.tmp.peer_cert_sigalgs);
3378     ssl3_free_digest_list(s);
3379     OPENSSL_free(s->s3.alpn_selected);
3380     OPENSSL_free(s->s3.alpn_proposed);
3381
3382 #ifndef OPENSSL_NO_SRP
3383     SSL_SRP_CTX_free(s);
3384 #endif
3385     memset(&s->s3, 0, sizeof(s->s3));
3386 }
3387
3388 int ssl3_clear(SSL *s)
3389 {
3390     ssl3_cleanup_key_block(s);
3391     OPENSSL_free(s->s3.tmp.ctype);
3392     sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
3393     OPENSSL_free(s->s3.tmp.ciphers_raw);
3394     OPENSSL_clear_free(s->s3.tmp.pms, s->s3.tmp.pmslen);
3395     OPENSSL_free(s->s3.tmp.peer_sigalgs);
3396     OPENSSL_free(s->s3.tmp.peer_cert_sigalgs);
3397
3398 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
3399     EVP_PKEY_free(s->s3.tmp.pkey);
3400     EVP_PKEY_free(s->s3.peer_tmp);
3401 #endif                          /* !OPENSSL_NO_EC */
3402
3403     ssl3_free_digest_list(s);
3404
3405     OPENSSL_free(s->s3.alpn_selected);
3406     OPENSSL_free(s->s3.alpn_proposed);
3407
3408     /* NULL/zero-out everything in the s3 struct */
3409     memset(&s->s3, 0, sizeof(s->s3));
3410
3411     if (!ssl_free_wbio_buffer(s))
3412         return 0;
3413
3414     s->version = SSL3_VERSION;
3415
3416 #if !defined(OPENSSL_NO_NEXTPROTONEG)
3417     OPENSSL_free(s->ext.npn);
3418     s->ext.npn = NULL;
3419     s->ext.npn_len = 0;
3420 #endif
3421
3422     return 1;
3423 }
3424
3425 #ifndef OPENSSL_NO_SRP
3426 static char *srp_password_from_info_cb(SSL *s, void *arg)
3427 {
3428     return OPENSSL_strdup(s->srp_ctx.info);
3429 }
3430 #endif
3431
3432 static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
3433
3434 long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
3435 {
3436     int ret = 0;
3437
3438     switch (cmd) {
3439     case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
3440         break;
3441     case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
3442         ret = s->s3.num_renegotiations;
3443         break;
3444     case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
3445         ret = s->s3.num_renegotiations;
3446         s->s3.num_renegotiations = 0;
3447         break;
3448     case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
3449         ret = s->s3.total_renegotiations;
3450         break;
3451     case SSL_CTRL_GET_FLAGS:
3452         ret = (int)(s->s3.flags);
3453         break;
3454 #ifndef OPENSSL_NO_DH
3455 # ifndef OPENSSL_NO_DEPRECATED_3_0
3456     case SSL_CTRL_SET_TMP_DH:
3457         {
3458             EVP_PKEY *pkdh = NULL;
3459             if (parg == NULL) {
3460                 ERR_raise(ERR_LIB_SSL, ERR_R_PASSED_NULL_PARAMETER);
3461                 return 0;
3462             }
3463             pkdh = ssl_dh_to_pkey(parg);
3464             if (pkdh == NULL) {
3465                 ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE);
3466                 return 0;
3467             }
3468             return SSL_set0_tmp_dh_pkey(s, pkdh);
3469         }
3470         break;
3471     case SSL_CTRL_SET_TMP_DH_CB:
3472         {
3473             ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3474             return ret;
3475         }
3476 # endif
3477     case SSL_CTRL_SET_DH_AUTO:
3478         s->cert->dh_tmp_auto = larg;
3479         return 1;
3480 #endif
3481 #ifndef OPENSSL_NO_EC
3482     case SSL_CTRL_SET_TMP_ECDH:
3483         {
3484             const EC_GROUP *group = NULL;
3485             int nid;
3486
3487             if (parg == NULL) {
3488                 ERR_raise(ERR_LIB_SSL, ERR_R_PASSED_NULL_PARAMETER);
3489                 return 0;
3490             }
3491             group = EC_KEY_get0_group((const EC_KEY *)parg);
3492             if (group == NULL) {
3493                 ERR_raise(ERR_LIB_SSL, EC_R_MISSING_PARAMETERS);
3494                 return 0;
3495             }
3496             nid = EC_GROUP_get_curve_name(group);
3497             if (nid == NID_undef)
3498                 return 0;
3499             return tls1_set_groups(&s->ext.supportedgroups,
3500                                    &s->ext.supportedgroups_len,
3501                                    &nid, 1);
3502         }
3503         break;
3504 #endif                          /* !OPENSSL_NO_EC */
3505     case SSL_CTRL_SET_TLSEXT_HOSTNAME:
3506         /*
3507          * TODO(OpenSSL1.2)
3508          * This API is only used for a client to set what SNI it will request
3509          * from the server, but we currently allow it to be used on servers
3510          * as well, which is a programming error.  Currently we just clear
3511          * the field in SSL_do_handshake() for server SSLs, but when we can
3512          * make ABI-breaking changes, we may want to make use of this API
3513          * an error on server SSLs.
3514          */
3515         if (larg == TLSEXT_NAMETYPE_host_name) {
3516             size_t len;
3517
3518             OPENSSL_free(s->ext.hostname);
3519             s->ext.hostname = NULL;
3520
3521             ret = 1;
3522             if (parg == NULL)
3523                 break;
3524             len = strlen((char *)parg);
3525             if (len == 0 || len > TLSEXT_MAXLEN_host_name) {
3526                 ERR_raise(ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
3527                 return 0;
3528             }
3529             if ((s->ext.hostname = OPENSSL_strdup((char *)parg)) == NULL) {
3530                 ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
3531                 return 0;
3532             }
3533         } else {
3534             ERR_raise(ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
3535             return 0;
3536         }
3537         break;
3538     case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
3539         s->ext.debug_arg = parg;
3540         ret = 1;
3541         break;
3542
3543     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
3544         ret = s->ext.status_type;
3545         break;
3546
3547     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
3548         s->ext.status_type = larg;
3549         ret = 1;
3550         break;
3551
3552     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
3553         *(STACK_OF(X509_EXTENSION) **)parg = s->ext.ocsp.exts;
3554         ret = 1;
3555         break;
3556
3557     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
3558         s->ext.ocsp.exts = parg;
3559         ret = 1;
3560         break;
3561
3562     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
3563         *(STACK_OF(OCSP_RESPID) **)parg = s->ext.ocsp.ids;
3564         ret = 1;
3565         break;
3566
3567     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
3568         s->ext.ocsp.ids = parg;
3569         ret = 1;
3570         break;
3571
3572     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
3573         *(unsigned char **)parg = s->ext.ocsp.resp;
3574         if (s->ext.ocsp.resp_len == 0
3575                 || s->ext.ocsp.resp_len > LONG_MAX)
3576             return -1;
3577         return (long)s->ext.ocsp.resp_len;
3578
3579     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
3580         OPENSSL_free(s->ext.ocsp.resp);
3581         s->ext.ocsp.resp = parg;
3582         s->ext.ocsp.resp_len = larg;
3583         ret = 1;
3584         break;
3585
3586     case SSL_CTRL_CHAIN:
3587         if (larg)
3588             return ssl_cert_set1_chain(s, NULL, (STACK_OF(X509) *)parg);
3589         else
3590             return ssl_cert_set0_chain(s, NULL, (STACK_OF(X509) *)parg);
3591
3592     case SSL_CTRL_CHAIN_CERT:
3593         if (larg)
3594             return ssl_cert_add1_chain_cert(s, NULL, (X509 *)parg);
3595         else
3596             return ssl_cert_add0_chain_cert(s, NULL, (X509 *)parg);
3597
3598     case SSL_CTRL_GET_CHAIN_CERTS:
3599         *(STACK_OF(X509) **)parg = s->cert->key->chain;
3600         ret = 1;
3601         break;
3602
3603     case SSL_CTRL_SELECT_CURRENT_CERT:
3604         return ssl_cert_select_current(s->cert, (X509 *)parg);
3605
3606     case SSL_CTRL_SET_CURRENT_CERT:
3607         if (larg == SSL_CERT_SET_SERVER) {
3608             const SSL_CIPHER *cipher;
3609             if (!s->server)
3610                 return 0;
3611             cipher = s->s3.tmp.new_cipher;
3612             if (cipher == NULL)
3613                 return 0;
3614             /*
3615              * No certificate for unauthenticated ciphersuites or using SRP
3616              * authentication
3617              */
3618             if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
3619                 return 2;
3620             if (s->s3.tmp.cert == NULL)
3621                 return 0;
3622             s->cert->key = s->s3.tmp.cert;
3623             return 1;
3624         }
3625         return ssl_cert_set_current(s->cert, larg);
3626
3627 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
3628     case SSL_CTRL_GET_GROUPS:
3629         {
3630             uint16_t *clist;
3631             size_t clistlen;
3632
3633             if (!s->session)
3634                 return 0;
3635             clist = s->ext.peer_supportedgroups;
3636             clistlen = s->ext.peer_supportedgroups_len;
3637             if (parg) {
3638                 size_t i;
3639                 int *cptr = parg;
3640
3641                 for (i = 0; i < clistlen; i++) {
3642                     const TLS_GROUP_INFO *cinf
3643                         = tls1_group_id_lookup(s->ctx, clist[i]);
3644
3645                     if (cinf != NULL)
3646                         cptr[i] = tls1_group_id2nid(cinf->group_id, 1);
3647                     else
3648                         cptr[i] = TLSEXT_nid_unknown | clist[i];
3649                 }
3650             }
3651             return (int)clistlen;
3652         }
3653
3654     case SSL_CTRL_SET_GROUPS:
3655         return tls1_set_groups(&s->ext.supportedgroups,
3656                                &s->ext.supportedgroups_len, parg, larg);
3657
3658     case SSL_CTRL_SET_GROUPS_LIST:
3659         return tls1_set_groups_list(s->ctx, &s->ext.supportedgroups,
3660                                     &s->ext.supportedgroups_len, parg);
3661
3662     case SSL_CTRL_GET_SHARED_GROUP:
3663         {
3664             uint16_t id = tls1_shared_group(s, larg);
3665
3666             if (larg != -1)
3667                 return tls1_group_id2nid(id, 1);
3668             return id;
3669         }
3670     case SSL_CTRL_GET_NEGOTIATED_GROUP:
3671         ret = tls1_group_id2nid(s->s3.group_id, 1);
3672         break;
3673 #endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
3674
3675     case SSL_CTRL_SET_SIGALGS:
3676         return tls1_set_sigalgs(s->cert, parg, larg, 0);
3677
3678     case SSL_CTRL_SET_SIGALGS_LIST:
3679         return tls1_set_sigalgs_list(s->cert, parg, 0);
3680
3681     case SSL_CTRL_SET_CLIENT_SIGALGS:
3682         return tls1_set_sigalgs(s->cert, parg, larg, 1);
3683
3684     case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
3685         return tls1_set_sigalgs_list(s->cert, parg, 1);
3686
3687     case SSL_CTRL_GET_CLIENT_CERT_TYPES:
3688         {
3689             const unsigned char **pctype = parg;
3690             if (s->server || !s->s3.tmp.cert_req)
3691                 return 0;
3692             if (pctype)
3693                 *pctype = s->s3.tmp.ctype;
3694             return s->s3.tmp.ctype_len;
3695         }
3696
3697     case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3698         if (!s->server)
3699             return 0;
3700         return ssl3_set_req_cert_type(s->cert, parg, larg);
3701
3702     case SSL_CTRL_BUILD_CERT_CHAIN:
3703         return ssl_build_cert_chain(s, NULL, larg);
3704
3705     case SSL_CTRL_SET_VERIFY_CERT_STORE:
3706         return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
3707
3708     case SSL_CTRL_SET_CHAIN_CERT_STORE:
3709         return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
3710
3711     case SSL_CTRL_GET_PEER_SIGNATURE_NID:
3712         if (s->s3.tmp.peer_sigalg == NULL)
3713             return 0;
3714         *(int *)parg = s->s3.tmp.peer_sigalg->hash;
3715         return 1;
3716
3717     case SSL_CTRL_GET_SIGNATURE_NID:
3718         if (s->s3.tmp.sigalg == NULL)
3719             return 0;
3720         *(int *)parg = s->s3.tmp.sigalg->hash;
3721         return 1;
3722
3723     case SSL_CTRL_GET_PEER_TMP_KEY:
3724 #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
3725         if (s->session == NULL || s->s3.peer_tmp == NULL) {
3726             return 0;
3727         } else {
3728             EVP_PKEY_up_ref(s->s3.peer_tmp);
3729             *(EVP_PKEY **)parg = s->s3.peer_tmp;
3730             return 1;
3731         }
3732 #else
3733         return 0;
3734 #endif
3735
3736     case SSL_CTRL_GET_TMP_KEY:
3737 #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
3738         if (s->session == NULL || s->s3.tmp.pkey == NULL) {
3739             return 0;
3740         } else {
3741             EVP_PKEY_up_ref(s->s3.tmp.pkey);
3742             *(EVP_PKEY **)parg = s->s3.tmp.pkey;
3743             return 1;
3744         }
3745 #else
3746         return 0;
3747 #endif
3748
3749 #ifndef OPENSSL_NO_EC
3750     case SSL_CTRL_GET_EC_POINT_FORMATS:
3751         {
3752             const unsigned char **pformat = parg;
3753
3754             if (s->ext.peer_ecpointformats == NULL)
3755                 return 0;
3756             *pformat = s->ext.peer_ecpointformats;
3757             return (int)s->ext.peer_ecpointformats_len;
3758         }
3759 #endif
3760
3761     default:
3762         break;
3763     }
3764     return ret;
3765 }
3766
3767 long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
3768 {
3769     int ret = 0;
3770
3771     switch (cmd) {
3772 #if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0)
3773     case SSL_CTRL_SET_TMP_DH_CB:
3774         {
3775             s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3776         }
3777         break;
3778 #endif
3779     case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
3780         s->ext.debug_cb = (void (*)(SSL *, int, int,
3781                                     const unsigned char *, int, void *))fp;
3782         break;
3783
3784     case SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB:
3785         {
3786             s->not_resumable_session_cb = (int (*)(SSL *, int))fp;
3787         }
3788         break;
3789     default:
3790         break;
3791     }
3792     return ret;
3793 }
3794
3795 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
3796 {
3797     switch (cmd) {
3798 #if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0)
3799     case SSL_CTRL_SET_TMP_DH:
3800         {
3801             EVP_PKEY *pkdh = NULL;
3802             if (parg == NULL) {
3803                 ERR_raise(ERR_LIB_SSL, ERR_R_PASSED_NULL_PARAMETER);
3804                 return 0;
3805             }
3806             pkdh = ssl_dh_to_pkey(parg);
3807             if (pkdh == NULL) {
3808                 ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE);
3809                 return 0;
3810             }
3811             return SSL_CTX_set0_tmp_dh_pkey(ctx, pkdh);
3812         }
3813     case SSL_CTRL_SET_TMP_DH_CB:
3814         {
3815             ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3816             return 0;
3817         }
3818 #endif
3819     case SSL_CTRL_SET_DH_AUTO:
3820         ctx->cert->dh_tmp_auto = larg;
3821         return 1;
3822 #ifndef OPENSSL_NO_EC
3823     case SSL_CTRL_SET_TMP_ECDH:
3824         {
3825             const EC_GROUP *group = NULL;
3826             int nid;
3827
3828             if (parg == NULL) {
3829                 ERR_raise(ERR_LIB_SSL, ERR_R_PASSED_NULL_PARAMETER);
3830                 return 0;
3831             }
3832             group = EC_KEY_get0_group((const EC_KEY *)parg);
3833             if (group == NULL) {
3834                 ERR_raise(ERR_LIB_SSL, EC_R_MISSING_PARAMETERS);
3835                 return 0;
3836             }
3837             nid = EC_GROUP_get_curve_name(group);
3838             if (nid == NID_undef)
3839                 return 0;
3840             return tls1_set_groups(&ctx->ext.supportedgroups,
3841                                    &ctx->ext.supportedgroups_len,
3842                                    &nid, 1);
3843         }
3844 #endif                          /* !OPENSSL_NO_EC */
3845     case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
3846         ctx->ext.servername_arg = parg;
3847         break;
3848     case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
3849     case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
3850         {
3851             unsigned char *keys = parg;
3852             long tick_keylen = (sizeof(ctx->ext.tick_key_name) +
3853                                 sizeof(ctx->ext.secure->tick_hmac_key) +
3854                                 sizeof(ctx->ext.secure->tick_aes_key));
3855             if (keys == NULL)
3856                 return tick_keylen;
3857             if (larg != tick_keylen) {
3858                 ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
3859                 return 0;
3860             }
3861             if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) {
3862                 memcpy(ctx->ext.tick_key_name, keys,
3863                        sizeof(ctx->ext.tick_key_name));
3864                 memcpy(ctx->ext.secure->tick_hmac_key,
3865                        keys + sizeof(ctx->ext.tick_key_name),
3866                        sizeof(ctx->ext.secure->tick_hmac_key));
3867                 memcpy(ctx->ext.secure->tick_aes_key,
3868                        keys + sizeof(ctx->ext.tick_key_name) +
3869                        sizeof(ctx->ext.secure->tick_hmac_key),
3870                        sizeof(ctx->ext.secure->tick_aes_key));
3871             } else {
3872                 memcpy(keys, ctx->ext.tick_key_name,
3873                        sizeof(ctx->ext.tick_key_name));
3874                 memcpy(keys + sizeof(ctx->ext.tick_key_name),
3875                        ctx->ext.secure->tick_hmac_key,
3876                        sizeof(ctx->ext.secure->tick_hmac_key));
3877                 memcpy(keys + sizeof(ctx->ext.tick_key_name) +
3878                        sizeof(ctx->ext.secure->tick_hmac_key),
3879                        ctx->ext.secure->tick_aes_key,
3880                        sizeof(ctx->ext.secure->tick_aes_key));
3881             }
3882             return 1;
3883         }
3884
3885     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
3886         return ctx->ext.status_type;
3887
3888     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
3889         ctx->ext.status_type = larg;
3890         break;
3891
3892     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
3893         ctx->ext.status_arg = parg;
3894         return 1;
3895
3896     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG:
3897         *(void**)parg = ctx->ext.status_arg;
3898         break;
3899
3900     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB:
3901         *(int (**)(SSL*, void*))parg = ctx->ext.status_cb;
3902         break;
3903
3904 #ifndef OPENSSL_NO_SRP
3905     case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME:
3906         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
3907         OPENSSL_free(ctx->srp_ctx.login);
3908         ctx->srp_ctx.login = NULL;
3909         if (parg == NULL)
3910             break;
3911         if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) {
3912             ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_SRP_USERNAME);
3913             return 0;
3914         }
3915         if ((ctx->srp_ctx.login = OPENSSL_strdup((char *)parg)) == NULL) {
3916             ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
3917             return 0;
3918         }
3919         break;
3920     case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD:
3921         ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
3922             srp_password_from_info_cb;
3923         if (ctx->srp_ctx.info != NULL)
3924             OPENSSL_free(ctx->srp_ctx.info);
3925         if ((ctx->srp_ctx.info = OPENSSL_strdup((char *)parg)) == NULL) {
3926             ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
3927             return 0;
3928         }
3929         break;
3930     case SSL_CTRL_SET_SRP_ARG:
3931         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
3932         ctx->srp_ctx.SRP_cb_arg = parg;
3933         break;
3934
3935     case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH:
3936         ctx->srp_ctx.strength = larg;
3937         break;
3938 #endif
3939
3940 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
3941     case SSL_CTRL_SET_GROUPS:
3942         return tls1_set_groups(&ctx->ext.supportedgroups,
3943                                &ctx->ext.supportedgroups_len,
3944                                parg, larg);
3945
3946     case SSL_CTRL_SET_GROUPS_LIST:
3947         return tls1_set_groups_list(ctx, &ctx->ext.supportedgroups,
3948                                     &ctx->ext.supportedgroups_len,
3949                                     parg);
3950 #endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
3951
3952     case SSL_CTRL_SET_SIGALGS:
3953         return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
3954
3955     case SSL_CTRL_SET_SIGALGS_LIST:
3956         return tls1_set_sigalgs_list(ctx->cert, parg, 0);
3957
3958     case SSL_CTRL_SET_CLIENT_SIGALGS:
3959         return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
3960
3961     case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
3962         return tls1_set_sigalgs_list(ctx->cert, parg, 1);
3963
3964     case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3965         return ssl3_set_req_cert_type(ctx->cert, parg, larg);
3966
3967     case SSL_CTRL_BUILD_CERT_CHAIN:
3968         return ssl_build_cert_chain(NULL, ctx, larg);
3969
3970     case SSL_CTRL_SET_VERIFY_CERT_STORE:
3971         return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
3972
3973     case SSL_CTRL_SET_CHAIN_CERT_STORE:
3974         return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
3975
3976         /* A Thawte special :-) */
3977     case SSL_CTRL_EXTRA_CHAIN_CERT:
3978         if (ctx->extra_certs == NULL) {
3979             if ((ctx->extra_certs = sk_X509_new_null()) == NULL) {
3980                 ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE);
3981                 return 0;
3982             }
3983         }
3984         if (!sk_X509_push(ctx->extra_certs, (X509 *)parg)) {
3985             ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE);
3986             return 0;
3987         }
3988         break;
3989
3990     case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
3991         if (ctx->extra_certs == NULL && larg == 0)
3992             *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
3993         else
3994             *(STACK_OF(X509) **)parg = ctx->extra_certs;
3995         break;
3996
3997     case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
3998         sk_X509_pop_free(ctx->extra_certs, X509_free);
3999         ctx->extra_certs = NULL;
4000         break;
4001
4002     case SSL_CTRL_CHAIN:
4003         if (larg)
4004             return ssl_cert_set1_chain(NULL, ctx, (STACK_OF(X509) *)parg);
4005         else
4006             return ssl_cert_set0_chain(NULL, ctx, (STACK_OF(X509) *)parg);
4007
4008     case SSL_CTRL_CHAIN_CERT:
4009         if (larg)
4010             return ssl_cert_add1_chain_cert(NULL, ctx, (X509 *)parg);
4011         else
4012             return ssl_cert_add0_chain_cert(NULL, ctx, (X509 *)parg);
4013
4014     case SSL_CTRL_GET_CHAIN_CERTS:
4015         *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
4016         break;
4017
4018     case SSL_CTRL_SELECT_CURRENT_CERT:
4019         return ssl_cert_select_current(ctx->cert, (X509 *)parg);
4020
4021     case SSL_CTRL_SET_CURRENT_CERT:
4022         return ssl_cert_set_current(ctx->cert, larg);
4023
4024     default:
4025         return 0;
4026     }
4027     return 1;
4028 }
4029
4030 long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
4031 {
4032     switch (cmd) {
4033 #if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0)
4034     case SSL_CTRL_SET_TMP_DH_CB:
4035         {
4036             ctx->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
4037         }
4038         break;
4039 #endif
4040     case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
4041         ctx->ext.servername_cb = (int (*)(SSL *, int *, void *))fp;
4042         break;
4043
4044     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
4045         ctx->ext.status_cb = (int (*)(SSL *, void *))fp;
4046         break;
4047
4048 # ifndef OPENSSL_NO_DEPRECATED_3_0
4049     case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
4050         ctx->ext.ticket_key_cb = (int (*)(SSL *, unsigned char *,
4051                                              unsigned char *,
4052                                              EVP_CIPHER_CTX *,
4053                                              HMAC_CTX *, int))fp;
4054         break;
4055 #endif
4056
4057 #ifndef OPENSSL_NO_SRP
4058     case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB:
4059         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4060         ctx->srp_ctx.SRP_verify_param_callback = (int (*)(SSL *, void *))fp;
4061         break;
4062     case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB:
4063         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4064         ctx->srp_ctx.TLS_ext_srp_username_callback =
4065             (int (*)(SSL *, int *, void *))fp;
4066         break;
4067     case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB:
4068         ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4069         ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
4070             (char *(*)(SSL *, void *))fp;
4071         break;
4072 #endif
4073     case SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB:
4074         {
4075             ctx->not_resumable_session_cb = (int (*)(SSL *, int))fp;
4076         }
4077         break;
4078     default:
4079         return 0;
4080     }
4081     return 1;
4082 }
4083
4084 int SSL_CTX_set_tlsext_ticket_key_evp_cb
4085     (SSL_CTX *ctx, int (*fp)(SSL *, unsigned char *, unsigned char *,
4086                              EVP_CIPHER_CTX *, EVP_MAC_CTX *, int))
4087 {
4088     ctx->ext.ticket_key_evp_cb = fp;
4089     return 1;
4090 }
4091
4092 const SSL_CIPHER *ssl3_get_cipher_by_id(uint32_t id)
4093 {
4094     SSL_CIPHER c;
4095     const SSL_CIPHER *cp;
4096
4097     c.id = id;
4098     cp = OBJ_bsearch_ssl_cipher_id(&c, tls13_ciphers, TLS13_NUM_CIPHERS);
4099     if (cp != NULL)
4100         return cp;
4101     cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
4102     if (cp != NULL)
4103         return cp;
4104     return OBJ_bsearch_ssl_cipher_id(&c, ssl3_scsvs, SSL3_NUM_SCSVS);
4105 }
4106
4107 const SSL_CIPHER *ssl3_get_cipher_by_std_name(const char *stdname)
4108 {
4109     SSL_CIPHER *tbl;
4110     SSL_CIPHER *alltabs[] = {tls13_ciphers, ssl3_ciphers, ssl3_scsvs};
4111     size_t i, j, tblsize[] = {TLS13_NUM_CIPHERS, SSL3_NUM_CIPHERS,
4112                               SSL3_NUM_SCSVS};
4113
4114     /* this is not efficient, necessary to optimize this? */
4115     for (j = 0; j < OSSL_NELEM(alltabs); j++) {
4116         for (i = 0, tbl = alltabs[j]; i < tblsize[j]; i++, tbl++) {
4117             if (tbl->stdname == NULL)
4118                 continue;
4119             if (strcmp(stdname, tbl->stdname) == 0) {
4120                 return tbl;
4121             }
4122         }
4123     }
4124     return NULL;
4125 }
4126
4127 /*
4128  * This function needs to check if the ciphers required are actually
4129  * available
4130  */
4131 const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
4132 {
4133     return ssl3_get_cipher_by_id(SSL3_CK_CIPHERSUITE_FLAG
4134                                  | ((uint32_t)p[0] << 8L)
4135                                  | (uint32_t)p[1]);
4136 }
4137
4138 int ssl3_put_cipher_by_char(const SSL_CIPHER *c, WPACKET *pkt, size_t *len)
4139 {
4140     if ((c->id & 0xff000000) != SSL3_CK_CIPHERSUITE_FLAG) {
4141         *len = 0;
4142         return 1;
4143     }
4144
4145     if (!WPACKET_put_bytes_u16(pkt, c->id & 0xffff))
4146         return 0;
4147
4148     *len = 2;
4149     return 1;
4150 }
4151
4152 /*
4153  * ssl3_choose_cipher - choose a cipher from those offered by the client
4154  * @s: SSL connection
4155  * @clnt: ciphers offered by the client
4156  * @srvr: ciphers enabled on the server?
4157  *
4158  * Returns the selected cipher or NULL when no common ciphers.
4159  */
4160 const SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
4161                                      STACK_OF(SSL_CIPHER) *srvr)
4162 {
4163     const SSL_CIPHER *c, *ret = NULL;
4164     STACK_OF(SSL_CIPHER) *prio, *allow;
4165     int i, ii, ok, prefer_sha256 = 0;
4166     unsigned long alg_k = 0, alg_a = 0, mask_k = 0, mask_a = 0;
4167 #ifndef OPENSSL_NO_CHACHA
4168     STACK_OF(SSL_CIPHER) *prio_chacha = NULL;
4169 #endif
4170
4171     /* Let's see which ciphers we can support */
4172
4173     /*
4174      * Do not set the compare functions, because this may lead to a
4175      * reordering by "id". We want to keep the original ordering. We may pay
4176      * a price in performance during sk_SSL_CIPHER_find(), but would have to
4177      * pay with the price of sk_SSL_CIPHER_dup().
4178      */
4179
4180     OSSL_TRACE_BEGIN(TLS_CIPHER) {
4181         BIO_printf(trc_out, "Server has %d from %p:\n",
4182                    sk_SSL_CIPHER_num(srvr), (void *)srvr);
4183         for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) {
4184             c = sk_SSL_CIPHER_value(srvr, i);
4185             BIO_printf(trc_out, "%p:%s\n", (void *)c, c->name);
4186         }
4187         BIO_printf(trc_out, "Client sent %d from %p:\n",
4188                    sk_SSL_CIPHER_num(clnt), (void *)clnt);
4189         for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) {
4190             c = sk_SSL_CIPHER_value(clnt, i);
4191             BIO_printf(trc_out, "%p:%s\n", (void *)c, c->name);
4192         }
4193     } OSSL_TRACE_END(TLS_CIPHER);
4194
4195     /* SUITE-B takes precedence over server preference and ChaCha priortiy */
4196     if (tls1_suiteb(s)) {
4197         prio = srvr;
4198         allow = clnt;
4199     } else if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
4200         prio = srvr;
4201         allow = clnt;
4202 #ifndef OPENSSL_NO_CHACHA
4203         /* If ChaCha20 is at the top of the client preference list,
4204            and there are ChaCha20 ciphers in the server list, then
4205            temporarily prioritize all ChaCha20 ciphers in the servers list. */
4206         if (s->options & SSL_OP_PRIORITIZE_CHACHA && sk_SSL_CIPHER_num(clnt) > 0) {
4207             c = sk_SSL_CIPHER_value(clnt, 0);
4208             if (c->algorithm_enc == SSL_CHACHA20POLY1305) {
4209                 /* ChaCha20 is client preferred, check server... */
4210                 int num = sk_SSL_CIPHER_num(srvr);
4211                 int found = 0;
4212                 for (i = 0; i < num; i++) {
4213                     c = sk_SSL_CIPHER_value(srvr, i);
4214                     if (c->algorithm_enc == SSL_CHACHA20POLY1305) {
4215                         found = 1;
4216                         break;
4217                     }
4218                 }
4219                 if (found) {
4220                     prio_chacha = sk_SSL_CIPHER_new_reserve(NULL, num);
4221                     /* if reserve fails, then there's likely a memory issue */
4222                     if (prio_chacha != NULL) {
4223                         /* Put all ChaCha20 at the top, starting with the one we just found */
4224                         sk_SSL_CIPHER_push(prio_chacha, c);
4225                         for (i++; i < num; i++) {
4226                             c = sk_SSL_CIPHER_value(srvr, i);
4227                             if (c->algorithm_enc == SSL_CHACHA20POLY1305)
4228                                 sk_SSL_CIPHER_push(prio_chacha, c);
4229                         }
4230                         /* Pull in the rest */
4231                         for (i = 0; i < num; i++) {
4232                             c = sk_SSL_CIPHER_value(srvr, i);
4233                             if (c->algorithm_enc != SSL_CHACHA20POLY1305)
4234                                 sk_SSL_CIPHER_push(prio_chacha, c);
4235                         }
4236                         prio = prio_chacha;
4237                     }
4238                 }
4239             }
4240         }
4241 # endif
4242     } else {
4243         prio = clnt;
4244         allow = srvr;
4245     }
4246
4247     if (SSL_IS_TLS13(s)) {
4248 #ifndef OPENSSL_NO_PSK
4249         int j;
4250
4251         /*
4252          * If we allow "old" style PSK callbacks, and we have no certificate (so
4253          * we're not going to succeed without a PSK anyway), and we're in
4254          * TLSv1.3 then the default hash for a PSK is SHA-256 (as per the
4255          * TLSv1.3 spec). Therefore we should prioritise ciphersuites using
4256          * that.
4257          */
4258         if (s->psk_server_callback != NULL) {
4259             for (j = 0; j < SSL_PKEY_NUM && !ssl_has_cert(s, j); j++);
4260             if (j == SSL_PKEY_NUM) {
4261                 /* There are no certificates */
4262                 prefer_sha256 = 1;
4263             }
4264         }
4265 #endif
4266     } else {
4267         tls1_set_cert_validity(s);
4268         ssl_set_masks(s);
4269     }
4270
4271     for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
4272         c = sk_SSL_CIPHER_value(prio, i);
4273
4274         /* Skip ciphers not supported by the protocol version */
4275         if (!SSL_IS_DTLS(s) &&
4276             ((s->version < c->min_tls) || (s->version > c->max_tls)))
4277             continue;
4278         if (SSL_IS_DTLS(s) &&
4279             (DTLS_VERSION_LT(s->version, c->min_dtls) ||
4280              DTLS_VERSION_GT(s->version, c->max_dtls)))
4281             continue;
4282
4283         /*
4284          * Since TLS 1.3 ciphersuites can be used with any auth or
4285          * key exchange scheme skip tests.
4286          */
4287         if (!SSL_IS_TLS13(s)) {
4288             mask_k = s->s3.tmp.mask_k;
4289             mask_a = s->s3.tmp.mask_a;
4290 #ifndef OPENSSL_NO_SRP
4291             if (s->srp_ctx.srp_Mask & SSL_kSRP) {
4292                 mask_k |= SSL_kSRP;
4293                 mask_a |= SSL_aSRP;
4294             }
4295 #endif
4296
4297             alg_k = c->algorithm_mkey;
4298             alg_a = c->algorithm_auth;
4299
4300 #ifndef OPENSSL_NO_PSK
4301             /* with PSK there must be server callback set */
4302             if ((alg_k & SSL_PSK) && s->psk_server_callback == NULL)
4303                 continue;
4304 #endif                          /* OPENSSL_NO_PSK */
4305
4306             ok = (alg_k & mask_k) && (alg_a & mask_a);
4307             OSSL_TRACE7(TLS_CIPHER,
4308                         "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",
4309                         ok, alg_k, alg_a, mask_k, mask_a, (void *)c, c->name);
4310
4311 #ifndef OPENSSL_NO_EC
4312             /*
4313              * if we are considering an ECC cipher suite that uses an ephemeral
4314              * EC key check it
4315              */
4316             if (alg_k & SSL_kECDHE)
4317                 ok = ok && tls1_check_ec_tmp_key(s, c->id);
4318 #endif                          /* OPENSSL_NO_EC */
4319
4320             if (!ok)
4321                 continue;
4322         }
4323         ii = sk_SSL_CIPHER_find(allow, c);
4324         if (ii >= 0) {
4325             /* Check security callback permits this cipher */
4326             if (!ssl_security(s, SSL_SECOP_CIPHER_SHARED,
4327                               c->strength_bits, 0, (void *)c))
4328                 continue;
4329 #if !defined(OPENSSL_NO_EC)
4330             if ((alg_k & SSL_kECDHE) && (alg_a & SSL_aECDSA)
4331                 && s->s3.is_probably_safari) {
4332                 if (!ret)
4333                     ret = sk_SSL_CIPHER_value(allow, ii);
4334                 continue;
4335             }
4336 #endif
4337             if (prefer_sha256) {
4338                 const SSL_CIPHER *tmp = sk_SSL_CIPHER_value(allow, ii);
4339
4340                 /*
4341                  * TODO: When there are no more legacy digests we can just use
4342                  * OSSL_DIGEST_NAME_SHA2_256 instead of calling OBJ_nid2sn
4343                  */
4344                 if (EVP_MD_is_a(ssl_md(s->ctx, tmp->algorithm2),
4345                                        OBJ_nid2sn(NID_sha256))) {
4346                     ret = tmp;
4347                     break;
4348                 }
4349                 if (ret == NULL)
4350                     ret = tmp;
4351                 continue;
4352             }
4353             ret = sk_SSL_CIPHER_value(allow, ii);
4354             break;
4355         }
4356     }
4357 #ifndef OPENSSL_NO_CHACHA
4358     sk_SSL_CIPHER_free(prio_chacha);
4359 #endif
4360     return ret;
4361 }
4362
4363 int ssl3_get_req_cert_type(SSL *s, WPACKET *pkt)
4364 {
4365     uint32_t alg_k, alg_a = 0;
4366
4367     /* If we have custom certificate types set, use them */
4368     if (s->cert->ctype)
4369         return WPACKET_memcpy(pkt, s->cert->ctype, s->cert->ctype_len);
4370     /* Get mask of algorithms disabled by signature list */
4371     ssl_set_sig_mask(&alg_a, s, SSL_SECOP_SIGALG_MASK);
4372
4373     alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
4374
4375 #ifndef OPENSSL_NO_GOST
4376     if (s->version >= TLS1_VERSION && (alg_k & SSL_kGOST))
4377         if (!WPACKET_put_bytes_u8(pkt, TLS_CT_GOST01_SIGN)
4378             || !WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_IANA_SIGN)
4379             || !WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_IANA_512_SIGN)
4380             || !WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_LEGACY_SIGN)
4381             || !WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_LEGACY_512_SIGN))
4382             return 0;
4383
4384     if (s->version >= TLS1_2_VERSION && (alg_k & SSL_kGOST18))
4385         if (!WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_IANA_SIGN)
4386             || !WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_IANA_512_SIGN))
4387             return 0;
4388 #endif
4389
4390     if ((s->version == SSL3_VERSION) && (alg_k & SSL_kDHE)) {
4391 #ifndef OPENSSL_NO_DH
4392 # ifndef OPENSSL_NO_RSA
4393         if (!WPACKET_put_bytes_u8(pkt, SSL3_CT_RSA_EPHEMERAL_DH))
4394             return 0;
4395 # endif
4396 # ifndef OPENSSL_NO_DSA
4397         if (!WPACKET_put_bytes_u8(pkt, SSL3_CT_DSS_EPHEMERAL_DH))
4398             return 0;
4399 # endif
4400 #endif                          /* !OPENSSL_NO_DH */
4401     }
4402 #ifndef OPENSSL_NO_RSA
4403     if (!(alg_a & SSL_aRSA) && !WPACKET_put_bytes_u8(pkt, SSL3_CT_RSA_SIGN))
4404         return 0;
4405 #endif
4406 #ifndef OPENSSL_NO_DSA
4407     if (!(alg_a & SSL_aDSS) && !WPACKET_put_bytes_u8(pkt, SSL3_CT_DSS_SIGN))
4408         return 0;
4409 #endif
4410 #ifndef OPENSSL_NO_EC
4411     /*
4412      * ECDSA certs can be used with RSA cipher suites too so we don't
4413      * need to check for SSL_kECDH or SSL_kECDHE
4414      */
4415     if (s->version >= TLS1_VERSION
4416             && !(alg_a & SSL_aECDSA)
4417             && !WPACKET_put_bytes_u8(pkt, TLS_CT_ECDSA_SIGN))
4418         return 0;
4419 #endif
4420     return 1;
4421 }
4422
4423 static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
4424 {
4425     OPENSSL_free(c->ctype);
4426     c->ctype = NULL;
4427     c->ctype_len = 0;
4428     if (p == NULL || len == 0)
4429         return 1;
4430     if (len > 0xff)
4431         return 0;
4432     c->ctype = OPENSSL_memdup(p, len);
4433     if (c->ctype == NULL)
4434         return 0;
4435     c->ctype_len = len;
4436     return 1;
4437 }
4438
4439 int ssl3_shutdown(SSL *s)
4440 {
4441     int ret;
4442
4443     /*
4444      * Don't do anything much if we have not done the handshake or we don't
4445      * want to send messages :-)
4446      */
4447     if (s->quiet_shutdown || SSL_in_before(s)) {
4448         s->shutdown = (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
4449         return 1;
4450     }
4451
4452     if (!(s->shutdown & SSL_SENT_SHUTDOWN)) {
4453         s->shutdown |= SSL_SENT_SHUTDOWN;
4454         ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
4455         /*
4456          * our shutdown alert has been sent now, and if it still needs to be
4457          * written, s->s3.alert_dispatch will be true
4458          */
4459         if (s->s3.alert_dispatch)
4460             return -1;        /* return WANT_WRITE */
4461     } else if (s->s3.alert_dispatch) {
4462         /* resend it if not sent */
4463         ret = s->method->ssl_dispatch_alert(s);
4464         if (ret == -1) {
4465             /*
4466              * we only get to return -1 here the 2nd/Nth invocation, we must
4467              * have already signalled return 0 upon a previous invocation,
4468              * return WANT_WRITE
4469              */
4470             return ret;
4471         }
4472     } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
4473         size_t readbytes;
4474         /*
4475          * If we are waiting for a close from our peer, we are closed
4476          */
4477         s->method->ssl_read_bytes(s, 0, NULL, NULL, 0, 0, &readbytes);
4478         if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
4479             return -1;        /* return WANT_READ */
4480         }
4481     }
4482
4483     if ((s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN)) &&
4484         !s->s3.alert_dispatch)
4485         return 1;
4486     else
4487         return 0;
4488 }
4489
4490 int ssl3_write(SSL *s, const void *buf, size_t len, size_t *written)
4491 {
4492     clear_sys_error();
4493     if (s->s3.renegotiate)
4494         ssl3_renegotiate_check(s, 0);
4495
4496     return s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
4497                                       written);
4498 }
4499
4500 static int ssl3_read_internal(SSL *s, void *buf, size_t len, int peek,
4501                               size_t *readbytes)
4502 {
4503     int ret;
4504
4505     clear_sys_error();
4506     if (s->s3.renegotiate)
4507         ssl3_renegotiate_check(s, 0);
4508     s->s3.in_read_app_data = 1;
4509     ret =
4510         s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, NULL, buf, len,
4511                                   peek, readbytes);
4512     if ((ret == -1) && (s->s3.in_read_app_data == 2)) {
4513         /*
4514          * ssl3_read_bytes decided to call s->handshake_func, which called
4515          * ssl3_read_bytes to read handshake data. However, ssl3_read_bytes
4516          * actually found application data and thinks that application data
4517          * makes sense here; so disable handshake processing and try to read
4518          * application data again.
4519          */
4520         ossl_statem_set_in_handshake(s, 1);
4521         ret =
4522             s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, NULL, buf,
4523                                       len, peek, readbytes);
4524         ossl_statem_set_in_handshake(s, 0);
4525     } else
4526         s->s3.in_read_app_data = 0;
4527
4528     return ret;
4529 }
4530
4531 int ssl3_read(SSL *s, void *buf, size_t len, size_t *readbytes)
4532 {
4533     return ssl3_read_internal(s, buf, len, 0, readbytes);
4534 }
4535
4536 int ssl3_peek(SSL *s, void *buf, size_t len, size_t *readbytes)
4537 {
4538     return ssl3_read_internal(s, buf, len, 1, readbytes);
4539 }
4540
4541 int ssl3_renegotiate(SSL *s)
4542 {
4543     if (s->handshake_func == NULL)
4544         return 1;
4545
4546     s->s3.renegotiate = 1;
4547     return 1;
4548 }
4549
4550 /*
4551  * Check if we are waiting to do a renegotiation and if so whether now is a
4552  * good time to do it. If |initok| is true then we are being called from inside
4553  * the state machine so ignore the result of SSL_in_init(s). Otherwise we
4554  * should not do a renegotiation if SSL_in_init(s) is true. Returns 1 if we
4555  * should do a renegotiation now and sets up the state machine for it. Otherwise
4556  * returns 0.
4557  */
4558 int ssl3_renegotiate_check(SSL *s, int initok)
4559 {
4560     int ret = 0;
4561
4562     if (s->s3.renegotiate) {
4563         if (!RECORD_LAYER_read_pending(&s->rlayer)
4564             && !RECORD_LAYER_write_pending(&s->rlayer)
4565             && (initok || !SSL_in_init(s))) {
4566             /*
4567              * if we are the server, and we have sent a 'RENEGOTIATE'
4568              * message, we need to set the state machine into the renegotiate
4569              * state.
4570              */
4571             ossl_statem_set_renegotiate(s);
4572             s->s3.renegotiate = 0;
4573             s->s3.num_renegotiations++;
4574             s->s3.total_renegotiations++;
4575             ret = 1;
4576         }
4577     }
4578     return ret;
4579 }
4580
4581 /*
4582  * If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF and
4583  * handshake macs if required.
4584  *
4585  * If PSK and using SHA384 for TLS < 1.2 switch to default.
4586  */
4587 long ssl_get_algorithm2(SSL *s)
4588 {
4589     long alg2;
4590     if (s->s3.tmp.new_cipher == NULL)
4591         return -1;
4592     alg2 = s->s3.tmp.new_cipher->algorithm2;
4593     if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF) {
4594         if (alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF))
4595             return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
4596     } else if (s->s3.tmp.new_cipher->algorithm_mkey & SSL_PSK) {
4597         if (alg2 == (SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384))
4598             return SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF;
4599     }
4600     return alg2;
4601 }
4602
4603 /*
4604  * Fill a ClientRandom or ServerRandom field of length len. Returns <= 0 on
4605  * failure, 1 on success.
4606  */
4607 int ssl_fill_hello_random(SSL *s, int server, unsigned char *result, size_t len,
4608                           DOWNGRADE dgrd)
4609 {
4610     int send_time = 0, ret;
4611
4612     if (len < 4)
4613         return 0;
4614     if (server)
4615         send_time = (s->mode & SSL_MODE_SEND_SERVERHELLO_TIME) != 0;
4616     else
4617         send_time = (s->mode & SSL_MODE_SEND_CLIENTHELLO_TIME) != 0;
4618     if (send_time) {
4619         unsigned long Time = (unsigned long)time(NULL);
4620         unsigned char *p = result;
4621
4622         l2n(Time, p);
4623         ret = RAND_bytes_ex(s->ctx->libctx, p, len - 4);
4624     } else {
4625         ret = RAND_bytes_ex(s->ctx->libctx, result, len);
4626     }
4627
4628     if (ret > 0) {
4629         if (!ossl_assert(sizeof(tls11downgrade) < len)
4630                 || !ossl_assert(sizeof(tls12downgrade) < len))
4631              return 0;
4632         if (dgrd == DOWNGRADE_TO_1_2)
4633             memcpy(result + len - sizeof(tls12downgrade), tls12downgrade,
4634                    sizeof(tls12downgrade));
4635         else if (dgrd == DOWNGRADE_TO_1_1)
4636             memcpy(result + len - sizeof(tls11downgrade), tls11downgrade,
4637                    sizeof(tls11downgrade));
4638     }
4639
4640     return ret;
4641 }
4642
4643 int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
4644                                int free_pms)
4645 {
4646     unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
4647     int ret = 0;
4648
4649     if (alg_k & SSL_PSK) {
4650 #ifndef OPENSSL_NO_PSK
4651         unsigned char *pskpms, *t;
4652         size_t psklen = s->s3.tmp.psklen;
4653         size_t pskpmslen;
4654
4655         /* create PSK premaster_secret */
4656
4657         /* For plain PSK "other_secret" is psklen zeroes */
4658         if (alg_k & SSL_kPSK)
4659             pmslen = psklen;
4660
4661         pskpmslen = 4 + pmslen + psklen;
4662         pskpms = OPENSSL_malloc(pskpmslen);
4663         if (pskpms == NULL)
4664             goto err;
4665         t = pskpms;
4666         s2n(pmslen, t);
4667         if (alg_k & SSL_kPSK)
4668             memset(t, 0, pmslen);
4669         else
4670             memcpy(t, pms, pmslen);
4671         t += pmslen;
4672         s2n(psklen, t);
4673         memcpy(t, s->s3.tmp.psk, psklen);
4674
4675         OPENSSL_clear_free(s->s3.tmp.psk, psklen);
4676         s->s3.tmp.psk = NULL;
4677         if (!s->method->ssl3_enc->generate_master_secret(s,
4678                     s->session->master_key, pskpms, pskpmslen,
4679                     &s->session->master_key_length)) {
4680             OPENSSL_clear_free(pskpms, pskpmslen);
4681             /* SSLfatal() already called */
4682             goto err;
4683         }
4684         OPENSSL_clear_free(pskpms, pskpmslen);
4685 #else
4686         /* Should never happen */
4687         goto err;
4688 #endif
4689     } else {
4690         if (!s->method->ssl3_enc->generate_master_secret(s,
4691                 s->session->master_key, pms, pmslen,
4692                 &s->session->master_key_length)) {
4693             /* SSLfatal() already called */
4694             goto err;
4695         }
4696     }
4697
4698     ret = 1;
4699  err:
4700     if (pms) {
4701         if (free_pms)
4702             OPENSSL_clear_free(pms, pmslen);
4703         else
4704             OPENSSL_cleanse(pms, pmslen);
4705     }
4706     if (s->server == 0)
4707         s->s3.tmp.pms = NULL;
4708     return ret;
4709 }
4710
4711 /* Generate a private key from parameters */
4712 EVP_PKEY *ssl_generate_pkey(SSL *s, EVP_PKEY *pm)
4713 {
4714     EVP_PKEY_CTX *pctx = NULL;
4715     EVP_PKEY *pkey = NULL;
4716
4717     if (pm == NULL)
4718         return NULL;
4719     pctx = EVP_PKEY_CTX_new_from_pkey(s->ctx->libctx, pm, s->ctx->propq);
4720     if (pctx == NULL)
4721         goto err;
4722     if (EVP_PKEY_keygen_init(pctx) <= 0)
4723         goto err;
4724     if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
4725         EVP_PKEY_free(pkey);
4726         pkey = NULL;
4727     }
4728
4729     err:
4730     EVP_PKEY_CTX_free(pctx);
4731     return pkey;
4732 }
4733
4734 /* Generate a private key from a group ID */
4735 EVP_PKEY *ssl_generate_pkey_group(SSL *s, uint16_t id)
4736 {
4737     const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(s->ctx, id);
4738     EVP_PKEY_CTX *pctx = NULL;
4739     EVP_PKEY *pkey = NULL;
4740
4741     if (ginf == NULL) {
4742         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4743         goto err;
4744     }
4745
4746     pctx = EVP_PKEY_CTX_new_from_name(s->ctx->libctx, ginf->algorithm,
4747                                       s->ctx->propq);
4748
4749     if (pctx == NULL) {
4750         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
4751         goto err;
4752     }
4753     if (EVP_PKEY_keygen_init(pctx) <= 0) {
4754         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
4755         goto err;
4756     }
4757     if (!EVP_PKEY_CTX_set_group_name(pctx, ginf->realname)) {
4758         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
4759         goto err;
4760     }
4761     if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
4762         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
4763         EVP_PKEY_free(pkey);
4764         pkey = NULL;
4765     }
4766
4767  err:
4768     EVP_PKEY_CTX_free(pctx);
4769     return pkey;
4770 }
4771
4772 /*
4773  * Generate parameters from a group ID
4774  */
4775 EVP_PKEY *ssl_generate_param_group(SSL *s, uint16_t id)
4776 {
4777     EVP_PKEY_CTX *pctx = NULL;
4778     EVP_PKEY *pkey = NULL;
4779     const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(s->ctx, id);
4780
4781     if (ginf == NULL)
4782         goto err;
4783
4784     pctx = EVP_PKEY_CTX_new_from_name(s->ctx->libctx, ginf->algorithm,
4785                                       s->ctx->propq);
4786
4787     if (pctx == NULL)
4788         goto err;
4789     if (EVP_PKEY_paramgen_init(pctx) <= 0)
4790         goto err;
4791     if (!EVP_PKEY_CTX_set_group_name(pctx, ginf->realname)) {
4792         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
4793         goto err;
4794     }
4795     if (EVP_PKEY_paramgen(pctx, &pkey) <= 0) {
4796         EVP_PKEY_free(pkey);
4797         pkey = NULL;
4798     }
4799
4800  err:
4801     EVP_PKEY_CTX_free(pctx);
4802     return pkey;
4803 }
4804
4805 /* Generate secrets from pms */
4806 int ssl_gensecret(SSL *s, unsigned char *pms, size_t pmslen)
4807 {
4808     int rv = 0;
4809
4810     /* SSLfatal() called as appropriate in the below functions */
4811     if (SSL_IS_TLS13(s)) {
4812         /*
4813          * If we are resuming then we already generated the early secret
4814          * when we created the ClientHello, so don't recreate it.
4815          */
4816         if (!s->hit)
4817             rv = tls13_generate_secret(s, ssl_handshake_md(s), NULL, NULL,
4818                     0,
4819                     (unsigned char *)&s->early_secret);
4820         else
4821             rv = 1;
4822
4823         rv = rv && tls13_generate_handshake_secret(s, pms, pmslen);
4824     } else {
4825         rv = ssl_generate_master_secret(s, pms, pmslen, 0);
4826     }
4827
4828     return rv;
4829 }
4830
4831 /* Derive secrets for ECDH/DH */
4832 int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey, int gensecret)
4833 {
4834     int rv = 0;
4835     unsigned char *pms = NULL;
4836     size_t pmslen = 0;
4837     EVP_PKEY_CTX *pctx;
4838
4839     if (privkey == NULL || pubkey == NULL) {
4840         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4841         return 0;
4842     }
4843
4844     pctx = EVP_PKEY_CTX_new_from_pkey(s->ctx->libctx, privkey, s->ctx->propq);
4845
4846     if (EVP_PKEY_derive_init(pctx) <= 0
4847         || EVP_PKEY_derive_set_peer(pctx, pubkey) <= 0
4848         || EVP_PKEY_derive(pctx, NULL, &pmslen) <= 0) {
4849         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4850         goto err;
4851     }
4852
4853 #ifndef OPENSSL_NO_DH
4854     if (SSL_IS_TLS13(s) &&  EVP_PKEY_id(privkey) == EVP_PKEY_DH)
4855         EVP_PKEY_CTX_set_dh_pad(pctx, 1);
4856 #endif
4857
4858     pms = OPENSSL_malloc(pmslen);
4859     if (pms == NULL) {
4860         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
4861         goto err;
4862     }
4863
4864     if (EVP_PKEY_derive(pctx, pms, &pmslen) <= 0) {
4865         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4866         goto err;
4867     }
4868
4869     if (gensecret) {
4870         /* SSLfatal() called as appropriate in the below functions */
4871         rv = ssl_gensecret(s, pms, pmslen);
4872     } else {
4873         /* Save premaster secret */
4874         s->s3.tmp.pms = pms;
4875         s->s3.tmp.pmslen = pmslen;
4876         pms = NULL;
4877         rv = 1;
4878     }
4879
4880  err:
4881     OPENSSL_clear_free(pms, pmslen);
4882     EVP_PKEY_CTX_free(pctx);
4883     return rv;
4884 }
4885
4886 /* Decapsulate secrets for KEM */
4887 int ssl_decapsulate(SSL *s, EVP_PKEY *privkey,
4888                     const unsigned char *ct, size_t ctlen,
4889                     int gensecret)
4890 {
4891     int rv = 0;
4892     unsigned char *pms = NULL;
4893     size_t pmslen = 0;
4894     EVP_PKEY_CTX *pctx;
4895
4896     if (privkey == NULL) {
4897         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4898         return 0;
4899     }
4900
4901     pctx = EVP_PKEY_CTX_new_from_pkey(s->ctx->libctx, privkey, s->ctx->propq);
4902
4903     if (EVP_PKEY_decapsulate_init(pctx) <= 0
4904             || EVP_PKEY_decapsulate(pctx, NULL, &pmslen, ct, ctlen) <= 0) {
4905         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4906         goto err;
4907     }
4908
4909     pms = OPENSSL_malloc(pmslen);
4910     if (pms == NULL) {
4911         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
4912         goto err;
4913     }
4914
4915     if (EVP_PKEY_decapsulate(pctx, pms, &pmslen, ct, ctlen) <= 0) {
4916         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4917         goto err;
4918     }
4919
4920     if (gensecret) {
4921         /* SSLfatal() called as appropriate in the below functions */
4922         rv = ssl_gensecret(s, pms, pmslen);
4923     } else {
4924         /* Save premaster secret */
4925         s->s3.tmp.pms = pms;
4926         s->s3.tmp.pmslen = pmslen;
4927         pms = NULL;
4928         rv = 1;
4929     }
4930
4931  err:
4932     OPENSSL_clear_free(pms, pmslen);
4933     EVP_PKEY_CTX_free(pctx);
4934     return rv;
4935 }
4936
4937 int ssl_encapsulate(SSL *s, EVP_PKEY *pubkey,
4938                     unsigned char **ctp, size_t *ctlenp,
4939                     int gensecret)
4940 {
4941     int rv = 0;
4942     unsigned char *pms = NULL, *ct = NULL;
4943     size_t pmslen = 0, ctlen = 0;
4944     EVP_PKEY_CTX *pctx;
4945
4946     if (pubkey == NULL) {
4947         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4948         return 0;
4949     }
4950
4951     pctx = EVP_PKEY_CTX_new_from_pkey(s->ctx->libctx, pubkey, s->ctx->propq);
4952
4953     if (EVP_PKEY_encapsulate_init(pctx) <= 0
4954             || EVP_PKEY_encapsulate(pctx, NULL, &ctlen, NULL, &pmslen) <= 0
4955             || pmslen == 0 || ctlen == 0) {
4956         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4957         goto err;
4958     }
4959
4960     pms = OPENSSL_malloc(pmslen);
4961     ct = OPENSSL_malloc(ctlen);
4962     if (pms == NULL || ct == NULL) {
4963         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
4964         goto err;
4965     }
4966
4967     if (EVP_PKEY_encapsulate(pctx, ct, &ctlen, pms, &pmslen) <= 0) {
4968         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
4969         goto err;
4970     }
4971
4972     if (gensecret) {
4973         /* SSLfatal() called as appropriate in the below functions */
4974         rv = ssl_gensecret(s, pms, pmslen);
4975     } else {
4976         /* Save premaster secret */
4977         s->s3.tmp.pms = pms;
4978         s->s3.tmp.pmslen = pmslen;
4979         pms = NULL;
4980         rv = 1;
4981     }
4982
4983     if (rv > 0) {
4984         /* Pass ownership of ct to caller */
4985         *ctp = ct;
4986         *ctlenp = ctlen;
4987         ct = NULL;
4988     }
4989
4990  err:
4991     OPENSSL_clear_free(pms, pmslen);
4992     OPENSSL_free(ct);
4993     EVP_PKEY_CTX_free(pctx);
4994     return rv;
4995 }