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