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