cdad4e017bf5e54522b2c7efb312e3d181fd6bc7
[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-2007 The OpenSSL Project.  All rights reserved.
60  *
61  * Redistribution and use in source and binary forms, with or without
62  * modification, are permitted provided that the following conditions
63  * are met:
64  *
65  * 1. Redistributions of source code must retain the above copyright
66  *    notice, this list of conditions and the following disclaimer. 
67  *
68  * 2. Redistributions in binary form must reproduce the above copyright
69  *    notice, this list of conditions and the following disclaimer in
70  *    the documentation and/or other materials provided with the
71  *    distribution.
72  *
73  * 3. All advertising materials mentioning features or use of this
74  *    software must display the following acknowledgment:
75  *    "This product includes software developed by the OpenSSL Project
76  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77  *
78  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79  *    endorse or promote products derived from this software without
80  *    prior written permission. For written permission, please contact
81  *    openssl-core@openssl.org.
82  *
83  * 5. Products derived from this software may not be called "OpenSSL"
84  *    nor may "OpenSSL" appear in their names without prior written
85  *    permission of the OpenSSL Project.
86  *
87  * 6. Redistributions of any form whatsoever must retain the following
88  *    acknowledgment:
89  *    "This product includes software developed by the OpenSSL Project
90  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91  *
92  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103  * OF THE POSSIBILITY OF SUCH DAMAGE.
104  * ====================================================================
105  *
106  * This product includes cryptographic software written by Eric Young
107  * (eay@cryptsoft.com).  This product includes software written by Tim
108  * Hudson (tjh@cryptsoft.com).
109  *
110  */
111 /* ====================================================================
112  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113  *
114  * Portions of the attached software ("Contribution") are developed by 
115  * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
116  *
117  * The Contribution is licensed pursuant to the OpenSSL open source
118  * license provided above.
119  *
120  * ECC cipher suite support in OpenSSL originally written by
121  * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
122  *
123  */
124 /* ====================================================================
125  * Copyright 2005 Nokia. All rights reserved.
126  *
127  * The portions of the attached software ("Contribution") is developed by
128  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
129  * license.
130  *
131  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
132  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
133  * support (see RFC 4279) to OpenSSL.
134  *
135  * No patent licenses or other rights except those expressly stated in
136  * the OpenSSL open source license shall be deemed granted or received
137  * expressly, by implication, estoppel, or otherwise.
138  *
139  * No assurances are provided by Nokia that the Contribution does not
140  * infringe the patent or other intellectual property rights of any third
141  * party or that the license provides you with all the necessary rights
142  * to make use of the Contribution.
143  *
144  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
145  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
146  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
147  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
148  * OTHERWISE.
149  */
150
151 #include <stdio.h>
152 #include <openssl/objects.h>
153 #include "ssl_locl.h"
154 #include "kssl_lcl.h"
155 #ifndef OPENSSL_NO_TLSEXT
156 #ifndef OPENSSL_NO_EC
157 #include "../crypto/ec/ec_lcl.h"
158 #endif /* OPENSSL_NO_EC */
159 #endif /* OPENSSL_NO_TLSEXT */
160 #include <openssl/md5.h>
161 #ifndef OPENSSL_NO_DH
162 #include <openssl/dh.h>
163 #endif
164
165 const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT;
166
167 #define SSL3_NUM_CIPHERS        (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
168
169 /* list of available SSLv3 ciphers (sorted by id) */
170 OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
171
172 /* The RSA ciphers */
173 /* Cipher 01 */
174         {
175         1,
176         SSL3_TXT_RSA_NULL_MD5,
177         SSL3_CK_RSA_NULL_MD5,
178         SSL_kRSA,
179         SSL_aRSA,
180         SSL_eNULL,
181         SSL_MD5,
182         SSL_SSLV3,
183         SSL_NOT_EXP|SSL_STRONG_NONE,
184         0,
185         0,
186         0,
187         },
188
189 /* Cipher 02 */
190         {
191         1,
192         SSL3_TXT_RSA_NULL_SHA,
193         SSL3_CK_RSA_NULL_SHA,
194         SSL_kRSA,
195         SSL_aRSA,
196         SSL_eNULL,
197         SSL_SHA1,
198         SSL_SSLV3,
199         SSL_NOT_EXP|SSL_STRONG_NONE,
200         0,
201         0,
202         0,
203         },
204
205 /* Cipher 03 */
206         {
207         1,
208         SSL3_TXT_RSA_RC4_40_MD5,
209         SSL3_CK_RSA_RC4_40_MD5,
210         SSL_kRSA,
211         SSL_aRSA,
212         SSL_RC4,
213         SSL_MD5,
214         SSL_SSLV3,
215         SSL_EXPORT|SSL_EXP40,
216         0,
217         40,
218         128,
219         },
220
221 /* Cipher 04 */
222         {
223         1,
224         SSL3_TXT_RSA_RC4_128_MD5,
225         SSL3_CK_RSA_RC4_128_MD5,
226         SSL_kRSA,
227         SSL_aRSA,
228         SSL_RC4,
229         SSL_MD5,
230         SSL_SSLV3,
231         SSL_NOT_EXP|SSL_MEDIUM,
232         0,
233         128,
234         128,
235         },
236
237 /* Cipher 05 */
238         {
239         1,
240         SSL3_TXT_RSA_RC4_128_SHA,
241         SSL3_CK_RSA_RC4_128_SHA,
242         SSL_kRSA,
243         SSL_aRSA,
244         SSL_RC4,
245         SSL_SHA1,
246         SSL_SSLV3,
247         SSL_NOT_EXP|SSL_MEDIUM,
248         0,
249         128,
250         128,
251         },
252
253 /* Cipher 06 */
254         {
255         1,
256         SSL3_TXT_RSA_RC2_40_MD5,
257         SSL3_CK_RSA_RC2_40_MD5,
258         SSL_kRSA,
259         SSL_aRSA,
260         SSL_RC2,
261         SSL_MD5,
262         SSL_SSLV3,
263         SSL_EXPORT|SSL_EXP40,
264         0,
265         40,
266         128,
267         },
268
269 /* Cipher 07 */
270 #ifndef OPENSSL_NO_IDEA
271         {
272         1,
273         SSL3_TXT_RSA_IDEA_128_SHA,
274         SSL3_CK_RSA_IDEA_128_SHA,
275         SSL_kRSA,
276         SSL_aRSA,
277         SSL_IDEA,
278         SSL_SHA1,
279         SSL_SSLV3,
280         SSL_NOT_EXP|SSL_MEDIUM,
281         0,
282         128,
283         128,
284         },
285 #endif
286
287 /* Cipher 08 */
288         {
289         1,
290         SSL3_TXT_RSA_DES_40_CBC_SHA,
291         SSL3_CK_RSA_DES_40_CBC_SHA,
292         SSL_kRSA,
293         SSL_aRSA,
294         SSL_DES,
295         SSL_SHA1,
296         SSL_SSLV3,
297         SSL_EXPORT|SSL_EXP40,
298         0,
299         40,
300         56,
301         },
302
303 /* Cipher 09 */
304         {
305         1,
306         SSL3_TXT_RSA_DES_64_CBC_SHA,
307         SSL3_CK_RSA_DES_64_CBC_SHA,
308         SSL_kRSA,
309         SSL_aRSA,
310         SSL_DES,
311         SSL_SHA1,
312         SSL_SSLV3,
313         SSL_NOT_EXP|SSL_LOW,
314         0,
315         56,
316         56,
317         },
318
319 /* Cipher 0A */
320         {
321         1,
322         SSL3_TXT_RSA_DES_192_CBC3_SHA,
323         SSL3_CK_RSA_DES_192_CBC3_SHA,
324         SSL_kRSA,
325         SSL_aRSA,
326         SSL_3DES,
327         SSL_SHA1,
328         SSL_SSLV3,
329         SSL_NOT_EXP|SSL_HIGH,
330         0,
331         168,
332         168,
333         },
334
335 /* The DH ciphers */
336 /* Cipher 0B */
337         {
338         0,
339         SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
340         SSL3_CK_DH_DSS_DES_40_CBC_SHA,
341         SSL_kDHd,
342         SSL_aDH,
343         SSL_DES,
344         SSL_SHA1,
345         SSL_SSLV3,
346         SSL_EXPORT|SSL_EXP40,
347         0,
348         40,
349         56,
350         },
351
352 /* Cipher 0C */
353         {
354         0, /* not implemented (non-ephemeral DH) */
355         SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
356         SSL3_CK_DH_DSS_DES_64_CBC_SHA,
357         SSL_kDHd,
358         SSL_aDH,
359         SSL_DES,
360         SSL_SHA1,
361         SSL_SSLV3,
362         SSL_NOT_EXP|SSL_LOW,
363         0,
364         56,
365         56,
366         },
367
368 /* Cipher 0D */
369         {
370         0, /* not implemented (non-ephemeral DH) */
371         SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
372         SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
373         SSL_kDHd,
374         SSL_aDH,
375         SSL_3DES,
376         SSL_SHA1,
377         SSL_SSLV3,
378         SSL_NOT_EXP|SSL_HIGH,
379         0,
380         168,
381         168,
382         },
383
384 /* Cipher 0E */
385         {
386         0, /* not implemented (non-ephemeral DH) */
387         SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
388         SSL3_CK_DH_RSA_DES_40_CBC_SHA,
389         SSL_kDHr,
390         SSL_aDH,
391         SSL_DES,
392         SSL_SHA1,
393         SSL_SSLV3,
394         SSL_EXPORT|SSL_EXP40,
395         0,
396         40,
397         56,
398         },
399
400 /* Cipher 0F */
401         {
402         0, /* not implemented (non-ephemeral DH) */
403         SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
404         SSL3_CK_DH_RSA_DES_64_CBC_SHA,
405         SSL_kDHr,
406         SSL_aDH,
407         SSL_DES,
408         SSL_SHA1,
409         SSL_SSLV3,
410         SSL_NOT_EXP|SSL_LOW,
411         0,
412         56,
413         56,
414         },
415
416 /* Cipher 10 */
417         {
418         0, /* not implemented (non-ephemeral DH) */
419         SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
420         SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
421         SSL_kDHr,
422         SSL_aDH,
423         SSL_3DES,
424         SSL_SHA1,
425         SSL_SSLV3,
426         SSL_NOT_EXP|SSL_HIGH,
427         0,
428         168,
429         168,
430         },
431
432 /* The Ephemeral DH ciphers */
433 /* Cipher 11 */
434         {
435         1,
436         SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
437         SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
438         SSL_kEDH,
439         SSL_aDSS,
440         SSL_DES,
441         SSL_SHA1,
442         SSL_SSLV3,
443         SSL_EXPORT|SSL_EXP40,
444         0,
445         40,
446         56,
447         },
448
449 /* Cipher 12 */
450         {
451         1,
452         SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
453         SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
454         SSL_kEDH,
455         SSL_aDSS,
456         SSL_DES,
457         SSL_SHA1,
458         SSL_SSLV3,
459         SSL_NOT_EXP|SSL_LOW,
460         0,
461         56,
462         56,
463         },
464
465 /* Cipher 13 */
466         {
467         1,
468         SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
469         SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
470         SSL_kEDH,
471         SSL_aDSS,
472         SSL_3DES,
473         SSL_SHA1,
474         SSL_SSLV3,
475         SSL_NOT_EXP|SSL_HIGH,
476         0,
477         168,
478         168,
479         },
480
481 /* Cipher 14 */
482         {
483         1,
484         SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
485         SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
486         SSL_kEDH,
487         SSL_aRSA,
488         SSL_DES,
489         SSL_SHA1,
490         SSL_SSLV3,
491         SSL_EXPORT|SSL_EXP40,
492         0,
493         40,
494         56,
495         },
496
497 /* Cipher 15 */
498         {
499         1,
500         SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
501         SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
502         SSL_kEDH,
503         SSL_aRSA,
504         SSL_DES,
505         SSL_SHA1,
506         SSL_SSLV3,
507         SSL_NOT_EXP|SSL_LOW,
508         0,
509         56,
510         56,
511         },
512
513 /* Cipher 16 */
514         {
515         1,
516         SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
517         SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
518         SSL_kEDH,
519         SSL_aRSA,
520         SSL_3DES,
521         SSL_SHA1,
522         SSL_SSLV3,
523         SSL_NOT_EXP|SSL_HIGH,
524         0,
525         168,
526         168,
527         },
528
529 /* Cipher 17 */
530         {
531         1,
532         SSL3_TXT_ADH_RC4_40_MD5,
533         SSL3_CK_ADH_RC4_40_MD5,
534         SSL_kEDH,
535         SSL_aNULL,
536         SSL_RC4,
537         SSL_MD5,
538         SSL_SSLV3,
539         SSL_EXPORT|SSL_EXP40,
540         0,
541         40,
542         128,
543         },
544
545 /* Cipher 18 */
546         {
547         1,
548         SSL3_TXT_ADH_RC4_128_MD5,
549         SSL3_CK_ADH_RC4_128_MD5,
550         SSL_kEDH,
551         SSL_aNULL,
552         SSL_RC4,
553         SSL_MD5,
554         SSL_SSLV3,
555         SSL_NOT_EXP|SSL_MEDIUM,
556         0,
557         128,
558         128,
559         },
560
561 /* Cipher 19 */
562         {
563         1,
564         SSL3_TXT_ADH_DES_40_CBC_SHA,
565         SSL3_CK_ADH_DES_40_CBC_SHA,
566         SSL_kEDH,
567         SSL_aNULL,
568         SSL_DES,
569         SSL_SHA1,
570         SSL_SSLV3,
571         SSL_EXPORT|SSL_EXP40,
572         0,
573         40,
574         128,
575         },
576
577 /* Cipher 1A */
578         {
579         1,
580         SSL3_TXT_ADH_DES_64_CBC_SHA,
581         SSL3_CK_ADH_DES_64_CBC_SHA,
582         SSL_kEDH,
583         SSL_aNULL,
584         SSL_DES,
585         SSL_SHA1,
586         SSL_SSLV3,
587         SSL_NOT_EXP|SSL_LOW,
588         0,
589         56,
590         56,
591         },
592
593 /* Cipher 1B */
594         {
595         1,
596         SSL3_TXT_ADH_DES_192_CBC_SHA,
597         SSL3_CK_ADH_DES_192_CBC_SHA,
598         SSL_kEDH,
599         SSL_aNULL,
600         SSL_3DES,
601         SSL_SHA1,
602         SSL_SSLV3,
603         SSL_NOT_EXP|SSL_HIGH,
604         0,
605         168,
606         168,
607         },
608
609 /* Fortezza ciphersuite from SSL 3.0 spec */
610 #if 0
611 /* Cipher 1C */
612         {
613         0,
614         SSL3_TXT_FZA_DMS_NULL_SHA,
615         SSL3_CK_FZA_DMS_NULL_SHA,
616         SSL_kFZA,
617         SSL_aFZA,
618         SSL_eNULL,
619         SSL_SHA1,
620         SSL_SSLV3,
621         SSL_NOT_EXP|SSL_STRONG_NONE,
622         0,
623         0,
624         0,
625         },
626
627 /* Cipher 1D */
628         {
629         0,
630         SSL3_TXT_FZA_DMS_FZA_SHA,
631         SSL3_CK_FZA_DMS_FZA_SHA,
632         SSL_kFZA,
633         SSL_aFZA,
634         SSL_eFZA,
635         SSL_SHA1,
636         SSL_SSLV3,
637         SSL_NOT_EXP|SSL_STRONG_NONE,
638         0,
639         0,
640         0,
641         },
642
643 /* Cipher 1E */
644         {
645         0,
646         SSL3_TXT_FZA_DMS_RC4_SHA,
647         SSL3_CK_FZA_DMS_RC4_SHA,
648         SSL_kFZA,
649         SSL_aFZA,
650         SSL_RC4,
651         SSL_SHA1,
652         SSL_SSLV3,
653         SSL_NOT_EXP|SSL_MEDIUM,
654         0,
655         128,
656         128,
657         },
658 #endif
659
660 #ifndef OPENSSL_NO_KRB5
661 /* The Kerberos ciphers*/
662 /* Cipher 1E */
663         {
664         1,
665         SSL3_TXT_KRB5_DES_64_CBC_SHA,
666         SSL3_CK_KRB5_DES_64_CBC_SHA,
667         SSL_kKRB5,
668         SSL_aKRB5,
669         SSL_DES,
670         SSL_SHA1,
671         SSL_SSLV3,
672         SSL_NOT_EXP|SSL_LOW,
673         0,
674         56,
675         56,
676         },
677
678 /* Cipher 1F */
679         {
680         1,
681         SSL3_TXT_KRB5_DES_192_CBC3_SHA,
682         SSL3_CK_KRB5_DES_192_CBC3_SHA,
683         SSL_kKRB5,
684         SSL_aKRB5,
685         SSL_3DES,
686         SSL_SHA1,
687         SSL_SSLV3,
688         SSL_NOT_EXP|SSL_HIGH,
689         0,
690         168,
691         168,
692         },
693
694 /* Cipher 20 */
695         {
696         1,
697         SSL3_TXT_KRB5_RC4_128_SHA,
698         SSL3_CK_KRB5_RC4_128_SHA,
699         SSL_kKRB5,
700         SSL_aKRB5,
701         SSL_RC4,
702         SSL_SHA1,
703         SSL_SSLV3,
704         SSL_NOT_EXP|SSL_MEDIUM,
705         0,
706         128,
707         128,
708         },
709
710 /* Cipher 21 */
711         {
712         1,
713         SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
714         SSL3_CK_KRB5_IDEA_128_CBC_SHA,
715         SSL_kKRB5,
716         SSL_aKRB5,
717         SSL_IDEA,
718         SSL_SHA1,
719         SSL_SSLV3,
720         SSL_NOT_EXP|SSL_MEDIUM,
721         0,
722         128,
723         128,
724         },
725
726 /* Cipher 22 */
727         {
728         1,
729         SSL3_TXT_KRB5_DES_64_CBC_MD5,
730         SSL3_CK_KRB5_DES_64_CBC_MD5,
731         SSL_kKRB5,
732         SSL_aKRB5,
733         SSL_DES,
734         SSL_MD5,
735         SSL_SSLV3,
736         SSL_NOT_EXP|SSL_LOW,
737         0,
738         56,
739         56,
740         },
741
742 /* Cipher 23 */
743         {
744         1,
745         SSL3_TXT_KRB5_DES_192_CBC3_MD5,
746         SSL3_CK_KRB5_DES_192_CBC3_MD5,
747         SSL_kKRB5,
748         SSL_aKRB5,
749         SSL_3DES,
750         SSL_MD5,
751         SSL_SSLV3,
752         SSL_NOT_EXP|SSL_HIGH,
753         0,
754         168,
755         168,
756         },
757
758 /* Cipher 24 */
759         {
760         1,
761         SSL3_TXT_KRB5_RC4_128_MD5,
762         SSL3_CK_KRB5_RC4_128_MD5,
763         SSL_kKRB5,
764         SSL_aKRB5,
765         SSL_RC4,
766         SSL_MD5,
767         SSL_SSLV3,
768         SSL_NOT_EXP|SSL_MEDIUM,
769         0,
770         128,
771         128,
772         },
773
774 /* Cipher 25 */
775         {
776         1,
777         SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
778         SSL3_CK_KRB5_IDEA_128_CBC_MD5,
779         SSL_kKRB5,
780         SSL_aKRB5,
781         SSL_IDEA,
782         SSL_MD5,
783         SSL_SSLV3,
784         SSL_NOT_EXP|SSL_MEDIUM,
785         0,
786         128,
787         128,
788         },
789
790 /* Cipher 26 */
791         {
792         1,
793         SSL3_TXT_KRB5_DES_40_CBC_SHA,
794         SSL3_CK_KRB5_DES_40_CBC_SHA,
795         SSL_kKRB5,
796         SSL_aKRB5,
797         SSL_DES,
798         SSL_SHA1,
799         SSL_SSLV3,
800         SSL_EXPORT|SSL_EXP40,
801         0,
802         40,
803         56,
804         },
805
806 /* Cipher 27 */
807         {
808         1,
809         SSL3_TXT_KRB5_RC2_40_CBC_SHA,
810         SSL3_CK_KRB5_RC2_40_CBC_SHA,
811         SSL_kKRB5,
812         SSL_aKRB5,
813         SSL_RC2,
814         SSL_SHA1,
815         SSL_SSLV3,
816         SSL_EXPORT|SSL_EXP40,
817         0,
818         40,
819         128,
820         },
821
822 /* Cipher 28 */
823         {
824         1,
825         SSL3_TXT_KRB5_RC4_40_SHA,
826         SSL3_CK_KRB5_RC4_40_SHA,
827         SSL_kKRB5,
828         SSL_aKRB5,
829         SSL_RC4,
830         SSL_SHA1,
831         SSL_SSLV3,
832         SSL_EXPORT|SSL_EXP40,
833         0,
834         40,
835         128,
836         },
837
838 /* Cipher 29 */
839         {
840         1,
841         SSL3_TXT_KRB5_DES_40_CBC_MD5,
842         SSL3_CK_KRB5_DES_40_CBC_MD5,
843         SSL_kKRB5,
844         SSL_aKRB5,
845         SSL_DES,
846         SSL_MD5,
847         SSL_SSLV3,
848         SSL_EXPORT|SSL_EXP40,
849         0,
850         40,
851         56,
852         },
853
854 /* Cipher 2A */
855         {
856         1,
857         SSL3_TXT_KRB5_RC2_40_CBC_MD5,
858         SSL3_CK_KRB5_RC2_40_CBC_MD5,
859         SSL_kKRB5,
860         SSL_aKRB5,
861         SSL_RC2,
862         SSL_MD5,
863         SSL_SSLV3,
864         SSL_EXPORT|SSL_EXP40,
865         0,
866         40,
867         128,
868         },
869
870 /* Cipher 2B */
871         {
872         1,
873         SSL3_TXT_KRB5_RC4_40_MD5,
874         SSL3_CK_KRB5_RC4_40_MD5,
875         SSL_kKRB5,
876         SSL_aKRB5,
877         SSL_RC4,
878         SSL_MD5,
879         SSL_SSLV3,
880         SSL_EXPORT|SSL_EXP40,
881         0,
882         40,
883         128,
884         },
885 #endif  /* OPENSSL_NO_KRB5 */
886
887 /* New AES ciphersuites */
888 /* Cipher 2F */
889         {
890         1,
891         TLS1_TXT_RSA_WITH_AES_128_SHA,
892         TLS1_CK_RSA_WITH_AES_128_SHA,
893         SSL_kRSA,
894         SSL_aRSA,
895         SSL_AES128,
896         SSL_SHA1,
897         SSL_TLSV1,
898         SSL_NOT_EXP|SSL_HIGH,
899         0,
900         128,
901         128,
902         },
903 /* Cipher 30 */
904         {
905         0,
906         TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
907         TLS1_CK_DH_DSS_WITH_AES_128_SHA,
908         SSL_kDHd,
909         SSL_aDH,
910         SSL_AES128,
911         SSL_SHA1,
912         SSL_TLSV1,
913         SSL_NOT_EXP|SSL_HIGH,
914         0,
915         128,
916         128,
917         },
918 /* Cipher 31 */
919         {
920         0,
921         TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
922         TLS1_CK_DH_RSA_WITH_AES_128_SHA,
923         SSL_kDHr,
924         SSL_aDH,
925         SSL_AES128,
926         SSL_SHA1,
927         SSL_TLSV1,
928         SSL_NOT_EXP|SSL_HIGH,
929         0,
930         128,
931         128,
932         },
933 /* Cipher 32 */
934         {
935         1,
936         TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
937         TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
938         SSL_kEDH,
939         SSL_aDSS,
940         SSL_AES128,
941         SSL_SHA1,
942         SSL_TLSV1,
943         SSL_NOT_EXP|SSL_HIGH,
944         0,
945         128,
946         128,
947         },
948 /* Cipher 33 */
949         {
950         1,
951         TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
952         TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
953         SSL_kEDH,
954         SSL_aRSA,
955         SSL_AES128,
956         SSL_SHA1,
957         SSL_TLSV1,
958         SSL_NOT_EXP|SSL_HIGH,
959         0,
960         128,
961         128,
962         },
963 /* Cipher 34 */
964         {
965         1,
966         TLS1_TXT_ADH_WITH_AES_128_SHA,
967         TLS1_CK_ADH_WITH_AES_128_SHA,
968         SSL_kEDH,
969         SSL_aNULL,
970         SSL_AES128,
971         SSL_SHA1,
972         SSL_TLSV1,
973         SSL_NOT_EXP|SSL_HIGH,
974         0,
975         128,
976         128,
977         },
978
979 /* Cipher 35 */
980         {
981         1,
982         TLS1_TXT_RSA_WITH_AES_256_SHA,
983         TLS1_CK_RSA_WITH_AES_256_SHA,
984         SSL_kRSA,
985         SSL_aRSA,
986         SSL_AES256,
987         SSL_SHA1,
988         SSL_TLSV1,
989         SSL_NOT_EXP|SSL_HIGH,
990         0,
991         256,
992         256,
993         },
994 /* Cipher 36 */
995         {
996         0,
997         TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
998         TLS1_CK_DH_DSS_WITH_AES_256_SHA,
999         SSL_kDHd,
1000         SSL_aDH,
1001         SSL_AES256,
1002         SSL_SHA1,
1003         SSL_TLSV1,
1004         SSL_NOT_EXP|SSL_HIGH,
1005         0,
1006         256,
1007         256,
1008         },
1009
1010 /* Cipher 37 */
1011         {
1012         0, /* not implemented (non-ephemeral DH) */
1013         TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
1014         TLS1_CK_DH_RSA_WITH_AES_256_SHA,
1015         SSL_kDHr,
1016         SSL_aDH,
1017         SSL_AES256,
1018         SSL_SHA1,
1019         SSL_TLSV1,
1020         SSL_NOT_EXP|SSL_HIGH,
1021         0,
1022         256,
1023         256,
1024         },
1025
1026 /* Cipher 38 */
1027         {
1028         1,
1029         TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
1030         TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
1031         SSL_kEDH,
1032         SSL_aDSS,
1033         SSL_AES256,
1034         SSL_SHA1,
1035         SSL_TLSV1,
1036         SSL_NOT_EXP|SSL_HIGH,
1037         0,
1038         256,
1039         256,
1040         },
1041
1042 /* Cipher 39 */
1043         {
1044         1,
1045         TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
1046         TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
1047         SSL_kEDH,
1048         SSL_aRSA,
1049         SSL_AES256,
1050         SSL_SHA1,
1051         SSL_TLSV1,
1052         SSL_NOT_EXP|SSL_HIGH,
1053         0,
1054         256,
1055         256,
1056         },
1057
1058         /* Cipher 3A */
1059         {
1060         1,
1061         TLS1_TXT_ADH_WITH_AES_256_SHA,
1062         TLS1_CK_ADH_WITH_AES_256_SHA,
1063         SSL_kEDH,
1064         SSL_aNULL,
1065         SSL_AES256,
1066         SSL_SHA1,
1067         SSL_TLSV1,
1068         SSL_NOT_EXP|SSL_HIGH,
1069         0,
1070         256,
1071         256,
1072         },
1073
1074 #ifndef OPENSSL_NO_CAMELLIA
1075         /* Camellia ciphersuites from RFC4132 (128-bit portion) */
1076
1077         /* Cipher 41 */
1078         {
1079         1,
1080         TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
1081         TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
1082         SSL_kRSA,
1083         SSL_aRSA,
1084         SSL_CAMELLIA128,
1085         SSL_SHA1,
1086         SSL_TLSV1,
1087         SSL_NOT_EXP|SSL_HIGH,
1088         0,
1089         128,
1090         128,
1091         },
1092
1093         /* Cipher 42 */
1094         {
1095         0, /* not implemented (non-ephemeral DH) */
1096         TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
1097         TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
1098         SSL_kDHd,
1099         SSL_aDH,
1100         SSL_CAMELLIA128,
1101         SSL_SHA1,
1102         SSL_TLSV1,
1103         SSL_NOT_EXP|SSL_HIGH,
1104         0,
1105         128,
1106         128,
1107         },
1108
1109         /* Cipher 43 */
1110         {
1111         0, /* not implemented (non-ephemeral DH) */
1112         TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
1113         TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
1114         SSL_kDHr,
1115         SSL_aDH,
1116         SSL_CAMELLIA128,
1117         SSL_SHA1,
1118         SSL_TLSV1,
1119         SSL_NOT_EXP|SSL_HIGH,
1120         0,
1121         128,
1122         128,
1123         },
1124
1125         /* Cipher 44 */
1126         {
1127         1,
1128         TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
1129         TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
1130         SSL_kEDH,
1131         SSL_aDSS,
1132         SSL_CAMELLIA128,
1133         SSL_SHA1,
1134         SSL_TLSV1,
1135         SSL_NOT_EXP|SSL_HIGH,
1136         0,
1137         128,
1138         128,
1139         },
1140
1141         /* Cipher 45 */
1142         {
1143         1,
1144         TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1145         TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1146         SSL_kEDH,
1147         SSL_aRSA,
1148         SSL_CAMELLIA128,
1149         SSL_SHA1,
1150         SSL_TLSV1,
1151         SSL_NOT_EXP|SSL_HIGH,
1152         0,
1153         128,
1154         128,
1155         },
1156
1157         /* Cipher 46 */
1158         {
1159         1,
1160         TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
1161         TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
1162         SSL_kEDH,
1163         SSL_aNULL,
1164         SSL_CAMELLIA128,
1165         SSL_SHA1,
1166         SSL_TLSV1,
1167         SSL_NOT_EXP|SSL_HIGH,
1168         0,
1169         128,
1170         128,
1171         },
1172 #endif /* OPENSSL_NO_CAMELLIA */
1173
1174 #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
1175         /* New TLS Export CipherSuites from expired ID */
1176 #if 0
1177         /* Cipher 60 */
1178         {
1179         1,
1180         TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
1181         TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
1182         SSL_kRSA,
1183         SSL_aRSA,
1184         SSL_RC4,
1185         SSL_MD5,
1186         SSL_TLSV1,
1187         SSL_EXPORT|SSL_EXP56,
1188         0,
1189         56,
1190         128,
1191         },
1192
1193         /* Cipher 61 */
1194         {
1195         1,
1196         TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1197         TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1198         SSL_kRSA,
1199         SSL_aRSA,
1200         SSL_RC2,
1201         SSL_MD5,
1202         SSL_TLSV1,
1203         SSL_EXPORT|SSL_EXP56,
1204         0,
1205         56,
1206         128,
1207         },
1208 #endif
1209
1210         /* Cipher 62 */
1211         {
1212         1,
1213         TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1214         TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1215         SSL_kRSA,
1216         SSL_aRSA,
1217         SSL_DES,
1218         SSL_SHA1,
1219         SSL_TLSV1,
1220         SSL_EXPORT|SSL_EXP56,
1221         0,
1222         56,
1223         56,
1224         },
1225
1226         /* Cipher 63 */
1227         {
1228         1,
1229         TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1230         TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1231         SSL_kEDH,
1232         SSL_aDSS,
1233         SSL_DES,
1234         SSL_SHA1,
1235         SSL_TLSV1,
1236         SSL_EXPORT|SSL_EXP56,
1237         0,
1238         56,
1239         56,
1240         },
1241
1242         /* Cipher 64 */
1243         {
1244         1,
1245         TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
1246         TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
1247         SSL_kRSA,
1248         SSL_aRSA,
1249         SSL_RC4,
1250         SSL_SHA1,
1251         SSL_TLSV1,
1252         SSL_EXPORT|SSL_EXP56,
1253         0,
1254         56,
1255         128,
1256         },
1257
1258         /* Cipher 65 */
1259         {
1260         1,
1261         TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1262         TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1263         SSL_kEDH,
1264         SSL_aDSS,
1265         SSL_RC4,
1266         SSL_SHA1,
1267         SSL_TLSV1,
1268         SSL_EXPORT|SSL_EXP56,
1269         0,
1270         56,
1271         128,
1272         },
1273
1274         /* Cipher 66 */
1275         {
1276         1,
1277         TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
1278         TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
1279         SSL_kEDH,
1280         SSL_aDSS,
1281         SSL_RC4,
1282         SSL_SHA1,
1283         SSL_TLSV1,
1284         SSL_NOT_EXP|SSL_MEDIUM,
1285         0,
1286         128,
1287         128,
1288         },
1289 #endif
1290
1291 #ifndef OPENSSL_NO_CAMELLIA
1292         /* Camellia ciphersuites from RFC4132 (256-bit portion) */
1293
1294         /* Cipher 84 */
1295         {
1296         1,
1297         TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
1298         TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
1299         SSL_kRSA,
1300         SSL_aRSA,
1301         SSL_CAMELLIA256,
1302         SSL_SHA1,
1303         SSL_TLSV1,
1304         SSL_NOT_EXP|SSL_HIGH,
1305         0,
1306         256,
1307         256,
1308         },
1309         /* Cipher 85 */
1310         {
1311         0, /* not implemented (non-ephemeral DH) */
1312         TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1313         TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1314         SSL_kDHd,
1315         SSL_aDH,
1316         SSL_CAMELLIA256,
1317         SSL_SHA1,
1318         SSL_TLSV1,
1319         SSL_NOT_EXP|SSL_HIGH,
1320         0,
1321         256,
1322         256,
1323         },
1324
1325         /* Cipher 86 */
1326         {
1327         0, /* not implemented (non-ephemeral DH) */
1328         TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1329         TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1330         SSL_kDHr,
1331         SSL_aDH,
1332         SSL_CAMELLIA256,
1333         SSL_SHA1,
1334         SSL_TLSV1,
1335         SSL_NOT_EXP|SSL_HIGH,
1336         0,
1337         256,
1338         256,
1339         },
1340
1341         /* Cipher 87 */
1342         {
1343         1,
1344         TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1345         TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1346         SSL_kEDH,
1347         SSL_aDSS,
1348         SSL_CAMELLIA256,
1349         SSL_SHA1,
1350         SSL_TLSV1,
1351         SSL_NOT_EXP|SSL_HIGH,
1352         0,
1353         256,
1354         256,
1355         },
1356
1357         /* Cipher 88 */
1358         {
1359         1,
1360         TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1361         TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1362         SSL_kEDH,
1363         SSL_aRSA,
1364         SSL_CAMELLIA256,
1365         SSL_SHA1,
1366         SSL_TLSV1,
1367         SSL_NOT_EXP|SSL_HIGH,
1368         0,
1369         256,
1370         256,
1371         },
1372
1373         /* Cipher 89 */
1374         {
1375         1,
1376         TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
1377         TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
1378         SSL_kEDH,
1379         SSL_aNULL,
1380         SSL_CAMELLIA256,
1381         SSL_SHA1,
1382         SSL_TLSV1,
1383         SSL_NOT_EXP|SSL_HIGH,
1384         0,
1385         256,
1386         256,
1387         },
1388 #endif /* OPENSSL_NO_CAMELLIA */
1389
1390 #ifndef OPENSSL_NO_PSK
1391         /* Cipher 8A */
1392         {
1393         1,
1394         TLS1_TXT_PSK_WITH_RC4_128_SHA,
1395         TLS1_CK_PSK_WITH_RC4_128_SHA,
1396         SSL_kPSK,
1397         SSL_aPSK,
1398         SSL_RC4,
1399         SSL_SHA1,
1400         SSL_TLSV1,
1401         SSL_NOT_EXP|SSL_MEDIUM,
1402         0,
1403         128,
1404         128,
1405         },
1406
1407         /* Cipher 8B */
1408         {
1409         1,
1410         TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
1411         TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
1412         SSL_kPSK,
1413         SSL_aPSK,
1414         SSL_3DES,
1415         SSL_SHA1,
1416         SSL_TLSV1,
1417         SSL_NOT_EXP|SSL_HIGH,
1418         0,
1419         168,
1420         168,
1421         },
1422
1423         /* Cipher 8C */
1424         {
1425         1,
1426         TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
1427         TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
1428         SSL_kPSK,
1429         SSL_aPSK,
1430         SSL_AES128,
1431         SSL_SHA1,
1432         SSL_TLSV1,
1433         SSL_NOT_EXP|SSL_HIGH,
1434         0,
1435         128,
1436         128,
1437         },
1438
1439         /* Cipher 8D */
1440         {
1441         1,
1442         TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
1443         TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
1444         SSL_kPSK,
1445         SSL_aPSK,
1446         SSL_AES256,
1447         SSL_SHA1,
1448         SSL_TLSV1,
1449         SSL_NOT_EXP|SSL_HIGH,
1450         0,
1451         256,
1452         256,
1453         },
1454 #endif  /* OPENSSL_NO_PSK */
1455
1456 #ifndef OPENSSL_NO_SEED
1457         /* SEED ciphersuites from RFC4162 */
1458
1459         /* Cipher 96 */
1460         {
1461         1,
1462         TLS1_TXT_RSA_WITH_SEED_SHA,
1463         TLS1_CK_RSA_WITH_SEED_SHA,
1464         SSL_kRSA,
1465         SSL_aRSA,
1466         SSL_SEED,
1467         SSL_SHA1,
1468         SSL_TLSV1,
1469         SSL_NOT_EXP|SSL_MEDIUM,
1470         0,
1471         128,
1472         128,
1473         },
1474
1475         /* Cipher 97 */
1476         {
1477         0, /* not implemented (non-ephemeral DH) */
1478         TLS1_TXT_DH_DSS_WITH_SEED_SHA,
1479         TLS1_CK_DH_DSS_WITH_SEED_SHA,
1480         SSL_kDHd,
1481         SSL_aDH,
1482         SSL_SEED,
1483         SSL_SHA1,
1484         SSL_TLSV1,
1485         SSL_NOT_EXP|SSL_MEDIUM,
1486         0,
1487         128,
1488         128,
1489         },
1490
1491         /* Cipher 98 */
1492         {
1493         0, /* not implemented (non-ephemeral DH) */
1494         TLS1_TXT_DH_RSA_WITH_SEED_SHA,
1495         TLS1_CK_DH_RSA_WITH_SEED_SHA,
1496         SSL_kDHr,
1497         SSL_aDH,
1498         SSL_SEED,
1499         SSL_SHA1,
1500         SSL_TLSV1,
1501         SSL_NOT_EXP|SSL_MEDIUM,
1502         0,
1503         128,
1504         128,
1505         },
1506
1507         /* Cipher 99 */
1508         {
1509         1,
1510         TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
1511         TLS1_CK_DHE_DSS_WITH_SEED_SHA,
1512         SSL_kEDH,
1513         SSL_aDSS,
1514         SSL_SEED,
1515         SSL_SHA1,
1516         SSL_TLSV1,
1517         SSL_NOT_EXP|SSL_MEDIUM,
1518         0,
1519         128,
1520         128,
1521         },
1522
1523         /* Cipher 9A */
1524         {
1525         1,
1526         TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
1527         TLS1_CK_DHE_RSA_WITH_SEED_SHA,
1528         SSL_kEDH,
1529         SSL_aRSA,
1530         SSL_SEED,
1531         SSL_SHA1,
1532         SSL_TLSV1,
1533         SSL_NOT_EXP|SSL_MEDIUM,
1534         0,
1535         128,
1536         128,
1537         },
1538
1539         /* Cipher 9B */
1540         {
1541         1,
1542         TLS1_TXT_ADH_WITH_SEED_SHA,
1543         TLS1_CK_ADH_WITH_SEED_SHA,
1544         SSL_kEDH,
1545         SSL_aNULL,
1546         SSL_SEED,
1547         SSL_SHA1,
1548         SSL_TLSV1,
1549         SSL_NOT_EXP|SSL_MEDIUM,
1550         0,
1551         128,
1552         128,
1553         },
1554
1555 #endif /* OPENSSL_NO_SEED */
1556
1557 #ifndef OPENSSL_NO_ECDH
1558         /* Cipher C001 */
1559         {
1560         1,
1561         TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
1562         TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
1563         SSL_kECDHe,
1564         SSL_aECDH,
1565         SSL_eNULL,
1566         SSL_SHA1,
1567         SSL_TLSV1,
1568         SSL_NOT_EXP|SSL_STRONG_NONE,
1569         0,
1570         0,
1571         0,
1572         },
1573
1574         /* Cipher C002 */
1575         {
1576         1,
1577         TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
1578         TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
1579         SSL_kECDHe,
1580         SSL_aECDH,
1581         SSL_RC4,
1582         SSL_SHA1,
1583         SSL_TLSV1,
1584         SSL_NOT_EXP|SSL_MEDIUM,
1585         0,
1586         128,
1587         128,
1588         },
1589
1590         /* Cipher C003 */
1591         {
1592         1,
1593         TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
1594         TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
1595         SSL_kECDHe,
1596         SSL_aECDH,
1597         SSL_3DES,
1598         SSL_SHA1,
1599         SSL_TLSV1,
1600         SSL_NOT_EXP|SSL_HIGH,
1601         0,
1602         168,
1603         168,
1604         },
1605
1606         /* Cipher C004 */
1607         {
1608         1,
1609         TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1610         TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1611         SSL_kECDHe,
1612         SSL_aECDH,
1613         SSL_AES128,
1614         SSL_SHA1,
1615         SSL_TLSV1,
1616         SSL_NOT_EXP|SSL_HIGH,
1617         0,
1618         128,
1619         128,
1620         },
1621
1622         /* Cipher C005 */
1623         {
1624         1,
1625         TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
1626         TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
1627         SSL_kECDHe,
1628         SSL_aECDH,
1629         SSL_AES256,
1630         SSL_SHA1,
1631         SSL_TLSV1,
1632         SSL_NOT_EXP|SSL_HIGH,
1633         0,
1634         256,
1635         256,
1636         },
1637
1638         /* Cipher C006 */
1639         {
1640         1,
1641         TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
1642         TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
1643         SSL_kEECDH,
1644         SSL_aECDSA,
1645         SSL_eNULL,
1646         SSL_SHA1,
1647         SSL_TLSV1,
1648         SSL_NOT_EXP|SSL_STRONG_NONE,
1649         0,
1650         0,
1651         0,
1652         },
1653
1654         /* Cipher C007 */
1655         {
1656         1,
1657         TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
1658         TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
1659         SSL_kEECDH,
1660         SSL_aECDSA,
1661         SSL_RC4,
1662         SSL_SHA1,
1663         SSL_TLSV1,
1664         SSL_NOT_EXP|SSL_MEDIUM,
1665         0,
1666         128,
1667         128,
1668         },
1669
1670         /* Cipher C008 */
1671         {
1672         1,
1673         TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
1674         TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
1675         SSL_kEECDH,
1676         SSL_aECDSA,
1677         SSL_3DES,
1678         SSL_SHA1,
1679         SSL_TLSV1,
1680         SSL_NOT_EXP|SSL_HIGH,
1681         0,
1682         168,
1683         168,
1684         },
1685
1686         /* Cipher C009 */
1687         {
1688         1,
1689         TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
1690         TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
1691         SSL_kEECDH,
1692         SSL_aECDSA,
1693         SSL_AES128,
1694         SSL_SHA1,
1695         SSL_TLSV1,
1696         SSL_NOT_EXP|SSL_HIGH,
1697         0,
1698         128,
1699         128,
1700         },
1701
1702         /* Cipher C00A */
1703         {
1704         1,
1705         TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1706         TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1707         SSL_kEECDH,
1708         SSL_aECDSA,
1709         SSL_AES256,
1710         SSL_SHA1,
1711         SSL_TLSV1,
1712         SSL_NOT_EXP|SSL_HIGH,
1713         0,
1714         256,
1715         256,
1716         },
1717
1718         /* Cipher C00B */
1719         {
1720         1,
1721         TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
1722         TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
1723         SSL_kECDHr,
1724         SSL_aECDH,
1725         SSL_eNULL,
1726         SSL_SHA1,
1727         SSL_TLSV1,
1728         SSL_NOT_EXP|SSL_STRONG_NONE,
1729         0,
1730         0,
1731         0,
1732         },
1733
1734         /* Cipher C00C */
1735         {
1736         1,
1737         TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
1738         TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
1739         SSL_kECDHr,
1740         SSL_aECDH,
1741         SSL_RC4,
1742         SSL_SHA1,
1743         SSL_TLSV1,
1744         SSL_NOT_EXP|SSL_MEDIUM,
1745         0,
1746         128,
1747         128,
1748         },
1749
1750         /* Cipher C00D */
1751         {
1752         1,
1753         TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
1754         TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
1755         SSL_kECDHr,
1756         SSL_aECDH,
1757         SSL_3DES,
1758         SSL_SHA1,
1759         SSL_TLSV1,
1760         SSL_NOT_EXP|SSL_HIGH,
1761         0,
1762         168,
1763         168,
1764         },
1765
1766         /* Cipher C00E */
1767         {
1768         1,
1769         TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
1770         TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
1771         SSL_kECDHr,
1772         SSL_aECDH,
1773         SSL_AES128,
1774         SSL_SHA1,
1775         SSL_TLSV1,
1776         SSL_NOT_EXP|SSL_HIGH,
1777         0,
1778         128,
1779         128,
1780         },
1781
1782         /* Cipher C00F */
1783         {
1784         1,
1785         TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
1786         TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
1787         SSL_kECDHr,
1788         SSL_aECDH,
1789         SSL_AES256,
1790         SSL_SHA1,
1791         SSL_TLSV1,
1792         SSL_NOT_EXP|SSL_HIGH,
1793         0,
1794         256,
1795         256,
1796         },
1797
1798         /* Cipher C010 */
1799         {
1800         1,
1801         TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
1802         TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
1803         SSL_kEECDH,
1804         SSL_aRSA,
1805         SSL_eNULL,
1806         SSL_SHA1,
1807         SSL_TLSV1,
1808         SSL_NOT_EXP|SSL_STRONG_NONE,
1809         0,
1810         0,
1811         0,
1812         },
1813
1814         /* Cipher C011 */
1815         {
1816         1,
1817         TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
1818         TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
1819         SSL_kEECDH,
1820         SSL_aRSA,
1821         SSL_RC4,
1822         SSL_SHA1,
1823         SSL_TLSV1,
1824         SSL_NOT_EXP|SSL_MEDIUM,
1825         0,
1826         128,
1827         128,
1828         },
1829
1830         /* Cipher C012 */
1831         {
1832         1,
1833         TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1834         TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1835         SSL_kEECDH,
1836         SSL_aRSA,
1837         SSL_3DES,
1838         SSL_SHA1,
1839         SSL_TLSV1,
1840         SSL_NOT_EXP|SSL_HIGH,
1841         0,
1842         168,
1843         168,
1844         },
1845
1846         /* Cipher C013 */
1847         {
1848         1,
1849         TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1850         TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1851         SSL_kEECDH,
1852         SSL_aRSA,
1853         SSL_AES128,
1854         SSL_SHA1,
1855         SSL_TLSV1,
1856         SSL_NOT_EXP|SSL_HIGH,
1857         0,
1858         128,
1859         128,
1860         },
1861
1862         /* Cipher C014 */
1863         {
1864         1,
1865         TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1866         TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1867         SSL_kEECDH,
1868         SSL_aRSA,
1869         SSL_AES256,
1870         SSL_SHA1,
1871         SSL_TLSV1,
1872         SSL_NOT_EXP|SSL_HIGH,
1873         0,
1874         256,
1875         256,
1876         },
1877
1878         /* Cipher C015 */
1879         {
1880         1,
1881         TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
1882         TLS1_CK_ECDH_anon_WITH_NULL_SHA,
1883         SSL_kEECDH,
1884         SSL_aNULL,
1885         SSL_eNULL,
1886         SSL_SHA1,
1887         SSL_TLSV1,
1888         SSL_NOT_EXP|SSL_STRONG_NONE,
1889         0,
1890         0,
1891         0,
1892         },
1893
1894         /* Cipher C016 */
1895         {
1896         1,
1897         TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
1898         TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
1899         SSL_kEECDH,
1900         SSL_aNULL,
1901         SSL_RC4,
1902         SSL_SHA1,
1903         SSL_TLSV1,
1904         SSL_NOT_EXP|SSL_MEDIUM,
1905         0,
1906         128,
1907         128,
1908         },
1909
1910         /* Cipher C017 */
1911         {
1912         1,
1913         TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
1914         TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
1915         SSL_kEECDH,
1916         SSL_aNULL,
1917         SSL_3DES,
1918         SSL_SHA1,
1919         SSL_TLSV1,
1920         SSL_NOT_EXP|SSL_HIGH,
1921         0,
1922         168,
1923         168,
1924         },
1925
1926         /* Cipher C018 */
1927         {
1928         1,
1929         TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
1930         TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
1931         SSL_kEECDH,
1932         SSL_aNULL,
1933         SSL_AES128,
1934         SSL_SHA1,
1935         SSL_TLSV1,
1936         SSL_NOT_EXP|SSL_HIGH,
1937         0,
1938         128,
1939         128,
1940         },
1941
1942         /* Cipher C019 */
1943         {
1944         1,
1945         TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
1946         TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
1947         SSL_kEECDH,
1948         SSL_aNULL,
1949         SSL_AES256,
1950         SSL_SHA1,
1951         SSL_TLSV1,
1952         SSL_NOT_EXP|SSL_HIGH,
1953         0,
1954         256,
1955         256,
1956         },
1957 #endif  /* OPENSSL_NO_ECDH */
1958
1959 #ifdef TEMP_GOST_TLS
1960 /* Cipher FF00 */
1961         {
1962         1,
1963         "GOST-MD5",
1964         0x0300ff00,
1965         SSL_kRSA,
1966         SSL_aRSA,
1967         SSL_eGOST2814789CNT,
1968         SSL_MD5,
1969         SSL_TLSV1,
1970         SSL_NOT_EXP|SSL_HIGH,
1971         0,
1972         256,
1973         256,
1974         },
1975         {
1976         1,
1977         "GOST-GOST94",
1978         0x0300ff01,
1979         SSL_kRSA,
1980         SSL_aRSA,
1981         SSL_eGOST2814789CNT,
1982         SSL_GOST94,
1983         SSL_TLSV1,
1984         SSL_NOT_EXP|SSL_HIGH,
1985         0,
1986         256,
1987         256
1988         },
1989         {
1990         1,
1991         "GOST-GOST89MAC",
1992         0x0300ff02,
1993         SSL_kRSA,
1994         SSL_aRSA,
1995         SSL_eGOST2814789CNT,
1996         SSL_GOST89MAC,
1997         SSL_TLSV1,
1998         SSL_NOT_EXP|SSL_HIGH,
1999         0,
2000         256,
2001         256
2002         },
2003         {
2004         1,
2005         "GOST-GOST89STREAM",
2006         0x0300ff03,
2007         SSL_kRSA,
2008         SSL_aRSA,
2009         SSL_eGOST2814789CNT,
2010         SSL_GOST89MAC,
2011         SSL_TLSV1,
2012         SSL_NOT_EXP|SSL_HIGH,
2013         TLS1_STREAM_MAC,
2014         256,
2015         256
2016         },
2017 #endif
2018
2019 /* end of list */
2020         };
2021
2022 SSL3_ENC_METHOD SSLv3_enc_data={
2023         ssl3_enc,
2024         ssl3_mac,
2025         ssl3_setup_key_block,
2026         ssl3_generate_master_secret,
2027         ssl3_change_cipher_state,
2028         ssl3_final_finish_mac,
2029         MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
2030         ssl3_cert_verify_mac,
2031         SSL3_MD_CLIENT_FINISHED_CONST,4,
2032         SSL3_MD_SERVER_FINISHED_CONST,4,
2033         ssl3_alert_code,
2034         };
2035
2036 long ssl3_default_timeout(void)
2037         {
2038         /* 2 hours, the 24 hours mentioned in the SSLv3 spec
2039          * is way too long for http, the cache would over fill */
2040         return(60*60*2);
2041         }
2042
2043 int ssl3_num_ciphers(void)
2044         {
2045         return(SSL3_NUM_CIPHERS);
2046         }
2047
2048 SSL_CIPHER *ssl3_get_cipher(unsigned int u)
2049         {
2050         if (u < SSL3_NUM_CIPHERS)
2051                 return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
2052         else
2053                 return(NULL);
2054         }
2055
2056 int ssl3_pending(const SSL *s)
2057         {
2058         if (s->rstate == SSL_ST_READ_BODY)
2059                 return 0;
2060         
2061         return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
2062         }
2063
2064 int ssl3_new(SSL *s)
2065         {
2066         SSL3_STATE *s3;
2067
2068         if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
2069         memset(s3,0,sizeof *s3);
2070         EVP_MD_CTX_init(&s3->finish_dgst1);
2071         EVP_MD_CTX_init(&s3->finish_dgst2);
2072         memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
2073         memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
2074
2075         s->s3=s3;
2076
2077         s->method->ssl_clear(s);
2078         return(1);
2079 err:
2080         return(0);
2081         }
2082
2083 void ssl3_free(SSL *s)
2084         {
2085         if(s == NULL)
2086             return;
2087
2088         ssl3_cleanup_key_block(s);
2089         if (s->s3->rbuf.buf != NULL)
2090                 OPENSSL_free(s->s3->rbuf.buf);
2091         if (s->s3->wbuf.buf != NULL)
2092                 OPENSSL_free(s->s3->wbuf.buf);
2093         if (s->s3->rrec.comp != NULL)
2094                 OPENSSL_free(s->s3->rrec.comp);
2095 #ifndef OPENSSL_NO_DH
2096         if (s->s3->tmp.dh != NULL)
2097                 DH_free(s->s3->tmp.dh);
2098 #endif
2099 #ifndef OPENSSL_NO_ECDH
2100         if (s->s3->tmp.ecdh != NULL)
2101                 EC_KEY_free(s->s3->tmp.ecdh);
2102 #endif
2103
2104         if (s->s3->tmp.ca_names != NULL)
2105                 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2106         EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
2107         EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
2108
2109         OPENSSL_cleanse(s->s3,sizeof *s->s3);
2110         OPENSSL_free(s->s3);
2111         s->s3=NULL;
2112         }
2113
2114 void ssl3_clear(SSL *s)
2115         {
2116         unsigned char *rp,*wp;
2117         size_t rlen, wlen;
2118
2119         ssl3_cleanup_key_block(s);
2120         if (s->s3->tmp.ca_names != NULL)
2121                 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2122
2123         if (s->s3->rrec.comp != NULL)
2124                 {
2125                 OPENSSL_free(s->s3->rrec.comp);
2126                 s->s3->rrec.comp=NULL;
2127                 }
2128 #ifndef OPENSSL_NO_DH
2129         if (s->s3->tmp.dh != NULL)
2130                 DH_free(s->s3->tmp.dh);
2131 #endif
2132 #ifndef OPENSSL_NO_ECDH
2133         if (s->s3->tmp.ecdh != NULL)
2134                 EC_KEY_free(s->s3->tmp.ecdh);
2135 #endif
2136
2137         rp = s->s3->rbuf.buf;
2138         wp = s->s3->wbuf.buf;
2139         rlen = s->s3->rbuf.len;
2140         wlen = s->s3->wbuf.len;
2141
2142         EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
2143         EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
2144
2145         memset(s->s3,0,sizeof *s->s3);
2146         s->s3->rbuf.buf = rp;
2147         s->s3->wbuf.buf = wp;
2148         s->s3->rbuf.len = rlen;
2149         s->s3->wbuf.len = wlen;
2150
2151         ssl_free_wbio_buffer(s);
2152
2153         s->packet_length=0;
2154         s->s3->renegotiate=0;
2155         s->s3->total_renegotiations=0;
2156         s->s3->num_renegotiations=0;
2157         s->s3->in_read_app_data=0;
2158         s->version=SSL3_VERSION;
2159         }
2160
2161 long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
2162         {
2163         int ret=0;
2164
2165 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
2166         if (
2167 #ifndef OPENSSL_NO_RSA
2168             cmd == SSL_CTRL_SET_TMP_RSA ||
2169             cmd == SSL_CTRL_SET_TMP_RSA_CB ||
2170 #endif
2171 #ifndef OPENSSL_NO_DSA
2172             cmd == SSL_CTRL_SET_TMP_DH ||
2173             cmd == SSL_CTRL_SET_TMP_DH_CB ||
2174 #endif
2175                 0)
2176                 {
2177                 if (!ssl_cert_inst(&s->cert))
2178                         {
2179                         SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
2180                         return(0);
2181                         }
2182                 }
2183 #endif
2184
2185         switch (cmd)
2186                 {
2187         case SSL_CTRL_GET_SESSION_REUSED:
2188                 ret=s->hit;
2189                 break;
2190         case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
2191                 break;
2192         case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
2193                 ret=s->s3->num_renegotiations;
2194                 break;
2195         case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
2196                 ret=s->s3->num_renegotiations;
2197                 s->s3->num_renegotiations=0;
2198                 break;
2199         case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
2200                 ret=s->s3->total_renegotiations;
2201                 break;
2202         case SSL_CTRL_GET_FLAGS:
2203                 ret=(int)(s->s3->flags);
2204                 break;
2205 #ifndef OPENSSL_NO_RSA
2206         case SSL_CTRL_NEED_TMP_RSA:
2207                 if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
2208                     ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
2209                      (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))))
2210                         ret = 1;
2211                 break;
2212         case SSL_CTRL_SET_TMP_RSA:
2213                 {
2214                         RSA *rsa = (RSA *)parg;
2215                         if (rsa == NULL)
2216                                 {
2217                                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
2218                                 return(ret);
2219                                 }
2220                         if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
2221                                 {
2222                                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
2223                                 return(ret);
2224                                 }
2225                         if (s->cert->rsa_tmp != NULL)
2226                                 RSA_free(s->cert->rsa_tmp);
2227                         s->cert->rsa_tmp = rsa;
2228                         ret = 1;
2229                 }
2230                 break;
2231         case SSL_CTRL_SET_TMP_RSA_CB:
2232                 {
2233                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2234                 return(ret);
2235                 }
2236                 break;
2237 #endif
2238 #ifndef OPENSSL_NO_DH
2239         case SSL_CTRL_SET_TMP_DH:
2240                 {
2241                         DH *dh = (DH *)parg;
2242                         if (dh == NULL)
2243                                 {
2244                                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
2245                                 return(ret);
2246                                 }
2247                         if ((dh = DHparams_dup(dh)) == NULL)
2248                                 {
2249                                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
2250                                 return(ret);
2251                                 }
2252                         if (!(s->options & SSL_OP_SINGLE_DH_USE))
2253                                 {
2254                                 if (!DH_generate_key(dh))
2255                                         {
2256                                         DH_free(dh);
2257                                         SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
2258                                         return(ret);
2259                                         }
2260                                 }
2261                         if (s->cert->dh_tmp != NULL)
2262                                 DH_free(s->cert->dh_tmp);
2263                         s->cert->dh_tmp = dh;
2264                         ret = 1;
2265                 }
2266                 break;
2267         case SSL_CTRL_SET_TMP_DH_CB:
2268                 {
2269                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2270                 return(ret);
2271                 }
2272                 break;
2273 #endif
2274 #ifndef OPENSSL_NO_ECDH
2275         case SSL_CTRL_SET_TMP_ECDH:
2276                 {
2277                 EC_KEY *ecdh = NULL;
2278                         
2279                 if (parg == NULL)
2280                         {
2281                         SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
2282                         return(ret);
2283                         }
2284                 if (!EC_KEY_up_ref((EC_KEY *)parg))
2285                         {
2286                         SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
2287                         return(ret);
2288                         }
2289                 ecdh = (EC_KEY *)parg;
2290                 if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
2291                         {
2292                         if (!EC_KEY_generate_key(ecdh))
2293                                 {
2294                                 EC_KEY_free(ecdh);
2295                                 SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
2296                                 return(ret);
2297                                 }
2298                         }
2299                 if (s->cert->ecdh_tmp != NULL)
2300                         EC_KEY_free(s->cert->ecdh_tmp);
2301                 s->cert->ecdh_tmp = ecdh;
2302                 ret = 1;
2303                 }
2304                 break;
2305         case SSL_CTRL_SET_TMP_ECDH_CB:
2306                 {
2307                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2308                 return(ret);
2309                 }
2310                 break;
2311 #endif /* !OPENSSL_NO_ECDH */
2312 #ifndef OPENSSL_NO_TLSEXT
2313         case SSL_CTRL_SET_TLSEXT_HOSTNAME:
2314                 if (larg == TLSEXT_NAMETYPE_host_name)
2315                         {
2316                         if (s->tlsext_hostname != NULL) 
2317                                 OPENSSL_free(s->tlsext_hostname);
2318                         s->tlsext_hostname = NULL;
2319
2320                         ret = 1;
2321                         if (parg == NULL) 
2322                                 break;
2323                         if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
2324                                 {
2325                                 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
2326                                 return 0;
2327                                 }
2328                         if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
2329                                 {
2330                                 SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
2331                                 return 0;
2332                                 }
2333                         }
2334                 else
2335                         {
2336                         SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
2337                         return 0;
2338                         }
2339                 s->options |= SSL_OP_NO_SSLv2; /* can't use extension w/ SSL 2.0 format */
2340                 break;
2341         case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
2342                 s->tlsext_debug_arg=parg;
2343                 break;
2344 #endif /* !OPENSSL_NO_TLSEXT */
2345         default:
2346                 break;
2347                 }
2348         return(ret);
2349         }
2350
2351 long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
2352         {
2353         int ret=0;
2354
2355 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
2356         if (
2357 #ifndef OPENSSL_NO_RSA
2358             cmd == SSL_CTRL_SET_TMP_RSA_CB ||
2359 #endif
2360 #ifndef OPENSSL_NO_DSA
2361             cmd == SSL_CTRL_SET_TMP_DH_CB ||
2362 #endif
2363                 0)
2364                 {
2365                 if (!ssl_cert_inst(&s->cert))
2366                         {
2367                         SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
2368                         return(0);
2369                         }
2370                 }
2371 #endif
2372
2373         switch (cmd)
2374                 {
2375 #ifndef OPENSSL_NO_RSA
2376         case SSL_CTRL_SET_TMP_RSA_CB:
2377                 {
2378                 s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
2379                 }
2380                 break;
2381 #endif
2382 #ifndef OPENSSL_NO_DH
2383         case SSL_CTRL_SET_TMP_DH_CB:
2384                 {
2385                 s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
2386                 }
2387                 break;
2388 #endif
2389 #ifndef OPENSSL_NO_ECDH
2390         case SSL_CTRL_SET_TMP_ECDH_CB:
2391                 {
2392                 s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
2393                 }
2394                 break;
2395 #endif
2396 #ifndef OPENSSL_NO_TLSEXT
2397         case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
2398                 s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
2399                                         unsigned char *, int, void *))fp;
2400                 break;
2401 #endif
2402         default:
2403                 break;
2404                 }
2405         return(ret);
2406         }
2407
2408 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2409         {
2410         CERT *cert;
2411
2412         cert=ctx->cert;
2413
2414         switch (cmd)
2415                 {
2416 #ifndef OPENSSL_NO_RSA
2417         case SSL_CTRL_NEED_TMP_RSA:
2418                 if (    (cert->rsa_tmp == NULL) &&
2419                         ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
2420                          (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))
2421                         )
2422                         return(1);
2423                 else
2424                         return(0);
2425                 /* break; */
2426         case SSL_CTRL_SET_TMP_RSA:
2427                 {
2428                 RSA *rsa;
2429                 int i;
2430
2431                 rsa=(RSA *)parg;
2432                 i=1;
2433                 if (rsa == NULL)
2434                         i=0;
2435                 else
2436                         {
2437                         if ((rsa=RSAPrivateKey_dup(rsa)) == NULL)
2438                                 i=0;
2439                         }
2440                 if (!i)
2441                         {
2442                         SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB);
2443                         return(0);
2444                         }
2445                 else
2446                         {
2447                         if (cert->rsa_tmp != NULL)
2448                                 RSA_free(cert->rsa_tmp);
2449                         cert->rsa_tmp=rsa;
2450                         return(1);
2451                         }
2452                 }
2453                 /* break; */
2454         case SSL_CTRL_SET_TMP_RSA_CB:
2455                 {
2456                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2457                 return(0);
2458                 }
2459                 break;
2460 #endif
2461 #ifndef OPENSSL_NO_DH
2462         case SSL_CTRL_SET_TMP_DH:
2463                 {
2464                 DH *new=NULL,*dh;
2465
2466                 dh=(DH *)parg;
2467                 if ((new=DHparams_dup(dh)) == NULL)
2468                         {
2469                         SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
2470                         return 0;
2471                         }
2472                 if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
2473                         {
2474                         if (!DH_generate_key(new))
2475                                 {
2476                                 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
2477                                 DH_free(new);
2478                                 return 0;
2479                                 }
2480                         }
2481                 if (cert->dh_tmp != NULL)
2482                         DH_free(cert->dh_tmp);
2483                 cert->dh_tmp=new;
2484                 return 1;
2485                 }
2486                 /*break; */
2487         case SSL_CTRL_SET_TMP_DH_CB:
2488                 {
2489                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2490                 return(0);
2491                 }
2492                 break;
2493 #endif
2494 #ifndef OPENSSL_NO_ECDH
2495         case SSL_CTRL_SET_TMP_ECDH:
2496                 {
2497                 EC_KEY *ecdh = NULL;
2498                         
2499                 if (parg == NULL)
2500                         {
2501                         SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
2502                         return 0;
2503                         }
2504                 ecdh = EC_KEY_dup((EC_KEY *)parg);
2505                 if (ecdh == NULL)
2506                         {
2507                         SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB);
2508                         return 0;
2509                         }
2510                 if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
2511                         {
2512                         if (!EC_KEY_generate_key(ecdh))
2513                                 {
2514                                 EC_KEY_free(ecdh);
2515                                 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
2516                                 return 0;
2517                                 }
2518                         }
2519
2520                 if (cert->ecdh_tmp != NULL)
2521                         {
2522                         EC_KEY_free(cert->ecdh_tmp);
2523                         }
2524                 cert->ecdh_tmp = ecdh;
2525                 return 1;
2526                 }
2527                 /* break; */
2528         case SSL_CTRL_SET_TMP_ECDH_CB:
2529                 {
2530                 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2531                 return(0);
2532                 }
2533                 break;
2534 #endif /* !OPENSSL_NO_ECDH */
2535 #ifndef OPENSSL_NO_TLSEXT
2536         case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
2537                 ctx->tlsext_servername_arg=parg;
2538                 break;
2539 #endif /* !OPENSSL_NO_TLSEXT */
2540         /* A Thawte special :-) */
2541         case SSL_CTRL_EXTRA_CHAIN_CERT:
2542                 if (ctx->extra_certs == NULL)
2543                         {
2544                         if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
2545                                 return(0);
2546                         }
2547                 sk_X509_push(ctx->extra_certs,(X509 *)parg);
2548                 break;
2549
2550         default:
2551                 return(0);
2552                 }
2553         return(1);
2554         }
2555
2556 long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
2557         {
2558         CERT *cert;
2559
2560         cert=ctx->cert;
2561
2562         switch (cmd)
2563                 {
2564 #ifndef OPENSSL_NO_RSA
2565         case SSL_CTRL_SET_TMP_RSA_CB:
2566                 {
2567                 cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
2568                 }
2569                 break;
2570 #endif
2571 #ifndef OPENSSL_NO_DH
2572         case SSL_CTRL_SET_TMP_DH_CB:
2573                 {
2574                 cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
2575                 }
2576                 break;
2577 #endif
2578 #ifndef OPENSSL_NO_ECDH
2579         case SSL_CTRL_SET_TMP_ECDH_CB:
2580                 {
2581                 cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
2582                 }
2583                 break;
2584 #endif
2585 #ifndef OPENSSL_NO_TLSEXT
2586         case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
2587                 ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
2588                 break;
2589 #endif
2590         default:
2591                 return(0);
2592                 }
2593         return(1);
2594         }
2595
2596 /* This function needs to check if the ciphers required are actually
2597  * available */
2598 SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
2599         {
2600         SSL_CIPHER c,*cp;
2601         unsigned long id;
2602
2603         id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
2604         c.id=id;
2605         cp = (SSL_CIPHER *)OBJ_bsearch((char *)&c,
2606                 (char *)ssl3_ciphers,
2607                 SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER),
2608                 FP_ICC ssl_cipher_id_cmp);
2609         if (cp == NULL || cp->valid == 0)
2610                 return NULL;
2611         else
2612                 return cp;
2613         }
2614
2615 int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
2616         {
2617         long l;
2618
2619         if (p != NULL)
2620                 {
2621                 l=c->id;
2622                 if ((l & 0xff000000) != 0x03000000) return(0);
2623                 p[0]=((unsigned char)(l>> 8L))&0xFF;
2624                 p[1]=((unsigned char)(l     ))&0xFF;
2625                 }
2626         return(2);
2627         }
2628
2629 SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
2630              STACK_OF(SSL_CIPHER) *srvr)
2631         {
2632         SSL_CIPHER *c,*ret=NULL;
2633         STACK_OF(SSL_CIPHER) *prio, *allow;
2634         int i,ii,ok;
2635         unsigned int j;
2636 #ifndef OPENSSL_NO_TLSEXT
2637 #ifndef OPENSSL_NO_EC
2638         int ec_ok, ec_nid;
2639         unsigned char ec_search1 = 0, ec_search2 = 0;
2640 #endif /* OPENSSL_NO_EC */
2641 #endif /* OPENSSL_NO_TLSEXT */
2642         CERT *cert;
2643         unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a;
2644
2645         /* Let's see which ciphers we can support */
2646         cert=s->cert;
2647
2648 #if 0
2649         /* Do not set the compare functions, because this may lead to a
2650          * reordering by "id". We want to keep the original ordering.
2651          * We may pay a price in performance during sk_SSL_CIPHER_find(),
2652          * but would have to pay with the price of sk_SSL_CIPHER_dup().
2653          */
2654         sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
2655         sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
2656 #endif
2657
2658 #ifdef CIPHER_DEBUG
2659         printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr);
2660         for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
2661                 {
2662                 c=sk_SSL_CIPHER_value(srvr,i);
2663                 printf("%p:%s\n",(void *)c,c->name);
2664                 }
2665         printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt);
2666         for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
2667             {
2668             c=sk_SSL_CIPHER_value(clnt,i);
2669             printf("%p:%s\n",(void *)c,c->name);
2670             }
2671 #endif
2672
2673         if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)
2674                 {
2675                 prio = srvr;
2676                 allow = clnt;
2677                 }
2678         else
2679                 {
2680                 prio = clnt;
2681                 allow = srvr;
2682                 }
2683
2684         for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
2685                 {
2686                 c=sk_SSL_CIPHER_value(prio,i);
2687
2688                 ssl_set_cert_masks(cert,c);
2689                 mask_k = cert->mask_k;
2690                 mask_a = cert->mask_a;
2691                 emask_k = cert->export_mask_k;
2692                 emask_a = cert->export_mask_a;
2693                         
2694 #ifdef KSSL_DEBUG
2695                 printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);
2696 #endif    /* KSSL_DEBUG */
2697
2698                 alg_k=c->algorithm_mkey;
2699                 alg_a=c->algorithm_auth;
2700
2701 #ifndef OPENSSL_NO_KRB5
2702                 if (alg_k & SSL_kKRB5)
2703                         {
2704                         if ( !kssl_keytab_is_available(s->kssl_ctx) )
2705                             continue;
2706                         }
2707 #endif /* OPENSSL_NO_KRB5 */
2708 #ifndef OPENSSL_NO_PSK
2709                 /* with PSK there must be server callback set */
2710                 if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)
2711                         continue;
2712 #endif /* OPENSSL_NO_PSK */
2713
2714                 if (SSL_C_IS_EXPORT(c))
2715                         {
2716                         ok = (alg_k & emask_k) && (alg_a & emask_a);
2717 #ifdef CIPHER_DEBUG
2718                         printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a,
2719                                (void *)c,c->name);
2720 #endif
2721                         }
2722                 else
2723                         {
2724                         ok = (alg_k & mask_k) && (alg_a & mask_a);
2725 #ifdef CIPHER_DEBUG
2726                         printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c,
2727                                c->name);
2728 #endif
2729                         }
2730
2731 #ifndef OPENSSL_NO_TLSEXT
2732 #ifndef OPENSSL_NO_EC
2733                 if (
2734                         /* if we are considering an ECC cipher suite that uses our certificate */
2735                         (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
2736                         /* and we have an ECC certificate */
2737                         && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
2738                         /* and the client specified a Supported Point Formats extension */
2739                         && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL))
2740                         /* and our certificate's point is compressed */
2741                         && (
2742                                 (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL)
2743                                 && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL)
2744                                 && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL)
2745                                 && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL)
2746                                 && (
2747                                         (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED)
2748                                         || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1)
2749                                         )
2750                                 )
2751                 )
2752                         {
2753                         ec_ok = 0;
2754                         /* if our certificate's curve is over a field type that the client does not support
2755                          * then do not allow this cipher suite to be negotiated */
2756                         if (
2757                                 (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)
2758                                 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL)
2759                                 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL)
2760                                 && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field)
2761                         )
2762                                 {
2763                                 for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++)
2764                                         {
2765                                         if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime)
2766                                                 {
2767                                                 ec_ok = 1;
2768                                                 break;
2769                                                 }
2770                                         }
2771                                 }
2772                         else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field)
2773                                 {
2774                                 for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++)
2775                                         {
2776                                         if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2)
2777                                                 {
2778                                                 ec_ok = 1;
2779                                                 break;
2780                                                 }
2781                                         }
2782                                 }
2783                         ok = ok && ec_ok;
2784                         }
2785                 if (
2786                         /* if we are considering an ECC cipher suite that uses our certificate */
2787                         (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
2788                         /* and we have an ECC certificate */
2789                         && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
2790                         /* and the client specified an EllipticCurves extension */
2791                         && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL))
2792                 )
2793                         {
2794                         ec_ok = 0;
2795                         if (
2796                                 (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)
2797                                 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL)
2798                         )
2799                                 {
2800                                 ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group);
2801                                 if ((ec_nid == 0)
2802                                         && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL)
2803                                 )
2804                                         {
2805                                         if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field)
2806                                                 {
2807                                                 ec_search1 = 0xFF;
2808                                                 ec_search2 = 0x01;
2809                                                 }
2810                                         else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field)
2811                                                 {
2812                                                 ec_search1 = 0xFF;
2813                                                 ec_search2 = 0x02;
2814                                                 }
2815                                         }
2816                                 else
2817                                         {
2818                                         ec_search1 = 0x00;
2819                                         ec_search2 = tls1_ec_nid2curve_id(ec_nid);
2820                                         }
2821                                 if ((ec_search1 != 0) || (ec_search2 != 0))
2822                                         {
2823                                         for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++)
2824                                                 {
2825                                                 if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2))
2826                                                         {
2827                                                         ec_ok = 1;
2828                                                         break;
2829                                                         }
2830                                                 }
2831                                         }
2832                                 }
2833                         ok = ok && ec_ok;
2834                         }
2835                 if (
2836                         /* if we are considering an ECC cipher suite that uses an ephemeral EC key */
2837                         (alg_k & SSL_kEECDH)
2838                         /* and we have an ephemeral EC key */
2839                         && (s->cert->ecdh_tmp != NULL)
2840                         /* and the client specified an EllipticCurves extension */
2841                         && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL))
2842                 )
2843                         {
2844                         ec_ok = 0;
2845                         if (s->cert->ecdh_tmp->group != NULL)
2846                                 {
2847                                 ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group);
2848                                 if ((ec_nid == 0)
2849                                         && (s->cert->ecdh_tmp->group->meth != NULL)
2850                                 )
2851                                         {
2852                                         if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field)
2853                                                 {
2854                                                 ec_search1 = 0xFF;
2855                                                 ec_search2 = 0x01;
2856                                                 }
2857                                         else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field)
2858                                                 {
2859                                                 ec_search1 = 0xFF;
2860                                                 ec_search2 = 0x02;
2861                                                 }
2862                                         }
2863                                 else
2864                                         {
2865                                         ec_search1 = 0x00;
2866                                         ec_search2 = tls1_ec_nid2curve_id(ec_nid);
2867                                         }
2868                                 if ((ec_search1 != 0) || (ec_search2 != 0))
2869                                         {
2870                                         for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++)
2871                                                 {
2872                                                 if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2))
2873                                                         {
2874                                                         ec_ok = 1;
2875                                                         break;
2876                                                         }
2877                                                 }
2878                                         }
2879                                 }
2880                         ok = ok && ec_ok;
2881                         }
2882 #endif /* OPENSSL_NO_EC */
2883 #endif /* OPENSSL_NO_TLSEXT */
2884
2885                 if (!ok) continue;
2886                 ii=sk_SSL_CIPHER_find(allow,c);
2887                 if (ii >= 0)
2888                         {
2889                         ret=sk_SSL_CIPHER_value(allow,ii);
2890                         break;
2891                         }
2892                 }
2893         return(ret);
2894         }
2895
2896 int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
2897         {
2898         int ret=0;
2899         unsigned long alg_k;
2900
2901         alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2902
2903 #ifndef OPENSSL_NO_DH
2904         if (alg_k & (SSL_kDHr|SSL_kEDH))
2905                 {
2906 #  ifndef OPENSSL_NO_RSA
2907                 p[ret++]=SSL3_CT_RSA_FIXED_DH;
2908 #  endif
2909 #  ifndef OPENSSL_NO_DSA
2910                 p[ret++]=SSL3_CT_DSS_FIXED_DH;
2911 #  endif
2912                 }
2913         if ((s->version == SSL3_VERSION) &&
2914                 (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
2915                 {
2916 #  ifndef OPENSSL_NO_RSA
2917                 p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
2918 #  endif
2919 #  ifndef OPENSSL_NO_DSA
2920                 p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
2921 #  endif
2922                 }
2923 #endif /* !OPENSSL_NO_DH */
2924 #ifndef OPENSSL_NO_RSA
2925         p[ret++]=SSL3_CT_RSA_SIGN;
2926 #endif
2927 #ifndef OPENSSL_NO_DSA
2928         p[ret++]=SSL3_CT_DSS_SIGN;
2929 #endif
2930 #ifndef OPENSSL_NO_ECDH
2931         if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION))
2932                 {
2933                 p[ret++]=TLS_CT_RSA_FIXED_ECDH;
2934                 p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
2935                 }
2936 #endif
2937
2938 #ifndef OPENSSL_NO_ECDSA
2939         /* ECDSA certs can be used with RSA cipher suites as well 
2940          * so we don't need to check for SSL_kECDH or SSL_kEECDH
2941          */
2942         if (s->version >= TLS1_VERSION)
2943                 {
2944                 p[ret++]=TLS_CT_ECDSA_SIGN;
2945                 }
2946 #endif  
2947         return(ret);
2948         }
2949
2950 int ssl3_shutdown(SSL *s)
2951         {
2952
2953         /* Don't do anything much if we have not done the handshake or
2954          * we don't want to send messages :-) */
2955         if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
2956                 {
2957                 s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
2958                 return(1);
2959                 }
2960
2961         if (!(s->shutdown & SSL_SENT_SHUTDOWN))
2962                 {
2963                 s->shutdown|=SSL_SENT_SHUTDOWN;
2964 #if 1
2965                 ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
2966 #endif
2967                 /* our shutdown alert has been sent now, and if it still needs
2968                  * to be written, s->s3->alert_dispatch will be true */
2969                 }
2970         else if (s->s3->alert_dispatch)
2971                 {
2972                 /* resend it if not sent */
2973 #if 1
2974                 s->method->ssl_dispatch_alert(s);
2975 #endif
2976                 }
2977         else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
2978                 {
2979                 /* If we are waiting for a close from our peer, we are closed */
2980                 s->method->ssl_read_bytes(s,0,NULL,0,0);
2981                 }
2982
2983         if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
2984                 !s->s3->alert_dispatch)
2985                 return(1);
2986         else
2987                 return(0);
2988         }
2989
2990 int ssl3_write(SSL *s, const void *buf, int len)
2991         {
2992         int ret,n;
2993
2994 #if 0
2995         if (s->shutdown & SSL_SEND_SHUTDOWN)
2996                 {
2997                 s->rwstate=SSL_NOTHING;
2998                 return(0);
2999                 }
3000 #endif
3001         clear_sys_error();
3002         if (s->s3->renegotiate) ssl3_renegotiate_check(s);
3003
3004         /* This is an experimental flag that sends the
3005          * last handshake message in the same packet as the first
3006          * use data - used to see if it helps the TCP protocol during
3007          * session-id reuse */
3008         /* The second test is because the buffer may have been removed */
3009         if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
3010                 {
3011                 /* First time through, we write into the buffer */
3012                 if (s->s3->delay_buf_pop_ret == 0)
3013                         {
3014                         ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
3015                                              buf,len);
3016                         if (ret <= 0) return(ret);
3017
3018                         s->s3->delay_buf_pop_ret=ret;
3019                         }
3020
3021                 s->rwstate=SSL_WRITING;
3022                 n=BIO_flush(s->wbio);
3023                 if (n <= 0) return(n);
3024                 s->rwstate=SSL_NOTHING;
3025
3026                 /* We have flushed the buffer, so remove it */
3027                 ssl_free_wbio_buffer(s);
3028                 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
3029
3030                 ret=s->s3->delay_buf_pop_ret;
3031                 s->s3->delay_buf_pop_ret=0;
3032                 }
3033         else
3034                 {
3035                 ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
3036                         buf,len);
3037                 if (ret <= 0) return(ret);
3038                 }
3039
3040         return(ret);
3041         }
3042
3043 static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
3044         {
3045         int ret;
3046         
3047         clear_sys_error();
3048         if (s->s3->renegotiate) ssl3_renegotiate_check(s);
3049         s->s3->in_read_app_data=1;
3050         ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
3051         if ((ret == -1) && (s->s3->in_read_app_data == 2))
3052                 {
3053                 /* ssl3_read_bytes decided to call s->handshake_func, which
3054                  * called ssl3_read_bytes to read handshake data.
3055                  * However, ssl3_read_bytes actually found application data
3056                  * and thinks that application data makes sense here; so disable
3057                  * handshake processing and try to read application data again. */
3058                 s->in_handshake++;
3059                 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
3060                 s->in_handshake--;
3061                 }
3062         else
3063                 s->s3->in_read_app_data=0;
3064
3065         return(ret);
3066         }
3067
3068 int ssl3_read(SSL *s, void *buf, int len)
3069         {
3070         return ssl3_read_internal(s, buf, len, 0);
3071         }
3072
3073 int ssl3_peek(SSL *s, void *buf, int len)
3074         {
3075         return ssl3_read_internal(s, buf, len, 1);
3076         }
3077
3078 int ssl3_renegotiate(SSL *s)
3079         {
3080         if (s->handshake_func == NULL)
3081                 return(1);
3082
3083         if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
3084                 return(0);
3085
3086         s->s3->renegotiate=1;
3087         return(1);
3088         }
3089
3090 int ssl3_renegotiate_check(SSL *s)
3091         {
3092         int ret=0;
3093
3094         if (s->s3->renegotiate)
3095                 {
3096                 if (    (s->s3->rbuf.left == 0) &&
3097                         (s->s3->wbuf.left == 0) &&
3098                         !SSL_in_init(s))
3099                         {
3100 /*
3101 if we are the server, and we have sent a 'RENEGOTIATE' message, we
3102 need to go to SSL_ST_ACCEPT.
3103 */
3104                         /* SSL_ST_ACCEPT */
3105                         s->state=SSL_ST_RENEGOTIATE;
3106                         s->s3->renegotiate=0;
3107                         s->s3->num_renegotiations++;
3108                         s->s3->total_renegotiations++;
3109                         ret=1;
3110                         }
3111                 }
3112         return(ret);
3113         }
3114