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