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