]> CyberLeo.Net >> Repos - FreeBSD/releng/9.3.git/blob - crypto/openssl/ssl/s3_lib.c
Fix multiple OpenSSL vulnerabilities.
[FreeBSD/releng/9.3.git] / crypto / openssl / ssl / s3_lib.c
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-2006 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 #include <stdio.h>
126 #include <openssl/objects.h>
127 #include "ssl_locl.h"
128 #include "kssl_lcl.h"
129 #include <openssl/md5.h>
130 #ifndef OPENSSL_NO_DH
131 # include <openssl/dh.h>
132 #endif
133 #include <openssl/pq_compat.h>
134
135 const char ssl3_version_str[] = "SSLv3" OPENSSL_VERSION_PTEXT;
136
137 #define SSL3_NUM_CIPHERS        (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
138
139 /* list of available SSLv3 ciphers (sorted by id) */
140 OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
141 /* The RSA ciphers */
142 /* Cipher 01 */
143     {
144      1,
145      SSL3_TXT_RSA_NULL_MD5,
146      SSL3_CK_RSA_NULL_MD5,
147      SSL_kRSA | SSL_aRSA | SSL_eNULL | SSL_MD5 | SSL_SSLV3,
148      SSL_NOT_EXP | SSL_STRONG_NONE,
149      0,
150      0,
151      0,
152      SSL_ALL_CIPHERS,
153      SSL_ALL_STRENGTHS,
154      },
155 /* Cipher 02 */
156     {
157      1,
158      SSL3_TXT_RSA_NULL_SHA,
159      SSL3_CK_RSA_NULL_SHA,
160      SSL_kRSA | SSL_aRSA | SSL_eNULL | SSL_SHA1 | SSL_SSLV3,
161      SSL_NOT_EXP | SSL_STRONG_NONE | SSL_FIPS,
162      0,
163      0,
164      0,
165      SSL_ALL_CIPHERS,
166      SSL_ALL_STRENGTHS,
167      },
168 /* Cipher 03 */
169     {
170      1,
171      SSL3_TXT_RSA_RC4_40_MD5,
172      SSL3_CK_RSA_RC4_40_MD5,
173      SSL_kRSA | SSL_aRSA | SSL_RC4 | SSL_MD5 | SSL_SSLV3,
174      SSL_EXPORT | SSL_EXP40,
175      0,
176      40,
177      128,
178      SSL_ALL_CIPHERS,
179      SSL_ALL_STRENGTHS,
180      },
181 /* Cipher 04 */
182     {
183      1,
184      SSL3_TXT_RSA_RC4_128_MD5,
185      SSL3_CK_RSA_RC4_128_MD5,
186      SSL_kRSA | SSL_aRSA | SSL_RC4 | SSL_MD5 | SSL_SSLV3,
187      SSL_NOT_EXP | SSL_MEDIUM,
188      0,
189      128,
190      128,
191      SSL_ALL_CIPHERS,
192      SSL_ALL_STRENGTHS,
193      },
194 /* Cipher 05 */
195     {
196      1,
197      SSL3_TXT_RSA_RC4_128_SHA,
198      SSL3_CK_RSA_RC4_128_SHA,
199      SSL_kRSA | SSL_aRSA | SSL_RC4 | SSL_SHA1 | SSL_SSLV3,
200      SSL_NOT_EXP | SSL_MEDIUM,
201      0,
202      128,
203      128,
204      SSL_ALL_CIPHERS,
205      SSL_ALL_STRENGTHS,
206      },
207 /* Cipher 06 */
208     {
209      1,
210      SSL3_TXT_RSA_RC2_40_MD5,
211      SSL3_CK_RSA_RC2_40_MD5,
212      SSL_kRSA | SSL_aRSA | SSL_RC2 | SSL_MD5 | SSL_SSLV3,
213      SSL_EXPORT | SSL_EXP40,
214      0,
215      40,
216      128,
217      SSL_ALL_CIPHERS,
218      SSL_ALL_STRENGTHS,
219      },
220 /* Cipher 07 */
221 #ifndef OPENSSL_NO_IDEA
222     {
223      1,
224      SSL3_TXT_RSA_IDEA_128_SHA,
225      SSL3_CK_RSA_IDEA_128_SHA,
226      SSL_kRSA | SSL_aRSA | SSL_IDEA | SSL_SHA1 | SSL_SSLV3,
227      SSL_NOT_EXP | SSL_MEDIUM,
228      0,
229      128,
230      128,
231      SSL_ALL_CIPHERS,
232      SSL_ALL_STRENGTHS,
233      },
234 #endif
235 /* Cipher 08 */
236     {
237      1,
238      SSL3_TXT_RSA_DES_40_CBC_SHA,
239      SSL3_CK_RSA_DES_40_CBC_SHA,
240      SSL_kRSA | SSL_aRSA | SSL_DES | SSL_SHA1 | SSL_SSLV3,
241      SSL_EXPORT | SSL_EXP40,
242      0,
243      40,
244      56,
245      SSL_ALL_CIPHERS,
246      SSL_ALL_STRENGTHS,
247      },
248 /* Cipher 09 */
249     {
250      1,
251      SSL3_TXT_RSA_DES_64_CBC_SHA,
252      SSL3_CK_RSA_DES_64_CBC_SHA,
253      SSL_kRSA | SSL_aRSA | SSL_DES | SSL_SHA1 | SSL_SSLV3,
254      SSL_NOT_EXP | SSL_LOW,
255      0,
256      56,
257      56,
258      SSL_ALL_CIPHERS,
259      SSL_ALL_STRENGTHS,
260      },
261 /* Cipher 0A */
262     {
263      1,
264      SSL3_TXT_RSA_DES_192_CBC3_SHA,
265      SSL3_CK_RSA_DES_192_CBC3_SHA,
266      SSL_kRSA | SSL_aRSA | SSL_3DES | SSL_SHA1 | SSL_SSLV3,
267      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
268      0,
269      168,
270      168,
271      SSL_ALL_CIPHERS,
272      SSL_ALL_STRENGTHS,
273      },
274 /* The DH ciphers */
275 /* Cipher 0B */
276     {
277      0,
278      SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
279      SSL3_CK_DH_DSS_DES_40_CBC_SHA,
280      SSL_kDHd | SSL_aDH | SSL_DES | SSL_SHA1 | SSL_SSLV3,
281      SSL_EXPORT | SSL_EXP40,
282      0,
283      40,
284      56,
285      SSL_ALL_CIPHERS,
286      SSL_ALL_STRENGTHS,
287      },
288 /* Cipher 0C */
289     {
290      0,
291      SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
292      SSL3_CK_DH_DSS_DES_64_CBC_SHA,
293      SSL_kDHd | SSL_aDH | SSL_DES | SSL_SHA1 | SSL_SSLV3,
294      SSL_NOT_EXP | SSL_LOW,
295      0,
296      56,
297      56,
298      SSL_ALL_CIPHERS,
299      SSL_ALL_STRENGTHS,
300      },
301 /* Cipher 0D */
302     {
303      0,
304      SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
305      SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
306      SSL_kDHd | SSL_aDH | SSL_3DES | SSL_SHA1 | SSL_SSLV3,
307      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
308      0,
309      168,
310      168,
311      SSL_ALL_CIPHERS,
312      SSL_ALL_STRENGTHS,
313      },
314 /* Cipher 0E */
315     {
316      0,
317      SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
318      SSL3_CK_DH_RSA_DES_40_CBC_SHA,
319      SSL_kDHr | SSL_aDH | SSL_DES | SSL_SHA1 | SSL_SSLV3,
320      SSL_EXPORT | SSL_EXP40,
321      0,
322      40,
323      56,
324      SSL_ALL_CIPHERS,
325      SSL_ALL_STRENGTHS,
326      },
327 /* Cipher 0F */
328     {
329      0,
330      SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
331      SSL3_CK_DH_RSA_DES_64_CBC_SHA,
332      SSL_kDHr | SSL_aDH | SSL_DES | SSL_SHA1 | SSL_SSLV3,
333      SSL_NOT_EXP | SSL_LOW,
334      0,
335      56,
336      56,
337      SSL_ALL_CIPHERS,
338      SSL_ALL_STRENGTHS,
339      },
340 /* Cipher 10 */
341     {
342      0,
343      SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
344      SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
345      SSL_kDHr | SSL_aDH | SSL_3DES | SSL_SHA1 | SSL_SSLV3,
346      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
347      0,
348      168,
349      168,
350      SSL_ALL_CIPHERS,
351      SSL_ALL_STRENGTHS,
352      },
353
354 /* The Ephemeral DH ciphers */
355 /* Cipher 11 */
356     {
357      1,
358      SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
359      SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
360      SSL_kEDH | SSL_aDSS | SSL_DES | SSL_SHA1 | SSL_SSLV3,
361      SSL_EXPORT | SSL_EXP40,
362      0,
363      40,
364      56,
365      SSL_ALL_CIPHERS,
366      SSL_ALL_STRENGTHS,
367      },
368 /* Cipher 12 */
369     {
370      1,
371      SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
372      SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
373      SSL_kEDH | SSL_aDSS | SSL_DES | SSL_SHA1 | SSL_SSLV3,
374      SSL_NOT_EXP | SSL_LOW,
375      0,
376      56,
377      56,
378      SSL_ALL_CIPHERS,
379      SSL_ALL_STRENGTHS,
380      },
381 /* Cipher 13 */
382     {
383      1,
384      SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
385      SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
386      SSL_kEDH | SSL_aDSS | SSL_3DES | SSL_SHA1 | SSL_SSLV3,
387      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
388      0,
389      168,
390      168,
391      SSL_ALL_CIPHERS,
392      SSL_ALL_STRENGTHS,
393      },
394 /* Cipher 14 */
395     {
396      1,
397      SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
398      SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
399      SSL_kEDH | SSL_aRSA | SSL_DES | SSL_SHA1 | SSL_SSLV3,
400      SSL_EXPORT | SSL_EXP40,
401      0,
402      40,
403      56,
404      SSL_ALL_CIPHERS,
405      SSL_ALL_STRENGTHS,
406      },
407 /* Cipher 15 */
408     {
409      1,
410      SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
411      SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
412      SSL_kEDH | SSL_aRSA | SSL_DES | SSL_SHA1 | SSL_SSLV3,
413      SSL_NOT_EXP | SSL_LOW,
414      0,
415      56,
416      56,
417      SSL_ALL_CIPHERS,
418      SSL_ALL_STRENGTHS,
419      },
420 /* Cipher 16 */
421     {
422      1,
423      SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
424      SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
425      SSL_kEDH | SSL_aRSA | SSL_3DES | SSL_SHA1 | SSL_SSLV3,
426      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
427      0,
428      168,
429      168,
430      SSL_ALL_CIPHERS,
431      SSL_ALL_STRENGTHS,
432      },
433 /* Cipher 17 */
434     {
435      1,
436      SSL3_TXT_ADH_RC4_40_MD5,
437      SSL3_CK_ADH_RC4_40_MD5,
438      SSL_kEDH | SSL_aNULL | SSL_RC4 | SSL_MD5 | SSL_SSLV3,
439      SSL_EXPORT | SSL_EXP40,
440      0,
441      40,
442      128,
443      SSL_ALL_CIPHERS,
444      SSL_ALL_STRENGTHS,
445      },
446 /* Cipher 18 */
447     {
448      1,
449      SSL3_TXT_ADH_RC4_128_MD5,
450      SSL3_CK_ADH_RC4_128_MD5,
451      SSL_kEDH | SSL_aNULL | SSL_RC4 | SSL_MD5 | SSL_SSLV3,
452      SSL_NOT_EXP | SSL_MEDIUM,
453      0,
454      128,
455      128,
456      SSL_ALL_CIPHERS,
457      SSL_ALL_STRENGTHS,
458      },
459 /* Cipher 19 */
460     {
461      1,
462      SSL3_TXT_ADH_DES_40_CBC_SHA,
463      SSL3_CK_ADH_DES_40_CBC_SHA,
464      SSL_kEDH | SSL_aNULL | SSL_DES | SSL_SHA1 | SSL_SSLV3,
465      SSL_EXPORT | SSL_EXP40,
466      0,
467      40,
468      128,
469      SSL_ALL_CIPHERS,
470      SSL_ALL_STRENGTHS,
471      },
472 /* Cipher 1A */
473     {
474      1,
475      SSL3_TXT_ADH_DES_64_CBC_SHA,
476      SSL3_CK_ADH_DES_64_CBC_SHA,
477      SSL_kEDH | SSL_aNULL | SSL_DES | SSL_SHA1 | SSL_SSLV3,
478      SSL_NOT_EXP | SSL_LOW,
479      0,
480      56,
481      56,
482      SSL_ALL_CIPHERS,
483      SSL_ALL_STRENGTHS,
484      },
485 /* Cipher 1B */
486     {
487      1,
488      SSL3_TXT_ADH_DES_192_CBC_SHA,
489      SSL3_CK_ADH_DES_192_CBC_SHA,
490      SSL_kEDH | SSL_aNULL | SSL_3DES | SSL_SHA1 | SSL_SSLV3,
491      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
492      0,
493      168,
494      168,
495      SSL_ALL_CIPHERS,
496      SSL_ALL_STRENGTHS,
497      },
498
499 /* Fortezza */
500 /* Cipher 1C */
501     {
502      0,
503      SSL3_TXT_FZA_DMS_NULL_SHA,
504      SSL3_CK_FZA_DMS_NULL_SHA,
505      SSL_kFZA | SSL_aFZA | SSL_eNULL | SSL_SHA1 | SSL_SSLV3,
506      SSL_NOT_EXP | SSL_STRONG_NONE,
507      0,
508      0,
509      0,
510      SSL_ALL_CIPHERS,
511      SSL_ALL_STRENGTHS,
512      },
513
514 /* Cipher 1D */
515     {
516      0,
517      SSL3_TXT_FZA_DMS_FZA_SHA,
518      SSL3_CK_FZA_DMS_FZA_SHA,
519      SSL_kFZA | SSL_aFZA | SSL_eFZA | SSL_SHA1 | SSL_SSLV3,
520      SSL_NOT_EXP | SSL_STRONG_NONE,
521      0,
522      0,
523      0,
524      SSL_ALL_CIPHERS,
525      SSL_ALL_STRENGTHS,
526      },
527
528 #if 0
529 /* Cipher 1E */
530     {
531      0,
532      SSL3_TXT_FZA_DMS_RC4_SHA,
533      SSL3_CK_FZA_DMS_RC4_SHA,
534      SSL_kFZA | SSL_aFZA | SSL_RC4 | SSL_SHA1 | SSL_SSLV3,
535      SSL_NOT_EXP | SSL_MEDIUM,
536      0,
537      128,
538      128,
539      SSL_ALL_CIPHERS,
540      SSL_ALL_STRENGTHS,
541      },
542 #endif
543
544 #ifndef OPENSSL_NO_KRB5
545 /* The Kerberos ciphers */
546 /* Cipher 1E */
547     {
548      1,
549      SSL3_TXT_KRB5_DES_64_CBC_SHA,
550      SSL3_CK_KRB5_DES_64_CBC_SHA,
551      SSL_kKRB5 | SSL_aKRB5 | SSL_DES | SSL_SHA1 | SSL_SSLV3,
552      SSL_NOT_EXP | SSL_LOW,
553      0,
554      56,
555      56,
556      SSL_ALL_CIPHERS,
557      SSL_ALL_STRENGTHS,
558      },
559
560 /* Cipher 1F */
561     {
562      1,
563      SSL3_TXT_KRB5_DES_192_CBC3_SHA,
564      SSL3_CK_KRB5_DES_192_CBC3_SHA,
565      SSL_kKRB5 | SSL_aKRB5 | SSL_3DES | SSL_SHA1 | SSL_SSLV3,
566      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
567      0,
568      168,
569      168,
570      SSL_ALL_CIPHERS,
571      SSL_ALL_STRENGTHS,
572      },
573
574 /* Cipher 20 */
575     {
576      1,
577      SSL3_TXT_KRB5_RC4_128_SHA,
578      SSL3_CK_KRB5_RC4_128_SHA,
579      SSL_kKRB5 | SSL_aKRB5 | SSL_RC4 | SSL_SHA1 | SSL_SSLV3,
580      SSL_NOT_EXP | SSL_MEDIUM,
581      0,
582      128,
583      128,
584      SSL_ALL_CIPHERS,
585      SSL_ALL_STRENGTHS,
586      },
587
588 /* Cipher 21 */
589     {
590      1,
591      SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
592      SSL3_CK_KRB5_IDEA_128_CBC_SHA,
593      SSL_kKRB5 | SSL_aKRB5 | SSL_IDEA | SSL_SHA1 | SSL_SSLV3,
594      SSL_NOT_EXP | SSL_MEDIUM,
595      0,
596      128,
597      128,
598      SSL_ALL_CIPHERS,
599      SSL_ALL_STRENGTHS,
600      },
601
602 /* Cipher 22 */
603     {
604      1,
605      SSL3_TXT_KRB5_DES_64_CBC_MD5,
606      SSL3_CK_KRB5_DES_64_CBC_MD5,
607      SSL_kKRB5 | SSL_aKRB5 | SSL_DES | SSL_MD5 | SSL_SSLV3,
608      SSL_NOT_EXP | SSL_LOW,
609      0,
610      56,
611      56,
612      SSL_ALL_CIPHERS,
613      SSL_ALL_STRENGTHS,
614      },
615
616 /* Cipher 23 */
617     {
618      1,
619      SSL3_TXT_KRB5_DES_192_CBC3_MD5,
620      SSL3_CK_KRB5_DES_192_CBC3_MD5,
621      SSL_kKRB5 | SSL_aKRB5 | SSL_3DES | SSL_MD5 | SSL_SSLV3,
622      SSL_NOT_EXP | SSL_HIGH,
623      0,
624      168,
625      168,
626      SSL_ALL_CIPHERS,
627      SSL_ALL_STRENGTHS,
628      },
629
630 /* Cipher 24 */
631     {
632      1,
633      SSL3_TXT_KRB5_RC4_128_MD5,
634      SSL3_CK_KRB5_RC4_128_MD5,
635      SSL_kKRB5 | SSL_aKRB5 | SSL_RC4 | SSL_MD5 | SSL_SSLV3,
636      SSL_NOT_EXP | SSL_MEDIUM,
637      0,
638      128,
639      128,
640      SSL_ALL_CIPHERS,
641      SSL_ALL_STRENGTHS,
642      },
643
644 /* Cipher 25 */
645     {
646      1,
647      SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
648      SSL3_CK_KRB5_IDEA_128_CBC_MD5,
649      SSL_kKRB5 | SSL_aKRB5 | SSL_IDEA | SSL_MD5 | SSL_SSLV3,
650      SSL_NOT_EXP | SSL_MEDIUM,
651      0,
652      128,
653      128,
654      SSL_ALL_CIPHERS,
655      SSL_ALL_STRENGTHS,
656      },
657
658 /* Cipher 26 */
659     {
660      1,
661      SSL3_TXT_KRB5_DES_40_CBC_SHA,
662      SSL3_CK_KRB5_DES_40_CBC_SHA,
663      SSL_kKRB5 | SSL_aKRB5 | SSL_DES | SSL_SHA1 | SSL_SSLV3,
664      SSL_EXPORT | SSL_EXP40,
665      0,
666      40,
667      56,
668      SSL_ALL_CIPHERS,
669      SSL_ALL_STRENGTHS,
670      },
671
672 /* Cipher 27 */
673     {
674      1,
675      SSL3_TXT_KRB5_RC2_40_CBC_SHA,
676      SSL3_CK_KRB5_RC2_40_CBC_SHA,
677      SSL_kKRB5 | SSL_aKRB5 | SSL_RC2 | SSL_SHA1 | SSL_SSLV3,
678      SSL_EXPORT | SSL_EXP40,
679      0,
680      40,
681      128,
682      SSL_ALL_CIPHERS,
683      SSL_ALL_STRENGTHS,
684      },
685
686 /* Cipher 28 */
687     {
688      1,
689      SSL3_TXT_KRB5_RC4_40_SHA,
690      SSL3_CK_KRB5_RC4_40_SHA,
691      SSL_kKRB5 | SSL_aKRB5 | SSL_RC4 | SSL_SHA1 | SSL_SSLV3,
692      SSL_EXPORT | SSL_EXP40,
693      0,
694      40,
695      128,
696      SSL_ALL_CIPHERS,
697      SSL_ALL_STRENGTHS,
698      },
699
700 /* Cipher 29 */
701     {
702      1,
703      SSL3_TXT_KRB5_DES_40_CBC_MD5,
704      SSL3_CK_KRB5_DES_40_CBC_MD5,
705      SSL_kKRB5 | SSL_aKRB5 | SSL_DES | SSL_MD5 | SSL_SSLV3,
706      SSL_EXPORT | SSL_EXP40,
707      0,
708      40,
709      56,
710      SSL_ALL_CIPHERS,
711      SSL_ALL_STRENGTHS,
712      },
713
714 /* Cipher 2A */
715     {
716      1,
717      SSL3_TXT_KRB5_RC2_40_CBC_MD5,
718      SSL3_CK_KRB5_RC2_40_CBC_MD5,
719      SSL_kKRB5 | SSL_aKRB5 | SSL_RC2 | SSL_MD5 | SSL_SSLV3,
720      SSL_EXPORT | SSL_EXP40,
721      0,
722      40,
723      128,
724      SSL_ALL_CIPHERS,
725      SSL_ALL_STRENGTHS,
726      },
727
728 /* Cipher 2B */
729     {
730      1,
731      SSL3_TXT_KRB5_RC4_40_MD5,
732      SSL3_CK_KRB5_RC4_40_MD5,
733      SSL_kKRB5 | SSL_aKRB5 | SSL_RC4 | SSL_MD5 | SSL_SSLV3,
734      SSL_EXPORT | SSL_EXP40,
735      0,
736      40,
737      128,
738      SSL_ALL_CIPHERS,
739      SSL_ALL_STRENGTHS,
740      },
741 #endif                          /* OPENSSL_NO_KRB5 */
742
743 /* New AES ciphersuites */
744 /* Cipher 2F */
745     {
746      1,
747      TLS1_TXT_RSA_WITH_AES_128_SHA,
748      TLS1_CK_RSA_WITH_AES_128_SHA,
749      SSL_kRSA | SSL_aRSA | SSL_AES | SSL_SHA | SSL_TLSV1,
750      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
751      0,
752      128,
753      128,
754      SSL_ALL_CIPHERS,
755      SSL_ALL_STRENGTHS,
756      },
757 /* Cipher 30 */
758     {
759      0,
760      TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
761      TLS1_CK_DH_DSS_WITH_AES_128_SHA,
762      SSL_kDHd | SSL_aDH | SSL_AES | SSL_SHA | SSL_TLSV1,
763      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
764      0,
765      128,
766      128,
767      SSL_ALL_CIPHERS,
768      SSL_ALL_STRENGTHS,
769      },
770 /* Cipher 31 */
771     {
772      0,
773      TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
774      TLS1_CK_DH_RSA_WITH_AES_128_SHA,
775      SSL_kDHr | SSL_aDH | SSL_AES | SSL_SHA | SSL_TLSV1,
776      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
777      0,
778      128,
779      128,
780      SSL_ALL_CIPHERS,
781      SSL_ALL_STRENGTHS,
782      },
783 /* Cipher 32 */
784     {
785      1,
786      TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
787      TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
788      SSL_kEDH | SSL_aDSS | SSL_AES | SSL_SHA | SSL_TLSV1,
789      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
790      0,
791      128,
792      128,
793      SSL_ALL_CIPHERS,
794      SSL_ALL_STRENGTHS,
795      },
796 /* Cipher 33 */
797     {
798      1,
799      TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
800      TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
801      SSL_kEDH | SSL_aRSA | SSL_AES | SSL_SHA | SSL_TLSV1,
802      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
803      0,
804      128,
805      128,
806      SSL_ALL_CIPHERS,
807      SSL_ALL_STRENGTHS,
808      },
809 /* Cipher 34 */
810     {
811      1,
812      TLS1_TXT_ADH_WITH_AES_128_SHA,
813      TLS1_CK_ADH_WITH_AES_128_SHA,
814      SSL_kEDH | SSL_aNULL | SSL_AES | SSL_SHA | SSL_TLSV1,
815      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
816      0,
817      128,
818      128,
819      SSL_ALL_CIPHERS,
820      SSL_ALL_STRENGTHS,
821      },
822
823 /* Cipher 35 */
824     {
825      1,
826      TLS1_TXT_RSA_WITH_AES_256_SHA,
827      TLS1_CK_RSA_WITH_AES_256_SHA,
828      SSL_kRSA | SSL_aRSA | SSL_AES | SSL_SHA | SSL_TLSV1,
829      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
830      0,
831      256,
832      256,
833      SSL_ALL_CIPHERS,
834      SSL_ALL_STRENGTHS,
835      },
836 /* Cipher 36 */
837     {
838      0,
839      TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
840      TLS1_CK_DH_DSS_WITH_AES_256_SHA,
841      SSL_kDHd | SSL_aDH | SSL_AES | SSL_SHA | SSL_TLSV1,
842      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
843      0,
844      256,
845      256,
846      SSL_ALL_CIPHERS,
847      SSL_ALL_STRENGTHS,
848      },
849 /* Cipher 37 */
850     {
851      0,
852      TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
853      TLS1_CK_DH_RSA_WITH_AES_256_SHA,
854      SSL_kDHr | SSL_aDH | SSL_AES | SSL_SHA | SSL_TLSV1,
855      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
856      0,
857      256,
858      256,
859      SSL_ALL_CIPHERS,
860      SSL_ALL_STRENGTHS,
861      },
862 /* Cipher 38 */
863     {
864      1,
865      TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
866      TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
867      SSL_kEDH | SSL_aDSS | SSL_AES | SSL_SHA | SSL_TLSV1,
868      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
869      0,
870      256,
871      256,
872      SSL_ALL_CIPHERS,
873      SSL_ALL_STRENGTHS,
874      },
875 /* Cipher 39 */
876     {
877      1,
878      TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
879      TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
880      SSL_kEDH | SSL_aRSA | SSL_AES | SSL_SHA | SSL_TLSV1,
881      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
882      0,
883      256,
884      256,
885      SSL_ALL_CIPHERS,
886      SSL_ALL_STRENGTHS,
887      },
888     /* Cipher 3A */
889     {
890      1,
891      TLS1_TXT_ADH_WITH_AES_256_SHA,
892      TLS1_CK_ADH_WITH_AES_256_SHA,
893      SSL_kEDH | SSL_aNULL | SSL_AES | SSL_SHA | SSL_TLSV1,
894      SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
895      0,
896      256,
897      256,
898      SSL_ALL_CIPHERS,
899      SSL_ALL_STRENGTHS,
900      },
901
902 #ifndef OPENSSL_NO_CAMELLIA
903     /* Camellia ciphersuites from RFC4132 (128-bit portion) */
904
905     /* Cipher 41 */
906     {
907      1,
908      TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
909      TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
910      SSL_kRSA | SSL_aRSA | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
911      SSL_NOT_EXP | SSL_HIGH,
912      0,
913      128,
914      128,
915      SSL_ALL_CIPHERS,
916      SSL_ALL_STRENGTHS},
917     /* Cipher 42 */
918     {
919      0,                         /* not implemented (non-ephemeral DH) */
920      TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
921      TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
922      SSL_kDHd | SSL_aDH | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
923      SSL_NOT_EXP | SSL_HIGH,
924      0,
925      128,
926      128,
927      SSL_ALL_CIPHERS,
928      SSL_ALL_STRENGTHS},
929     /* Cipher 43 */
930     {
931      0,                         /* not implemented (non-ephemeral DH) */
932      TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
933      TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
934      SSL_kDHr | SSL_aDH | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
935      SSL_NOT_EXP | SSL_HIGH,
936      0,
937      128,
938      128,
939      SSL_ALL_CIPHERS,
940      SSL_ALL_STRENGTHS},
941     /* Cipher 44 */
942     {
943      1,
944      TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
945      TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
946      SSL_kEDH | SSL_aDSS | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
947      SSL_NOT_EXP | SSL_HIGH,
948      0,
949      128,
950      128,
951      SSL_ALL_CIPHERS,
952      SSL_ALL_STRENGTHS},
953     /* Cipher 45 */
954     {
955      1,
956      TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
957      TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
958      SSL_kEDH | SSL_aRSA | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
959      SSL_NOT_EXP | SSL_HIGH,
960      0,
961      128,
962      128,
963      SSL_ALL_CIPHERS,
964      SSL_ALL_STRENGTHS},
965     /* Cipher 46 */
966     {
967      1,
968      TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
969      TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
970      SSL_kEDH | SSL_aNULL | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
971      SSL_NOT_EXP | SSL_HIGH,
972      0,
973      128,
974      128,
975      SSL_ALL_CIPHERS,
976      SSL_ALL_STRENGTHS},
977 #endif                          /* OPENSSL_NO_CAMELLIA */
978
979 #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
980     /* New TLS Export CipherSuites from expired ID */
981 # if 0
982     /* Cipher 60 */
983     {
984      1,
985      TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
986      TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
987      SSL_kRSA | SSL_aRSA | SSL_RC4 | SSL_MD5 | SSL_TLSV1,
988      SSL_EXPORT | SSL_EXP56,
989      0,
990      56,
991      128,
992      SSL_ALL_CIPHERS,
993      SSL_ALL_STRENGTHS,
994      },
995     /* Cipher 61 */
996     {
997      1,
998      TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
999      TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1000      SSL_kRSA | SSL_aRSA | SSL_RC2 | SSL_MD5 | SSL_TLSV1,
1001      SSL_EXPORT | SSL_EXP56,
1002      0,
1003      56,
1004      128,
1005      SSL_ALL_CIPHERS,
1006      SSL_ALL_STRENGTHS,
1007      },
1008 # endif
1009     /* Cipher 62 */
1010     {
1011      1,
1012      TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1013      TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1014      SSL_kRSA | SSL_aRSA | SSL_DES | SSL_SHA | SSL_TLSV1,
1015      SSL_EXPORT | SSL_EXP56,
1016      0,
1017      56,
1018      56,
1019      SSL_ALL_CIPHERS,
1020      SSL_ALL_STRENGTHS,
1021      },
1022     /* Cipher 63 */
1023     {
1024      1,
1025      TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1026      TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1027      SSL_kEDH | SSL_aDSS | SSL_DES | SSL_SHA | SSL_TLSV1,
1028      SSL_EXPORT | SSL_EXP56,
1029      0,
1030      56,
1031      56,
1032      SSL_ALL_CIPHERS,
1033      SSL_ALL_STRENGTHS,
1034      },
1035     /* Cipher 64 */
1036     {
1037      1,
1038      TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
1039      TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
1040      SSL_kRSA | SSL_aRSA | SSL_RC4 | SSL_SHA | SSL_TLSV1,
1041      SSL_EXPORT | SSL_EXP56,
1042      0,
1043      56,
1044      128,
1045      SSL_ALL_CIPHERS,
1046      SSL_ALL_STRENGTHS,
1047      },
1048     /* Cipher 65 */
1049     {
1050      1,
1051      TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1052      TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1053      SSL_kEDH | SSL_aDSS | SSL_RC4 | SSL_SHA | SSL_TLSV1,
1054      SSL_EXPORT | SSL_EXP56,
1055      0,
1056      56,
1057      128,
1058      SSL_ALL_CIPHERS,
1059      SSL_ALL_STRENGTHS,
1060      },
1061     /* Cipher 66 */
1062     {
1063      1,
1064      TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
1065      TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
1066      SSL_kEDH | SSL_aDSS | SSL_RC4 | SSL_SHA | SSL_TLSV1,
1067      SSL_NOT_EXP | SSL_MEDIUM,
1068      0,
1069      128,
1070      128,
1071      SSL_ALL_CIPHERS,
1072      SSL_ALL_STRENGTHS},
1073 #endif
1074
1075 #ifndef OPENSSL_NO_CAMELLIA
1076     /* Camellia ciphersuites from RFC4132 (256-bit portion) */
1077
1078     /* Cipher 84 */
1079     {
1080      1,
1081      TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
1082      TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
1083      SSL_kRSA | SSL_aRSA | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
1084      SSL_NOT_EXP | SSL_HIGH,
1085      0,
1086      256,
1087      256,
1088      SSL_ALL_CIPHERS,
1089      SSL_ALL_STRENGTHS},
1090     /* Cipher 85 */
1091     {
1092      0,                         /* not implemented (non-ephemeral DH) */
1093      TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1094      TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1095      SSL_kDHd | SSL_aDH | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
1096      SSL_NOT_EXP | SSL_HIGH,
1097      0,
1098      256,
1099      256,
1100      SSL_ALL_CIPHERS,
1101      SSL_ALL_STRENGTHS},
1102     /* Cipher 86 */
1103     {
1104      0,                         /* not implemented (non-ephemeral DH) */
1105      TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1106      TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1107      SSL_kDHr | SSL_aDH | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
1108      SSL_NOT_EXP | SSL_HIGH,
1109      0,
1110      256,
1111      256,
1112      SSL_ALL_CIPHERS,
1113      SSL_ALL_STRENGTHS},
1114     /* Cipher 87 */
1115     {
1116      1,
1117      TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1118      TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1119      SSL_kEDH | SSL_aDSS | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
1120      SSL_NOT_EXP | SSL_HIGH,
1121      0,
1122      256,
1123      256,
1124      SSL_ALL_CIPHERS,
1125      SSL_ALL_STRENGTHS},
1126     /* Cipher 88 */
1127     {
1128      1,
1129      TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1130      TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1131      SSL_kEDH | SSL_aRSA | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
1132      SSL_NOT_EXP | SSL_HIGH,
1133      0,
1134      256,
1135      256,
1136      SSL_ALL_CIPHERS,
1137      SSL_ALL_STRENGTHS},
1138     /* Cipher 89 */
1139     {
1140      1,
1141      TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
1142      TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
1143      SSL_kEDH | SSL_aNULL | SSL_CAMELLIA | SSL_SHA | SSL_TLSV1,
1144      SSL_NOT_EXP | SSL_HIGH,
1145      0,
1146      256,
1147      256,
1148      SSL_ALL_CIPHERS,
1149      SSL_ALL_STRENGTHS},
1150 #endif                          /* OPENSSL_NO_CAMELLIA */
1151
1152 #ifndef OPENSSL_NO_SEED
1153     /* SEED ciphersuites from RFC4162 */
1154
1155     /* Cipher 96 */
1156     {
1157      1,
1158      TLS1_TXT_RSA_WITH_SEED_SHA,
1159      TLS1_CK_RSA_WITH_SEED_SHA,
1160      SSL_kRSA | SSL_aRSA | SSL_SEED | SSL_SHA1 | SSL_TLSV1,
1161      SSL_NOT_EXP | SSL_MEDIUM,
1162      0,
1163      128,
1164      128,
1165      SSL_ALL_CIPHERS,
1166      SSL_ALL_STRENGTHS,
1167      },
1168
1169     /* Cipher 97 */
1170     {
1171      0,                         /* not implemented (non-ephemeral DH) */
1172      TLS1_TXT_DH_DSS_WITH_SEED_SHA,
1173      TLS1_CK_DH_DSS_WITH_SEED_SHA,
1174      SSL_kDHd | SSL_aDH | SSL_SEED | SSL_SHA1 | SSL_TLSV1,
1175      SSL_NOT_EXP | SSL_MEDIUM,
1176      0,
1177      128,
1178      128,
1179      SSL_ALL_CIPHERS,
1180      SSL_ALL_STRENGTHS,
1181      },
1182
1183     /* Cipher 98 */
1184     {
1185      0,                         /* not implemented (non-ephemeral DH) */
1186      TLS1_TXT_DH_RSA_WITH_SEED_SHA,
1187      TLS1_CK_DH_RSA_WITH_SEED_SHA,
1188      SSL_kDHr | SSL_aDH | SSL_SEED | SSL_SHA1 | SSL_TLSV1,
1189      SSL_NOT_EXP | SSL_MEDIUM,
1190      0,
1191      128,
1192      128,
1193      SSL_ALL_CIPHERS,
1194      SSL_ALL_STRENGTHS,
1195      },
1196
1197     /* Cipher 99 */
1198     {
1199      1,
1200      TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
1201      TLS1_CK_DHE_DSS_WITH_SEED_SHA,
1202      SSL_kEDH | SSL_aDSS | SSL_SEED | SSL_SHA1 | SSL_TLSV1,
1203      SSL_NOT_EXP | SSL_MEDIUM,
1204      0,
1205      128,
1206      128,
1207      SSL_ALL_CIPHERS,
1208      SSL_ALL_STRENGTHS,
1209      },
1210
1211     /* Cipher 9A */
1212     {
1213      1,
1214      TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
1215      TLS1_CK_DHE_RSA_WITH_SEED_SHA,
1216      SSL_kEDH | SSL_aRSA | SSL_SEED | SSL_SHA1 | SSL_TLSV1,
1217      SSL_NOT_EXP | SSL_MEDIUM,
1218      0,
1219      128,
1220      128,
1221      SSL_ALL_CIPHERS,
1222      SSL_ALL_STRENGTHS,
1223      },
1224
1225     /* Cipher 9B */
1226     {
1227      1,
1228      TLS1_TXT_ADH_WITH_SEED_SHA,
1229      TLS1_CK_ADH_WITH_SEED_SHA,
1230      SSL_kEDH | SSL_aNULL | SSL_SEED | SSL_SHA1 | SSL_TLSV1,
1231      SSL_NOT_EXP | SSL_MEDIUM,
1232      0,
1233      128,
1234      128,
1235      SSL_ALL_CIPHERS,
1236      SSL_ALL_STRENGTHS,
1237      },
1238
1239 #endif                          /* OPENSSL_NO_SEED */
1240
1241 #ifndef OPENSSL_NO_ECDH
1242     /* Cipher C001 */
1243     {
1244      1,
1245      TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
1246      TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
1247      SSL_kECDH | SSL_aECDSA | SSL_eNULL | SSL_SHA | SSL_TLSV1,
1248      SSL_NOT_EXP,
1249      0,
1250      0,
1251      0,
1252      SSL_ALL_CIPHERS,
1253      SSL_ALL_STRENGTHS,
1254      },
1255
1256     /* Cipher C002 */
1257     {
1258      1,
1259      TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
1260      TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
1261      SSL_kECDH | SSL_aECDSA | SSL_RC4 | SSL_SHA | SSL_TLSV1,
1262      SSL_NOT_EXP,
1263      0,
1264      128,
1265      128,
1266      SSL_ALL_CIPHERS,
1267      SSL_ALL_STRENGTHS,
1268      },
1269
1270     /* Cipher C003 */
1271     {
1272      1,
1273      TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
1274      TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
1275      SSL_kECDH | SSL_aECDSA | SSL_3DES | SSL_SHA | SSL_TLSV1,
1276      SSL_NOT_EXP | SSL_HIGH,
1277      0,
1278      168,
1279      168,
1280      SSL_ALL_CIPHERS,
1281      SSL_ALL_STRENGTHS,
1282      },
1283
1284     /* Cipher C004 */
1285     {
1286      1,
1287      TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1288      TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1289      SSL_kECDH | SSL_aECDSA | SSL_AES | SSL_SHA | SSL_TLSV1,
1290      SSL_NOT_EXP | SSL_HIGH,
1291      0,
1292      128,
1293      128,
1294      SSL_ALL_CIPHERS,
1295      SSL_ALL_STRENGTHS,
1296      },
1297
1298     /* Cipher C005 */
1299     {
1300      1,
1301      TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
1302      TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
1303      SSL_kECDH | SSL_aECDSA | SSL_AES | SSL_SHA | SSL_TLSV1,
1304      SSL_NOT_EXP | SSL_HIGH,
1305      0,
1306      256,
1307      256,
1308      SSL_ALL_CIPHERS,
1309      SSL_ALL_STRENGTHS,
1310      },
1311
1312     /* Cipher C006 */
1313     {
1314      1,
1315      TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
1316      TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
1317      SSL_kECDHE | SSL_aECDSA | SSL_eNULL | SSL_SHA | SSL_TLSV1,
1318      SSL_NOT_EXP,
1319      0,
1320      0,
1321      0,
1322      SSL_ALL_CIPHERS,
1323      SSL_ALL_STRENGTHS,
1324      },
1325
1326     /* Cipher C007 */
1327     {
1328      1,
1329      TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
1330      TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
1331      SSL_kECDHE | SSL_aECDSA | SSL_RC4 | SSL_SHA | SSL_TLSV1,
1332      SSL_NOT_EXP,
1333      0,
1334      128,
1335      128,
1336      SSL_ALL_CIPHERS,
1337      SSL_ALL_STRENGTHS,
1338      },
1339
1340     /* Cipher C008 */
1341     {
1342      1,
1343      TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
1344      TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
1345      SSL_kECDHE | SSL_aECDSA | SSL_3DES | SSL_SHA | SSL_TLSV1,
1346      SSL_NOT_EXP | SSL_HIGH,
1347      0,
1348      168,
1349      168,
1350      SSL_ALL_CIPHERS,
1351      SSL_ALL_STRENGTHS,
1352      },
1353
1354     /* Cipher C009 */
1355     {
1356      1,
1357      TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
1358      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
1359      SSL_kECDHE | SSL_aECDSA | SSL_AES | SSL_SHA | SSL_TLSV1,
1360      SSL_NOT_EXP | SSL_HIGH,
1361      0,
1362      128,
1363      128,
1364      SSL_ALL_CIPHERS,
1365      SSL_ALL_STRENGTHS,
1366      },
1367
1368     /* Cipher C00A */
1369     {
1370      1,
1371      TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1372      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1373      SSL_kECDHE | SSL_aECDSA | SSL_AES | SSL_SHA | SSL_TLSV1,
1374      SSL_NOT_EXP | SSL_HIGH,
1375      0,
1376      256,
1377      256,
1378      SSL_ALL_CIPHERS,
1379      SSL_ALL_STRENGTHS,
1380      },
1381
1382     /* Cipher C00B */
1383     {
1384      1,
1385      TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
1386      TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
1387      SSL_kECDH | SSL_aRSA | SSL_eNULL | SSL_SHA | SSL_TLSV1,
1388      SSL_NOT_EXP,
1389      0,
1390      0,
1391      0,
1392      SSL_ALL_CIPHERS,
1393      SSL_ALL_STRENGTHS,
1394      },
1395
1396     /* Cipher C00C */
1397     {
1398      1,
1399      TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
1400      TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
1401      SSL_kECDH | SSL_aRSA | SSL_RC4 | SSL_SHA | SSL_TLSV1,
1402      SSL_NOT_EXP,
1403      0,
1404      128,
1405      128,
1406      SSL_ALL_CIPHERS,
1407      SSL_ALL_STRENGTHS,
1408      },
1409
1410     /* Cipher C00D */
1411     {
1412      1,
1413      TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
1414      TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
1415      SSL_kECDH | SSL_aRSA | SSL_3DES | SSL_SHA | SSL_TLSV1,
1416      SSL_NOT_EXP | SSL_HIGH,
1417      0,
1418      168,
1419      168,
1420      SSL_ALL_CIPHERS,
1421      SSL_ALL_STRENGTHS,
1422      },
1423
1424     /* Cipher C00E */
1425     {
1426      1,
1427      TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
1428      TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
1429      SSL_kECDH | SSL_aRSA | SSL_AES | SSL_SHA | SSL_TLSV1,
1430      SSL_NOT_EXP | SSL_HIGH,
1431      0,
1432      128,
1433      128,
1434      SSL_ALL_CIPHERS,
1435      SSL_ALL_STRENGTHS,
1436      },
1437
1438     /* Cipher C00F */
1439     {
1440      1,
1441      TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
1442      TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
1443      SSL_kECDH | SSL_aRSA | SSL_AES | SSL_SHA | SSL_TLSV1,
1444      SSL_NOT_EXP | SSL_HIGH,
1445      0,
1446      256,
1447      256,
1448      SSL_ALL_CIPHERS,
1449      SSL_ALL_STRENGTHS,
1450      },
1451
1452     /* Cipher C010 */
1453     {
1454      1,
1455      TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
1456      TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
1457      SSL_kECDHE | SSL_aRSA | SSL_eNULL | SSL_SHA | SSL_TLSV1,
1458      SSL_NOT_EXP,
1459      0,
1460      0,
1461      0,
1462      SSL_ALL_CIPHERS,
1463      SSL_ALL_STRENGTHS,
1464      },
1465
1466     /* Cipher C011 */
1467     {
1468      1,
1469      TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
1470      TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
1471      SSL_kECDHE | SSL_aRSA | SSL_RC4 | SSL_SHA | SSL_TLSV1,
1472      SSL_NOT_EXP,
1473      0,
1474      128,
1475      128,
1476      SSL_ALL_CIPHERS,
1477      SSL_ALL_STRENGTHS,
1478      },
1479
1480     /* Cipher C012 */
1481     {
1482      1,
1483      TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1484      TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1485      SSL_kECDHE | SSL_aRSA | SSL_3DES | SSL_SHA | SSL_TLSV1,
1486      SSL_NOT_EXP | SSL_HIGH,
1487      0,
1488      168,
1489      168,
1490      SSL_ALL_CIPHERS,
1491      SSL_ALL_STRENGTHS,
1492      },
1493
1494     /* Cipher C013 */
1495     {
1496      1,
1497      TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1498      TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1499      SSL_kECDHE | SSL_aRSA | SSL_AES | SSL_SHA | SSL_TLSV1,
1500      SSL_NOT_EXP | SSL_HIGH,
1501      0,
1502      128,
1503      128,
1504      SSL_ALL_CIPHERS,
1505      SSL_ALL_STRENGTHS,
1506      },
1507
1508     /* Cipher C014 */
1509     {
1510      1,
1511      TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1512      TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1513      SSL_kECDHE | SSL_aRSA | SSL_AES | SSL_SHA | SSL_TLSV1,
1514      SSL_NOT_EXP | SSL_HIGH,
1515      0,
1516      256,
1517      256,
1518      SSL_ALL_CIPHERS,
1519      SSL_ALL_STRENGTHS,
1520      },
1521
1522     /* Cipher C015 */
1523     {
1524      1,
1525      TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
1526      TLS1_CK_ECDH_anon_WITH_NULL_SHA,
1527      SSL_kECDHE | SSL_aNULL | SSL_eNULL | SSL_SHA | SSL_TLSV1,
1528      SSL_NOT_EXP,
1529      0,
1530      0,
1531      0,
1532      SSL_ALL_CIPHERS,
1533      SSL_ALL_STRENGTHS,
1534      },
1535
1536     /* Cipher C016 */
1537     {
1538      1,
1539      TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
1540      TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
1541      SSL_kECDHE | SSL_aNULL | SSL_RC4 | SSL_SHA | SSL_TLSV1,
1542      SSL_NOT_EXP,
1543      0,
1544      128,
1545      128,
1546      SSL_ALL_CIPHERS,
1547      SSL_ALL_STRENGTHS,
1548      },
1549
1550     /* Cipher C017 */
1551     {
1552      1,
1553      TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
1554      TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
1555      SSL_kECDHE | SSL_aNULL | SSL_3DES | SSL_SHA | SSL_TLSV1,
1556      SSL_NOT_EXP | SSL_HIGH,
1557      0,
1558      168,
1559      168,
1560      SSL_ALL_CIPHERS,
1561      SSL_ALL_STRENGTHS,
1562      },
1563
1564     /* Cipher C018 */
1565     {
1566      1,
1567      TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
1568      TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
1569      SSL_kECDHE | SSL_aNULL | SSL_AES | SSL_SHA | SSL_TLSV1,
1570      SSL_NOT_EXP | SSL_HIGH,
1571      0,
1572      128,
1573      128,
1574      SSL_ALL_CIPHERS,
1575      SSL_ALL_STRENGTHS,
1576      },
1577
1578     /* Cipher C019 */
1579     {
1580      1,
1581      TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
1582      TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
1583      SSL_kECDHE | SSL_aNULL | SSL_AES | SSL_SHA | SSL_TLSV1,
1584      SSL_NOT_EXP | SSL_HIGH,
1585      0,
1586      256,
1587      256,
1588      SSL_ALL_CIPHERS,
1589      SSL_ALL_STRENGTHS,
1590      },
1591 #endif                          /* OPENSSL_NO_ECDH */
1592
1593 /* end of list */
1594 };
1595
1596 SSL3_ENC_METHOD SSLv3_enc_data = {
1597     ssl3_enc,
1598     ssl3_mac,
1599     ssl3_setup_key_block,
1600     ssl3_generate_master_secret,
1601     ssl3_change_cipher_state,
1602     ssl3_final_finish_mac,
1603     MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH,
1604     ssl3_cert_verify_mac,
1605     SSL3_MD_CLIENT_FINISHED_CONST, 4,
1606     SSL3_MD_SERVER_FINISHED_CONST, 4,
1607     ssl3_alert_code,
1608 };
1609
1610 long ssl3_default_timeout(void)
1611 {
1612     /*
1613      * 2 hours, the 24 hours mentioned in the SSLv3 spec is way too long for
1614      * http, the cache would over fill
1615      */
1616     return (60 * 60 * 2);
1617 }
1618
1619 IMPLEMENT_ssl3_meth_func(sslv3_base_method,
1620                          ssl_undefined_function,
1621                          ssl_undefined_function, ssl_bad_method)
1622
1623 int ssl3_num_ciphers(void)
1624 {
1625     return (SSL3_NUM_CIPHERS);
1626 }
1627
1628 SSL_CIPHER *ssl3_get_cipher(unsigned int u)
1629 {
1630     if (u < SSL3_NUM_CIPHERS)
1631         return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]));
1632     else
1633         return (NULL);
1634 }
1635
1636 int ssl3_pending(const SSL *s)
1637 {
1638     if (s->rstate == SSL_ST_READ_BODY)
1639         return 0;
1640
1641     return (s->s3->rrec.type ==
1642             SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
1643 }
1644
1645 int ssl3_new(SSL *s)
1646 {
1647     SSL3_STATE *s3;
1648
1649     if ((s3 = OPENSSL_malloc(sizeof *s3)) == NULL)
1650         goto err;
1651     memset(s3, 0, sizeof *s3);
1652     EVP_MD_CTX_init(&s3->finish_dgst1);
1653     EVP_MD_CTX_init(&s3->finish_dgst2);
1654     pq_64bit_init(&(s3->rrec.seq_num));
1655     pq_64bit_init(&(s3->wrec.seq_num));
1656
1657     s->s3 = s3;
1658
1659     s->method->ssl_clear(s);
1660     return (1);
1661  err:
1662     return (0);
1663 }
1664
1665 void ssl3_free(SSL *s)
1666 {
1667     if (s == NULL)
1668         return;
1669
1670     ssl3_cleanup_key_block(s);
1671     if (s->s3->rbuf.buf != NULL)
1672         OPENSSL_free(s->s3->rbuf.buf);
1673     if (s->s3->wbuf.buf != NULL)
1674         OPENSSL_free(s->s3->wbuf.buf);
1675     if (s->s3->rrec.comp != NULL)
1676         OPENSSL_free(s->s3->rrec.comp);
1677 #ifndef OPENSSL_NO_DH
1678     if (s->s3->tmp.dh != NULL)
1679         DH_free(s->s3->tmp.dh);
1680 #endif
1681 #ifndef OPENSSL_NO_ECDH
1682     if (s->s3->tmp.ecdh != NULL)
1683         EC_KEY_free(s->s3->tmp.ecdh);
1684 #endif
1685
1686     if (s->s3->tmp.ca_names != NULL)
1687         sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free);
1688     EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
1689     EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
1690     pq_64bit_free(&(s->s3->rrec.seq_num));
1691     pq_64bit_free(&(s->s3->wrec.seq_num));
1692
1693     OPENSSL_cleanse(s->s3, sizeof *s->s3);
1694     OPENSSL_free(s->s3);
1695     s->s3 = NULL;
1696 }
1697
1698 void ssl3_clear(SSL *s)
1699 {
1700     unsigned char *rp, *wp;
1701     size_t rlen, wlen;
1702
1703     ssl3_cleanup_key_block(s);
1704     if (s->s3->tmp.ca_names != NULL)
1705         sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free);
1706
1707     if (s->s3->rrec.comp != NULL) {
1708         OPENSSL_free(s->s3->rrec.comp);
1709         s->s3->rrec.comp = NULL;
1710     }
1711 #ifndef OPENSSL_NO_DH
1712     if (s->s3->tmp.dh != NULL) {
1713         DH_free(s->s3->tmp.dh);
1714         s->s3->tmp.dh = NULL;
1715     }
1716 #endif
1717 #ifndef OPENSSL_NO_ECDH
1718     if (s->s3->tmp.ecdh != NULL) {
1719         EC_KEY_free(s->s3->tmp.ecdh);
1720         s->s3->tmp.ecdh = NULL;
1721     }
1722 #endif
1723 #ifndef OPENSSL_NO_TLSEXT
1724 # ifndef OPENSSL_NO_EC
1725     s->s3->is_probably_safari = 0;
1726 # endif                         /* !OPENSSL_NO_EC */
1727 #endif                          /* !OPENSSL_NO_TLSEXT */
1728
1729     rp = s->s3->rbuf.buf;
1730     wp = s->s3->wbuf.buf;
1731     rlen = s->s3->rbuf.len;
1732     wlen = s->s3->wbuf.len;
1733
1734     EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
1735     EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
1736
1737     memset(s->s3, 0, sizeof *s->s3);
1738     s->s3->rbuf.buf = rp;
1739     s->s3->wbuf.buf = wp;
1740     s->s3->rbuf.len = rlen;
1741     s->s3->wbuf.len = wlen;
1742
1743     ssl_free_wbio_buffer(s);
1744
1745     s->packet_length = 0;
1746     s->s3->renegotiate = 0;
1747     s->s3->total_renegotiations = 0;
1748     s->s3->num_renegotiations = 0;
1749     s->s3->in_read_app_data = 0;
1750     s->version = SSL3_VERSION;
1751 }
1752
1753 long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
1754 {
1755     int ret = 0;
1756
1757 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
1758     if (
1759 # ifndef OPENSSL_NO_RSA
1760            cmd == SSL_CTRL_SET_TMP_RSA || cmd == SSL_CTRL_SET_TMP_RSA_CB ||
1761 # endif
1762 # ifndef OPENSSL_NO_DSA
1763            cmd == SSL_CTRL_SET_TMP_DH || cmd == SSL_CTRL_SET_TMP_DH_CB ||
1764 # endif
1765            0) {
1766         if (!ssl_cert_inst(&s->cert)) {
1767             SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
1768             return (0);
1769         }
1770     }
1771 #endif
1772
1773     switch (cmd) {
1774     case SSL_CTRL_GET_SESSION_REUSED:
1775         ret = s->hit;
1776         break;
1777     case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
1778         break;
1779     case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
1780         ret = s->s3->num_renegotiations;
1781         break;
1782     case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
1783         ret = s->s3->num_renegotiations;
1784         s->s3->num_renegotiations = 0;
1785         break;
1786     case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
1787         ret = s->s3->total_renegotiations;
1788         break;
1789     case SSL_CTRL_GET_FLAGS:
1790         ret = (int)(s->s3->flags);
1791         break;
1792 #ifndef OPENSSL_NO_RSA
1793     case SSL_CTRL_NEED_TMP_RSA:
1794         if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
1795             ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
1796              (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) >
1797               (512 / 8))))
1798             ret = 1;
1799         break;
1800     case SSL_CTRL_SET_TMP_RSA:
1801         {
1802             RSA *rsa = (RSA *)parg;
1803             if (rsa == NULL) {
1804                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
1805                 return (ret);
1806             }
1807             if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) {
1808                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
1809                 return (ret);
1810             }
1811             if (s->cert->rsa_tmp != NULL)
1812                 RSA_free(s->cert->rsa_tmp);
1813             s->cert->rsa_tmp = rsa;
1814             ret = 1;
1815         }
1816         break;
1817     case SSL_CTRL_SET_TMP_RSA_CB:
1818         {
1819             SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1820             return (ret);
1821         }
1822         break;
1823 #endif
1824 #ifndef OPENSSL_NO_DH
1825     case SSL_CTRL_SET_TMP_DH:
1826         {
1827             DH *dh = (DH *)parg;
1828             if (dh == NULL) {
1829                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
1830                 return (ret);
1831             }
1832             if ((dh = DHparams_dup(dh)) == NULL) {
1833                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
1834                 return (ret);
1835             }
1836             if (!(s->options & SSL_OP_SINGLE_DH_USE)) {
1837                 if (!DH_generate_key(dh)) {
1838                     DH_free(dh);
1839                     SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
1840                     return (ret);
1841                 }
1842             }
1843             if (s->cert->dh_tmp != NULL)
1844                 DH_free(s->cert->dh_tmp);
1845             s->cert->dh_tmp = dh;
1846             ret = 1;
1847         }
1848         break;
1849     case SSL_CTRL_SET_TMP_DH_CB:
1850         {
1851             SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1852             return (ret);
1853         }
1854         break;
1855 #endif
1856 #ifndef OPENSSL_NO_ECDH
1857     case SSL_CTRL_SET_TMP_ECDH:
1858         {
1859             EC_KEY *ecdh = NULL;
1860
1861             if (parg == NULL) {
1862                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
1863                 return (ret);
1864             }
1865             if (!EC_KEY_up_ref((EC_KEY *)parg)) {
1866                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB);
1867                 return (ret);
1868             }
1869             ecdh = (EC_KEY *)parg;
1870             if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) {
1871                 if (!EC_KEY_generate_key(ecdh)) {
1872                     EC_KEY_free(ecdh);
1873                     SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB);
1874                     return (ret);
1875                 }
1876             }
1877             if (s->cert->ecdh_tmp != NULL)
1878                 EC_KEY_free(s->cert->ecdh_tmp);
1879             s->cert->ecdh_tmp = ecdh;
1880             ret = 1;
1881         }
1882         break;
1883     case SSL_CTRL_SET_TMP_ECDH_CB:
1884         {
1885             SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1886             return (ret);
1887         }
1888         break;
1889 #endif                          /* !OPENSSL_NO_ECDH */
1890 #ifndef OPENSSL_NO_TLSEXT
1891     case SSL_CTRL_SET_TLSEXT_HOSTNAME:
1892         if (larg == TLSEXT_NAMETYPE_host_name) {
1893             if (s->tlsext_hostname != NULL)
1894                 OPENSSL_free(s->tlsext_hostname);
1895             s->tlsext_hostname = NULL;
1896
1897             ret = 1;
1898             if (parg == NULL)
1899                 break;
1900             if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) {
1901                 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
1902                 return 0;
1903             }
1904             if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) {
1905                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
1906                 return 0;
1907             }
1908         } else {
1909             SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
1910             return 0;
1911         }
1912         break;
1913     case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
1914         s->tlsext_debug_arg = parg;
1915         ret = 1;
1916         break;
1917
1918     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
1919         s->tlsext_status_type = larg;
1920         ret = 1;
1921         break;
1922
1923     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
1924         *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
1925         ret = 1;
1926         break;
1927
1928     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
1929         s->tlsext_ocsp_exts = parg;
1930         ret = 1;
1931         break;
1932
1933     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
1934         *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
1935         ret = 1;
1936         break;
1937
1938     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
1939         s->tlsext_ocsp_ids = parg;
1940         ret = 1;
1941         break;
1942
1943     case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
1944         *(unsigned char **)parg = s->tlsext_ocsp_resp;
1945         return s->tlsext_ocsp_resplen;
1946
1947     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
1948         if (s->tlsext_ocsp_resp)
1949             OPENSSL_free(s->tlsext_ocsp_resp);
1950         s->tlsext_ocsp_resp = parg;
1951         s->tlsext_ocsp_resplen = larg;
1952         ret = 1;
1953         break;
1954
1955 #endif                          /* !OPENSSL_NO_TLSEXT */
1956
1957     case SSL_CTRL_CHECK_PROTO_VERSION:
1958         /*
1959          * For library-internal use; checks that the current protocol is the
1960          * highest enabled version (according to s->ctx->method, as version
1961          * negotiation may have changed s->method).
1962          */
1963         if (s->version == s->ctx->method->version)
1964             return 1;
1965         /*
1966          * Apparently we're using a version-flexible SSL_METHOD (not at its
1967          * highest protocol version).
1968          */
1969         if (s->ctx->method->version == SSLv23_method()->version) {
1970 #if TLS_MAX_VERSION != TLS1_VERSION
1971 # error Code needs update for SSLv23_method() support beyond TLS1_VERSION.
1972 #endif
1973             if (!(s->options & SSL_OP_NO_TLSv1))
1974                 return s->version == TLS1_VERSION;
1975             if (!(s->options & SSL_OP_NO_SSLv3))
1976                 return s->version == SSL3_VERSION;
1977             if (!(s->options & SSL_OP_NO_SSLv2))
1978                 return s->version == SSL2_VERSION;
1979         }
1980         return 0;               /* Unexpected state; fail closed. */
1981
1982     default:
1983         break;
1984     }
1985     return (ret);
1986 }
1987
1988 long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
1989 {
1990     int ret = 0;
1991
1992 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
1993     if (
1994 # ifndef OPENSSL_NO_RSA
1995            cmd == SSL_CTRL_SET_TMP_RSA_CB ||
1996 # endif
1997 # ifndef OPENSSL_NO_DSA
1998            cmd == SSL_CTRL_SET_TMP_DH_CB ||
1999 # endif
2000            0) {
2001         if (!ssl_cert_inst(&s->cert)) {
2002             SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
2003             return (0);
2004         }
2005     }
2006 #endif
2007
2008     switch (cmd) {
2009 #ifndef OPENSSL_NO_RSA
2010     case SSL_CTRL_SET_TMP_RSA_CB:
2011         {
2012             s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
2013         }
2014         break;
2015 #endif
2016 #ifndef OPENSSL_NO_DH
2017     case SSL_CTRL_SET_TMP_DH_CB:
2018         {
2019             s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
2020         }
2021         break;
2022 #endif
2023 #ifndef OPENSSL_NO_ECDH
2024     case SSL_CTRL_SET_TMP_ECDH_CB:
2025         {
2026             s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
2027         }
2028         break;
2029 #endif
2030 #ifndef OPENSSL_NO_TLSEXT
2031     case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
2032         s->tlsext_debug_cb = (void (*)(SSL *, int, int,
2033                                        unsigned char *, int, void *))fp;
2034         break;
2035 #endif
2036     default:
2037         break;
2038     }
2039     return (ret);
2040 }
2041
2042 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2043 {
2044     CERT *cert;
2045
2046     cert = ctx->cert;
2047
2048     switch (cmd) {
2049 #ifndef OPENSSL_NO_RSA
2050     case SSL_CTRL_NEED_TMP_RSA:
2051         if ((cert->rsa_tmp == NULL) &&
2052             ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
2053              (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) >
2054               (512 / 8)))
2055             )
2056             return (1);
2057         else
2058             return (0);
2059         /* break; */
2060     case SSL_CTRL_SET_TMP_RSA:
2061         {
2062             RSA *rsa;
2063             int i;
2064
2065             rsa = (RSA *)parg;
2066             i = 1;
2067             if (rsa == NULL)
2068                 i = 0;
2069             else {
2070                 if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
2071                     i = 0;
2072             }
2073             if (!i) {
2074                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_RSA_LIB);
2075                 return (0);
2076             } else {
2077                 if (cert->rsa_tmp != NULL)
2078                     RSA_free(cert->rsa_tmp);
2079                 cert->rsa_tmp = rsa;
2080                 return (1);
2081             }
2082         }
2083         /* break; */
2084     case SSL_CTRL_SET_TMP_RSA_CB:
2085         {
2086             SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2087             return (0);
2088         }
2089         break;
2090 #endif
2091 #ifndef OPENSSL_NO_DH
2092     case SSL_CTRL_SET_TMP_DH:
2093         {
2094             DH *new = NULL, *dh;
2095
2096             dh = (DH *)parg;
2097             if ((new = DHparams_dup(dh)) == NULL) {
2098                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB);
2099                 return 0;
2100             }
2101             if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) {
2102                 if (!DH_generate_key(new)) {
2103                     SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB);
2104                     DH_free(new);
2105                     return 0;
2106                 }
2107             }
2108             if (cert->dh_tmp != NULL)
2109                 DH_free(cert->dh_tmp);
2110             cert->dh_tmp = new;
2111             return 1;
2112         }
2113         /*
2114          * break;
2115          */
2116     case SSL_CTRL_SET_TMP_DH_CB:
2117         {
2118             SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2119             return (0);
2120         }
2121         break;
2122 #endif
2123 #ifndef OPENSSL_NO_ECDH
2124     case SSL_CTRL_SET_TMP_ECDH:
2125         {
2126             EC_KEY *ecdh = NULL;
2127
2128             if (parg == NULL) {
2129                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB);
2130                 return 0;
2131             }
2132             ecdh = EC_KEY_dup((EC_KEY *)parg);
2133             if (ecdh == NULL) {
2134                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_EC_LIB);
2135                 return 0;
2136             }
2137             if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) {
2138                 if (!EC_KEY_generate_key(ecdh)) {
2139                     EC_KEY_free(ecdh);
2140                     SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB);
2141                     return 0;
2142                 }
2143             }
2144
2145             if (cert->ecdh_tmp != NULL) {
2146                 EC_KEY_free(cert->ecdh_tmp);
2147             }
2148             cert->ecdh_tmp = ecdh;
2149             return 1;
2150         }
2151         /* break; */
2152     case SSL_CTRL_SET_TMP_ECDH_CB:
2153         {
2154             SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2155             return (0);
2156         }
2157         break;
2158 #endif                          /* !OPENSSL_NO_ECDH */
2159 #ifndef OPENSSL_NO_TLSEXT
2160     case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
2161         ctx->tlsext_servername_arg = parg;
2162         break;
2163     case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
2164     case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
2165         {
2166             unsigned char *keys = parg;
2167             if (!keys)
2168                 return 48;
2169             if (larg != 48) {
2170                 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
2171                 return 0;
2172             }
2173             if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) {
2174                 memcpy(ctx->tlsext_tick_key_name, keys, 16);
2175                 memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
2176                 memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
2177             } else {
2178                 memcpy(keys, ctx->tlsext_tick_key_name, 16);
2179                 memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
2180                 memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
2181             }
2182             return 1;
2183         }
2184
2185     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
2186         ctx->tlsext_status_arg = parg;
2187         return 1;
2188         break;
2189
2190 #endif                          /* !OPENSSL_NO_TLSEXT */
2191         /* A Thawte special :-) */
2192     case SSL_CTRL_EXTRA_CHAIN_CERT:
2193         if (ctx->extra_certs == NULL) {
2194             if ((ctx->extra_certs = sk_X509_new_null()) == NULL)
2195                 return (0);
2196         }
2197         sk_X509_push(ctx->extra_certs, (X509 *)parg);
2198         break;
2199
2200     default:
2201         return (0);
2202     }
2203     return (1);
2204 }
2205
2206 long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
2207 {
2208     CERT *cert;
2209
2210     cert = ctx->cert;
2211
2212     switch (cmd) {
2213 #ifndef OPENSSL_NO_RSA
2214     case SSL_CTRL_SET_TMP_RSA_CB:
2215         {
2216             cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
2217         }
2218         break;
2219 #endif
2220 #ifndef OPENSSL_NO_DH
2221     case SSL_CTRL_SET_TMP_DH_CB:
2222         {
2223             cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
2224         }
2225         break;
2226 #endif
2227 #ifndef OPENSSL_NO_ECDH
2228     case SSL_CTRL_SET_TMP_ECDH_CB:
2229         {
2230             cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
2231         }
2232         break;
2233 #endif
2234 #ifndef OPENSSL_NO_TLSEXT
2235     case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
2236         ctx->tlsext_servername_callback = (int (*)(SSL *, int *, void *))fp;
2237         break;
2238
2239     case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
2240         ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp;
2241         break;
2242
2243     case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
2244         ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *,
2245                                              unsigned char *,
2246                                              EVP_CIPHER_CTX *,
2247                                              HMAC_CTX *, int))fp;
2248         break;
2249
2250 #endif
2251
2252     default:
2253         return (0);
2254     }
2255     return (1);
2256 }
2257
2258 /*
2259  * This function needs to check if the ciphers required are actually
2260  * available
2261  */
2262 SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
2263 {
2264     SSL_CIPHER c, *cp;
2265     unsigned long id;
2266
2267     id = 0x03000000L | ((unsigned long)p[0] << 8L) | (unsigned long)p[1];
2268     c.id = id;
2269     cp = (SSL_CIPHER *)OBJ_bsearch((char *)&c,
2270                                    (char *)ssl3_ciphers,
2271                                    SSL3_NUM_CIPHERS, sizeof(SSL_CIPHER),
2272                                    FP_ICC ssl_cipher_id_cmp);
2273     if (cp == NULL || cp->valid == 0)
2274         return NULL;
2275     else
2276         return cp;
2277 }
2278
2279 int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
2280 {
2281     long l;
2282
2283     if (p != NULL) {
2284         l = c->id;
2285         if ((l & 0xff000000) != 0x03000000)
2286             return (0);
2287         p[0] = ((unsigned char)(l >> 8L)) & 0xFF;
2288         p[1] = ((unsigned char)(l)) & 0xFF;
2289     }
2290     return (2);
2291 }
2292
2293 SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
2294                                STACK_OF(SSL_CIPHER) *srvr)
2295 {
2296     SSL_CIPHER *c, *ret = NULL;
2297     STACK_OF(SSL_CIPHER) *prio, *allow;
2298     int i, j, ok;
2299
2300     CERT *cert;
2301     unsigned long alg, mask, emask;
2302
2303     /* Let's see which ciphers we can support */
2304     cert = s->cert;
2305
2306 #if 0
2307     /*
2308      * Do not set the compare functions, because this may lead to a
2309      * reordering by "id". We want to keep the original ordering. We may pay
2310      * a price in performance during sk_SSL_CIPHER_find(), but would have to
2311      * pay with the price of sk_SSL_CIPHER_dup().
2312      */
2313     sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
2314     sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
2315 #endif
2316
2317 #ifdef CIPHER_DEBUG
2318     printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), srvr);
2319     for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) {
2320         c = sk_SSL_CIPHER_value(srvr, i);
2321         printf("%p:%s\n", c, c->name);
2322     }
2323     printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), clnt);
2324     for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) {
2325         c = sk_SSL_CIPHER_value(clnt, i);
2326         printf("%p:%s\n", c, c->name);
2327     }
2328 #endif
2329
2330     if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
2331         prio = srvr;
2332         allow = clnt;
2333     } else {
2334         prio = clnt;
2335         allow = srvr;
2336     }
2337
2338     for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
2339         c = sk_SSL_CIPHER_value(prio, i);
2340
2341         ssl_set_cert_masks(cert, c);
2342         mask = cert->mask;
2343         emask = cert->export_mask;
2344
2345 #ifdef KSSL_DEBUG
2346         printf("ssl3_choose_cipher %d alg= %lx\n", i, c->algorithms);
2347 #endif                          /* KSSL_DEBUG */
2348
2349         alg = c->algorithms & (SSL_MKEY_MASK | SSL_AUTH_MASK);
2350 #ifndef OPENSSL_NO_KRB5
2351         if (alg & SSL_KRB5) {
2352             if (!kssl_keytab_is_available(s->kssl_ctx))
2353                 continue;
2354         }
2355 #endif                          /* OPENSSL_NO_KRB5 */
2356         if (SSL_C_IS_EXPORT(c)) {
2357             ok = ((alg & emask) == alg) ? 1 : 0;
2358 #ifdef CIPHER_DEBUG
2359             printf("%d:[%08lX:%08lX]%p:%s (export)\n", ok, alg, emask,
2360                    c, c->name);
2361 #endif
2362         } else {
2363             ok = ((alg & mask) == alg) ? 1 : 0;
2364 #ifdef CIPHER_DEBUG
2365             printf("%d:[%08lX:%08lX]%p:%s\n", ok, alg, mask, c, c->name);
2366 #endif
2367         }
2368
2369         if (!ok)
2370             continue;
2371         j = sk_SSL_CIPHER_find(allow, c);
2372         if (j >= 0) {
2373 #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT)
2374             if ((alg & SSL_kECDHE) && (alg & SSL_aECDSA)
2375                 && s->s3->is_probably_safari) {
2376                 if (!ret)
2377                     ret = sk_SSL_CIPHER_value(allow, j);
2378                 continue;
2379             }
2380 #endif
2381             ret = sk_SSL_CIPHER_value(allow, j);
2382             break;
2383         }
2384     }
2385     return (ret);
2386 }
2387
2388 int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
2389 {
2390     int ret = 0;
2391     unsigned long alg;
2392
2393     alg = s->s3->tmp.new_cipher->algorithms;
2394
2395 #ifndef OPENSSL_NO_DH
2396     if (alg & (SSL_kDHr | SSL_kEDH)) {
2397 # ifndef OPENSSL_NO_RSA
2398         p[ret++] = SSL3_CT_RSA_FIXED_DH;
2399 # endif
2400 # ifndef OPENSSL_NO_DSA
2401         p[ret++] = SSL3_CT_DSS_FIXED_DH;
2402 # endif
2403     }
2404     if ((s->version == SSL3_VERSION) &&
2405         (alg & (SSL_kEDH | SSL_kDHd | SSL_kDHr))) {
2406 # ifndef OPENSSL_NO_RSA
2407         p[ret++] = SSL3_CT_RSA_EPHEMERAL_DH;
2408 # endif
2409 # ifndef OPENSSL_NO_DSA
2410         p[ret++] = SSL3_CT_DSS_EPHEMERAL_DH;
2411 # endif
2412     }
2413 #endif                          /* !OPENSSL_NO_DH */
2414 #ifndef OPENSSL_NO_RSA
2415     p[ret++] = SSL3_CT_RSA_SIGN;
2416 #endif
2417 #ifndef OPENSSL_NO_DSA
2418     p[ret++] = SSL3_CT_DSS_SIGN;
2419 #endif
2420 #ifndef OPENSSL_NO_ECDH
2421     /*
2422      * We should ask for fixed ECDH certificates only for SSL_kECDH (and not
2423      * SSL_kECDHE)
2424      */
2425     if ((alg & SSL_kECDH) && (s->version >= TLS1_VERSION)) {
2426         p[ret++] = TLS_CT_RSA_FIXED_ECDH;
2427         p[ret++] = TLS_CT_ECDSA_FIXED_ECDH;
2428     }
2429 #endif
2430
2431 #ifndef OPENSSL_NO_ECDSA
2432     /*
2433      * ECDSA certs can be used with RSA cipher suites as well so we don't
2434      * need to check for SSL_kECDH or SSL_kECDHE
2435      */
2436     if (s->version >= TLS1_VERSION) {
2437         p[ret++] = TLS_CT_ECDSA_SIGN;
2438     }
2439 #endif
2440     return (ret);
2441 }
2442
2443 int ssl3_shutdown(SSL *s)
2444 {
2445     int ret;
2446
2447     /*
2448      * Don't do anything much if we have not done the handshake or we don't
2449      * want to send messages :-)
2450      */
2451     if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) {
2452         s->shutdown = (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
2453         return (1);
2454     }
2455
2456     if (!(s->shutdown & SSL_SENT_SHUTDOWN)) {
2457         s->shutdown |= SSL_SENT_SHUTDOWN;
2458 #if 1
2459         ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
2460 #endif
2461         /*
2462          * our shutdown alert has been sent now, and if it still needs to be
2463          * written, s->s3->alert_dispatch will be true
2464          */
2465         if (s->s3->alert_dispatch)
2466             return (-1);        /* return WANT_WRITE */
2467     } else if (s->s3->alert_dispatch) {
2468         /* resend it if not sent */
2469 #if 1
2470         ret = s->method->ssl_dispatch_alert(s);
2471         if (ret == -1) {
2472             /*
2473              * we only get to return -1 here the 2nd/Nth invocation, we must
2474              * have already signalled return 0 upon a previous invoation,
2475              * return WANT_WRITE
2476              */
2477             return (ret);
2478         }
2479 #endif
2480     } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
2481         /*
2482          * If we are waiting for a close from our peer, we are closed
2483          */
2484         s->method->ssl_read_bytes(s, 0, NULL, 0, 0);
2485         if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
2486             return (-1);        /* return WANT_READ */
2487         }
2488     }
2489
2490     if ((s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN)) &&
2491         !s->s3->alert_dispatch)
2492         return (1);
2493     else
2494         return (0);
2495 }
2496
2497 int ssl3_write(SSL *s, const void *buf, int len)
2498 {
2499     int ret, n;
2500
2501 #if 0
2502     if (s->shutdown & SSL_SEND_SHUTDOWN) {
2503         s->rwstate = SSL_NOTHING;
2504         return (0);
2505     }
2506 #endif
2507     clear_sys_error();
2508     if (s->s3->renegotiate)
2509         ssl3_renegotiate_check(s);
2510
2511     /*
2512      * This is an experimental flag that sends the last handshake message in
2513      * the same packet as the first use data - used to see if it helps the
2514      * TCP protocol during session-id reuse
2515      */
2516     /* The second test is because the buffer may have been removed */
2517     if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) {
2518         /* First time through, we write into the buffer */
2519         if (s->s3->delay_buf_pop_ret == 0) {
2520             ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len);
2521             if (ret <= 0)
2522                 return (ret);
2523
2524             s->s3->delay_buf_pop_ret = ret;
2525         }
2526
2527         s->rwstate = SSL_WRITING;
2528         n = BIO_flush(s->wbio);
2529         if (n <= 0)
2530             return (n);
2531         s->rwstate = SSL_NOTHING;
2532
2533         /* We have flushed the buffer, so remove it */
2534         ssl_free_wbio_buffer(s);
2535         s->s3->flags &= ~SSL3_FLAGS_POP_BUFFER;
2536
2537         ret = s->s3->delay_buf_pop_ret;
2538         s->s3->delay_buf_pop_ret = 0;
2539     } else {
2540         ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA,
2541                                          buf, len);
2542         if (ret <= 0)
2543             return (ret);
2544     }
2545
2546     return (ret);
2547 }
2548
2549 static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
2550 {
2551     int ret;
2552
2553     clear_sys_error();
2554     if (s->s3->renegotiate)
2555         ssl3_renegotiate_check(s);
2556     s->s3->in_read_app_data = 1;
2557     ret =
2558         s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
2559                                   peek);
2560     if ((ret == -1) && (s->s3->in_read_app_data == 2)) {
2561         /*
2562          * ssl3_read_bytes decided to call s->handshake_func, which called
2563          * ssl3_read_bytes to read handshake data. However, ssl3_read_bytes
2564          * actually found application data and thinks that application data
2565          * makes sense here; so disable handshake processing and try to read
2566          * application data again.
2567          */
2568         s->in_handshake++;
2569         ret =
2570             s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
2571                                       peek);
2572         s->in_handshake--;
2573     } else
2574         s->s3->in_read_app_data = 0;
2575
2576     return (ret);
2577 }
2578
2579 int ssl3_read(SSL *s, void *buf, int len)
2580 {
2581     return ssl3_read_internal(s, buf, len, 0);
2582 }
2583
2584 int ssl3_peek(SSL *s, void *buf, int len)
2585 {
2586     return ssl3_read_internal(s, buf, len, 1);
2587 }
2588
2589 int ssl3_renegotiate(SSL *s)
2590 {
2591     if (s->handshake_func == NULL)
2592         return (1);
2593
2594     if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
2595         return (0);
2596
2597     s->s3->renegotiate = 1;
2598     return (1);
2599 }
2600
2601 int ssl3_renegotiate_check(SSL *s)
2602 {
2603     int ret = 0;
2604
2605     if (s->s3->renegotiate) {
2606         if ((s->s3->rbuf.left == 0) &&
2607             (s->s3->wbuf.left == 0) && !SSL_in_init(s)) {
2608             /*
2609              * if we are the server, and we have sent a 'RENEGOTIATE'
2610              * message, we need to go to SSL_ST_ACCEPT.
2611              */
2612             /* SSL_ST_ACCEPT */
2613             s->state = SSL_ST_RENEGOTIATE;
2614             s->s3->renegotiate = 0;
2615             s->s3->num_renegotiations++;
2616             s->s3->total_renegotiations++;
2617             ret = 1;
2618         }
2619     }
2620     return (ret);
2621 }