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