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