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