s3_lib.c revision 325335
1/* ssl/s3_lib.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to.  The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 *    notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 *    notice, this list of conditions and the following disclaimer in the
30 *    documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 *    must display the following acknowledgement:
33 *    "This product includes cryptographic software written by
34 *     Eric Young (eay@cryptsoft.com)"
35 *    The word 'cryptographic' can be left out if the rouines from the library
36 *    being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 *    the apps directory (application code) you must include an acknowledgement:
39 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed.  i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58/* ====================================================================
59 * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 *    notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 *    notice, this list of conditions and the following disclaimer in
70 *    the documentation and/or other materials provided with the
71 *    distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 *    software must display the following acknowledgment:
75 *    "This product includes software developed by the OpenSSL Project
76 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 *    endorse or promote products derived from this software without
80 *    prior written permission. For written permission, please contact
81 *    openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 *    nor may "OpenSSL" appear in their names without prior written
85 *    permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 *    acknowledgment:
89 *    "This product includes software developed by the OpenSSL Project
90 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com).  This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111/* ====================================================================
112 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113 *
114 * Portions of the attached software ("Contribution") are developed by
115 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
116 *
117 * The Contribution is licensed pursuant to the OpenSSL open source
118 * license provided above.
119 *
120 * ECC cipher suite support in OpenSSL originally written by
121 * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
122 *
123 */
124/* ====================================================================
125 * Copyright 2005 Nokia. All rights reserved.
126 *
127 * The portions of the attached software ("Contribution") is developed by
128 * Nokia Corporation and is licensed pursuant to the OpenSSL open source
129 * license.
130 *
131 * The Contribution, originally written by Mika Kousa and Pasi Eronen of
132 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
133 * support (see RFC 4279) to OpenSSL.
134 *
135 * No patent licenses or other rights except those expressly stated in
136 * the OpenSSL open source license shall be deemed granted or received
137 * expressly, by implication, estoppel, or otherwise.
138 *
139 * No assurances are provided by Nokia that the Contribution does not
140 * infringe the patent or other intellectual property rights of any third
141 * party or that the license provides you with all the necessary rights
142 * to make use of the Contribution.
143 *
144 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
145 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
146 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
147 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
148 * OTHERWISE.
149 */
150
151#include <stdio.h>
152#include <openssl/objects.h>
153#include "ssl_locl.h"
154#include "kssl_lcl.h"
155#include <openssl/md5.h>
156#ifndef OPENSSL_NO_DH
157# include <openssl/dh.h>
158#endif
159
160const char ssl3_version_str[] = "SSLv3" OPENSSL_VERSION_PTEXT;
161
162#define SSL3_NUM_CIPHERS        (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
163
164/* list of available SSLv3 ciphers (sorted by id) */
165OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
166
167/* The RSA ciphers */
168/* Cipher 01 */
169    {
170     1,
171     SSL3_TXT_RSA_NULL_MD5,
172     SSL3_CK_RSA_NULL_MD5,
173     SSL_kRSA,
174     SSL_aRSA,
175     SSL_eNULL,
176     SSL_MD5,
177     SSL_SSLV3,
178     SSL_NOT_EXP | SSL_STRONG_NONE,
179     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
180     0,
181     0,
182     },
183
184/* Cipher 02 */
185    {
186     1,
187     SSL3_TXT_RSA_NULL_SHA,
188     SSL3_CK_RSA_NULL_SHA,
189     SSL_kRSA,
190     SSL_aRSA,
191     SSL_eNULL,
192     SSL_SHA1,
193     SSL_SSLV3,
194     SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
195     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
196     0,
197     0,
198     },
199
200/* Cipher 03 */
201#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
202    {
203     1,
204     SSL3_TXT_RSA_RC4_40_MD5,
205     SSL3_CK_RSA_RC4_40_MD5,
206     SSL_kRSA,
207     SSL_aRSA,
208     SSL_RC4,
209     SSL_MD5,
210     SSL_SSLV3,
211     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
212     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
213     40,
214     128,
215     },
216#endif
217
218/* Cipher 04 */
219    {
220     1,
221     SSL3_TXT_RSA_RC4_128_MD5,
222     SSL3_CK_RSA_RC4_128_MD5,
223     SSL_kRSA,
224     SSL_aRSA,
225     SSL_RC4,
226     SSL_MD5,
227     SSL_SSLV3,
228     SSL_NOT_EXP | SSL_MEDIUM,
229     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
230     128,
231     128,
232     },
233
234/* Cipher 05 */
235    {
236     1,
237     SSL3_TXT_RSA_RC4_128_SHA,
238     SSL3_CK_RSA_RC4_128_SHA,
239     SSL_kRSA,
240     SSL_aRSA,
241     SSL_RC4,
242     SSL_SHA1,
243     SSL_SSLV3,
244     SSL_NOT_EXP | SSL_MEDIUM,
245     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
246     128,
247     128,
248     },
249
250/* Cipher 06 */
251#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
252    {
253     1,
254     SSL3_TXT_RSA_RC2_40_MD5,
255     SSL3_CK_RSA_RC2_40_MD5,
256     SSL_kRSA,
257     SSL_aRSA,
258     SSL_RC2,
259     SSL_MD5,
260     SSL_SSLV3,
261     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
262     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
263     40,
264     128,
265     },
266#endif
267
268/* Cipher 07 */
269#ifndef OPENSSL_NO_IDEA
270    {
271     1,
272     SSL3_TXT_RSA_IDEA_128_SHA,
273     SSL3_CK_RSA_IDEA_128_SHA,
274     SSL_kRSA,
275     SSL_aRSA,
276     SSL_IDEA,
277     SSL_SHA1,
278     SSL_SSLV3,
279     SSL_NOT_EXP | SSL_MEDIUM,
280     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
281     128,
282     128,
283     },
284#endif
285
286/* Cipher 08 */
287#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
288    {
289     1,
290     SSL3_TXT_RSA_DES_40_CBC_SHA,
291     SSL3_CK_RSA_DES_40_CBC_SHA,
292     SSL_kRSA,
293     SSL_aRSA,
294     SSL_DES,
295     SSL_SHA1,
296     SSL_SSLV3,
297     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
298     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
299     40,
300     56,
301     },
302#endif
303
304/* Cipher 09 */
305#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
306    {
307     1,
308     SSL3_TXT_RSA_DES_64_CBC_SHA,
309     SSL3_CK_RSA_DES_64_CBC_SHA,
310     SSL_kRSA,
311     SSL_aRSA,
312     SSL_DES,
313     SSL_SHA1,
314     SSL_SSLV3,
315     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
316     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
317     56,
318     56,
319     },
320#endif
321
322/* Cipher 0A */
323    {
324     1,
325     SSL3_TXT_RSA_DES_192_CBC3_SHA,
326     SSL3_CK_RSA_DES_192_CBC3_SHA,
327     SSL_kRSA,
328     SSL_aRSA,
329     SSL_3DES,
330     SSL_SHA1,
331     SSL_SSLV3,
332     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
333     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
334     112,
335     168,
336     },
337
338/* The DH ciphers */
339/* Cipher 0B */
340#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
341    {
342     0,
343     SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
344     SSL3_CK_DH_DSS_DES_40_CBC_SHA,
345     SSL_kDHd,
346     SSL_aDH,
347     SSL_DES,
348     SSL_SHA1,
349     SSL_SSLV3,
350     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
351     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
352     40,
353     56,
354     },
355#endif
356
357/* Cipher 0C */
358#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
359    {
360     1,
361     SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
362     SSL3_CK_DH_DSS_DES_64_CBC_SHA,
363     SSL_kDHd,
364     SSL_aDH,
365     SSL_DES,
366     SSL_SHA1,
367     SSL_SSLV3,
368     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
369     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
370     56,
371     56,
372     },
373#endif
374
375/* Cipher 0D */
376    {
377     1,
378     SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
379     SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
380     SSL_kDHd,
381     SSL_aDH,
382     SSL_3DES,
383     SSL_SHA1,
384     SSL_SSLV3,
385     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
386     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
387     112,
388     168,
389     },
390
391/* Cipher 0E */
392#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
393    {
394     0,
395     SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
396     SSL3_CK_DH_RSA_DES_40_CBC_SHA,
397     SSL_kDHr,
398     SSL_aDH,
399     SSL_DES,
400     SSL_SHA1,
401     SSL_SSLV3,
402     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
403     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
404     40,
405     56,
406     },
407#endif
408
409/* Cipher 0F */
410#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
411    {
412     1,
413     SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
414     SSL3_CK_DH_RSA_DES_64_CBC_SHA,
415     SSL_kDHr,
416     SSL_aDH,
417     SSL_DES,
418     SSL_SHA1,
419     SSL_SSLV3,
420     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
421     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
422     56,
423     56,
424     },
425#endif
426
427/* Cipher 10 */
428    {
429     1,
430     SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
431     SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
432     SSL_kDHr,
433     SSL_aDH,
434     SSL_3DES,
435     SSL_SHA1,
436     SSL_SSLV3,
437     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
438     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
439     112,
440     168,
441     },
442
443/* The Ephemeral DH ciphers */
444/* Cipher 11 */
445#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
446    {
447     1,
448     SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
449     SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
450     SSL_kEDH,
451     SSL_aDSS,
452     SSL_DES,
453     SSL_SHA1,
454     SSL_SSLV3,
455     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
456     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
457     40,
458     56,
459     },
460#endif
461
462/* Cipher 12 */
463#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
464    {
465     1,
466     SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
467     SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
468     SSL_kEDH,
469     SSL_aDSS,
470     SSL_DES,
471     SSL_SHA1,
472     SSL_SSLV3,
473     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
474     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
475     56,
476     56,
477     },
478#endif
479
480/* Cipher 13 */
481    {
482     1,
483     SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
484     SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
485     SSL_kEDH,
486     SSL_aDSS,
487     SSL_3DES,
488     SSL_SHA1,
489     SSL_SSLV3,
490     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
491     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
492     112,
493     168,
494     },
495
496/* Cipher 14 */
497#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
498    {
499     1,
500     SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
501     SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
502     SSL_kEDH,
503     SSL_aRSA,
504     SSL_DES,
505     SSL_SHA1,
506     SSL_SSLV3,
507     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
508     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
509     40,
510     56,
511     },
512#endif
513
514/* Cipher 15 */
515#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
516    {
517     1,
518     SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
519     SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
520     SSL_kEDH,
521     SSL_aRSA,
522     SSL_DES,
523     SSL_SHA1,
524     SSL_SSLV3,
525     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
526     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
527     56,
528     56,
529     },
530#endif
531
532/* Cipher 16 */
533    {
534     1,
535     SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
536     SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
537     SSL_kEDH,
538     SSL_aRSA,
539     SSL_3DES,
540     SSL_SHA1,
541     SSL_SSLV3,
542     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
543     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
544     112,
545     168,
546     },
547
548/* Cipher 17 */
549#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
550    {
551     1,
552     SSL3_TXT_ADH_RC4_40_MD5,
553     SSL3_CK_ADH_RC4_40_MD5,
554     SSL_kEDH,
555     SSL_aNULL,
556     SSL_RC4,
557     SSL_MD5,
558     SSL_SSLV3,
559     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
560     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
561     40,
562     128,
563     },
564#endif
565
566/* Cipher 18 */
567    {
568     1,
569     SSL3_TXT_ADH_RC4_128_MD5,
570     SSL3_CK_ADH_RC4_128_MD5,
571     SSL_kEDH,
572     SSL_aNULL,
573     SSL_RC4,
574     SSL_MD5,
575     SSL_SSLV3,
576     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM,
577     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
578     128,
579     128,
580     },
581
582/* Cipher 19 */
583#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
584    {
585     1,
586     SSL3_TXT_ADH_DES_40_CBC_SHA,
587     SSL3_CK_ADH_DES_40_CBC_SHA,
588     SSL_kEDH,
589     SSL_aNULL,
590     SSL_DES,
591     SSL_SHA1,
592     SSL_SSLV3,
593     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
594     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
595     40,
596     128,
597     },
598#endif
599
600/* Cipher 1A */
601#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
602    {
603     1,
604     SSL3_TXT_ADH_DES_64_CBC_SHA,
605     SSL3_CK_ADH_DES_64_CBC_SHA,
606     SSL_kEDH,
607     SSL_aNULL,
608     SSL_DES,
609     SSL_SHA1,
610     SSL_SSLV3,
611     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
612     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
613     56,
614     56,
615     },
616#endif
617
618/* Cipher 1B */
619    {
620     1,
621     SSL3_TXT_ADH_DES_192_CBC_SHA,
622     SSL3_CK_ADH_DES_192_CBC_SHA,
623     SSL_kEDH,
624     SSL_aNULL,
625     SSL_3DES,
626     SSL_SHA1,
627     SSL_SSLV3,
628     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
629     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
630     112,
631     168,
632     },
633
634/* Fortezza ciphersuite from SSL 3.0 spec */
635#if 0
636/* Cipher 1C */
637    {
638     0,
639     SSL3_TXT_FZA_DMS_NULL_SHA,
640     SSL3_CK_FZA_DMS_NULL_SHA,
641     SSL_kFZA,
642     SSL_aFZA,
643     SSL_eNULL,
644     SSL_SHA1,
645     SSL_SSLV3,
646     SSL_NOT_EXP | SSL_STRONG_NONE,
647     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
648     0,
649     0,
650     },
651
652/* Cipher 1D */
653    {
654     0,
655     SSL3_TXT_FZA_DMS_FZA_SHA,
656     SSL3_CK_FZA_DMS_FZA_SHA,
657     SSL_kFZA,
658     SSL_aFZA,
659     SSL_eFZA,
660     SSL_SHA1,
661     SSL_SSLV3,
662     SSL_NOT_EXP | SSL_STRONG_NONE,
663     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
664     0,
665     0,
666     },
667
668/* Cipher 1E */
669    {
670     0,
671     SSL3_TXT_FZA_DMS_RC4_SHA,
672     SSL3_CK_FZA_DMS_RC4_SHA,
673     SSL_kFZA,
674     SSL_aFZA,
675     SSL_RC4,
676     SSL_SHA1,
677     SSL_SSLV3,
678     SSL_NOT_EXP | SSL_MEDIUM,
679     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
680     128,
681     128,
682     },
683#endif
684
685#ifndef OPENSSL_NO_KRB5
686/* The Kerberos ciphers*/
687/* Cipher 1E */
688# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
689    {
690     1,
691     SSL3_TXT_KRB5_DES_64_CBC_SHA,
692     SSL3_CK_KRB5_DES_64_CBC_SHA,
693     SSL_kKRB5,
694     SSL_aKRB5,
695     SSL_DES,
696     SSL_SHA1,
697     SSL_SSLV3,
698     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
699     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
700     56,
701     56,
702     },
703# endif
704
705/* Cipher 1F */
706    {
707     1,
708     SSL3_TXT_KRB5_DES_192_CBC3_SHA,
709     SSL3_CK_KRB5_DES_192_CBC3_SHA,
710     SSL_kKRB5,
711     SSL_aKRB5,
712     SSL_3DES,
713     SSL_SHA1,
714     SSL_SSLV3,
715     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
716     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
717     112,
718     168,
719     },
720
721/* Cipher 20 */
722    {
723     1,
724     SSL3_TXT_KRB5_RC4_128_SHA,
725     SSL3_CK_KRB5_RC4_128_SHA,
726     SSL_kKRB5,
727     SSL_aKRB5,
728     SSL_RC4,
729     SSL_SHA1,
730     SSL_SSLV3,
731     SSL_NOT_EXP | SSL_MEDIUM,
732     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
733     128,
734     128,
735     },
736
737/* Cipher 21 */
738    {
739     1,
740     SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
741     SSL3_CK_KRB5_IDEA_128_CBC_SHA,
742     SSL_kKRB5,
743     SSL_aKRB5,
744     SSL_IDEA,
745     SSL_SHA1,
746     SSL_SSLV3,
747     SSL_NOT_EXP | SSL_MEDIUM,
748     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
749     128,
750     128,
751     },
752
753/* Cipher 22 */
754# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
755    {
756     1,
757     SSL3_TXT_KRB5_DES_64_CBC_MD5,
758     SSL3_CK_KRB5_DES_64_CBC_MD5,
759     SSL_kKRB5,
760     SSL_aKRB5,
761     SSL_DES,
762     SSL_MD5,
763     SSL_SSLV3,
764     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_LOW,
765     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
766     56,
767     56,
768     },
769# endif
770
771/* Cipher 23 */
772    {
773     1,
774     SSL3_TXT_KRB5_DES_192_CBC3_MD5,
775     SSL3_CK_KRB5_DES_192_CBC3_MD5,
776     SSL_kKRB5,
777     SSL_aKRB5,
778     SSL_3DES,
779     SSL_MD5,
780     SSL_SSLV3,
781     SSL_NOT_EXP | SSL_MEDIUM,
782     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
783     112,
784     168,
785     },
786
787/* Cipher 24 */
788    {
789     1,
790     SSL3_TXT_KRB5_RC4_128_MD5,
791     SSL3_CK_KRB5_RC4_128_MD5,
792     SSL_kKRB5,
793     SSL_aKRB5,
794     SSL_RC4,
795     SSL_MD5,
796     SSL_SSLV3,
797     SSL_NOT_EXP | SSL_MEDIUM,
798     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
799     128,
800     128,
801     },
802
803/* Cipher 25 */
804    {
805     1,
806     SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
807     SSL3_CK_KRB5_IDEA_128_CBC_MD5,
808     SSL_kKRB5,
809     SSL_aKRB5,
810     SSL_IDEA,
811     SSL_MD5,
812     SSL_SSLV3,
813     SSL_NOT_EXP | SSL_MEDIUM,
814     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
815     128,
816     128,
817     },
818
819/* Cipher 26 */
820# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
821    {
822     1,
823     SSL3_TXT_KRB5_DES_40_CBC_SHA,
824     SSL3_CK_KRB5_DES_40_CBC_SHA,
825     SSL_kKRB5,
826     SSL_aKRB5,
827     SSL_DES,
828     SSL_SHA1,
829     SSL_SSLV3,
830     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
831     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
832     40,
833     56,
834     },
835# endif
836
837/* Cipher 27 */
838# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
839    {
840     1,
841     SSL3_TXT_KRB5_RC2_40_CBC_SHA,
842     SSL3_CK_KRB5_RC2_40_CBC_SHA,
843     SSL_kKRB5,
844     SSL_aKRB5,
845     SSL_RC2,
846     SSL_SHA1,
847     SSL_SSLV3,
848     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
849     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
850     40,
851     128,
852     },
853# endif
854
855/* Cipher 28 */
856# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
857    {
858     1,
859     SSL3_TXT_KRB5_RC4_40_SHA,
860     SSL3_CK_KRB5_RC4_40_SHA,
861     SSL_kKRB5,
862     SSL_aKRB5,
863     SSL_RC4,
864     SSL_SHA1,
865     SSL_SSLV3,
866     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
867     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
868     40,
869     128,
870     },
871# endif
872
873/* Cipher 29 */
874# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
875    {
876     1,
877     SSL3_TXT_KRB5_DES_40_CBC_MD5,
878     SSL3_CK_KRB5_DES_40_CBC_MD5,
879     SSL_kKRB5,
880     SSL_aKRB5,
881     SSL_DES,
882     SSL_MD5,
883     SSL_SSLV3,
884     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
885     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
886     40,
887     56,
888     },
889# endif
890
891/* Cipher 2A */
892# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
893    {
894     1,
895     SSL3_TXT_KRB5_RC2_40_CBC_MD5,
896     SSL3_CK_KRB5_RC2_40_CBC_MD5,
897     SSL_kKRB5,
898     SSL_aKRB5,
899     SSL_RC2,
900     SSL_MD5,
901     SSL_SSLV3,
902     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
903     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
904     40,
905     128,
906     },
907# endif
908
909/* Cipher 2B */
910# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
911    {
912     1,
913     SSL3_TXT_KRB5_RC4_40_MD5,
914     SSL3_CK_KRB5_RC4_40_MD5,
915     SSL_kKRB5,
916     SSL_aKRB5,
917     SSL_RC4,
918     SSL_MD5,
919     SSL_SSLV3,
920     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP40,
921     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
922     40,
923     128,
924     },
925# endif
926#endif                          /* OPENSSL_NO_KRB5 */
927
928/* New AES ciphersuites */
929/* Cipher 2F */
930    {
931     1,
932     TLS1_TXT_RSA_WITH_AES_128_SHA,
933     TLS1_CK_RSA_WITH_AES_128_SHA,
934     SSL_kRSA,
935     SSL_aRSA,
936     SSL_AES128,
937     SSL_SHA1,
938     SSL_TLSV1,
939     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
940     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
941     128,
942     128,
943     },
944/* Cipher 30 */
945    {
946     1,
947     TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
948     TLS1_CK_DH_DSS_WITH_AES_128_SHA,
949     SSL_kDHd,
950     SSL_aDH,
951     SSL_AES128,
952     SSL_SHA1,
953     SSL_TLSV1,
954     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
955     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
956     128,
957     128,
958     },
959/* Cipher 31 */
960    {
961     1,
962     TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
963     TLS1_CK_DH_RSA_WITH_AES_128_SHA,
964     SSL_kDHr,
965     SSL_aDH,
966     SSL_AES128,
967     SSL_SHA1,
968     SSL_TLSV1,
969     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
970     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
971     128,
972     128,
973     },
974/* Cipher 32 */
975    {
976     1,
977     TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
978     TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
979     SSL_kEDH,
980     SSL_aDSS,
981     SSL_AES128,
982     SSL_SHA1,
983     SSL_TLSV1,
984     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
985     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
986     128,
987     128,
988     },
989/* Cipher 33 */
990    {
991     1,
992     TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
993     TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
994     SSL_kEDH,
995     SSL_aRSA,
996     SSL_AES128,
997     SSL_SHA1,
998     SSL_TLSV1,
999     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1000     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1001     128,
1002     128,
1003     },
1004/* Cipher 34 */
1005    {
1006     1,
1007     TLS1_TXT_ADH_WITH_AES_128_SHA,
1008     TLS1_CK_ADH_WITH_AES_128_SHA,
1009     SSL_kEDH,
1010     SSL_aNULL,
1011     SSL_AES128,
1012     SSL_SHA1,
1013     SSL_TLSV1,
1014     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1015     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1016     128,
1017     128,
1018     },
1019
1020/* Cipher 35 */
1021    {
1022     1,
1023     TLS1_TXT_RSA_WITH_AES_256_SHA,
1024     TLS1_CK_RSA_WITH_AES_256_SHA,
1025     SSL_kRSA,
1026     SSL_aRSA,
1027     SSL_AES256,
1028     SSL_SHA1,
1029     SSL_TLSV1,
1030     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1031     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1032     256,
1033     256,
1034     },
1035/* Cipher 36 */
1036    {
1037     1,
1038     TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
1039     TLS1_CK_DH_DSS_WITH_AES_256_SHA,
1040     SSL_kDHd,
1041     SSL_aDH,
1042     SSL_AES256,
1043     SSL_SHA1,
1044     SSL_TLSV1,
1045     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1046     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1047     256,
1048     256,
1049     },
1050
1051/* Cipher 37 */
1052    {
1053     1,
1054     TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
1055     TLS1_CK_DH_RSA_WITH_AES_256_SHA,
1056     SSL_kDHr,
1057     SSL_aDH,
1058     SSL_AES256,
1059     SSL_SHA1,
1060     SSL_TLSV1,
1061     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1062     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1063     256,
1064     256,
1065     },
1066
1067/* Cipher 38 */
1068    {
1069     1,
1070     TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
1071     TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
1072     SSL_kEDH,
1073     SSL_aDSS,
1074     SSL_AES256,
1075     SSL_SHA1,
1076     SSL_TLSV1,
1077     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1078     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1079     256,
1080     256,
1081     },
1082
1083/* Cipher 39 */
1084    {
1085     1,
1086     TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
1087     TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
1088     SSL_kEDH,
1089     SSL_aRSA,
1090     SSL_AES256,
1091     SSL_SHA1,
1092     SSL_TLSV1,
1093     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1094     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1095     256,
1096     256,
1097     },
1098
1099    /* Cipher 3A */
1100    {
1101     1,
1102     TLS1_TXT_ADH_WITH_AES_256_SHA,
1103     TLS1_CK_ADH_WITH_AES_256_SHA,
1104     SSL_kEDH,
1105     SSL_aNULL,
1106     SSL_AES256,
1107     SSL_SHA1,
1108     SSL_TLSV1,
1109     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1110     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1111     256,
1112     256,
1113     },
1114
1115    /* TLS v1.2 ciphersuites */
1116    /* Cipher 3B */
1117    {
1118     1,
1119     TLS1_TXT_RSA_WITH_NULL_SHA256,
1120     TLS1_CK_RSA_WITH_NULL_SHA256,
1121     SSL_kRSA,
1122     SSL_aRSA,
1123     SSL_eNULL,
1124     SSL_SHA256,
1125     SSL_TLSV1_2,
1126     SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
1127     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1128     0,
1129     0,
1130     },
1131
1132    /* Cipher 3C */
1133    {
1134     1,
1135     TLS1_TXT_RSA_WITH_AES_128_SHA256,
1136     TLS1_CK_RSA_WITH_AES_128_SHA256,
1137     SSL_kRSA,
1138     SSL_aRSA,
1139     SSL_AES128,
1140     SSL_SHA256,
1141     SSL_TLSV1_2,
1142     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1143     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1144     128,
1145     128,
1146     },
1147
1148    /* Cipher 3D */
1149    {
1150     1,
1151     TLS1_TXT_RSA_WITH_AES_256_SHA256,
1152     TLS1_CK_RSA_WITH_AES_256_SHA256,
1153     SSL_kRSA,
1154     SSL_aRSA,
1155     SSL_AES256,
1156     SSL_SHA256,
1157     SSL_TLSV1_2,
1158     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1159     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1160     256,
1161     256,
1162     },
1163
1164    /* Cipher 3E */
1165    {
1166     1,
1167     TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
1168     TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
1169     SSL_kDHd,
1170     SSL_aDH,
1171     SSL_AES128,
1172     SSL_SHA256,
1173     SSL_TLSV1_2,
1174     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1175     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1176     128,
1177     128,
1178     },
1179
1180    /* Cipher 3F */
1181    {
1182     1,
1183     TLS1_TXT_DH_RSA_WITH_AES_128_SHA256,
1184     TLS1_CK_DH_RSA_WITH_AES_128_SHA256,
1185     SSL_kDHr,
1186     SSL_aDH,
1187     SSL_AES128,
1188     SSL_SHA256,
1189     SSL_TLSV1_2,
1190     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1191     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1192     128,
1193     128,
1194     },
1195
1196    /* Cipher 40 */
1197    {
1198     1,
1199     TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
1200     TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
1201     SSL_kEDH,
1202     SSL_aDSS,
1203     SSL_AES128,
1204     SSL_SHA256,
1205     SSL_TLSV1_2,
1206     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1207     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1208     128,
1209     128,
1210     },
1211
1212#ifndef OPENSSL_NO_CAMELLIA
1213    /* Camellia ciphersuites from RFC4132 (128-bit portion) */
1214
1215    /* Cipher 41 */
1216    {
1217     1,
1218     TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
1219     TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
1220     SSL_kRSA,
1221     SSL_aRSA,
1222     SSL_CAMELLIA128,
1223     SSL_SHA1,
1224     SSL_TLSV1,
1225     SSL_NOT_EXP | SSL_HIGH,
1226     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1227     128,
1228     128,
1229     },
1230
1231    /* Cipher 42 */
1232    {
1233     1,
1234     TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
1235     TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
1236     SSL_kDHd,
1237     SSL_aDH,
1238     SSL_CAMELLIA128,
1239     SSL_SHA1,
1240     SSL_TLSV1,
1241     SSL_NOT_EXP | SSL_HIGH,
1242     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1243     128,
1244     128,
1245     },
1246
1247    /* Cipher 43 */
1248    {
1249     1,
1250     TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
1251     TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
1252     SSL_kDHr,
1253     SSL_aDH,
1254     SSL_CAMELLIA128,
1255     SSL_SHA1,
1256     SSL_TLSV1,
1257     SSL_NOT_EXP | SSL_HIGH,
1258     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1259     128,
1260     128,
1261     },
1262
1263    /* Cipher 44 */
1264    {
1265     1,
1266     TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
1267     TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
1268     SSL_kEDH,
1269     SSL_aDSS,
1270     SSL_CAMELLIA128,
1271     SSL_SHA1,
1272     SSL_TLSV1,
1273     SSL_NOT_EXP | SSL_HIGH,
1274     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1275     128,
1276     128,
1277     },
1278
1279    /* Cipher 45 */
1280    {
1281     1,
1282     TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1283     TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1284     SSL_kEDH,
1285     SSL_aRSA,
1286     SSL_CAMELLIA128,
1287     SSL_SHA1,
1288     SSL_TLSV1,
1289     SSL_NOT_EXP | SSL_HIGH,
1290     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1291     128,
1292     128,
1293     },
1294
1295    /* Cipher 46 */
1296    {
1297     1,
1298     TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
1299     TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
1300     SSL_kEDH,
1301     SSL_aNULL,
1302     SSL_CAMELLIA128,
1303     SSL_SHA1,
1304     SSL_TLSV1,
1305     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH,
1306     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1307     128,
1308     128,
1309     },
1310#endif                          /* OPENSSL_NO_CAMELLIA */
1311
1312#if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
1313    /* New TLS Export CipherSuites from expired ID */
1314# if 0
1315    /* Cipher 60 */
1316    {
1317     1,
1318     TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
1319     TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
1320     SSL_kRSA,
1321     SSL_aRSA,
1322     SSL_RC4,
1323     SSL_MD5,
1324     SSL_TLSV1,
1325     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
1326     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1327     56,
1328     128,
1329     },
1330
1331    /* Cipher 61 */
1332    {
1333     1,
1334     TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1335     TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1336     SSL_kRSA,
1337     SSL_aRSA,
1338     SSL_RC2,
1339     SSL_MD5,
1340     SSL_TLSV1,
1341     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
1342     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1343     56,
1344     128,
1345     },
1346# endif
1347
1348    /* Cipher 62 */
1349# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1350    {
1351     1,
1352     TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1353     TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1354     SSL_kRSA,
1355     SSL_aRSA,
1356     SSL_DES,
1357     SSL_SHA1,
1358     SSL_TLSV1,
1359     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
1360     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1361     56,
1362     56,
1363     },
1364# endif
1365
1366    /* Cipher 63 */
1367# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1368    {
1369     1,
1370     TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1371     TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1372     SSL_kEDH,
1373     SSL_aDSS,
1374     SSL_DES,
1375     SSL_SHA1,
1376     SSL_TLSV1,
1377     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
1378     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1379     56,
1380     56,
1381     },
1382# endif
1383
1384    /* Cipher 64 */
1385# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1386    {
1387     1,
1388     TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
1389     TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
1390     SSL_kRSA,
1391     SSL_aRSA,
1392     SSL_RC4,
1393     SSL_SHA1,
1394     SSL_TLSV1,
1395     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
1396     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1397     56,
1398     128,
1399     },
1400# endif
1401
1402    /* Cipher 65 */
1403# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1404    {
1405     1,
1406     TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1407     TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1408     SSL_kEDH,
1409     SSL_aDSS,
1410     SSL_RC4,
1411     SSL_SHA1,
1412     SSL_TLSV1,
1413     SSL_NOT_DEFAULT | SSL_EXPORT | SSL_EXP56,
1414     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1415     56,
1416     128,
1417     },
1418# endif
1419
1420    /* Cipher 66 */
1421    {
1422     1,
1423     TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
1424     TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
1425     SSL_kEDH,
1426     SSL_aDSS,
1427     SSL_RC4,
1428     SSL_SHA1,
1429     SSL_TLSV1,
1430     SSL_NOT_EXP | SSL_MEDIUM,
1431     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1432     128,
1433     128,
1434     },
1435#endif
1436
1437    /* TLS v1.2 ciphersuites */
1438    /* Cipher 67 */
1439    {
1440     1,
1441     TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
1442     TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
1443     SSL_kEDH,
1444     SSL_aRSA,
1445     SSL_AES128,
1446     SSL_SHA256,
1447     SSL_TLSV1_2,
1448     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1449     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1450     128,
1451     128,
1452     },
1453
1454    /* Cipher 68 */
1455    {
1456     1,
1457     TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
1458     TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
1459     SSL_kDHd,
1460     SSL_aDH,
1461     SSL_AES256,
1462     SSL_SHA256,
1463     SSL_TLSV1_2,
1464     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1465     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1466     256,
1467     256,
1468     },
1469
1470    /* Cipher 69 */
1471    {
1472     1,
1473     TLS1_TXT_DH_RSA_WITH_AES_256_SHA256,
1474     TLS1_CK_DH_RSA_WITH_AES_256_SHA256,
1475     SSL_kDHr,
1476     SSL_aDH,
1477     SSL_AES256,
1478     SSL_SHA256,
1479     SSL_TLSV1_2,
1480     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1481     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1482     256,
1483     256,
1484     },
1485
1486    /* Cipher 6A */
1487    {
1488     1,
1489     TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
1490     TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
1491     SSL_kEDH,
1492     SSL_aDSS,
1493     SSL_AES256,
1494     SSL_SHA256,
1495     SSL_TLSV1_2,
1496     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1497     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1498     256,
1499     256,
1500     },
1501
1502    /* Cipher 6B */
1503    {
1504     1,
1505     TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
1506     TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
1507     SSL_kEDH,
1508     SSL_aRSA,
1509     SSL_AES256,
1510     SSL_SHA256,
1511     SSL_TLSV1_2,
1512     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1513     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1514     256,
1515     256,
1516     },
1517
1518    /* Cipher 6C */
1519    {
1520     1,
1521     TLS1_TXT_ADH_WITH_AES_128_SHA256,
1522     TLS1_CK_ADH_WITH_AES_128_SHA256,
1523     SSL_kEDH,
1524     SSL_aNULL,
1525     SSL_AES128,
1526     SSL_SHA256,
1527     SSL_TLSV1_2,
1528     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1529     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1530     128,
1531     128,
1532     },
1533
1534    /* Cipher 6D */
1535    {
1536     1,
1537     TLS1_TXT_ADH_WITH_AES_256_SHA256,
1538     TLS1_CK_ADH_WITH_AES_256_SHA256,
1539     SSL_kEDH,
1540     SSL_aNULL,
1541     SSL_AES256,
1542     SSL_SHA256,
1543     SSL_TLSV1_2,
1544     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1545     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1546     256,
1547     256,
1548     },
1549
1550    /* GOST Ciphersuites */
1551
1552    {
1553     1,
1554     "GOST94-GOST89-GOST89",
1555     0x3000080,
1556     SSL_kGOST,
1557     SSL_aGOST94,
1558     SSL_eGOST2814789CNT,
1559     SSL_GOST89MAC,
1560     SSL_TLSV1,
1561     SSL_NOT_EXP | SSL_HIGH,
1562     SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC,
1563     256,
1564     256},
1565    {
1566     1,
1567     "GOST2001-GOST89-GOST89",
1568     0x3000081,
1569     SSL_kGOST,
1570     SSL_aGOST01,
1571     SSL_eGOST2814789CNT,
1572     SSL_GOST89MAC,
1573     SSL_TLSV1,
1574     SSL_NOT_EXP | SSL_HIGH,
1575     SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC,
1576     256,
1577     256},
1578    {
1579     1,
1580     "GOST94-NULL-GOST94",
1581     0x3000082,
1582     SSL_kGOST,
1583     SSL_aGOST94,
1584     SSL_eNULL,
1585     SSL_GOST94,
1586     SSL_TLSV1,
1587     SSL_NOT_EXP | SSL_STRONG_NONE,
1588     SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94,
1589     0,
1590     0},
1591    {
1592     1,
1593     "GOST2001-NULL-GOST94",
1594     0x3000083,
1595     SSL_kGOST,
1596     SSL_aGOST01,
1597     SSL_eNULL,
1598     SSL_GOST94,
1599     SSL_TLSV1,
1600     SSL_NOT_EXP | SSL_STRONG_NONE,
1601     SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94,
1602     0,
1603     0},
1604
1605#ifndef OPENSSL_NO_CAMELLIA
1606    /* Camellia ciphersuites from RFC4132 (256-bit portion) */
1607
1608    /* Cipher 84 */
1609    {
1610     1,
1611     TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
1612     TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
1613     SSL_kRSA,
1614     SSL_aRSA,
1615     SSL_CAMELLIA256,
1616     SSL_SHA1,
1617     SSL_TLSV1,
1618     SSL_NOT_EXP | SSL_HIGH,
1619     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1620     256,
1621     256,
1622     },
1623    /* Cipher 85 */
1624    {
1625     1,
1626     TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1627     TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1628     SSL_kDHd,
1629     SSL_aDH,
1630     SSL_CAMELLIA256,
1631     SSL_SHA1,
1632     SSL_TLSV1,
1633     SSL_NOT_EXP | SSL_HIGH,
1634     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1635     256,
1636     256,
1637     },
1638
1639    /* Cipher 86 */
1640    {
1641     1,
1642     TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1643     TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1644     SSL_kDHr,
1645     SSL_aDH,
1646     SSL_CAMELLIA256,
1647     SSL_SHA1,
1648     SSL_TLSV1,
1649     SSL_NOT_EXP | SSL_HIGH,
1650     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1651     256,
1652     256,
1653     },
1654
1655    /* Cipher 87 */
1656    {
1657     1,
1658     TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1659     TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1660     SSL_kEDH,
1661     SSL_aDSS,
1662     SSL_CAMELLIA256,
1663     SSL_SHA1,
1664     SSL_TLSV1,
1665     SSL_NOT_EXP | SSL_HIGH,
1666     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1667     256,
1668     256,
1669     },
1670
1671    /* Cipher 88 */
1672    {
1673     1,
1674     TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1675     TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1676     SSL_kEDH,
1677     SSL_aRSA,
1678     SSL_CAMELLIA256,
1679     SSL_SHA1,
1680     SSL_TLSV1,
1681     SSL_NOT_EXP | SSL_HIGH,
1682     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1683     256,
1684     256,
1685     },
1686
1687    /* Cipher 89 */
1688    {
1689     1,
1690     TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
1691     TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
1692     SSL_kEDH,
1693     SSL_aNULL,
1694     SSL_CAMELLIA256,
1695     SSL_SHA1,
1696     SSL_TLSV1,
1697     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH,
1698     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1699     256,
1700     256,
1701     },
1702#endif                          /* OPENSSL_NO_CAMELLIA */
1703
1704#ifndef OPENSSL_NO_PSK
1705    /* Cipher 8A */
1706    {
1707     1,
1708     TLS1_TXT_PSK_WITH_RC4_128_SHA,
1709     TLS1_CK_PSK_WITH_RC4_128_SHA,
1710     SSL_kPSK,
1711     SSL_aPSK,
1712     SSL_RC4,
1713     SSL_SHA1,
1714     SSL_TLSV1,
1715     SSL_NOT_EXP | SSL_MEDIUM,
1716     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1717     128,
1718     128,
1719     },
1720
1721    /* Cipher 8B */
1722    {
1723     1,
1724     TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
1725     TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
1726     SSL_kPSK,
1727     SSL_aPSK,
1728     SSL_3DES,
1729     SSL_SHA1,
1730     SSL_TLSV1,
1731     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
1732     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1733     112,
1734     168,
1735     },
1736
1737    /* Cipher 8C */
1738    {
1739     1,
1740     TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
1741     TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
1742     SSL_kPSK,
1743     SSL_aPSK,
1744     SSL_AES128,
1745     SSL_SHA1,
1746     SSL_TLSV1,
1747     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1748     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1749     128,
1750     128,
1751     },
1752
1753    /* Cipher 8D */
1754    {
1755     1,
1756     TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
1757     TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
1758     SSL_kPSK,
1759     SSL_aPSK,
1760     SSL_AES256,
1761     SSL_SHA1,
1762     SSL_TLSV1,
1763     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1764     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1765     256,
1766     256,
1767     },
1768#endif                          /* OPENSSL_NO_PSK */
1769
1770#ifndef OPENSSL_NO_SEED
1771    /* SEED ciphersuites from RFC4162 */
1772
1773    /* Cipher 96 */
1774    {
1775     1,
1776     TLS1_TXT_RSA_WITH_SEED_SHA,
1777     TLS1_CK_RSA_WITH_SEED_SHA,
1778     SSL_kRSA,
1779     SSL_aRSA,
1780     SSL_SEED,
1781     SSL_SHA1,
1782     SSL_TLSV1,
1783     SSL_NOT_EXP | SSL_MEDIUM,
1784     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1785     128,
1786     128,
1787     },
1788
1789    /* Cipher 97 */
1790    {
1791     1,
1792     TLS1_TXT_DH_DSS_WITH_SEED_SHA,
1793     TLS1_CK_DH_DSS_WITH_SEED_SHA,
1794     SSL_kDHd,
1795     SSL_aDH,
1796     SSL_SEED,
1797     SSL_SHA1,
1798     SSL_TLSV1,
1799     SSL_NOT_EXP | SSL_MEDIUM,
1800     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1801     128,
1802     128,
1803     },
1804
1805    /* Cipher 98 */
1806    {
1807     1,
1808     TLS1_TXT_DH_RSA_WITH_SEED_SHA,
1809     TLS1_CK_DH_RSA_WITH_SEED_SHA,
1810     SSL_kDHr,
1811     SSL_aDH,
1812     SSL_SEED,
1813     SSL_SHA1,
1814     SSL_TLSV1,
1815     SSL_NOT_EXP | SSL_MEDIUM,
1816     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1817     128,
1818     128,
1819     },
1820
1821    /* Cipher 99 */
1822    {
1823     1,
1824     TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
1825     TLS1_CK_DHE_DSS_WITH_SEED_SHA,
1826     SSL_kEDH,
1827     SSL_aDSS,
1828     SSL_SEED,
1829     SSL_SHA1,
1830     SSL_TLSV1,
1831     SSL_NOT_EXP | SSL_MEDIUM,
1832     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1833     128,
1834     128,
1835     },
1836
1837    /* Cipher 9A */
1838    {
1839     1,
1840     TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
1841     TLS1_CK_DHE_RSA_WITH_SEED_SHA,
1842     SSL_kEDH,
1843     SSL_aRSA,
1844     SSL_SEED,
1845     SSL_SHA1,
1846     SSL_TLSV1,
1847     SSL_NOT_EXP | SSL_MEDIUM,
1848     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1849     128,
1850     128,
1851     },
1852
1853    /* Cipher 9B */
1854    {
1855     1,
1856     TLS1_TXT_ADH_WITH_SEED_SHA,
1857     TLS1_CK_ADH_WITH_SEED_SHA,
1858     SSL_kEDH,
1859     SSL_aNULL,
1860     SSL_SEED,
1861     SSL_SHA1,
1862     SSL_TLSV1,
1863     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM,
1864     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1865     128,
1866     128,
1867     },
1868
1869#endif                          /* OPENSSL_NO_SEED */
1870
1871    /* GCM ciphersuites from RFC5288 */
1872
1873    /* Cipher 9C */
1874    {
1875     1,
1876     TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
1877     TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
1878     SSL_kRSA,
1879     SSL_aRSA,
1880     SSL_AES128GCM,
1881     SSL_AEAD,
1882     SSL_TLSV1_2,
1883     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1884     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1885     128,
1886     128,
1887     },
1888
1889    /* Cipher 9D */
1890    {
1891     1,
1892     TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
1893     TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
1894     SSL_kRSA,
1895     SSL_aRSA,
1896     SSL_AES256GCM,
1897     SSL_AEAD,
1898     SSL_TLSV1_2,
1899     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1900     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1901     256,
1902     256,
1903     },
1904
1905    /* Cipher 9E */
1906    {
1907     1,
1908     TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
1909     TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
1910     SSL_kEDH,
1911     SSL_aRSA,
1912     SSL_AES128GCM,
1913     SSL_AEAD,
1914     SSL_TLSV1_2,
1915     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1916     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1917     128,
1918     128,
1919     },
1920
1921    /* Cipher 9F */
1922    {
1923     1,
1924     TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
1925     TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
1926     SSL_kEDH,
1927     SSL_aRSA,
1928     SSL_AES256GCM,
1929     SSL_AEAD,
1930     SSL_TLSV1_2,
1931     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1932     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1933     256,
1934     256,
1935     },
1936
1937    /* Cipher A0 */
1938    {
1939     1,
1940     TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256,
1941     TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256,
1942     SSL_kDHr,
1943     SSL_aDH,
1944     SSL_AES128GCM,
1945     SSL_AEAD,
1946     SSL_TLSV1_2,
1947     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1948     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1949     128,
1950     128,
1951     },
1952
1953    /* Cipher A1 */
1954    {
1955     1,
1956     TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384,
1957     TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384,
1958     SSL_kDHr,
1959     SSL_aDH,
1960     SSL_AES256GCM,
1961     SSL_AEAD,
1962     SSL_TLSV1_2,
1963     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1964     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1965     256,
1966     256,
1967     },
1968
1969    /* Cipher A2 */
1970    {
1971     1,
1972     TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
1973     TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
1974     SSL_kEDH,
1975     SSL_aDSS,
1976     SSL_AES128GCM,
1977     SSL_AEAD,
1978     SSL_TLSV1_2,
1979     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1980     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1981     128,
1982     128,
1983     },
1984
1985    /* Cipher A3 */
1986    {
1987     1,
1988     TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
1989     TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
1990     SSL_kEDH,
1991     SSL_aDSS,
1992     SSL_AES256GCM,
1993     SSL_AEAD,
1994     SSL_TLSV1_2,
1995     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
1996     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1997     256,
1998     256,
1999     },
2000
2001    /* Cipher A4 */
2002    {
2003     1,
2004     TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
2005     TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
2006     SSL_kDHd,
2007     SSL_aDH,
2008     SSL_AES128GCM,
2009     SSL_AEAD,
2010     SSL_TLSV1_2,
2011     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2012     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2013     128,
2014     128,
2015     },
2016
2017    /* Cipher A5 */
2018    {
2019     1,
2020     TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
2021     TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
2022     SSL_kDHd,
2023     SSL_aDH,
2024     SSL_AES256GCM,
2025     SSL_AEAD,
2026     SSL_TLSV1_2,
2027     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2028     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2029     256,
2030     256,
2031     },
2032
2033    /* Cipher A6 */
2034    {
2035     1,
2036     TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
2037     TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
2038     SSL_kEDH,
2039     SSL_aNULL,
2040     SSL_AES128GCM,
2041     SSL_AEAD,
2042     SSL_TLSV1_2,
2043     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2044     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2045     128,
2046     128,
2047     },
2048
2049    /* Cipher A7 */
2050    {
2051     1,
2052     TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
2053     TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
2054     SSL_kEDH,
2055     SSL_aNULL,
2056     SSL_AES256GCM,
2057     SSL_AEAD,
2058     SSL_TLSV1_2,
2059     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2060     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2061     256,
2062     256,
2063     },
2064#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
2065    {
2066     1,
2067     "SCSV",
2068     SSL3_CK_SCSV,
2069     0,
2070     0,
2071     0,
2072     0,
2073     0,
2074     0,
2075     0,
2076     0,
2077     0},
2078#endif
2079
2080#ifndef OPENSSL_NO_ECDH
2081    /* Cipher C001 */
2082    {
2083     1,
2084     TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
2085     TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
2086     SSL_kECDHe,
2087     SSL_aECDH,
2088     SSL_eNULL,
2089     SSL_SHA1,
2090     SSL_TLSV1,
2091     SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
2092     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2093     0,
2094     0,
2095     },
2096
2097    /* Cipher C002 */
2098    {
2099     1,
2100     TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
2101     TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
2102     SSL_kECDHe,
2103     SSL_aECDH,
2104     SSL_RC4,
2105     SSL_SHA1,
2106     SSL_TLSV1,
2107     SSL_NOT_EXP | SSL_MEDIUM,
2108     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2109     128,
2110     128,
2111     },
2112
2113    /* Cipher C003 */
2114    {
2115     1,
2116     TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
2117     TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
2118     SSL_kECDHe,
2119     SSL_aECDH,
2120     SSL_3DES,
2121     SSL_SHA1,
2122     SSL_TLSV1,
2123     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
2124     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2125     112,
2126     168,
2127     },
2128
2129    /* Cipher C004 */
2130    {
2131     1,
2132     TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
2133     TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
2134     SSL_kECDHe,
2135     SSL_aECDH,
2136     SSL_AES128,
2137     SSL_SHA1,
2138     SSL_TLSV1,
2139     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2140     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2141     128,
2142     128,
2143     },
2144
2145    /* Cipher C005 */
2146    {
2147     1,
2148     TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
2149     TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
2150     SSL_kECDHe,
2151     SSL_aECDH,
2152     SSL_AES256,
2153     SSL_SHA1,
2154     SSL_TLSV1,
2155     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2156     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2157     256,
2158     256,
2159     },
2160
2161    /* Cipher C006 */
2162    {
2163     1,
2164     TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
2165     TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
2166     SSL_kEECDH,
2167     SSL_aECDSA,
2168     SSL_eNULL,
2169     SSL_SHA1,
2170     SSL_TLSV1,
2171     SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
2172     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2173     0,
2174     0,
2175     },
2176
2177    /* Cipher C007 */
2178    {
2179     1,
2180     TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
2181     TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
2182     SSL_kEECDH,
2183     SSL_aECDSA,
2184     SSL_RC4,
2185     SSL_SHA1,
2186     SSL_TLSV1,
2187     SSL_NOT_EXP | SSL_MEDIUM,
2188     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2189     128,
2190     128,
2191     },
2192
2193    /* Cipher C008 */
2194    {
2195     1,
2196     TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
2197     TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
2198     SSL_kEECDH,
2199     SSL_aECDSA,
2200     SSL_3DES,
2201     SSL_SHA1,
2202     SSL_TLSV1,
2203     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
2204     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2205     112,
2206     168,
2207     },
2208
2209    /* Cipher C009 */
2210    {
2211     1,
2212     TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
2213     TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
2214     SSL_kEECDH,
2215     SSL_aECDSA,
2216     SSL_AES128,
2217     SSL_SHA1,
2218     SSL_TLSV1,
2219     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2220     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2221     128,
2222     128,
2223     },
2224
2225    /* Cipher C00A */
2226    {
2227     1,
2228     TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
2229     TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
2230     SSL_kEECDH,
2231     SSL_aECDSA,
2232     SSL_AES256,
2233     SSL_SHA1,
2234     SSL_TLSV1,
2235     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2236     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2237     256,
2238     256,
2239     },
2240
2241    /* Cipher C00B */
2242    {
2243     1,
2244     TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
2245     TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
2246     SSL_kECDHr,
2247     SSL_aECDH,
2248     SSL_eNULL,
2249     SSL_SHA1,
2250     SSL_TLSV1,
2251     SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
2252     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2253     0,
2254     0,
2255     },
2256
2257    /* Cipher C00C */
2258    {
2259     1,
2260     TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
2261     TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
2262     SSL_kECDHr,
2263     SSL_aECDH,
2264     SSL_RC4,
2265     SSL_SHA1,
2266     SSL_TLSV1,
2267     SSL_NOT_EXP | SSL_MEDIUM,
2268     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2269     128,
2270     128,
2271     },
2272
2273    /* Cipher C00D */
2274    {
2275     1,
2276     TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
2277     TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
2278     SSL_kECDHr,
2279     SSL_aECDH,
2280     SSL_3DES,
2281     SSL_SHA1,
2282     SSL_TLSV1,
2283     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
2284     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2285     112,
2286     168,
2287     },
2288
2289    /* Cipher C00E */
2290    {
2291     1,
2292     TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
2293     TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
2294     SSL_kECDHr,
2295     SSL_aECDH,
2296     SSL_AES128,
2297     SSL_SHA1,
2298     SSL_TLSV1,
2299     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2300     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2301     128,
2302     128,
2303     },
2304
2305    /* Cipher C00F */
2306    {
2307     1,
2308     TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
2309     TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
2310     SSL_kECDHr,
2311     SSL_aECDH,
2312     SSL_AES256,
2313     SSL_SHA1,
2314     SSL_TLSV1,
2315     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2316     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2317     256,
2318     256,
2319     },
2320
2321    /* Cipher C010 */
2322    {
2323     1,
2324     TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
2325     TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
2326     SSL_kEECDH,
2327     SSL_aRSA,
2328     SSL_eNULL,
2329     SSL_SHA1,
2330     SSL_TLSV1,
2331     SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
2332     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2333     0,
2334     0,
2335     },
2336
2337    /* Cipher C011 */
2338    {
2339     1,
2340     TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
2341     TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
2342     SSL_kEECDH,
2343     SSL_aRSA,
2344     SSL_RC4,
2345     SSL_SHA1,
2346     SSL_TLSV1,
2347     SSL_NOT_EXP | SSL_MEDIUM,
2348     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2349     128,
2350     128,
2351     },
2352
2353    /* Cipher C012 */
2354    {
2355     1,
2356     TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
2357     TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
2358     SSL_kEECDH,
2359     SSL_aRSA,
2360     SSL_3DES,
2361     SSL_SHA1,
2362     SSL_TLSV1,
2363     SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
2364     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2365     112,
2366     168,
2367     },
2368
2369    /* Cipher C013 */
2370    {
2371     1,
2372     TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
2373     TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
2374     SSL_kEECDH,
2375     SSL_aRSA,
2376     SSL_AES128,
2377     SSL_SHA1,
2378     SSL_TLSV1,
2379     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2380     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2381     128,
2382     128,
2383     },
2384
2385    /* Cipher C014 */
2386    {
2387     1,
2388     TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
2389     TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
2390     SSL_kEECDH,
2391     SSL_aRSA,
2392     SSL_AES256,
2393     SSL_SHA1,
2394     SSL_TLSV1,
2395     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2396     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2397     256,
2398     256,
2399     },
2400
2401    /* Cipher C015 */
2402    {
2403     1,
2404     TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
2405     TLS1_CK_ECDH_anon_WITH_NULL_SHA,
2406     SSL_kEECDH,
2407     SSL_aNULL,
2408     SSL_eNULL,
2409     SSL_SHA1,
2410     SSL_TLSV1,
2411     SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
2412     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2413     0,
2414     0,
2415     },
2416
2417    /* Cipher C016 */
2418    {
2419     1,
2420     TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
2421     TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
2422     SSL_kEECDH,
2423     SSL_aNULL,
2424     SSL_RC4,
2425     SSL_SHA1,
2426     SSL_TLSV1,
2427     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM,
2428     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2429     128,
2430     128,
2431     },
2432
2433    /* Cipher C017 */
2434    {
2435     1,
2436     TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
2437     TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
2438     SSL_kEECDH,
2439     SSL_aNULL,
2440     SSL_3DES,
2441     SSL_SHA1,
2442     SSL_TLSV1,
2443     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_MEDIUM | SSL_FIPS,
2444     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2445     112,
2446     168,
2447     },
2448
2449    /* Cipher C018 */
2450    {
2451     1,
2452     TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
2453     TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
2454     SSL_kEECDH,
2455     SSL_aNULL,
2456     SSL_AES128,
2457     SSL_SHA1,
2458     SSL_TLSV1,
2459     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2460     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2461     128,
2462     128,
2463     },
2464
2465    /* Cipher C019 */
2466    {
2467     1,
2468     TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
2469     TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
2470     SSL_kEECDH,
2471     SSL_aNULL,
2472     SSL_AES256,
2473     SSL_SHA1,
2474     SSL_TLSV1,
2475     SSL_NOT_DEFAULT | SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2476     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2477     256,
2478     256,
2479     },
2480#endif                          /* OPENSSL_NO_ECDH */
2481
2482#ifndef OPENSSL_NO_SRP
2483    /* Cipher C01A */
2484    {
2485     1,
2486     TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
2487     TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
2488     SSL_kSRP,
2489     SSL_aSRP,
2490     SSL_3DES,
2491     SSL_SHA1,
2492     SSL_TLSV1,
2493     SSL_NOT_EXP | SSL_MEDIUM,
2494     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2495     112,
2496     168,
2497     },
2498
2499    /* Cipher C01B */
2500    {
2501     1,
2502     TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
2503     TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
2504     SSL_kSRP,
2505     SSL_aRSA,
2506     SSL_3DES,
2507     SSL_SHA1,
2508     SSL_TLSV1,
2509     SSL_NOT_EXP | SSL_MEDIUM,
2510     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2511     112,
2512     168,
2513     },
2514
2515    /* Cipher C01C */
2516    {
2517     1,
2518     TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
2519     TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
2520     SSL_kSRP,
2521     SSL_aDSS,
2522     SSL_3DES,
2523     SSL_SHA1,
2524     SSL_TLSV1,
2525     SSL_NOT_EXP | SSL_MEDIUM,
2526     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2527     112,
2528     168,
2529     },
2530
2531    /* Cipher C01D */
2532    {
2533     1,
2534     TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA,
2535     TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA,
2536     SSL_kSRP,
2537     SSL_aSRP,
2538     SSL_AES128,
2539     SSL_SHA1,
2540     SSL_TLSV1,
2541     SSL_NOT_EXP | SSL_HIGH,
2542     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2543     128,
2544     128,
2545     },
2546
2547    /* Cipher C01E */
2548    {
2549     1,
2550     TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
2551     TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
2552     SSL_kSRP,
2553     SSL_aRSA,
2554     SSL_AES128,
2555     SSL_SHA1,
2556     SSL_TLSV1,
2557     SSL_NOT_EXP | SSL_HIGH,
2558     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2559     128,
2560     128,
2561     },
2562
2563    /* Cipher C01F */
2564    {
2565     1,
2566     TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
2567     TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
2568     SSL_kSRP,
2569     SSL_aDSS,
2570     SSL_AES128,
2571     SSL_SHA1,
2572     SSL_TLSV1,
2573     SSL_NOT_EXP | SSL_HIGH,
2574     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2575     128,
2576     128,
2577     },
2578
2579    /* Cipher C020 */
2580    {
2581     1,
2582     TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA,
2583     TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA,
2584     SSL_kSRP,
2585     SSL_aSRP,
2586     SSL_AES256,
2587     SSL_SHA1,
2588     SSL_TLSV1,
2589     SSL_NOT_EXP | SSL_HIGH,
2590     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2591     256,
2592     256,
2593     },
2594
2595    /* Cipher C021 */
2596    {
2597     1,
2598     TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2599     TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2600     SSL_kSRP,
2601     SSL_aRSA,
2602     SSL_AES256,
2603     SSL_SHA1,
2604     SSL_TLSV1,
2605     SSL_NOT_EXP | SSL_HIGH,
2606     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2607     256,
2608     256,
2609     },
2610
2611    /* Cipher C022 */
2612    {
2613     1,
2614     TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2615     TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2616     SSL_kSRP,
2617     SSL_aDSS,
2618     SSL_AES256,
2619     SSL_SHA1,
2620     SSL_TLSV1,
2621     SSL_NOT_EXP | SSL_HIGH,
2622     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2623     256,
2624     256,
2625     },
2626#endif                          /* OPENSSL_NO_SRP */
2627#ifndef OPENSSL_NO_ECDH
2628
2629    /* HMAC based TLS v1.2 ciphersuites from RFC5289 */
2630
2631    /* Cipher C023 */
2632    {
2633     1,
2634     TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
2635     TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
2636     SSL_kEECDH,
2637     SSL_aECDSA,
2638     SSL_AES128,
2639     SSL_SHA256,
2640     SSL_TLSV1_2,
2641     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2642     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2643     128,
2644     128,
2645     },
2646
2647    /* Cipher C024 */
2648    {
2649     1,
2650     TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
2651     TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
2652     SSL_kEECDH,
2653     SSL_aECDSA,
2654     SSL_AES256,
2655     SSL_SHA384,
2656     SSL_TLSV1_2,
2657     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2658     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2659     256,
2660     256,
2661     },
2662
2663    /* Cipher C025 */
2664    {
2665     1,
2666     TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256,
2667     TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256,
2668     SSL_kECDHe,
2669     SSL_aECDH,
2670     SSL_AES128,
2671     SSL_SHA256,
2672     SSL_TLSV1_2,
2673     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2674     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2675     128,
2676     128,
2677     },
2678
2679    /* Cipher C026 */
2680    {
2681     1,
2682     TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384,
2683     TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384,
2684     SSL_kECDHe,
2685     SSL_aECDH,
2686     SSL_AES256,
2687     SSL_SHA384,
2688     SSL_TLSV1_2,
2689     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2690     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2691     256,
2692     256,
2693     },
2694
2695    /* Cipher C027 */
2696    {
2697     1,
2698     TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
2699     TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
2700     SSL_kEECDH,
2701     SSL_aRSA,
2702     SSL_AES128,
2703     SSL_SHA256,
2704     SSL_TLSV1_2,
2705     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2706     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2707     128,
2708     128,
2709     },
2710
2711    /* Cipher C028 */
2712    {
2713     1,
2714     TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
2715     TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
2716     SSL_kEECDH,
2717     SSL_aRSA,
2718     SSL_AES256,
2719     SSL_SHA384,
2720     SSL_TLSV1_2,
2721     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2722     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2723     256,
2724     256,
2725     },
2726
2727    /* Cipher C029 */
2728    {
2729     1,
2730     TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
2731     TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
2732     SSL_kECDHr,
2733     SSL_aECDH,
2734     SSL_AES128,
2735     SSL_SHA256,
2736     SSL_TLSV1_2,
2737     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2738     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2739     128,
2740     128,
2741     },
2742
2743    /* Cipher C02A */
2744    {
2745     1,
2746     TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
2747     TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
2748     SSL_kECDHr,
2749     SSL_aECDH,
2750     SSL_AES256,
2751     SSL_SHA384,
2752     SSL_TLSV1_2,
2753     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2754     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2755     256,
2756     256,
2757     },
2758
2759    /* GCM based TLS v1.2 ciphersuites from RFC5289 */
2760
2761    /* Cipher C02B */
2762    {
2763     1,
2764     TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
2765     TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
2766     SSL_kEECDH,
2767     SSL_aECDSA,
2768     SSL_AES128GCM,
2769     SSL_AEAD,
2770     SSL_TLSV1_2,
2771     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2772     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2773     128,
2774     128,
2775     },
2776
2777    /* Cipher C02C */
2778    {
2779     1,
2780     TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
2781     TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
2782     SSL_kEECDH,
2783     SSL_aECDSA,
2784     SSL_AES256GCM,
2785     SSL_AEAD,
2786     SSL_TLSV1_2,
2787     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2788     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2789     256,
2790     256,
2791     },
2792
2793    /* Cipher C02D */
2794    {
2795     1,
2796     TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
2797     TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
2798     SSL_kECDHe,
2799     SSL_aECDH,
2800     SSL_AES128GCM,
2801     SSL_AEAD,
2802     SSL_TLSV1_2,
2803     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2804     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2805     128,
2806     128,
2807     },
2808
2809    /* Cipher C02E */
2810    {
2811     1,
2812     TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
2813     TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
2814     SSL_kECDHe,
2815     SSL_aECDH,
2816     SSL_AES256GCM,
2817     SSL_AEAD,
2818     SSL_TLSV1_2,
2819     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2820     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2821     256,
2822     256,
2823     },
2824
2825    /* Cipher C02F */
2826    {
2827     1,
2828     TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
2829     TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
2830     SSL_kEECDH,
2831     SSL_aRSA,
2832     SSL_AES128GCM,
2833     SSL_AEAD,
2834     SSL_TLSV1_2,
2835     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2836     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2837     128,
2838     128,
2839     },
2840
2841    /* Cipher C030 */
2842    {
2843     1,
2844     TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
2845     TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
2846     SSL_kEECDH,
2847     SSL_aRSA,
2848     SSL_AES256GCM,
2849     SSL_AEAD,
2850     SSL_TLSV1_2,
2851     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2852     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2853     256,
2854     256,
2855     },
2856
2857    /* Cipher C031 */
2858    {
2859     1,
2860     TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2861     TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2862     SSL_kECDHr,
2863     SSL_aECDH,
2864     SSL_AES128GCM,
2865     SSL_AEAD,
2866     SSL_TLSV1_2,
2867     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2868     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
2869     128,
2870     128,
2871     },
2872
2873    /* Cipher C032 */
2874    {
2875     1,
2876     TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2877     TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2878     SSL_kECDHr,
2879     SSL_aECDH,
2880     SSL_AES256GCM,
2881     SSL_AEAD,
2882     SSL_TLSV1_2,
2883     SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
2884     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2885     256,
2886     256,
2887     },
2888
2889#endif                          /* OPENSSL_NO_ECDH */
2890
2891#ifdef TEMP_GOST_TLS
2892/* Cipher FF00 */
2893    {
2894     1,
2895     "GOST-MD5",
2896     0x0300ff00,
2897     SSL_kRSA,
2898     SSL_aRSA,
2899     SSL_eGOST2814789CNT,
2900     SSL_MD5,
2901     SSL_TLSV1,
2902     SSL_NOT_EXP | SSL_HIGH,
2903     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2904     256,
2905     256,
2906     },
2907    {
2908     1,
2909     "GOST-GOST94",
2910     0x0300ff01,
2911     SSL_kRSA,
2912     SSL_aRSA,
2913     SSL_eGOST2814789CNT,
2914     SSL_GOST94,
2915     SSL_TLSV1,
2916     SSL_NOT_EXP | SSL_HIGH,
2917     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2918     256,
2919     256},
2920    {
2921     1,
2922     "GOST-GOST89MAC",
2923     0x0300ff02,
2924     SSL_kRSA,
2925     SSL_aRSA,
2926     SSL_eGOST2814789CNT,
2927     SSL_GOST89MAC,
2928     SSL_TLSV1,
2929     SSL_NOT_EXP | SSL_HIGH,
2930     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2931     256,
2932     256},
2933    {
2934     1,
2935     "GOST-GOST89STREAM",
2936     0x0300ff03,
2937     SSL_kRSA,
2938     SSL_aRSA,
2939     SSL_eGOST2814789CNT,
2940     SSL_GOST89MAC,
2941     SSL_TLSV1,
2942     SSL_NOT_EXP | SSL_HIGH,
2943     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF | TLS1_STREAM_MAC,
2944     256,
2945     256},
2946#endif
2947
2948/* end of list */
2949};
2950
2951SSL3_ENC_METHOD SSLv3_enc_data = {
2952    ssl3_enc,
2953    n_ssl3_mac,
2954    ssl3_setup_key_block,
2955    ssl3_generate_master_secret,
2956    ssl3_change_cipher_state,
2957    ssl3_final_finish_mac,
2958    MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH,
2959    ssl3_cert_verify_mac,
2960    SSL3_MD_CLIENT_FINISHED_CONST, 4,
2961    SSL3_MD_SERVER_FINISHED_CONST, 4,
2962    ssl3_alert_code,
2963    (int (*)(SSL *, unsigned char *, size_t, const char *,
2964             size_t, const unsigned char *, size_t,
2965             int use_context))ssl_undefined_function,
2966    0,
2967    SSL3_HM_HEADER_LENGTH,
2968    ssl3_set_handshake_header,
2969    ssl3_handshake_write
2970};
2971
2972long ssl3_default_timeout(void)
2973{
2974    /*
2975     * 2 hours, the 24 hours mentioned in the SSLv3 spec is way too long for
2976     * http, the cache would over fill
2977     */
2978    return (60 * 60 * 2);
2979}
2980
2981int ssl3_num_ciphers(void)
2982{
2983    return (SSL3_NUM_CIPHERS);
2984}
2985
2986const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
2987{
2988    if (u < SSL3_NUM_CIPHERS)
2989        return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]));
2990    else
2991        return (NULL);
2992}
2993
2994int ssl3_pending(const SSL *s)
2995{
2996    if (s->rstate == SSL_ST_READ_BODY)
2997        return 0;
2998
2999    return (s->s3->rrec.type ==
3000            SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
3001}
3002
3003void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len)
3004{
3005    unsigned char *p = (unsigned char *)s->init_buf->data;
3006    *(p++) = htype;
3007    l2n3(len, p);
3008    s->init_num = (int)len + SSL3_HM_HEADER_LENGTH;
3009    s->init_off = 0;
3010}
3011
3012int ssl3_handshake_write(SSL *s)
3013{
3014    return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
3015}
3016
3017int ssl3_new(SSL *s)
3018{
3019    SSL3_STATE *s3;
3020
3021    if ((s3 = OPENSSL_malloc(sizeof *s3)) == NULL)
3022        goto err;
3023    memset(s3, 0, sizeof *s3);
3024    memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num));
3025    memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num));
3026
3027    s->s3 = s3;
3028
3029#ifndef OPENSSL_NO_SRP
3030    SSL_SRP_CTX_init(s);
3031#endif
3032    s->method->ssl_clear(s);
3033    return (1);
3034 err:
3035    return (0);
3036}
3037
3038void ssl3_free(SSL *s)
3039{
3040    if (s == NULL || s->s3 == NULL)
3041        return;
3042
3043#ifdef TLSEXT_TYPE_opaque_prf_input
3044    if (s->s3->client_opaque_prf_input != NULL)
3045        OPENSSL_free(s->s3->client_opaque_prf_input);
3046    if (s->s3->server_opaque_prf_input != NULL)
3047        OPENSSL_free(s->s3->server_opaque_prf_input);
3048#endif
3049
3050    ssl3_cleanup_key_block(s);
3051    if (s->s3->rbuf.buf != NULL)
3052        ssl3_release_read_buffer(s);
3053    if (s->s3->wbuf.buf != NULL)
3054        ssl3_release_write_buffer(s);
3055    if (s->s3->rrec.comp != NULL)
3056        OPENSSL_free(s->s3->rrec.comp);
3057#ifndef OPENSSL_NO_DH
3058    if (s->s3->tmp.dh != NULL)
3059        DH_free(s->s3->tmp.dh);
3060#endif
3061#ifndef OPENSSL_NO_ECDH
3062    if (s->s3->tmp.ecdh != NULL)
3063        EC_KEY_free(s->s3->tmp.ecdh);
3064#endif
3065
3066    if (s->s3->tmp.ca_names != NULL)
3067        sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free);
3068    if (s->s3->handshake_buffer) {
3069        BIO_free(s->s3->handshake_buffer);
3070    }
3071    if (s->s3->handshake_dgst)
3072        ssl3_free_digest_list(s);
3073#ifndef OPENSSL_NO_TLSEXT
3074    if (s->s3->alpn_selected)
3075        OPENSSL_free(s->s3->alpn_selected);
3076#endif
3077
3078#ifndef OPENSSL_NO_SRP
3079    SSL_SRP_CTX_free(s);
3080#endif
3081    OPENSSL_cleanse(s->s3, sizeof *s->s3);
3082    OPENSSL_free(s->s3);
3083    s->s3 = NULL;
3084}
3085
3086void ssl3_clear(SSL *s)
3087{
3088    unsigned char *rp, *wp;
3089    size_t rlen, wlen;
3090    int init_extra;
3091
3092#ifdef TLSEXT_TYPE_opaque_prf_input
3093    if (s->s3->client_opaque_prf_input != NULL)
3094        OPENSSL_free(s->s3->client_opaque_prf_input);
3095    s->s3->client_opaque_prf_input = NULL;
3096    if (s->s3->server_opaque_prf_input != NULL)
3097        OPENSSL_free(s->s3->server_opaque_prf_input);
3098    s->s3->server_opaque_prf_input = NULL;
3099#endif
3100
3101    ssl3_cleanup_key_block(s);
3102    if (s->s3->tmp.ca_names != NULL)
3103        sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free);
3104
3105    if (s->s3->rrec.comp != NULL) {
3106        OPENSSL_free(s->s3->rrec.comp);
3107        s->s3->rrec.comp = NULL;
3108    }
3109#ifndef OPENSSL_NO_DH
3110    if (s->s3->tmp.dh != NULL) {
3111        DH_free(s->s3->tmp.dh);
3112        s->s3->tmp.dh = NULL;
3113    }
3114#endif
3115#ifndef OPENSSL_NO_ECDH
3116    if (s->s3->tmp.ecdh != NULL) {
3117        EC_KEY_free(s->s3->tmp.ecdh);
3118        s->s3->tmp.ecdh = NULL;
3119    }
3120#endif
3121#ifndef OPENSSL_NO_TLSEXT
3122# ifndef OPENSSL_NO_EC
3123    s->s3->is_probably_safari = 0;
3124# endif                         /* !OPENSSL_NO_EC */
3125#endif                          /* !OPENSSL_NO_TLSEXT */
3126
3127    rp = s->s3->rbuf.buf;
3128    wp = s->s3->wbuf.buf;
3129    rlen = s->s3->rbuf.len;
3130    wlen = s->s3->wbuf.len;
3131    init_extra = s->s3->init_extra;
3132    if (s->s3->handshake_buffer) {
3133        BIO_free(s->s3->handshake_buffer);
3134        s->s3->handshake_buffer = NULL;
3135    }
3136    if (s->s3->handshake_dgst) {
3137        ssl3_free_digest_list(s);
3138    }
3139#if !defined(OPENSSL_NO_TLSEXT)
3140    if (s->s3->alpn_selected) {
3141        OPENSSL_free(s->s3->alpn_selected);
3142        s->s3->alpn_selected = NULL;
3143    }
3144#endif
3145    memset(s->s3, 0, sizeof *s->s3);
3146    s->s3->rbuf.buf = rp;
3147    s->s3->wbuf.buf = wp;
3148    s->s3->rbuf.len = rlen;
3149    s->s3->wbuf.len = wlen;
3150    s->s3->init_extra = init_extra;
3151
3152    ssl_free_wbio_buffer(s);
3153
3154    s->packet_length = 0;
3155    s->s3->renegotiate = 0;
3156    s->s3->total_renegotiations = 0;
3157    s->s3->num_renegotiations = 0;
3158    s->s3->in_read_app_data = 0;
3159    s->version = SSL3_VERSION;
3160
3161#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
3162    if (s->next_proto_negotiated) {
3163        OPENSSL_free(s->next_proto_negotiated);
3164        s->next_proto_negotiated = NULL;
3165        s->next_proto_negotiated_len = 0;
3166    }
3167#endif
3168}
3169
3170#ifndef OPENSSL_NO_SRP
3171static char *MS_CALLBACK srp_password_from_info_cb(SSL *s, void *arg)
3172{
3173    return BUF_strdup(s->srp_ctx.info);
3174}
3175#endif
3176
3177static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p,
3178                                  size_t len);
3179
3180long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
3181{
3182    int ret = 0;
3183
3184#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
3185    if (
3186# ifndef OPENSSL_NO_RSA
3187           cmd == SSL_CTRL_SET_TMP_RSA || cmd == SSL_CTRL_SET_TMP_RSA_CB ||
3188# endif
3189# ifndef OPENSSL_NO_DSA
3190           cmd == SSL_CTRL_SET_TMP_DH || cmd == SSL_CTRL_SET_TMP_DH_CB ||
3191# endif
3192           0) {
3193        if (!ssl_cert_inst(&s->cert)) {
3194            SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
3195            return (0);
3196        }
3197    }
3198#endif
3199
3200    switch (cmd) {
3201    case SSL_CTRL_GET_SESSION_REUSED:
3202        ret = s->hit;
3203        break;
3204    case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
3205        break;
3206    case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
3207        ret = s->s3->num_renegotiations;
3208        break;
3209    case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
3210        ret = s->s3->num_renegotiations;
3211        s->s3->num_renegotiations = 0;
3212        break;
3213    case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
3214        ret = s->s3->total_renegotiations;
3215        break;
3216    case SSL_CTRL_GET_FLAGS:
3217        ret = (int)(s->s3->flags);
3218        break;
3219#ifndef OPENSSL_NO_RSA
3220    case SSL_CTRL_NEED_TMP_RSA:
3221        if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
3222            ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
3223             (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) >
3224              (512 / 8))))
3225            ret = 1;
3226        break;
3227    case SSL_CTRL_SET_TMP_RSA:
3228        {
3229            RSA *rsa = (RSA *)parg;
3230            if (rsa == NULL) {
3231                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
3232                return (ret);
3233            }
3234            if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) {
3235                SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
3236                return (ret);
3237            }
3238            if (s->cert->rsa_tmp != NULL)
3239                RSA_free(s->cert->rsa_tmp);
3240            s->cert->rsa_tmp = rsa;
3241            ret = 1;
3242        }
3243        break;
3244    case SSL_CTRL_SET_TMP_RSA_CB:
3245        {
3246            SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3247            return (ret);
3248        }
3249        break;
3250#endif
3251#ifndef OPENSSL_NO_DH
3252    case SSL_CTRL_SET_TMP_DH:
3253        {
3254            DH *dh = (DH *)parg;
3255            if (dh == NULL) {
3256                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
3257                return (ret);
3258            }
3259            if ((dh = DHparams_dup(dh)) == NULL) {
3260                SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
3261                return (ret);
3262            }
3263            if (s->cert->dh_tmp != NULL)
3264                DH_free(s->cert->dh_tmp);
3265            s->cert->dh_tmp = dh;
3266            ret = 1;
3267        }
3268        break;
3269    case SSL_CTRL_SET_TMP_DH_CB:
3270        {
3271            SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3272            return (ret);
3273        }
3274        break;
3275#endif
3276#ifndef OPENSSL_NO_ECDH
3277    case SSL_CTRL_SET_TMP_ECDH:
3278        {
3279            EC_KEY *ecdh = NULL;
3280
3281            if (parg == NULL) {
3282                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
3283                return (ret);
3284            }
3285            if (!EC_KEY_up_ref((EC_KEY *)parg)) {
3286                SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB);
3287                return (ret);
3288            }
3289            ecdh = (EC_KEY *)parg;
3290            if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) {
3291                if (!EC_KEY_generate_key(ecdh)) {
3292                    EC_KEY_free(ecdh);
3293                    SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB);
3294                    return (ret);
3295                }
3296            }
3297            if (s->cert->ecdh_tmp != NULL)
3298                EC_KEY_free(s->cert->ecdh_tmp);
3299            s->cert->ecdh_tmp = ecdh;
3300            ret = 1;
3301        }
3302        break;
3303    case SSL_CTRL_SET_TMP_ECDH_CB:
3304        {
3305            SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3306            return (ret);
3307        }
3308        break;
3309#endif                          /* !OPENSSL_NO_ECDH */
3310#ifndef OPENSSL_NO_TLSEXT
3311    case SSL_CTRL_SET_TLSEXT_HOSTNAME:
3312        if (larg == TLSEXT_NAMETYPE_host_name) {
3313            size_t len;
3314
3315            if (s->tlsext_hostname != NULL)
3316                OPENSSL_free(s->tlsext_hostname);
3317            s->tlsext_hostname = NULL;
3318
3319            ret = 1;
3320            if (parg == NULL)
3321                break;
3322            len = strlen((char *)parg);
3323            if (len == 0 || len > TLSEXT_MAXLEN_host_name) {
3324                SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
3325                return 0;
3326            }
3327            if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) {
3328                SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
3329                return 0;
3330            }
3331        } else {
3332            SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
3333            return 0;
3334        }
3335        break;
3336    case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
3337        s->tlsext_debug_arg = parg;
3338        ret = 1;
3339        break;
3340
3341# ifdef TLSEXT_TYPE_opaque_prf_input
3342    case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT:
3343        if (larg > 12288) {     /* actual internal limit is 2^16 for the
3344                                 * complete hello message * (including the
3345                                 * cert chain and everything) */
3346            SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG);
3347            break;
3348        }
3349        if (s->tlsext_opaque_prf_input != NULL)
3350            OPENSSL_free(s->tlsext_opaque_prf_input);
3351        if ((size_t)larg == 0)
3352            s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte
3353                                                             * just to get
3354                                                             * non-NULL */
3355        else
3356            s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg);
3357        if (s->tlsext_opaque_prf_input != NULL) {
3358            s->tlsext_opaque_prf_input_len = (size_t)larg;
3359            ret = 1;
3360        } else
3361            s->tlsext_opaque_prf_input_len = 0;
3362        break;
3363# endif
3364
3365    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
3366        s->tlsext_status_type = larg;
3367        ret = 1;
3368        break;
3369
3370    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
3371        *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
3372        ret = 1;
3373        break;
3374
3375    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
3376        s->tlsext_ocsp_exts = parg;
3377        ret = 1;
3378        break;
3379
3380    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
3381        *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
3382        ret = 1;
3383        break;
3384
3385    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
3386        s->tlsext_ocsp_ids = parg;
3387        ret = 1;
3388        break;
3389
3390    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
3391        *(unsigned char **)parg = s->tlsext_ocsp_resp;
3392        return s->tlsext_ocsp_resplen;
3393
3394    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
3395        if (s->tlsext_ocsp_resp)
3396            OPENSSL_free(s->tlsext_ocsp_resp);
3397        s->tlsext_ocsp_resp = parg;
3398        s->tlsext_ocsp_resplen = larg;
3399        ret = 1;
3400        break;
3401
3402# ifndef OPENSSL_NO_HEARTBEATS
3403    case SSL_CTRL_TLS_EXT_SEND_HEARTBEAT:
3404        if (SSL_IS_DTLS(s))
3405            ret = dtls1_heartbeat(s);
3406        else
3407            ret = tls1_heartbeat(s);
3408        break;
3409
3410    case SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING:
3411        ret = s->tlsext_hb_pending;
3412        break;
3413
3414    case SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS:
3415        if (larg)
3416            s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
3417        else
3418            s->tlsext_heartbeat &= ~SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
3419        ret = 1;
3420        break;
3421# endif
3422
3423#endif                          /* !OPENSSL_NO_TLSEXT */
3424
3425    case SSL_CTRL_CHAIN:
3426        if (larg)
3427            return ssl_cert_set1_chain(s->cert, (STACK_OF(X509) *)parg);
3428        else
3429            return ssl_cert_set0_chain(s->cert, (STACK_OF(X509) *)parg);
3430
3431    case SSL_CTRL_CHAIN_CERT:
3432        if (larg)
3433            return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg);
3434        else
3435            return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg);
3436
3437    case SSL_CTRL_GET_CHAIN_CERTS:
3438        *(STACK_OF(X509) **)parg = s->cert->key->chain;
3439        break;
3440
3441    case SSL_CTRL_SELECT_CURRENT_CERT:
3442        return ssl_cert_select_current(s->cert, (X509 *)parg);
3443
3444    case SSL_CTRL_SET_CURRENT_CERT:
3445        if (larg == SSL_CERT_SET_SERVER) {
3446            CERT_PKEY *cpk;
3447            const SSL_CIPHER *cipher;
3448            if (!s->server)
3449                return 0;
3450            cipher = s->s3->tmp.new_cipher;
3451            if (!cipher)
3452                return 0;
3453            /*
3454             * No certificate for unauthenticated ciphersuites or using SRP
3455             * authentication
3456             */
3457            if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
3458                return 2;
3459            cpk = ssl_get_server_send_pkey(s);
3460            if (!cpk)
3461                return 0;
3462            s->cert->key = cpk;
3463            return 1;
3464        }
3465        return ssl_cert_set_current(s->cert, larg);
3466
3467#ifndef OPENSSL_NO_EC
3468    case SSL_CTRL_GET_CURVES:
3469        {
3470            unsigned char *clist;
3471            size_t clistlen;
3472            if (!s->session)
3473                return 0;
3474            clist = s->session->tlsext_ellipticcurvelist;
3475            clistlen = s->session->tlsext_ellipticcurvelist_length / 2;
3476            if (parg) {
3477                size_t i;
3478                int *cptr = parg;
3479                unsigned int cid, nid;
3480                for (i = 0; i < clistlen; i++) {
3481                    n2s(clist, cid);
3482                    nid = tls1_ec_curve_id2nid(cid);
3483                    if (nid != 0)
3484                        cptr[i] = nid;
3485                    else
3486                        cptr[i] = TLSEXT_nid_unknown | cid;
3487                }
3488            }
3489            return (int)clistlen;
3490        }
3491
3492    case SSL_CTRL_SET_CURVES:
3493        return tls1_set_curves(&s->tlsext_ellipticcurvelist,
3494                               &s->tlsext_ellipticcurvelist_length,
3495                               parg, larg);
3496
3497    case SSL_CTRL_SET_CURVES_LIST:
3498        return tls1_set_curves_list(&s->tlsext_ellipticcurvelist,
3499                                    &s->tlsext_ellipticcurvelist_length,
3500                                    parg);
3501
3502    case SSL_CTRL_GET_SHARED_CURVE:
3503        return tls1_shared_curve(s, larg);
3504
3505# ifndef OPENSSL_NO_ECDH
3506    case SSL_CTRL_SET_ECDH_AUTO:
3507        s->cert->ecdh_tmp_auto = larg;
3508        return 1;
3509# endif
3510#endif
3511    case SSL_CTRL_SET_SIGALGS:
3512        return tls1_set_sigalgs(s->cert, parg, larg, 0);
3513
3514    case SSL_CTRL_SET_SIGALGS_LIST:
3515        return tls1_set_sigalgs_list(s->cert, parg, 0);
3516
3517    case SSL_CTRL_SET_CLIENT_SIGALGS:
3518        return tls1_set_sigalgs(s->cert, parg, larg, 1);
3519
3520    case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
3521        return tls1_set_sigalgs_list(s->cert, parg, 1);
3522
3523    case SSL_CTRL_GET_CLIENT_CERT_TYPES:
3524        {
3525            const unsigned char **pctype = parg;
3526            if (s->server || !s->s3->tmp.cert_req)
3527                return 0;
3528            if (s->cert->ctypes) {
3529                if (pctype)
3530                    *pctype = s->cert->ctypes;
3531                return (int)s->cert->ctype_num;
3532            }
3533            if (pctype)
3534                *pctype = (unsigned char *)s->s3->tmp.ctype;
3535            return s->s3->tmp.ctype_num;
3536        }
3537
3538    case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3539        if (!s->server)
3540            return 0;
3541        return ssl3_set_req_cert_type(s->cert, parg, larg);
3542
3543    case SSL_CTRL_BUILD_CERT_CHAIN:
3544        return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg);
3545
3546    case SSL_CTRL_SET_VERIFY_CERT_STORE:
3547        return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
3548
3549    case SSL_CTRL_SET_CHAIN_CERT_STORE:
3550        return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
3551
3552    case SSL_CTRL_GET_PEER_SIGNATURE_NID:
3553        if (SSL_USE_SIGALGS(s)) {
3554            if (s->session && s->session->sess_cert) {
3555                const EVP_MD *sig;
3556                sig = s->session->sess_cert->peer_key->digest;
3557                if (sig) {
3558                    *(int *)parg = EVP_MD_type(sig);
3559                    return 1;
3560                }
3561            }
3562            return 0;
3563        }
3564        /* Might want to do something here for other versions */
3565        else
3566            return 0;
3567
3568    case SSL_CTRL_GET_SERVER_TMP_KEY:
3569        if (s->server || !s->session || !s->session->sess_cert)
3570            return 0;
3571        else {
3572            SESS_CERT *sc;
3573            EVP_PKEY *ptmp;
3574            int rv = 0;
3575            sc = s->session->sess_cert;
3576#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_ECDH)
3577            if (!sc->peer_rsa_tmp && !sc->peer_dh_tmp && !sc->peer_ecdh_tmp)
3578                return 0;
3579#endif
3580            ptmp = EVP_PKEY_new();
3581            if (!ptmp)
3582                return 0;
3583            if (0) ;
3584#ifndef OPENSSL_NO_RSA
3585            else if (sc->peer_rsa_tmp)
3586                rv = EVP_PKEY_set1_RSA(ptmp, sc->peer_rsa_tmp);
3587#endif
3588#ifndef OPENSSL_NO_DH
3589            else if (sc->peer_dh_tmp)
3590                rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp);
3591#endif
3592#ifndef OPENSSL_NO_ECDH
3593            else if (sc->peer_ecdh_tmp)
3594                rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp);
3595#endif
3596            if (rv) {
3597                *(EVP_PKEY **)parg = ptmp;
3598                return 1;
3599            }
3600            EVP_PKEY_free(ptmp);
3601            return 0;
3602        }
3603#ifndef OPENSSL_NO_EC
3604    case SSL_CTRL_GET_EC_POINT_FORMATS:
3605        {
3606            SSL_SESSION *sess = s->session;
3607            const unsigned char **pformat = parg;
3608            if (!sess || !sess->tlsext_ecpointformatlist)
3609                return 0;
3610            *pformat = sess->tlsext_ecpointformatlist;
3611            return (int)sess->tlsext_ecpointformatlist_length;
3612        }
3613#endif
3614
3615    case SSL_CTRL_CHECK_PROTO_VERSION:
3616        /*
3617         * For library-internal use; checks that the current protocol is the
3618         * highest enabled version (according to s->ctx->method, as version
3619         * negotiation may have changed s->method).
3620         */
3621        if (s->version == s->ctx->method->version)
3622            return 1;
3623        /*
3624         * Apparently we're using a version-flexible SSL_METHOD (not at its
3625         * highest protocol version).
3626         */
3627        if (s->ctx->method->version == SSLv23_method()->version) {
3628#if TLS_MAX_VERSION != TLS1_2_VERSION
3629# error Code needs update for SSLv23_method() support beyond TLS1_2_VERSION.
3630#endif
3631            if (!(s->options & SSL_OP_NO_TLSv1_2))
3632                return s->version == TLS1_2_VERSION;
3633            if (!(s->options & SSL_OP_NO_TLSv1_1))
3634                return s->version == TLS1_1_VERSION;
3635            if (!(s->options & SSL_OP_NO_TLSv1))
3636                return s->version == TLS1_VERSION;
3637            if (!(s->options & SSL_OP_NO_SSLv3))
3638                return s->version == SSL3_VERSION;
3639            if (!(s->options & SSL_OP_NO_SSLv2))
3640                return s->version == SSL2_VERSION;
3641        }
3642        return 0;               /* Unexpected state; fail closed. */
3643
3644    default:
3645        break;
3646    }
3647    return (ret);
3648}
3649
3650long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
3651{
3652    int ret = 0;
3653
3654#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
3655    if (
3656# ifndef OPENSSL_NO_RSA
3657           cmd == SSL_CTRL_SET_TMP_RSA_CB ||
3658# endif
3659# ifndef OPENSSL_NO_DSA
3660           cmd == SSL_CTRL_SET_TMP_DH_CB ||
3661# endif
3662           0) {
3663        if (!ssl_cert_inst(&s->cert)) {
3664            SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
3665            return (0);
3666        }
3667    }
3668#endif
3669
3670    switch (cmd) {
3671#ifndef OPENSSL_NO_RSA
3672    case SSL_CTRL_SET_TMP_RSA_CB:
3673        {
3674            s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
3675        }
3676        break;
3677#endif
3678#ifndef OPENSSL_NO_DH
3679    case SSL_CTRL_SET_TMP_DH_CB:
3680        {
3681            s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3682        }
3683        break;
3684#endif
3685#ifndef OPENSSL_NO_ECDH
3686    case SSL_CTRL_SET_TMP_ECDH_CB:
3687        {
3688            s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
3689        }
3690        break;
3691#endif
3692#ifndef OPENSSL_NO_TLSEXT
3693    case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
3694        s->tlsext_debug_cb = (void (*)(SSL *, int, int,
3695                                       unsigned char *, int, void *))fp;
3696        break;
3697#endif
3698    default:
3699        break;
3700    }
3701    return (ret);
3702}
3703
3704long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
3705{
3706    CERT *cert;
3707
3708    cert = ctx->cert;
3709
3710    switch (cmd) {
3711#ifndef OPENSSL_NO_RSA
3712    case SSL_CTRL_NEED_TMP_RSA:
3713        if ((cert->rsa_tmp == NULL) &&
3714            ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
3715             (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) >
3716              (512 / 8)))
3717            )
3718            return (1);
3719        else
3720            return (0);
3721        /* break; */
3722    case SSL_CTRL_SET_TMP_RSA:
3723        {
3724            RSA *rsa;
3725            int i;
3726
3727            rsa = (RSA *)parg;
3728            i = 1;
3729            if (rsa == NULL)
3730                i = 0;
3731            else {
3732                if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
3733                    i = 0;
3734            }
3735            if (!i) {
3736                SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_RSA_LIB);
3737                return (0);
3738            } else {
3739                if (cert->rsa_tmp != NULL)
3740                    RSA_free(cert->rsa_tmp);
3741                cert->rsa_tmp = rsa;
3742                return (1);
3743            }
3744        }
3745        /* break; */
3746    case SSL_CTRL_SET_TMP_RSA_CB:
3747        {
3748            SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3749            return (0);
3750        }
3751        break;
3752#endif
3753#ifndef OPENSSL_NO_DH
3754    case SSL_CTRL_SET_TMP_DH:
3755        {
3756            DH *new = NULL, *dh;
3757
3758            dh = (DH *)parg;
3759            if ((new = DHparams_dup(dh)) == NULL) {
3760                SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB);
3761                return 0;
3762            }
3763            if (cert->dh_tmp != NULL)
3764                DH_free(cert->dh_tmp);
3765            cert->dh_tmp = new;
3766            return 1;
3767        }
3768        /*
3769         * break;
3770         */
3771    case SSL_CTRL_SET_TMP_DH_CB:
3772        {
3773            SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3774            return (0);
3775        }
3776        break;
3777#endif
3778#ifndef OPENSSL_NO_ECDH
3779    case SSL_CTRL_SET_TMP_ECDH:
3780        {
3781            EC_KEY *ecdh = NULL;
3782
3783            if (parg == NULL) {
3784                SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB);
3785                return 0;
3786            }
3787            ecdh = EC_KEY_dup((EC_KEY *)parg);
3788            if (ecdh == NULL) {
3789                SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_EC_LIB);
3790                return 0;
3791            }
3792            if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) {
3793                if (!EC_KEY_generate_key(ecdh)) {
3794                    EC_KEY_free(ecdh);
3795                    SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB);
3796                    return 0;
3797                }
3798            }
3799
3800            if (cert->ecdh_tmp != NULL) {
3801                EC_KEY_free(cert->ecdh_tmp);
3802            }
3803            cert->ecdh_tmp = ecdh;
3804            return 1;
3805        }
3806        /* break; */
3807    case SSL_CTRL_SET_TMP_ECDH_CB:
3808        {
3809            SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3810            return (0);
3811        }
3812        break;
3813#endif                          /* !OPENSSL_NO_ECDH */
3814#ifndef OPENSSL_NO_TLSEXT
3815    case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
3816        ctx->tlsext_servername_arg = parg;
3817        break;
3818    case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
3819    case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
3820        {
3821            unsigned char *keys = parg;
3822            if (!keys)
3823                return 48;
3824            if (larg != 48) {
3825                SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
3826                return 0;
3827            }
3828            if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) {
3829                memcpy(ctx->tlsext_tick_key_name, keys, 16);
3830                memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
3831                memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
3832            } else {
3833                memcpy(keys, ctx->tlsext_tick_key_name, 16);
3834                memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
3835                memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
3836            }
3837            return 1;
3838        }
3839
3840# ifdef TLSEXT_TYPE_opaque_prf_input
3841    case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG:
3842        ctx->tlsext_opaque_prf_input_callback_arg = parg;
3843        return 1;
3844# endif
3845
3846    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
3847        ctx->tlsext_status_arg = parg;
3848        return 1;
3849        break;
3850
3851# ifndef OPENSSL_NO_SRP
3852    case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME:
3853        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
3854        if (ctx->srp_ctx.login != NULL)
3855            OPENSSL_free(ctx->srp_ctx.login);
3856        ctx->srp_ctx.login = NULL;
3857        if (parg == NULL)
3858            break;
3859        if (strlen((const char *)parg) > 255
3860            || strlen((const char *)parg) < 1) {
3861            SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME);
3862            return 0;
3863        }
3864        if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) {
3865            SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
3866            return 0;
3867        }
3868        break;
3869    case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD:
3870        ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
3871            srp_password_from_info_cb;
3872        ctx->srp_ctx.info = parg;
3873        break;
3874    case SSL_CTRL_SET_SRP_ARG:
3875        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
3876        ctx->srp_ctx.SRP_cb_arg = parg;
3877        break;
3878
3879    case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH:
3880        ctx->srp_ctx.strength = larg;
3881        break;
3882# endif
3883
3884# ifndef OPENSSL_NO_EC
3885    case SSL_CTRL_SET_CURVES:
3886        return tls1_set_curves(&ctx->tlsext_ellipticcurvelist,
3887                               &ctx->tlsext_ellipticcurvelist_length,
3888                               parg, larg);
3889
3890    case SSL_CTRL_SET_CURVES_LIST:
3891        return tls1_set_curves_list(&ctx->tlsext_ellipticcurvelist,
3892                                    &ctx->tlsext_ellipticcurvelist_length,
3893                                    parg);
3894#  ifndef OPENSSL_NO_ECDH
3895    case SSL_CTRL_SET_ECDH_AUTO:
3896        ctx->cert->ecdh_tmp_auto = larg;
3897        return 1;
3898#  endif
3899# endif
3900    case SSL_CTRL_SET_SIGALGS:
3901        return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
3902
3903    case SSL_CTRL_SET_SIGALGS_LIST:
3904        return tls1_set_sigalgs_list(ctx->cert, parg, 0);
3905
3906    case SSL_CTRL_SET_CLIENT_SIGALGS:
3907        return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
3908
3909    case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
3910        return tls1_set_sigalgs_list(ctx->cert, parg, 1);
3911
3912    case SSL_CTRL_SET_CLIENT_CERT_TYPES:
3913        return ssl3_set_req_cert_type(ctx->cert, parg, larg);
3914
3915    case SSL_CTRL_BUILD_CERT_CHAIN:
3916        return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg);
3917
3918    case SSL_CTRL_SET_VERIFY_CERT_STORE:
3919        return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
3920
3921    case SSL_CTRL_SET_CHAIN_CERT_STORE:
3922        return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
3923
3924#endif                          /* !OPENSSL_NO_TLSEXT */
3925
3926        /* A Thawte special :-) */
3927    case SSL_CTRL_EXTRA_CHAIN_CERT:
3928        if (ctx->extra_certs == NULL) {
3929            if ((ctx->extra_certs = sk_X509_new_null()) == NULL)
3930                return (0);
3931        }
3932        sk_X509_push(ctx->extra_certs, (X509 *)parg);
3933        break;
3934
3935    case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
3936        if (ctx->extra_certs == NULL && larg == 0)
3937            *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
3938        else
3939            *(STACK_OF(X509) **)parg = ctx->extra_certs;
3940        break;
3941
3942    case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
3943        if (ctx->extra_certs) {
3944            sk_X509_pop_free(ctx->extra_certs, X509_free);
3945            ctx->extra_certs = NULL;
3946        }
3947        break;
3948
3949    case SSL_CTRL_CHAIN:
3950        if (larg)
3951            return ssl_cert_set1_chain(ctx->cert, (STACK_OF(X509) *)parg);
3952        else
3953            return ssl_cert_set0_chain(ctx->cert, (STACK_OF(X509) *)parg);
3954
3955    case SSL_CTRL_CHAIN_CERT:
3956        if (larg)
3957            return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg);
3958        else
3959            return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg);
3960
3961    case SSL_CTRL_GET_CHAIN_CERTS:
3962        *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
3963        break;
3964
3965    case SSL_CTRL_SELECT_CURRENT_CERT:
3966        return ssl_cert_select_current(ctx->cert, (X509 *)parg);
3967
3968    case SSL_CTRL_SET_CURRENT_CERT:
3969        return ssl_cert_set_current(ctx->cert, larg);
3970
3971    default:
3972        return (0);
3973    }
3974    return (1);
3975}
3976
3977long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
3978{
3979    CERT *cert;
3980
3981    cert = ctx->cert;
3982
3983    switch (cmd) {
3984#ifndef OPENSSL_NO_RSA
3985    case SSL_CTRL_SET_TMP_RSA_CB:
3986        {
3987            cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
3988        }
3989        break;
3990#endif
3991#ifndef OPENSSL_NO_DH
3992    case SSL_CTRL_SET_TMP_DH_CB:
3993        {
3994            cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3995        }
3996        break;
3997#endif
3998#ifndef OPENSSL_NO_ECDH
3999    case SSL_CTRL_SET_TMP_ECDH_CB:
4000        {
4001            cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
4002        }
4003        break;
4004#endif
4005#ifndef OPENSSL_NO_TLSEXT
4006    case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
4007        ctx->tlsext_servername_callback = (int (*)(SSL *, int *, void *))fp;
4008        break;
4009
4010# ifdef TLSEXT_TYPE_opaque_prf_input
4011    case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB:
4012        ctx->tlsext_opaque_prf_input_callback =
4013            (int (*)(SSL *, void *, size_t, void *))fp;
4014        break;
4015# endif
4016
4017    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
4018        ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp;
4019        break;
4020
4021    case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
4022        ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *,
4023                                             unsigned char *,
4024                                             EVP_CIPHER_CTX *,
4025                                             HMAC_CTX *, int))fp;
4026        break;
4027
4028# ifndef OPENSSL_NO_SRP
4029    case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB:
4030        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4031        ctx->srp_ctx.SRP_verify_param_callback = (int (*)(SSL *, void *))fp;
4032        break;
4033    case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB:
4034        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4035        ctx->srp_ctx.TLS_ext_srp_username_callback =
4036            (int (*)(SSL *, int *, void *))fp;
4037        break;
4038    case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB:
4039        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
4040        ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
4041            (char *(*)(SSL *, void *))fp;
4042        break;
4043# endif
4044#endif
4045    default:
4046        return (0);
4047    }
4048    return (1);
4049}
4050
4051/*
4052 * This function needs to check if the ciphers required are actually
4053 * available
4054 */
4055const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
4056{
4057    SSL_CIPHER c;
4058    const SSL_CIPHER *cp;
4059    unsigned long id;
4060
4061    id = 0x03000000L | ((unsigned long)p[0] << 8L) | (unsigned long)p[1];
4062    c.id = id;
4063    cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
4064#ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES
4065    if (cp == NULL)
4066        fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]);
4067#endif
4068    return cp;
4069}
4070
4071int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
4072{
4073    long l;
4074
4075    if (p != NULL) {
4076        l = c->id;
4077        if ((l & 0xff000000) != 0x03000000)
4078            return (0);
4079        p[0] = ((unsigned char)(l >> 8L)) & 0xFF;
4080        p[1] = ((unsigned char)(l)) & 0xFF;
4081    }
4082    return (2);
4083}
4084
4085SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
4086                               STACK_OF(SSL_CIPHER) *srvr)
4087{
4088    SSL_CIPHER *c, *ret = NULL;
4089    STACK_OF(SSL_CIPHER) *prio, *allow;
4090    int i, ii, ok;
4091    CERT *cert;
4092    unsigned long alg_k, alg_a, mask_k, mask_a, emask_k, emask_a;
4093
4094    /* Let's see which ciphers we can support */
4095    cert = s->cert;
4096
4097#if 0
4098    /*
4099     * Do not set the compare functions, because this may lead to a
4100     * reordering by "id". We want to keep the original ordering. We may pay
4101     * a price in performance during sk_SSL_CIPHER_find(), but would have to
4102     * pay with the price of sk_SSL_CIPHER_dup().
4103     */
4104    sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
4105    sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
4106#endif
4107
4108#ifdef CIPHER_DEBUG
4109    fprintf(stderr, "Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr),
4110            (void *)srvr);
4111    for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) {
4112        c = sk_SSL_CIPHER_value(srvr, i);
4113        fprintf(stderr, "%p:%s\n", (void *)c, c->name);
4114    }
4115    fprintf(stderr, "Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt),
4116            (void *)clnt);
4117    for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) {
4118        c = sk_SSL_CIPHER_value(clnt, i);
4119        fprintf(stderr, "%p:%s\n", (void *)c, c->name);
4120    }
4121#endif
4122
4123    if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || tls1_suiteb(s)) {
4124        prio = srvr;
4125        allow = clnt;
4126    } else {
4127        prio = clnt;
4128        allow = srvr;
4129    }
4130
4131    tls1_set_cert_validity(s);
4132
4133    for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
4134        c = sk_SSL_CIPHER_value(prio, i);
4135
4136        /* Skip TLS v1.2 only ciphersuites if not supported */
4137        if ((c->algorithm_ssl & SSL_TLSV1_2) && !SSL_USE_TLS1_2_CIPHERS(s))
4138            continue;
4139
4140        ssl_set_cert_masks(cert, c);
4141        mask_k = cert->mask_k;
4142        mask_a = cert->mask_a;
4143        emask_k = cert->export_mask_k;
4144        emask_a = cert->export_mask_a;
4145#ifndef OPENSSL_NO_SRP
4146        if (s->srp_ctx.srp_Mask & SSL_kSRP) {
4147            mask_k |= SSL_kSRP;
4148            emask_k |= SSL_kSRP;
4149            mask_a |= SSL_aSRP;
4150            emask_a |= SSL_aSRP;
4151        }
4152#endif
4153
4154#ifdef KSSL_DEBUG
4155        /*
4156         * fprintf(stderr,"ssl3_choose_cipher %d alg= %lx\n",
4157         * i,c->algorithms);
4158         */
4159#endif                          /* KSSL_DEBUG */
4160
4161        alg_k = c->algorithm_mkey;
4162        alg_a = c->algorithm_auth;
4163
4164#ifndef OPENSSL_NO_KRB5
4165        if (alg_k & SSL_kKRB5) {
4166            if (!kssl_keytab_is_available(s->kssl_ctx))
4167                continue;
4168        }
4169#endif                          /* OPENSSL_NO_KRB5 */
4170#ifndef OPENSSL_NO_PSK
4171        /* with PSK there must be server callback set */
4172        if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)
4173            continue;
4174#endif                          /* OPENSSL_NO_PSK */
4175
4176        if (SSL_C_IS_EXPORT(c)) {
4177            ok = (alg_k & emask_k) && (alg_a & emask_a);
4178#ifdef CIPHER_DEBUG
4179            fprintf(stderr, "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",
4180                    ok, alg_k, alg_a, emask_k, emask_a, (void *)c, c->name);
4181#endif
4182        } else {
4183            ok = (alg_k & mask_k) && (alg_a & mask_a);
4184#ifdef CIPHER_DEBUG
4185            fprintf(stderr, "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n", ok, alg_k,
4186                    alg_a, mask_k, mask_a, (void *)c, c->name);
4187#endif
4188        }
4189
4190#ifndef OPENSSL_NO_TLSEXT
4191# ifndef OPENSSL_NO_EC
4192#  ifndef OPENSSL_NO_ECDH
4193        /*
4194         * if we are considering an ECC cipher suite that uses an ephemeral
4195         * EC key check it
4196         */
4197        if (alg_k & SSL_kEECDH)
4198            ok = ok && tls1_check_ec_tmp_key(s, c->id);
4199#  endif                        /* OPENSSL_NO_ECDH */
4200# endif                         /* OPENSSL_NO_EC */
4201#endif                          /* OPENSSL_NO_TLSEXT */
4202
4203        if (!ok)
4204            continue;
4205        ii = sk_SSL_CIPHER_find(allow, c);
4206        if (ii >= 0) {
4207#if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT)
4208            if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA)
4209                && s->s3->is_probably_safari) {
4210                if (!ret)
4211                    ret = sk_SSL_CIPHER_value(allow, ii);
4212                continue;
4213            }
4214#endif
4215            ret = sk_SSL_CIPHER_value(allow, ii);
4216            break;
4217        }
4218    }
4219    return (ret);
4220}
4221
4222int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
4223{
4224    int ret = 0;
4225    const unsigned char *sig;
4226    size_t i, siglen;
4227    int have_rsa_sign = 0, have_dsa_sign = 0;
4228#ifndef OPENSSL_NO_ECDSA
4229    int have_ecdsa_sign = 0;
4230#endif
4231    int nostrict = 1;
4232    unsigned long alg_k;
4233
4234    /* If we have custom certificate types set, use them */
4235    if (s->cert->ctypes) {
4236        memcpy(p, s->cert->ctypes, s->cert->ctype_num);
4237        return (int)s->cert->ctype_num;
4238    }
4239    /* get configured sigalgs */
4240    siglen = tls12_get_psigalgs(s, 1, &sig);
4241    if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
4242        nostrict = 0;
4243    for (i = 0; i < siglen; i += 2, sig += 2) {
4244        switch (sig[1]) {
4245        case TLSEXT_signature_rsa:
4246            have_rsa_sign = 1;
4247            break;
4248
4249        case TLSEXT_signature_dsa:
4250            have_dsa_sign = 1;
4251            break;
4252#ifndef OPENSSL_NO_ECDSA
4253        case TLSEXT_signature_ecdsa:
4254            have_ecdsa_sign = 1;
4255            break;
4256#endif
4257        }
4258    }
4259
4260    alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
4261
4262#ifndef OPENSSL_NO_GOST
4263    if (s->version >= TLS1_VERSION) {
4264        if (alg_k & SSL_kGOST) {
4265            p[ret++] = TLS_CT_GOST94_SIGN;
4266            p[ret++] = TLS_CT_GOST01_SIGN;
4267            return (ret);
4268        }
4269    }
4270#endif
4271
4272#ifndef OPENSSL_NO_DH
4273    if (alg_k & (SSL_kDHr | SSL_kEDH)) {
4274# ifndef OPENSSL_NO_RSA
4275        /*
4276         * Since this refers to a certificate signed with an RSA algorithm,
4277         * only check for rsa signing in strict mode.
4278         */
4279        if (nostrict || have_rsa_sign)
4280            p[ret++] = SSL3_CT_RSA_FIXED_DH;
4281# endif
4282# ifndef OPENSSL_NO_DSA
4283        if (nostrict || have_dsa_sign)
4284            p[ret++] = SSL3_CT_DSS_FIXED_DH;
4285# endif
4286    }
4287    if ((s->version == SSL3_VERSION) &&
4288        (alg_k & (SSL_kEDH | SSL_kDHd | SSL_kDHr))) {
4289# ifndef OPENSSL_NO_RSA
4290        p[ret++] = SSL3_CT_RSA_EPHEMERAL_DH;
4291# endif
4292# ifndef OPENSSL_NO_DSA
4293        p[ret++] = SSL3_CT_DSS_EPHEMERAL_DH;
4294# endif
4295    }
4296#endif                          /* !OPENSSL_NO_DH */
4297#ifndef OPENSSL_NO_RSA
4298    if (have_rsa_sign)
4299        p[ret++] = SSL3_CT_RSA_SIGN;
4300#endif
4301#ifndef OPENSSL_NO_DSA
4302    if (have_dsa_sign)
4303        p[ret++] = SSL3_CT_DSS_SIGN;
4304#endif
4305#ifndef OPENSSL_NO_ECDH
4306    if ((alg_k & (SSL_kECDHr | SSL_kECDHe)) && (s->version >= TLS1_VERSION)) {
4307        if (nostrict || have_rsa_sign)
4308            p[ret++] = TLS_CT_RSA_FIXED_ECDH;
4309        if (nostrict || have_ecdsa_sign)
4310            p[ret++] = TLS_CT_ECDSA_FIXED_ECDH;
4311    }
4312#endif
4313
4314#ifndef OPENSSL_NO_ECDSA
4315    /*
4316     * ECDSA certs can be used with RSA cipher suites as well so we don't
4317     * need to check for SSL_kECDH or SSL_kEECDH
4318     */
4319    if (s->version >= TLS1_VERSION) {
4320        if (have_ecdsa_sign)
4321            p[ret++] = TLS_CT_ECDSA_SIGN;
4322    }
4323#endif
4324    return (ret);
4325}
4326
4327static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
4328{
4329    if (c->ctypes) {
4330        OPENSSL_free(c->ctypes);
4331        c->ctypes = NULL;
4332    }
4333    if (!p || !len)
4334        return 1;
4335    if (len > 0xff)
4336        return 0;
4337    c->ctypes = OPENSSL_malloc(len);
4338    if (!c->ctypes)
4339        return 0;
4340    memcpy(c->ctypes, p, len);
4341    c->ctype_num = len;
4342    return 1;
4343}
4344
4345int ssl3_shutdown(SSL *s)
4346{
4347    int ret;
4348
4349    /*
4350     * Don't do anything much if we have not done the handshake or we don't
4351     * want to send messages :-)
4352     */
4353    if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) {
4354        s->shutdown = (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
4355        return (1);
4356    }
4357
4358    if (!(s->shutdown & SSL_SENT_SHUTDOWN)) {
4359        s->shutdown |= SSL_SENT_SHUTDOWN;
4360#if 1
4361        ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
4362#endif
4363        /*
4364         * our shutdown alert has been sent now, and if it still needs to be
4365         * written, s->s3->alert_dispatch will be true
4366         */
4367        if (s->s3->alert_dispatch)
4368            return (-1);        /* return WANT_WRITE */
4369    } else if (s->s3->alert_dispatch) {
4370        /* resend it if not sent */
4371#if 1
4372        ret = s->method->ssl_dispatch_alert(s);
4373        if (ret == -1) {
4374            /*
4375             * we only get to return -1 here the 2nd/Nth invocation, we must
4376             * have already signalled return 0 upon a previous invoation,
4377             * return WANT_WRITE
4378             */
4379            return (ret);
4380        }
4381#endif
4382    } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
4383        /*
4384         * If we are waiting for a close from our peer, we are closed
4385         */
4386        s->method->ssl_read_bytes(s, 0, NULL, 0, 0);
4387        if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
4388            return (-1);        /* return WANT_READ */
4389        }
4390    }
4391
4392    if ((s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN)) &&
4393        !s->s3->alert_dispatch)
4394        return (1);
4395    else
4396        return (0);
4397}
4398
4399int ssl3_write(SSL *s, const void *buf, int len)
4400{
4401    int ret, n;
4402
4403#if 0
4404    if (s->shutdown & SSL_SEND_SHUTDOWN) {
4405        s->rwstate = SSL_NOTHING;
4406        return (0);
4407    }
4408#endif
4409    clear_sys_error();
4410    if (s->s3->renegotiate)
4411        ssl3_renegotiate_check(s);
4412
4413    /*
4414     * This is an experimental flag that sends the last handshake message in
4415     * the same packet as the first use data - used to see if it helps the
4416     * TCP protocol during session-id reuse
4417     */
4418    /* The second test is because the buffer may have been removed */
4419    if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) {
4420        /* First time through, we write into the buffer */
4421        if (s->s3->delay_buf_pop_ret == 0) {
4422            ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len);
4423            if (ret <= 0)
4424                return (ret);
4425
4426            s->s3->delay_buf_pop_ret = ret;
4427        }
4428
4429        s->rwstate = SSL_WRITING;
4430        n = BIO_flush(s->wbio);
4431        if (n <= 0)
4432            return (n);
4433        s->rwstate = SSL_NOTHING;
4434
4435        /* We have flushed the buffer, so remove it */
4436        ssl_free_wbio_buffer(s);
4437        s->s3->flags &= ~SSL3_FLAGS_POP_BUFFER;
4438
4439        ret = s->s3->delay_buf_pop_ret;
4440        s->s3->delay_buf_pop_ret = 0;
4441    } else {
4442        ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA,
4443                                         buf, len);
4444        if (ret <= 0)
4445            return (ret);
4446    }
4447
4448    return (ret);
4449}
4450
4451static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
4452{
4453    int ret;
4454
4455    clear_sys_error();
4456    if (s->s3->renegotiate)
4457        ssl3_renegotiate_check(s);
4458    s->s3->in_read_app_data = 1;
4459    ret =
4460        s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
4461                                  peek);
4462    if ((ret == -1) && (s->s3->in_read_app_data == 2)) {
4463        /*
4464         * ssl3_read_bytes decided to call s->handshake_func, which called
4465         * ssl3_read_bytes to read handshake data. However, ssl3_read_bytes
4466         * actually found application data and thinks that application data
4467         * makes sense here; so disable handshake processing and try to read
4468         * application data again.
4469         */
4470        s->in_handshake++;
4471        ret =
4472            s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
4473                                      peek);
4474        s->in_handshake--;
4475    } else
4476        s->s3->in_read_app_data = 0;
4477
4478    return (ret);
4479}
4480
4481int ssl3_read(SSL *s, void *buf, int len)
4482{
4483    return ssl3_read_internal(s, buf, len, 0);
4484}
4485
4486int ssl3_peek(SSL *s, void *buf, int len)
4487{
4488    return ssl3_read_internal(s, buf, len, 1);
4489}
4490
4491int ssl3_renegotiate(SSL *s)
4492{
4493    if (s->handshake_func == NULL)
4494        return (1);
4495
4496    if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
4497        return (0);
4498
4499    s->s3->renegotiate = 1;
4500    return (1);
4501}
4502
4503int ssl3_renegotiate_check(SSL *s)
4504{
4505    int ret = 0;
4506
4507    if (s->s3->renegotiate) {
4508        if ((s->s3->rbuf.left == 0) &&
4509            (s->s3->wbuf.left == 0) && !SSL_in_init(s)) {
4510            /*
4511             * if we are the server, and we have sent a 'RENEGOTIATE'
4512             * message, we need to go to SSL_ST_ACCEPT.
4513             */
4514            /* SSL_ST_ACCEPT */
4515            s->state = SSL_ST_RENEGOTIATE;
4516            s->s3->renegotiate = 0;
4517            s->s3->num_renegotiations++;
4518            s->s3->total_renegotiations++;
4519            ret = 1;
4520        }
4521    }
4522    return (ret);
4523}
4524
4525/*
4526 * If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF and
4527 * handshake macs if required.
4528 */
4529long ssl_get_algorithm2(SSL *s)
4530{
4531    long alg2;
4532    if (s->s3 == NULL || s->s3->tmp.new_cipher == NULL)
4533        return -1;
4534    alg2 = s->s3->tmp.new_cipher->algorithm2;
4535    if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF
4536        && alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF))
4537        return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
4538    return alg2;
4539}
4540