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