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