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