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