GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: lib/libssl/s3_lib.c Lines: 273 513 53.2 %
Date: 2017-11-07 Branches: 104 289 36.0 %

Line Branch Exec Source
1
/* $OpenBSD: s3_lib.c,v 1.161 2017/09/25 18:04:08 jsing Exp $ */
2
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
 * All rights reserved.
4
 *
5
 * This package is an SSL implementation written
6
 * by Eric Young (eay@cryptsoft.com).
7
 * The implementation was written so as to conform with Netscapes SSL.
8
 *
9
 * This library is free for commercial and non-commercial use as long as
10
 * the following conditions are aheared to.  The following conditions
11
 * apply to all code found in this distribution, be it the RC4, RSA,
12
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13
 * included with this distribution is covered by the same copyright terms
14
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
 *
16
 * Copyright remains Eric Young's, and as such any Copyright notices in
17
 * the code are not to be removed.
18
 * If this package is used in a product, Eric Young should be given attribution
19
 * as the author of the parts of the library used.
20
 * This can be in the form of a textual message at program startup or
21
 * in documentation (online or textual) provided with the package.
22
 *
23
 * Redistribution and use in source and binary forms, with or without
24
 * modification, are permitted provided that the following conditions
25
 * are met:
26
 * 1. Redistributions of source code must retain the copyright
27
 *    notice, this list of conditions and the following disclaimer.
28
 * 2. Redistributions in binary form must reproduce the above copyright
29
 *    notice, this list of conditions and the following disclaimer in the
30
 *    documentation and/or other materials provided with the distribution.
31
 * 3. All advertising materials mentioning features or use of this software
32
 *    must display the following acknowledgement:
33
 *    "This product includes cryptographic software written by
34
 *     Eric Young (eay@cryptsoft.com)"
35
 *    The word 'cryptographic' can be left out if the rouines from the library
36
 *    being used are not cryptographic related :-).
37
 * 4. If you include any Windows specific code (or a derivative thereof) from
38
 *    the apps directory (application code) you must include an acknowledgement:
39
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
 *
41
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
 * SUCH DAMAGE.
52
 *
53
 * The licence and distribution terms for any publically available version or
54
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
55
 * copied and put under another distribution licence
56
 * [including the GNU Public Licence.]
57
 */
58
/* ====================================================================
59
 * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
60
 *
61
 * Redistribution and use in source and binary forms, with or without
62
 * modification, are permitted provided that the following conditions
63
 * are met:
64
 *
65
 * 1. Redistributions of source code must retain the above copyright
66
 *    notice, this list of conditions and the following disclaimer.
67
 *
68
 * 2. Redistributions in binary form must reproduce the above copyright
69
 *    notice, this list of conditions and the following disclaimer in
70
 *    the documentation and/or other materials provided with the
71
 *    distribution.
72
 *
73
 * 3. All advertising materials mentioning features or use of this
74
 *    software must display the following acknowledgment:
75
 *    "This product includes software developed by the OpenSSL Project
76
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77
 *
78
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79
 *    endorse or promote products derived from this software without
80
 *    prior written permission. For written permission, please contact
81
 *    openssl-core@openssl.org.
82
 *
83
 * 5. Products derived from this software may not be called "OpenSSL"
84
 *    nor may "OpenSSL" appear in their names without prior written
85
 *    permission of the OpenSSL Project.
86
 *
87
 * 6. Redistributions of any form whatsoever must retain the following
88
 *    acknowledgment:
89
 *    "This product includes software developed by the OpenSSL Project
90
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91
 *
92
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103
 * OF THE POSSIBILITY OF SUCH DAMAGE.
104
 * ====================================================================
105
 *
106
 * This product includes cryptographic software written by Eric Young
107
 * (eay@cryptsoft.com).  This product includes software written by Tim
108
 * Hudson (tjh@cryptsoft.com).
109
 *
110
 */
111
/* ====================================================================
112
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113
 *
114
 * Portions of the attached software ("Contribution") are developed by
115
 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
116
 *
117
 * The Contribution is licensed pursuant to the OpenSSL open source
118
 * license provided above.
119
 *
120
 * ECC cipher suite support in OpenSSL originally written by
121
 * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
122
 *
123
 */
124
/* ====================================================================
125
 * Copyright 2005 Nokia. All rights reserved.
126
 *
127
 * The portions of the attached software ("Contribution") is developed by
128
 * Nokia Corporation and is licensed pursuant to the OpenSSL open source
129
 * license.
130
 *
131
 * The Contribution, originally written by Mika Kousa and Pasi Eronen of
132
 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
133
 * support (see RFC 4279) to OpenSSL.
134
 *
135
 * No patent licenses or other rights except those expressly stated in
136
 * the OpenSSL open source license shall be deemed granted or received
137
 * expressly, by implication, estoppel, or otherwise.
138
 *
139
 * No assurances are provided by Nokia that the Contribution does not
140
 * infringe the patent or other intellectual property rights of any third
141
 * party or that the license provides you with all the necessary rights
142
 * to make use of the Contribution.
143
 *
144
 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
145
 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
146
 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
147
 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
148
 * OTHERWISE.
149
 */
150
151
#include <limits.h>
152
#include <stdio.h>
153
154
#include <openssl/bn.h>
155
#include <openssl/curve25519.h>
156
#include <openssl/dh.h>
157
#include <openssl/md5.h>
158
#include <openssl/objects.h>
159
160
#include "ssl_locl.h"
161
#include "bytestring.h"
162
163
#define SSL3_NUM_CIPHERS	(sizeof(ssl3_ciphers) / sizeof(SSL_CIPHER))
164
165
/*
166
 * FIXED_NONCE_LEN is a macro that provides in the correct value to set the
167
 * fixed nonce length in algorithms2. It is the inverse of the
168
 * SSL_CIPHER_AEAD_FIXED_NONCE_LEN macro.
169
 */
170
#define FIXED_NONCE_LEN(x) (((x / 2) & 0xf) << 24)
171
172
/* list of available SSLv3 ciphers (sorted by id) */
173
SSL_CIPHER ssl3_ciphers[] = {
174
175
	/* The RSA ciphers */
176
	/* Cipher 01 */
177
	{
178
		.valid = 1,
179
		.name = SSL3_TXT_RSA_NULL_MD5,
180
		.id = SSL3_CK_RSA_NULL_MD5,
181
		.algorithm_mkey = SSL_kRSA,
182
		.algorithm_auth = SSL_aRSA,
183
		.algorithm_enc = SSL_eNULL,
184
		.algorithm_mac = SSL_MD5,
185
		.algorithm_ssl = SSL_SSLV3,
186
		.algo_strength = SSL_STRONG_NONE,
187
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
188
		.strength_bits = 0,
189
		.alg_bits = 0,
190
	},
191
192
	/* Cipher 02 */
193
	{
194
		.valid = 1,
195
		.name = SSL3_TXT_RSA_NULL_SHA,
196
		.id = SSL3_CK_RSA_NULL_SHA,
197
		.algorithm_mkey = SSL_kRSA,
198
		.algorithm_auth = SSL_aRSA,
199
		.algorithm_enc = SSL_eNULL,
200
		.algorithm_mac = SSL_SHA1,
201
		.algorithm_ssl = SSL_SSLV3,
202
		.algo_strength = SSL_STRONG_NONE,
203
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
204
		.strength_bits = 0,
205
		.alg_bits = 0,
206
	},
207
208
	/* Cipher 04 */
209
	{
210
		.valid = 1,
211
		.name = SSL3_TXT_RSA_RC4_128_MD5,
212
		.id = SSL3_CK_RSA_RC4_128_MD5,
213
		.algorithm_mkey = SSL_kRSA,
214
		.algorithm_auth = SSL_aRSA,
215
		.algorithm_enc = SSL_RC4,
216
		.algorithm_mac = SSL_MD5,
217
		.algorithm_ssl = SSL_SSLV3,
218
		.algo_strength = SSL_LOW,
219
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
220
		.strength_bits = 128,
221
		.alg_bits = 128,
222
	},
223
224
	/* Cipher 05 */
225
	{
226
		.valid = 1,
227
		.name = SSL3_TXT_RSA_RC4_128_SHA,
228
		.id = SSL3_CK_RSA_RC4_128_SHA,
229
		.algorithm_mkey = SSL_kRSA,
230
		.algorithm_auth = SSL_aRSA,
231
		.algorithm_enc = SSL_RC4,
232
		.algorithm_mac = SSL_SHA1,
233
		.algorithm_ssl = SSL_SSLV3,
234
		.algo_strength = SSL_LOW,
235
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
236
		.strength_bits = 128,
237
		.alg_bits = 128,
238
	},
239
240
	/* Cipher 09 */
241
	{
242
		.valid = 1,
243
		.name = SSL3_TXT_RSA_DES_64_CBC_SHA,
244
		.id = SSL3_CK_RSA_DES_64_CBC_SHA,
245
		.algorithm_mkey = SSL_kRSA,
246
		.algorithm_auth = SSL_aRSA,
247
		.algorithm_enc = SSL_DES,
248
		.algorithm_mac = SSL_SHA1,
249
		.algorithm_ssl = SSL_SSLV3,
250
		.algo_strength = SSL_LOW,
251
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
252
		.strength_bits = 56,
253
		.alg_bits = 56,
254
	},
255
256
	/* Cipher 0A */
257
	{
258
		.valid = 1,
259
		.name = SSL3_TXT_RSA_DES_192_CBC3_SHA,
260
		.id = SSL3_CK_RSA_DES_192_CBC3_SHA,
261
		.algorithm_mkey = SSL_kRSA,
262
		.algorithm_auth = SSL_aRSA,
263
		.algorithm_enc = SSL_3DES,
264
		.algorithm_mac = SSL_SHA1,
265
		.algorithm_ssl = SSL_SSLV3,
266
		.algo_strength = SSL_MEDIUM,
267
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
268
		.strength_bits = 112,
269
		.alg_bits = 168,
270
	},
271
272
	/*
273
	 * Ephemeral DH (DHE) ciphers.
274
	 */
275
276
	/* Cipher 15 */
277
	{
278
		.valid = 1,
279
		.name = SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
280
		.id = SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
281
		.algorithm_mkey = SSL_kDHE,
282
		.algorithm_auth = SSL_aRSA,
283
		.algorithm_enc = SSL_DES,
284
		.algorithm_mac = SSL_SHA1,
285
		.algorithm_ssl = SSL_SSLV3,
286
		.algo_strength = SSL_LOW,
287
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
288
		.strength_bits = 56,
289
		.alg_bits = 56,
290
	},
291
292
	/* Cipher 16 */
293
	{
294
		.valid = 1,
295
		.name = SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
296
		.id = SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
297
		.algorithm_mkey = SSL_kDHE,
298
		.algorithm_auth = SSL_aRSA,
299
		.algorithm_enc = SSL_3DES,
300
		.algorithm_mac = SSL_SHA1,
301
		.algorithm_ssl = SSL_SSLV3,
302
		.algo_strength = SSL_MEDIUM,
303
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
304
		.strength_bits = 112,
305
		.alg_bits = 168,
306
	},
307
308
	/* Cipher 18 */
309
	{
310
		.valid = 1,
311
		.name = SSL3_TXT_ADH_RC4_128_MD5,
312
		.id = SSL3_CK_ADH_RC4_128_MD5,
313
		.algorithm_mkey = SSL_kDHE,
314
		.algorithm_auth = SSL_aNULL,
315
		.algorithm_enc = SSL_RC4,
316
		.algorithm_mac = SSL_MD5,
317
		.algorithm_ssl = SSL_SSLV3,
318
		.algo_strength = SSL_LOW,
319
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
320
		.strength_bits = 128,
321
		.alg_bits = 128,
322
	},
323
324
	/* Cipher 1A */
325
	{
326
		.valid = 1,
327
		.name = SSL3_TXT_ADH_DES_64_CBC_SHA,
328
		.id = SSL3_CK_ADH_DES_64_CBC_SHA,
329
		.algorithm_mkey = SSL_kDHE,
330
		.algorithm_auth = SSL_aNULL,
331
		.algorithm_enc = SSL_DES,
332
		.algorithm_mac = SSL_SHA1,
333
		.algorithm_ssl = SSL_SSLV3,
334
		.algo_strength = SSL_LOW,
335
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
336
		.strength_bits = 56,
337
		.alg_bits = 56,
338
	},
339
340
	/* Cipher 1B */
341
	{
342
		.valid = 1,
343
		.name = SSL3_TXT_ADH_DES_192_CBC_SHA,
344
		.id = SSL3_CK_ADH_DES_192_CBC_SHA,
345
		.algorithm_mkey = SSL_kDHE,
346
		.algorithm_auth = SSL_aNULL,
347
		.algorithm_enc = SSL_3DES,
348
		.algorithm_mac = SSL_SHA1,
349
		.algorithm_ssl = SSL_SSLV3,
350
		.algo_strength = SSL_MEDIUM,
351
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
352
		.strength_bits = 112,
353
		.alg_bits = 168,
354
	},
355
356
	/*
357
	 * AES ciphersuites.
358
	 */
359
360
	/* Cipher 2F */
361
	{
362
		.valid = 1,
363
		.name = TLS1_TXT_RSA_WITH_AES_128_SHA,
364
		.id = TLS1_CK_RSA_WITH_AES_128_SHA,
365
		.algorithm_mkey = SSL_kRSA,
366
		.algorithm_auth = SSL_aRSA,
367
		.algorithm_enc = SSL_AES128,
368
		.algorithm_mac = SSL_SHA1,
369
		.algorithm_ssl = SSL_TLSV1,
370
		.algo_strength = SSL_HIGH,
371
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
372
		.strength_bits = 128,
373
		.alg_bits = 128,
374
	},
375
376
	/* Cipher 33 */
377
	{
378
		.valid = 1,
379
		.name = TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
380
		.id = TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
381
		.algorithm_mkey = SSL_kDHE,
382
		.algorithm_auth = SSL_aRSA,
383
		.algorithm_enc = SSL_AES128,
384
		.algorithm_mac = SSL_SHA1,
385
		.algorithm_ssl = SSL_TLSV1,
386
		.algo_strength = SSL_HIGH,
387
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
388
		.strength_bits = 128,
389
		.alg_bits = 128,
390
	},
391
392
	/* Cipher 34 */
393
	{
394
		.valid = 1,
395
		.name = TLS1_TXT_ADH_WITH_AES_128_SHA,
396
		.id = TLS1_CK_ADH_WITH_AES_128_SHA,
397
		.algorithm_mkey = SSL_kDHE,
398
		.algorithm_auth = SSL_aNULL,
399
		.algorithm_enc = SSL_AES128,
400
		.algorithm_mac = SSL_SHA1,
401
		.algorithm_ssl = SSL_TLSV1,
402
		.algo_strength = SSL_HIGH,
403
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
404
		.strength_bits = 128,
405
		.alg_bits = 128,
406
	},
407
408
	/* Cipher 35 */
409
	{
410
		.valid = 1,
411
		.name = TLS1_TXT_RSA_WITH_AES_256_SHA,
412
		.id = TLS1_CK_RSA_WITH_AES_256_SHA,
413
		.algorithm_mkey = SSL_kRSA,
414
		.algorithm_auth = SSL_aRSA,
415
		.algorithm_enc = SSL_AES256,
416
		.algorithm_mac = SSL_SHA1,
417
		.algorithm_ssl = SSL_TLSV1,
418
		.algo_strength = SSL_HIGH,
419
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
420
		.strength_bits = 256,
421
		.alg_bits = 256,
422
	},
423
424
	/* Cipher 39 */
425
	{
426
		.valid = 1,
427
		.name = TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
428
		.id = TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
429
		.algorithm_mkey = SSL_kDHE,
430
		.algorithm_auth = SSL_aRSA,
431
		.algorithm_enc = SSL_AES256,
432
		.algorithm_mac = SSL_SHA1,
433
		.algorithm_ssl = SSL_TLSV1,
434
		.algo_strength = SSL_HIGH,
435
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
436
		.strength_bits = 256,
437
		.alg_bits = 256,
438
	},
439
440
	/* Cipher 3A */
441
	{
442
		.valid = 1,
443
		.name = TLS1_TXT_ADH_WITH_AES_256_SHA,
444
		.id = TLS1_CK_ADH_WITH_AES_256_SHA,
445
		.algorithm_mkey = SSL_kDHE,
446
		.algorithm_auth = SSL_aNULL,
447
		.algorithm_enc = SSL_AES256,
448
		.algorithm_mac = SSL_SHA1,
449
		.algorithm_ssl = SSL_TLSV1,
450
		.algo_strength = SSL_HIGH,
451
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
452
		.strength_bits = 256,
453
		.alg_bits = 256,
454
	},
455
456
	/* TLS v1.2 ciphersuites */
457
	/* Cipher 3B */
458
	{
459
		.valid = 1,
460
		.name = TLS1_TXT_RSA_WITH_NULL_SHA256,
461
		.id = TLS1_CK_RSA_WITH_NULL_SHA256,
462
		.algorithm_mkey = SSL_kRSA,
463
		.algorithm_auth = SSL_aRSA,
464
		.algorithm_enc = SSL_eNULL,
465
		.algorithm_mac = SSL_SHA256,
466
		.algorithm_ssl = SSL_TLSV1_2,
467
		.algo_strength = SSL_STRONG_NONE,
468
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
469
		.strength_bits = 0,
470
		.alg_bits = 0,
471
	},
472
473
	/* Cipher 3C */
474
	{
475
		.valid = 1,
476
		.name = TLS1_TXT_RSA_WITH_AES_128_SHA256,
477
		.id = TLS1_CK_RSA_WITH_AES_128_SHA256,
478
		.algorithm_mkey = SSL_kRSA,
479
		.algorithm_auth = SSL_aRSA,
480
		.algorithm_enc = SSL_AES128,
481
		.algorithm_mac = SSL_SHA256,
482
		.algorithm_ssl = SSL_TLSV1_2,
483
		.algo_strength = SSL_HIGH,
484
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
485
		.strength_bits = 128,
486
		.alg_bits = 128,
487
	},
488
489
	/* Cipher 3D */
490
	{
491
		.valid = 1,
492
		.name = TLS1_TXT_RSA_WITH_AES_256_SHA256,
493
		.id = TLS1_CK_RSA_WITH_AES_256_SHA256,
494
		.algorithm_mkey = SSL_kRSA,
495
		.algorithm_auth = SSL_aRSA,
496
		.algorithm_enc = SSL_AES256,
497
		.algorithm_mac = SSL_SHA256,
498
		.algorithm_ssl = SSL_TLSV1_2,
499
		.algo_strength = SSL_HIGH,
500
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
501
		.strength_bits = 256,
502
		.alg_bits = 256,
503
	},
504
505
#ifndef OPENSSL_NO_CAMELLIA
506
	/* Camellia ciphersuites from RFC4132 (128-bit portion) */
507
508
	/* Cipher 41 */
509
	{
510
		.valid = 1,
511
		.name = TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
512
		.id = TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
513
		.algorithm_mkey = SSL_kRSA,
514
		.algorithm_auth = SSL_aRSA,
515
		.algorithm_enc = SSL_CAMELLIA128,
516
		.algorithm_mac = SSL_SHA1,
517
		.algorithm_ssl = SSL_TLSV1,
518
		.algo_strength = SSL_HIGH,
519
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
520
		.strength_bits = 128,
521
		.alg_bits = 128,
522
	},
523
524
	/* Cipher 45 */
525
	{
526
		.valid = 1,
527
		.name = TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
528
		.id = TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
529
		.algorithm_mkey = SSL_kDHE,
530
		.algorithm_auth = SSL_aRSA,
531
		.algorithm_enc = SSL_CAMELLIA128,
532
		.algorithm_mac = SSL_SHA1,
533
		.algorithm_ssl = SSL_TLSV1,
534
		.algo_strength = SSL_HIGH,
535
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
536
		.strength_bits = 128,
537
		.alg_bits = 128,
538
	},
539
540
	/* Cipher 46 */
541
	{
542
		.valid = 1,
543
		.name = TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
544
		.id = TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
545
		.algorithm_mkey = SSL_kDHE,
546
		.algorithm_auth = SSL_aNULL,
547
		.algorithm_enc = SSL_CAMELLIA128,
548
		.algorithm_mac = SSL_SHA1,
549
		.algorithm_ssl = SSL_TLSV1,
550
		.algo_strength = SSL_HIGH,
551
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
552
		.strength_bits = 128,
553
		.alg_bits = 128,
554
	},
555
#endif /* OPENSSL_NO_CAMELLIA */
556
557
	/* TLS v1.2 ciphersuites */
558
	/* Cipher 67 */
559
	{
560
		.valid = 1,
561
		.name = TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
562
		.id = TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
563
		.algorithm_mkey = SSL_kDHE,
564
		.algorithm_auth = SSL_aRSA,
565
		.algorithm_enc = SSL_AES128,
566
		.algorithm_mac = SSL_SHA256,
567
		.algorithm_ssl = SSL_TLSV1_2,
568
		.algo_strength = SSL_HIGH,
569
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
570
		.strength_bits = 128,
571
		.alg_bits = 128,
572
	},
573
574
	/* Cipher 6B */
575
	{
576
		.valid = 1,
577
		.name = TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
578
		.id = TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
579
		.algorithm_mkey = SSL_kDHE,
580
		.algorithm_auth = SSL_aRSA,
581
		.algorithm_enc = SSL_AES256,
582
		.algorithm_mac = SSL_SHA256,
583
		.algorithm_ssl = SSL_TLSV1_2,
584
		.algo_strength = SSL_HIGH,
585
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
586
		.strength_bits = 256,
587
		.alg_bits = 256,
588
	},
589
590
	/* Cipher 6C */
591
	{
592
		.valid = 1,
593
		.name = TLS1_TXT_ADH_WITH_AES_128_SHA256,
594
		.id = TLS1_CK_ADH_WITH_AES_128_SHA256,
595
		.algorithm_mkey = SSL_kDHE,
596
		.algorithm_auth = SSL_aNULL,
597
		.algorithm_enc = SSL_AES128,
598
		.algorithm_mac = SSL_SHA256,
599
		.algorithm_ssl = SSL_TLSV1_2,
600
		.algo_strength = SSL_HIGH,
601
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
602
		.strength_bits = 128,
603
		.alg_bits = 128,
604
	},
605
606
	/* Cipher 6D */
607
	{
608
		.valid = 1,
609
		.name = TLS1_TXT_ADH_WITH_AES_256_SHA256,
610
		.id = TLS1_CK_ADH_WITH_AES_256_SHA256,
611
		.algorithm_mkey = SSL_kDHE,
612
		.algorithm_auth = SSL_aNULL,
613
		.algorithm_enc = SSL_AES256,
614
		.algorithm_mac = SSL_SHA256,
615
		.algorithm_ssl = SSL_TLSV1_2,
616
		.algo_strength = SSL_HIGH,
617
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
618
		.strength_bits = 256,
619
		.alg_bits = 256,
620
	},
621
622
	/* GOST Ciphersuites */
623
624
	/* Cipher 81 */
625
	{
626
		.valid = 1,
627
		.name = "GOST2001-GOST89-GOST89",
628
		.id = 0x3000081,
629
		.algorithm_mkey = SSL_kGOST,
630
		.algorithm_auth = SSL_aGOST01,
631
		.algorithm_enc = SSL_eGOST2814789CNT,
632
		.algorithm_mac = SSL_GOST89MAC,
633
		.algorithm_ssl = SSL_TLSV1,
634
		.algo_strength = SSL_HIGH,
635
		.algorithm2 = SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|
636
		    TLS1_STREAM_MAC,
637
		.strength_bits = 256,
638
		.alg_bits = 256
639
	},
640
641
	/* Cipher 83 */
642
	{
643
		.valid = 1,
644
		.name = "GOST2001-NULL-GOST94",
645
		.id = 0x3000083,
646
		.algorithm_mkey = SSL_kGOST,
647
		.algorithm_auth = SSL_aGOST01,
648
		.algorithm_enc = SSL_eNULL,
649
		.algorithm_mac = SSL_GOST94,
650
		.algorithm_ssl = SSL_TLSV1,
651
		.algo_strength = SSL_STRONG_NONE,
652
		.algorithm2 = SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
653
		.strength_bits = 0,
654
		.alg_bits = 0
655
	},
656
657
#ifndef OPENSSL_NO_CAMELLIA
658
	/* Camellia ciphersuites from RFC4132 (256-bit portion) */
659
660
	/* Cipher 84 */
661
	{
662
		.valid = 1,
663
		.name = TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
664
		.id = TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
665
		.algorithm_mkey = SSL_kRSA,
666
		.algorithm_auth = SSL_aRSA,
667
		.algorithm_enc = SSL_CAMELLIA256,
668
		.algorithm_mac = SSL_SHA1,
669
		.algorithm_ssl = SSL_TLSV1,
670
		.algo_strength = SSL_HIGH,
671
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
672
		.strength_bits = 256,
673
		.alg_bits = 256,
674
	},
675
676
	/* Cipher 88 */
677
	{
678
		.valid = 1,
679
		.name = TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
680
		.id = TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
681
		.algorithm_mkey = SSL_kDHE,
682
		.algorithm_auth = SSL_aRSA,
683
		.algorithm_enc = SSL_CAMELLIA256,
684
		.algorithm_mac = SSL_SHA1,
685
		.algorithm_ssl = SSL_TLSV1,
686
		.algo_strength = SSL_HIGH,
687
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
688
		.strength_bits = 256,
689
		.alg_bits = 256,
690
	},
691
692
	/* Cipher 89 */
693
	{
694
		.valid = 1,
695
		.name = TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
696
		.id = TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
697
		.algorithm_mkey = SSL_kDHE,
698
		.algorithm_auth = SSL_aNULL,
699
		.algorithm_enc = SSL_CAMELLIA256,
700
		.algorithm_mac = SSL_SHA1,
701
		.algorithm_ssl = SSL_TLSV1,
702
		.algo_strength = SSL_HIGH,
703
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
704
		.strength_bits = 256,
705
		.alg_bits = 256,
706
	},
707
#endif /* OPENSSL_NO_CAMELLIA */
708
709
	/*
710
	 * GCM ciphersuites from RFC5288.
711
	 */
712
713
	/* Cipher 9C */
714
	{
715
		.valid = 1,
716
		.name = TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
717
		.id = TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
718
		.algorithm_mkey = SSL_kRSA,
719
		.algorithm_auth = SSL_aRSA,
720
		.algorithm_enc = SSL_AES128GCM,
721
		.algorithm_mac = SSL_AEAD,
722
		.algorithm_ssl = SSL_TLSV1_2,
723
		.algo_strength = SSL_HIGH,
724
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|
725
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
726
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
727
		.strength_bits = 128,
728
		.alg_bits = 128,
729
	},
730
731
	/* Cipher 9D */
732
	{
733
		.valid = 1,
734
		.name = TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
735
		.id = TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
736
		.algorithm_mkey = SSL_kRSA,
737
		.algorithm_auth = SSL_aRSA,
738
		.algorithm_enc = SSL_AES256GCM,
739
		.algorithm_mac = SSL_AEAD,
740
		.algorithm_ssl = SSL_TLSV1_2,
741
		.algo_strength = SSL_HIGH,
742
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|
743
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
744
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
745
		.strength_bits = 256,
746
		.alg_bits = 256,
747
	},
748
749
	/* Cipher 9E */
750
	{
751
		.valid = 1,
752
		.name = TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
753
		.id = TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
754
		.algorithm_mkey = SSL_kDHE,
755
		.algorithm_auth = SSL_aRSA,
756
		.algorithm_enc = SSL_AES128GCM,
757
		.algorithm_mac = SSL_AEAD,
758
		.algorithm_ssl = SSL_TLSV1_2,
759
		.algo_strength = SSL_HIGH,
760
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|
761
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
762
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
763
		.strength_bits = 128,
764
		.alg_bits = 128,
765
	},
766
767
	/* Cipher 9F */
768
	{
769
		.valid = 1,
770
		.name = TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
771
		.id = TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
772
		.algorithm_mkey = SSL_kDHE,
773
		.algorithm_auth = SSL_aRSA,
774
		.algorithm_enc = SSL_AES256GCM,
775
		.algorithm_mac = SSL_AEAD,
776
		.algorithm_ssl = SSL_TLSV1_2,
777
		.algo_strength = SSL_HIGH,
778
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|
779
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
780
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
781
		.strength_bits = 256,
782
		.alg_bits = 256,
783
	},
784
785
	/* Cipher A6 */
786
	{
787
		.valid = 1,
788
		.name = TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
789
		.id = TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
790
		.algorithm_mkey = SSL_kDHE,
791
		.algorithm_auth = SSL_aNULL,
792
		.algorithm_enc = SSL_AES128GCM,
793
		.algorithm_mac = SSL_AEAD,
794
		.algorithm_ssl = SSL_TLSV1_2,
795
		.algo_strength = SSL_HIGH,
796
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|
797
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
798
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
799
		.strength_bits = 128,
800
		.alg_bits = 128,
801
	},
802
803
	/* Cipher A7 */
804
	{
805
		.valid = 1,
806
		.name = TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
807
		.id = TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
808
		.algorithm_mkey = SSL_kDHE,
809
		.algorithm_auth = SSL_aNULL,
810
		.algorithm_enc = SSL_AES256GCM,
811
		.algorithm_mac = SSL_AEAD,
812
		.algorithm_ssl = SSL_TLSV1_2,
813
		.algo_strength = SSL_HIGH,
814
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|
815
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
816
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
817
		.strength_bits = 256,
818
		.alg_bits = 256,
819
	},
820
821
#ifndef OPENSSL_NO_CAMELLIA
822
	/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */
823
824
	/* Cipher BA */
825
	{
826
		.valid = 1,
827
		.name = TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256,
828
		.id = TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256,
829
		.algorithm_mkey = SSL_kRSA,
830
		.algorithm_auth = SSL_aRSA,
831
		.algorithm_enc = SSL_CAMELLIA128,
832
		.algorithm_mac = SSL_SHA256,
833
		.algorithm_ssl = SSL_TLSV1_2,
834
		.algo_strength = SSL_HIGH,
835
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
836
		.strength_bits = 128,
837
		.alg_bits = 128,
838
	},
839
840
	/* Cipher BE */
841
	{
842
		.valid = 1,
843
		.name = TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
844
		.id = TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
845
		.algorithm_mkey = SSL_kDHE,
846
		.algorithm_auth = SSL_aRSA,
847
		.algorithm_enc = SSL_CAMELLIA128,
848
		.algorithm_mac = SSL_SHA256,
849
		.algorithm_ssl = SSL_TLSV1_2,
850
		.algo_strength = SSL_HIGH,
851
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
852
		.strength_bits = 128,
853
		.alg_bits = 128,
854
	},
855
856
	/* Cipher BF */
857
	{
858
		.valid = 1,
859
		.name = TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256,
860
		.id = TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256,
861
		.algorithm_mkey = SSL_kDHE,
862
		.algorithm_auth = SSL_aNULL,
863
		.algorithm_enc = SSL_CAMELLIA128,
864
		.algorithm_mac = SSL_SHA256,
865
		.algorithm_ssl = SSL_TLSV1_2,
866
		.algo_strength = SSL_HIGH,
867
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
868
		.strength_bits = 128,
869
		.alg_bits = 128,
870
	},
871
872
	/* Cipher C0 */
873
	{
874
		.valid = 1,
875
		.name = TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256,
876
		.id = TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256,
877
		.algorithm_mkey = SSL_kRSA,
878
		.algorithm_auth = SSL_aRSA,
879
		.algorithm_enc = SSL_CAMELLIA256,
880
		.algorithm_mac = SSL_SHA256,
881
		.algorithm_ssl = SSL_TLSV1_2,
882
		.algo_strength = SSL_HIGH,
883
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
884
		.strength_bits = 256,
885
		.alg_bits = 256,
886
	},
887
888
	/* Cipher C4 */
889
	{
890
		.valid = 1,
891
		.name = TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
892
		.id = TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
893
		.algorithm_mkey = SSL_kDHE,
894
		.algorithm_auth = SSL_aRSA,
895
		.algorithm_enc = SSL_CAMELLIA256,
896
		.algorithm_mac = SSL_SHA256,
897
		.algorithm_ssl = SSL_TLSV1_2,
898
		.algo_strength = SSL_HIGH,
899
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
900
		.strength_bits = 256,
901
		.alg_bits = 256,
902
	},
903
904
	/* Cipher C5 */
905
	{
906
		.valid = 1,
907
		.name = TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256,
908
		.id = TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256,
909
		.algorithm_mkey = SSL_kDHE,
910
		.algorithm_auth = SSL_aNULL,
911
		.algorithm_enc = SSL_CAMELLIA256,
912
		.algorithm_mac = SSL_SHA256,
913
		.algorithm_ssl = SSL_TLSV1_2,
914
		.algo_strength = SSL_HIGH,
915
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
916
		.strength_bits = 256,
917
		.alg_bits = 256,
918
	},
919
#endif /* OPENSSL_NO_CAMELLIA */
920
921
	/* Cipher C006 */
922
	{
923
		.valid = 1,
924
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
925
		.id = TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
926
		.algorithm_mkey = SSL_kECDHE,
927
		.algorithm_auth = SSL_aECDSA,
928
		.algorithm_enc = SSL_eNULL,
929
		.algorithm_mac = SSL_SHA1,
930
		.algorithm_ssl = SSL_TLSV1,
931
		.algo_strength = SSL_STRONG_NONE,
932
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
933
		.strength_bits = 0,
934
		.alg_bits = 0,
935
	},
936
937
	/* Cipher C007 */
938
	{
939
		.valid = 1,
940
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
941
		.id = TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
942
		.algorithm_mkey = SSL_kECDHE,
943
		.algorithm_auth = SSL_aECDSA,
944
		.algorithm_enc = SSL_RC4,
945
		.algorithm_mac = SSL_SHA1,
946
		.algorithm_ssl = SSL_TLSV1,
947
		.algo_strength = SSL_LOW,
948
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
949
		.strength_bits = 128,
950
		.alg_bits = 128,
951
	},
952
953
	/* Cipher C008 */
954
	{
955
		.valid = 1,
956
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
957
		.id = TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
958
		.algorithm_mkey = SSL_kECDHE,
959
		.algorithm_auth = SSL_aECDSA,
960
		.algorithm_enc = SSL_3DES,
961
		.algorithm_mac = SSL_SHA1,
962
		.algorithm_ssl = SSL_TLSV1,
963
		.algo_strength = SSL_MEDIUM,
964
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
965
		.strength_bits = 112,
966
		.alg_bits = 168,
967
	},
968
969
	/* Cipher C009 */
970
	{
971
		.valid = 1,
972
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
973
		.id = TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
974
		.algorithm_mkey = SSL_kECDHE,
975
		.algorithm_auth = SSL_aECDSA,
976
		.algorithm_enc = SSL_AES128,
977
		.algorithm_mac = SSL_SHA1,
978
		.algorithm_ssl = SSL_TLSV1,
979
		.algo_strength = SSL_HIGH,
980
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
981
		.strength_bits = 128,
982
		.alg_bits = 128,
983
	},
984
985
	/* Cipher C00A */
986
	{
987
		.valid = 1,
988
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
989
		.id = TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
990
		.algorithm_mkey = SSL_kECDHE,
991
		.algorithm_auth = SSL_aECDSA,
992
		.algorithm_enc = SSL_AES256,
993
		.algorithm_mac = SSL_SHA1,
994
		.algorithm_ssl = SSL_TLSV1,
995
		.algo_strength = SSL_HIGH,
996
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
997
		.strength_bits = 256,
998
		.alg_bits = 256,
999
	},
1000
1001
	/* Cipher C010 */
1002
	{
1003
		.valid = 1,
1004
		.name = TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
1005
		.id = TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
1006
		.algorithm_mkey = SSL_kECDHE,
1007
		.algorithm_auth = SSL_aRSA,
1008
		.algorithm_enc = SSL_eNULL,
1009
		.algorithm_mac = SSL_SHA1,
1010
		.algorithm_ssl = SSL_TLSV1,
1011
		.algo_strength = SSL_STRONG_NONE,
1012
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1013
		.strength_bits = 0,
1014
		.alg_bits = 0,
1015
	},
1016
1017
	/* Cipher C011 */
1018
	{
1019
		.valid = 1,
1020
		.name = TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
1021
		.id = TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
1022
		.algorithm_mkey = SSL_kECDHE,
1023
		.algorithm_auth = SSL_aRSA,
1024
		.algorithm_enc = SSL_RC4,
1025
		.algorithm_mac = SSL_SHA1,
1026
		.algorithm_ssl = SSL_TLSV1,
1027
		.algo_strength = SSL_LOW,
1028
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1029
		.strength_bits = 128,
1030
		.alg_bits = 128,
1031
	},
1032
1033
	/* Cipher C012 */
1034
	{
1035
		.valid = 1,
1036
		.name = TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1037
		.id = TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1038
		.algorithm_mkey = SSL_kECDHE,
1039
		.algorithm_auth = SSL_aRSA,
1040
		.algorithm_enc = SSL_3DES,
1041
		.algorithm_mac = SSL_SHA1,
1042
		.algorithm_ssl = SSL_TLSV1,
1043
		.algo_strength = SSL_MEDIUM,
1044
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1045
		.strength_bits = 112,
1046
		.alg_bits = 168,
1047
	},
1048
1049
	/* Cipher C013 */
1050
	{
1051
		.valid = 1,
1052
		.name = TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1053
		.id = TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1054
		.algorithm_mkey = SSL_kECDHE,
1055
		.algorithm_auth = SSL_aRSA,
1056
		.algorithm_enc = SSL_AES128,
1057
		.algorithm_mac = SSL_SHA1,
1058
		.algorithm_ssl = SSL_TLSV1,
1059
		.algo_strength = SSL_HIGH,
1060
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1061
		.strength_bits = 128,
1062
		.alg_bits = 128,
1063
	},
1064
1065
	/* Cipher C014 */
1066
	{
1067
		.valid = 1,
1068
		.name = TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1069
		.id = TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1070
		.algorithm_mkey = SSL_kECDHE,
1071
		.algorithm_auth = SSL_aRSA,
1072
		.algorithm_enc = SSL_AES256,
1073
		.algorithm_mac = SSL_SHA1,
1074
		.algorithm_ssl = SSL_TLSV1,
1075
		.algo_strength = SSL_HIGH,
1076
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1077
		.strength_bits = 256,
1078
		.alg_bits = 256,
1079
	},
1080
1081
	/* Cipher C015 */
1082
	{
1083
		.valid = 1,
1084
		.name = TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
1085
		.id = TLS1_CK_ECDH_anon_WITH_NULL_SHA,
1086
		.algorithm_mkey = SSL_kECDHE,
1087
		.algorithm_auth = SSL_aNULL,
1088
		.algorithm_enc = SSL_eNULL,
1089
		.algorithm_mac = SSL_SHA1,
1090
		.algorithm_ssl = SSL_TLSV1,
1091
		.algo_strength = SSL_STRONG_NONE,
1092
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1093
		.strength_bits = 0,
1094
		.alg_bits = 0,
1095
	},
1096
1097
	/* Cipher C016 */
1098
	{
1099
		.valid = 1,
1100
		.name = TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
1101
		.id = TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
1102
		.algorithm_mkey = SSL_kECDHE,
1103
		.algorithm_auth = SSL_aNULL,
1104
		.algorithm_enc = SSL_RC4,
1105
		.algorithm_mac = SSL_SHA1,
1106
		.algorithm_ssl = SSL_TLSV1,
1107
		.algo_strength = SSL_LOW,
1108
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1109
		.strength_bits = 128,
1110
		.alg_bits = 128,
1111
	},
1112
1113
	/* Cipher C017 */
1114
	{
1115
		.valid = 1,
1116
		.name = TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
1117
		.id = TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
1118
		.algorithm_mkey = SSL_kECDHE,
1119
		.algorithm_auth = SSL_aNULL,
1120
		.algorithm_enc = SSL_3DES,
1121
		.algorithm_mac = SSL_SHA1,
1122
		.algorithm_ssl = SSL_TLSV1,
1123
		.algo_strength = SSL_MEDIUM,
1124
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1125
		.strength_bits = 112,
1126
		.alg_bits = 168,
1127
	},
1128
1129
	/* Cipher C018 */
1130
	{
1131
		.valid = 1,
1132
		.name = TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
1133
		.id = TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
1134
		.algorithm_mkey = SSL_kECDHE,
1135
		.algorithm_auth = SSL_aNULL,
1136
		.algorithm_enc = SSL_AES128,
1137
		.algorithm_mac = SSL_SHA1,
1138
		.algorithm_ssl = SSL_TLSV1,
1139
		.algo_strength = SSL_HIGH,
1140
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1141
		.strength_bits = 128,
1142
		.alg_bits = 128,
1143
	},
1144
1145
	/* Cipher C019 */
1146
	{
1147
		.valid = 1,
1148
		.name = TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
1149
		.id = TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
1150
		.algorithm_mkey = SSL_kECDHE,
1151
		.algorithm_auth = SSL_aNULL,
1152
		.algorithm_enc = SSL_AES256,
1153
		.algorithm_mac = SSL_SHA1,
1154
		.algorithm_ssl = SSL_TLSV1,
1155
		.algo_strength = SSL_HIGH,
1156
		.algorithm2 = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1157
		.strength_bits = 256,
1158
		.alg_bits = 256,
1159
	},
1160
1161
1162
	/* HMAC based TLS v1.2 ciphersuites from RFC5289 */
1163
1164
	/* Cipher C023 */
1165
	{
1166
		.valid = 1,
1167
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
1168
		.id = TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
1169
		.algorithm_mkey = SSL_kECDHE,
1170
		.algorithm_auth = SSL_aECDSA,
1171
		.algorithm_enc = SSL_AES128,
1172
		.algorithm_mac = SSL_SHA256,
1173
		.algorithm_ssl = SSL_TLSV1_2,
1174
		.algo_strength = SSL_HIGH,
1175
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
1176
		.strength_bits = 128,
1177
		.alg_bits = 128,
1178
	},
1179
1180
	/* Cipher C024 */
1181
	{
1182
		.valid = 1,
1183
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
1184
		.id = TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
1185
		.algorithm_mkey = SSL_kECDHE,
1186
		.algorithm_auth = SSL_aECDSA,
1187
		.algorithm_enc = SSL_AES256,
1188
		.algorithm_mac = SSL_SHA384,
1189
		.algorithm_ssl = SSL_TLSV1_2,
1190
		.algo_strength = SSL_HIGH,
1191
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
1192
		.strength_bits = 256,
1193
		.alg_bits = 256,
1194
	},
1195
1196
	/* Cipher C027 */
1197
	{
1198
		.valid = 1,
1199
		.name = TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
1200
		.id = TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
1201
		.algorithm_mkey = SSL_kECDHE,
1202
		.algorithm_auth = SSL_aRSA,
1203
		.algorithm_enc = SSL_AES128,
1204
		.algorithm_mac = SSL_SHA256,
1205
		.algorithm_ssl = SSL_TLSV1_2,
1206
		.algo_strength = SSL_HIGH,
1207
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
1208
		.strength_bits = 128,
1209
		.alg_bits = 128,
1210
	},
1211
1212
	/* Cipher C028 */
1213
	{
1214
		.valid = 1,
1215
		.name = TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
1216
		.id = TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
1217
		.algorithm_mkey = SSL_kECDHE,
1218
		.algorithm_auth = SSL_aRSA,
1219
		.algorithm_enc = SSL_AES256,
1220
		.algorithm_mac = SSL_SHA384,
1221
		.algorithm_ssl = SSL_TLSV1_2,
1222
		.algo_strength = SSL_HIGH,
1223
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
1224
		.strength_bits = 256,
1225
		.alg_bits = 256,
1226
	},
1227
1228
	/* GCM based TLS v1.2 ciphersuites from RFC5289 */
1229
1230
	/* Cipher C02B */
1231
	{
1232
		.valid = 1,
1233
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
1234
		.id = TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
1235
		.algorithm_mkey = SSL_kECDHE,
1236
		.algorithm_auth = SSL_aECDSA,
1237
		.algorithm_enc = SSL_AES128GCM,
1238
		.algorithm_mac = SSL_AEAD,
1239
		.algorithm_ssl = SSL_TLSV1_2,
1240
		.algo_strength = SSL_HIGH,
1241
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|
1242
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1243
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
1244
		.strength_bits = 128,
1245
		.alg_bits = 128,
1246
	},
1247
1248
	/* Cipher C02C */
1249
	{
1250
		.valid = 1,
1251
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
1252
		.id = TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
1253
		.algorithm_mkey = SSL_kECDHE,
1254
		.algorithm_auth = SSL_aECDSA,
1255
		.algorithm_enc = SSL_AES256GCM,
1256
		.algorithm_mac = SSL_AEAD,
1257
		.algorithm_ssl = SSL_TLSV1_2,
1258
		.algo_strength = SSL_HIGH,
1259
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|
1260
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1261
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
1262
		.strength_bits = 256,
1263
		.alg_bits = 256,
1264
	},
1265
1266
	/* Cipher C02F */
1267
	{
1268
		.valid = 1,
1269
		.name = TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
1270
		.id = TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
1271
		.algorithm_mkey = SSL_kECDHE,
1272
		.algorithm_auth = SSL_aRSA,
1273
		.algorithm_enc = SSL_AES128GCM,
1274
		.algorithm_mac = SSL_AEAD,
1275
		.algorithm_ssl = SSL_TLSV1_2,
1276
		.algo_strength = SSL_HIGH,
1277
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|
1278
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1279
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
1280
		.strength_bits = 128,
1281
		.alg_bits = 128,
1282
	},
1283
1284
	/* Cipher C030 */
1285
	{
1286
		.valid = 1,
1287
		.name = TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
1288
		.id = TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
1289
		.algorithm_mkey = SSL_kECDHE,
1290
		.algorithm_auth = SSL_aRSA,
1291
		.algorithm_enc = SSL_AES256GCM,
1292
		.algorithm_mac = SSL_AEAD,
1293
		.algorithm_ssl = SSL_TLSV1_2,
1294
		.algo_strength = SSL_HIGH,
1295
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|
1296
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
1297
		    SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_IN_RECORD,
1298
		.strength_bits = 256,
1299
		.alg_bits = 256,
1300
	},
1301
1302
	/* Cipher CCA8 */
1303
	{
1304
		.valid = 1,
1305
		.name = TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
1306
		.id = TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305,
1307
		.algorithm_mkey = SSL_kECDHE,
1308
		.algorithm_auth = SSL_aRSA,
1309
		.algorithm_enc = SSL_CHACHA20POLY1305,
1310
		.algorithm_mac = SSL_AEAD,
1311
		.algorithm_ssl = SSL_TLSV1_2,
1312
		.algo_strength = SSL_HIGH,
1313
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|
1314
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(12),
1315
		.strength_bits = 256,
1316
		.alg_bits = 256,
1317
	},
1318
1319
	/* Cipher CCA9 */
1320
	{
1321
		.valid = 1,
1322
		.name = TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
1323
		.id = TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305,
1324
		.algorithm_mkey = SSL_kECDHE,
1325
		.algorithm_auth = SSL_aECDSA,
1326
		.algorithm_enc = SSL_CHACHA20POLY1305,
1327
		.algorithm_mac = SSL_AEAD,
1328
		.algorithm_ssl = SSL_TLSV1_2,
1329
		.algo_strength = SSL_HIGH,
1330
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|
1331
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(12),
1332
		.strength_bits = 256,
1333
		.alg_bits = 256,
1334
	},
1335
1336
	/* Cipher CCAA */
1337
	{
1338
		.valid = 1,
1339
		.name = TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
1340
		.id = TLS1_CK_DHE_RSA_CHACHA20_POLY1305,
1341
		.algorithm_mkey = SSL_kDHE,
1342
		.algorithm_auth = SSL_aRSA,
1343
		.algorithm_enc = SSL_CHACHA20POLY1305,
1344
		.algorithm_mac = SSL_AEAD,
1345
		.algorithm_ssl = SSL_TLSV1_2,
1346
		.algo_strength = SSL_HIGH,
1347
		.algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|
1348
		    SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(12),
1349
		.strength_bits = 256,
1350
		.alg_bits = 256,
1351
	},
1352
1353
	/* Cipher FF85 FIXME IANA */
1354
	{
1355
		.valid = 1,
1356
		.name = "GOST2012256-GOST89-GOST89",
1357
		.id = 0x300ff85, /* FIXME IANA */
1358
		.algorithm_mkey = SSL_kGOST,
1359
		.algorithm_auth = SSL_aGOST01,
1360
		.algorithm_enc = SSL_eGOST2814789CNT,
1361
		.algorithm_mac = SSL_GOST89MAC,
1362
		.algorithm_ssl = SSL_TLSV1,
1363
		.algo_strength = SSL_HIGH,
1364
		.algorithm2 = SSL_HANDSHAKE_MAC_STREEBOG256|TLS1_PRF_STREEBOG256|
1365
		    TLS1_STREAM_MAC,
1366
		.strength_bits = 256,
1367
		.alg_bits = 256
1368
	},
1369
1370
	/* Cipher FF87 FIXME IANA */
1371
	{
1372
		.valid = 1,
1373
		.name = "GOST2012256-NULL-STREEBOG256",
1374
		.id = 0x300ff87, /* FIXME IANA */
1375
		.algorithm_mkey = SSL_kGOST,
1376
		.algorithm_auth = SSL_aGOST01,
1377
		.algorithm_enc = SSL_eNULL,
1378
		.algorithm_mac = SSL_STREEBOG256,
1379
		.algorithm_ssl = SSL_TLSV1,
1380
		.algo_strength = SSL_STRONG_NONE,
1381
		.algorithm2 = SSL_HANDSHAKE_MAC_STREEBOG256|TLS1_PRF_STREEBOG256,
1382
		.strength_bits = 0,
1383
		.alg_bits = 0
1384
	},
1385
1386
1387
	/* end of list */
1388
};
1389
1390
int
1391
ssl3_num_ciphers(void)
1392
{
1393
2524
	return (SSL3_NUM_CIPHERS);
1394
}
1395
1396
const SSL_CIPHER *
1397
ssl3_get_cipher(unsigned int u)
1398
{
1399
181728
	if (u < SSL3_NUM_CIPHERS)
1400
90864
		return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]));
1401
	else
1402
		return (NULL);
1403
90864
}
1404
1405
const SSL_CIPHER *
1406
ssl3_get_cipher_by_id(unsigned int id)
1407
{
1408
	const SSL_CIPHER *cp;
1409
30706
	SSL_CIPHER c;
1410
1411
15353
	c.id = id;
1412
15353
	cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
1413

30506
	if (cp != NULL && cp->valid == 1)
1414
15153
		return (cp);
1415
1416
200
	return (NULL);
1417
15353
}
1418
1419
const SSL_CIPHER *
1420
ssl3_get_cipher_by_value(uint16_t value)
1421
{
1422
30322
	return ssl3_get_cipher_by_id(SSL3_CK_ID | value);
1423
}
1424
1425
uint16_t
1426
ssl3_cipher_get_value(const SSL_CIPHER *c)
1427
{
1428
767950
	return (c->id & SSL3_CK_VALUE_MASK);
1429
}
1430
1431
int
1432
ssl3_pending(const SSL *s)
1433
{
1434
4616
	if (s->internal->rstate == SSL_ST_READ_BODY)
1435
		return 0;
1436
1437
4904
	return (S3I(s)->rrec.type == SSL3_RT_APPLICATION_DATA) ?
1438
288
	    S3I(s)->rrec.length : 0;
1439
2308
}
1440
1441
int
1442
ssl3_handshake_msg_hdr_len(SSL *s)
1443
{
1444
37228
	return (SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH :
1445
            SSL3_HM_HEADER_LENGTH);
1446
}
1447
1448
unsigned char *
1449
ssl3_handshake_msg_start(SSL *s, uint8_t msg_type)
1450
{
1451
	unsigned char *d, *p;
1452
1453
17914
	d = p = (unsigned char *)s->internal->init_buf->data;
1454
1455
	/* Handshake message type and length. */
1456
8957
	*(p++) = msg_type;
1457
8957
	l2n3(0, p);
1458
1459
8957
	return (d + ssl3_handshake_msg_hdr_len(s));
1460
}
1461
1462
void
1463
ssl3_handshake_msg_finish(SSL *s, unsigned int len)
1464
{
1465
	unsigned char *p;
1466
	uint8_t msg_type;
1467
1468
17914
	p = (unsigned char *)s->internal->init_buf->data;
1469
1470
	/* Handshake message length. */
1471
8957
	msg_type = *(p++);
1472
8957
	l2n3(len, p);
1473
1474
8957
	s->internal->init_num = ssl3_handshake_msg_hdr_len(s) + (int)len;
1475
8957
	s->internal->init_off = 0;
1476
1477
8957
	if (SSL_IS_DTLS(s)) {
1478
172
		dtls1_set_message_header(s, msg_type, len, 0, len);
1479
172
		dtls1_buffer_message(s, 0);
1480
172
	}
1481
8957
}
1482
1483
int
1484
ssl3_handshake_msg_start_cbb(SSL *s, CBB *handshake, CBB *body,
1485
    uint8_t msg_type)
1486
{
1487
	int ret = 0;
1488
1489
20224
	if (!CBB_init(handshake, SSL3_RT_MAX_PLAIN_LENGTH))
1490
		goto err;
1491
10112
	if (!CBB_add_u8(handshake, msg_type))
1492
		goto err;
1493
10112
	if (SSL_IS_DTLS(s)) {
1494
256
		unsigned char *data;
1495
1496
256
		if (!CBB_add_space(handshake, &data, DTLS1_HM_HEADER_LENGTH -
1497
		    SSL3_HM_HEADER_LENGTH))
1498
			goto err;
1499
1024
	}
1500
10112
	if (!CBB_add_u24_length_prefixed(handshake, body))
1501
		goto err;
1502
1503
10112
	ret = 1;
1504
1505
 err:
1506
10112
	return (ret);
1507
10112
}
1508
1509
int
1510
ssl3_handshake_msg_finish_cbb(SSL *s, CBB *handshake)
1511
{
1512
20224
	unsigned char *data = NULL;
1513
10112
	size_t outlen;
1514
	int ret = 0;
1515
1516
20224
	if (!CBB_finish(handshake, &data, &outlen))
1517
		goto err;
1518
1519
10112
	if (outlen > INT_MAX)
1520
		goto err;
1521
1522
10112
	if (!BUF_MEM_grow_clean(s->internal->init_buf, outlen))
1523
		goto err;
1524
1525
10112
	memcpy(s->internal->init_buf->data, data, outlen);
1526
1527
10112
	s->internal->init_num = (int)outlen;
1528
10112
	s->internal->init_off = 0;
1529
1530
10112
	if (SSL_IS_DTLS(s)) {
1531
		unsigned long len;
1532
256
		uint8_t msg_type;
1533
256
		CBS cbs;
1534
1535
256
		CBS_init(&cbs, data, outlen);
1536
256
		if (!CBS_get_u8(&cbs, &msg_type))
1537
			goto err;
1538
1539
256
		len = outlen - ssl3_handshake_msg_hdr_len(s);
1540
1541
256
		dtls1_set_message_header(s, msg_type, len, 0, len);
1542
256
		dtls1_buffer_message(s, 0);
1543
1024
	}
1544
1545
10112
	ret = 1;
1546
1547
 err:
1548
10112
	free(data);
1549
1550
10112
	return (ret);
1551
10112
}
1552
1553
int
1554
ssl3_handshake_write(SSL *s)
1555
{
1556
38138
	if (SSL_IS_DTLS(s))
1557
428
		return dtls1_do_write(s, SSL3_RT_HANDSHAKE);
1558
1559
18641
	return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
1560
19069
}
1561
1562
int
1563
ssl3_new(SSL *s)
1564
{
1565
3120
	if ((s->s3 = calloc(1, sizeof(*s->s3))) == NULL)
1566
		return (0);
1567
1560
	if ((S3I(s) = calloc(1, sizeof(*S3I(s)))) == NULL) {
1568
		free(s->s3);
1569
		return (0);
1570
	}
1571
1572
1560
	s->method->internal->ssl_clear(s);
1573
1574
1560
	return (1);
1575
1560
}
1576
1577
void
1578
ssl3_free(SSL *s)
1579
{
1580
3106
	if (s == NULL)
1581
		return;
1582
1583
1553
	tls1_cleanup_key_block(s);
1584
1553
	ssl3_release_read_buffer(s);
1585
1553
	ssl3_release_write_buffer(s);
1586
1587
1553
	DH_free(S3I(s)->tmp.dh);
1588
1553
	EC_KEY_free(S3I(s)->tmp.ecdh);
1589
1590
1553
	freezero(S3I(s)->tmp.x25519, X25519_KEY_LENGTH);
1591
1592
1553
	sk_X509_NAME_pop_free(S3I(s)->tmp.ca_names, X509_NAME_free);
1593
1594
1553
	BIO_free(S3I(s)->handshake_buffer);
1595
1596
1553
	tls1_handshake_hash_free(s);
1597
1598
1553
	free(S3I(s)->alpn_selected);
1599
1600
1553
	freezero(S3I(s), sizeof(*S3I(s)));
1601
1553
	freezero(s->s3, sizeof(*s->s3));
1602
1603
1553
	s->s3 = NULL;
1604
3106
}
1605
1606
void
1607
ssl3_clear(SSL *s)
1608
{
1609
	struct ssl3_state_internal_st *internal;
1610
	unsigned char	*rp, *wp;
1611
	size_t		 rlen, wlen;
1612
1613
26330
	tls1_cleanup_key_block(s);
1614
13165
	sk_X509_NAME_pop_free(S3I(s)->tmp.ca_names, X509_NAME_free);
1615
1616
13165
	DH_free(S3I(s)->tmp.dh);
1617
13165
	S3I(s)->tmp.dh = NULL;
1618
13165
	EC_KEY_free(S3I(s)->tmp.ecdh);
1619
13165
	S3I(s)->tmp.ecdh = NULL;
1620
1621
13165
	freezero(S3I(s)->tmp.x25519, X25519_KEY_LENGTH);
1622
13165
	S3I(s)->tmp.x25519 = NULL;
1623
1624
13165
	rp = s->s3->rbuf.buf;
1625
13165
	wp = s->s3->wbuf.buf;
1626
13165
	rlen = s->s3->rbuf.len;
1627
13165
	wlen = s->s3->wbuf.len;
1628
1629
13165
	BIO_free(S3I(s)->handshake_buffer);
1630
13165
	S3I(s)->handshake_buffer = NULL;
1631
1632
13165
	tls1_handshake_hash_free(s);
1633
1634
13165
	free(S3I(s)->alpn_selected);
1635
13165
	S3I(s)->alpn_selected = NULL;
1636
1637
13165
	memset(S3I(s), 0, sizeof(*S3I(s)));
1638
13165
	internal = S3I(s);
1639
13165
	memset(s->s3, 0, sizeof(*s->s3));
1640
13165
	S3I(s) = internal;
1641
1642
13165
	s->s3->rbuf.buf = rp;
1643
13165
	s->s3->wbuf.buf = wp;
1644
13165
	s->s3->rbuf.len = rlen;
1645
13165
	s->s3->wbuf.len = wlen;
1646
1647
13165
	ssl_free_wbio_buffer(s);
1648
1649
	/* Not needed... */
1650
13165
	S3I(s)->renegotiate = 0;
1651
13165
	S3I(s)->total_renegotiations = 0;
1652
13165
	S3I(s)->num_renegotiations = 0;
1653
13165
	S3I(s)->in_read_app_data = 0;
1654
1655
13165
	s->internal->packet_length = 0;
1656
13165
	s->version = TLS1_VERSION;
1657
13165
}
1658
1659
static long
1660
ssl_ctrl_get_server_tmp_key(SSL *s, EVP_PKEY **pkey_tmp)
1661
{
1662
	EVP_PKEY *pkey = NULL;
1663
	EC_GROUP *group = NULL;
1664
	EC_POINT *point = NULL;
1665
	EC_KEY *ec_key = NULL;
1666
	BIGNUM *order = NULL;
1667
	SESS_CERT *sc;
1668
	int ret = 0;
1669
1670
8
	*pkey_tmp = NULL;
1671
1672
4
	if (s->server != 0)
1673
		return 0;
1674

8
	if (s->session == NULL || SSI(s)->sess_cert == NULL)
1675
		return 0;
1676
1677
	sc = SSI(s)->sess_cert;
1678
1679
4
	if ((pkey = EVP_PKEY_new()) == NULL)
1680
		return 0;
1681
1682
4
	if (sc->peer_dh_tmp != NULL) {
1683
		ret = EVP_PKEY_set1_DH(pkey, sc->peer_dh_tmp);
1684
4
	} else if (sc->peer_ecdh_tmp) {
1685
4
		ret = EVP_PKEY_set1_EC_KEY(pkey, sc->peer_ecdh_tmp);
1686
4
	} else if (sc->peer_x25519_tmp != NULL) {
1687
		/* Fudge up an EC_KEY that looks like X25519... */
1688
		if ((group = EC_GROUP_new(EC_GFp_mont_method())) == NULL)
1689
			goto err;
1690
		if ((point = EC_POINT_new(group)) == NULL)
1691
			goto err;
1692
		if ((order = BN_new()) == NULL)
1693
			goto err;
1694
		if (!BN_set_bit(order, 252))
1695
			goto err;
1696
		if (!EC_GROUP_set_generator(group, point, order, NULL))
1697
			goto err;
1698
		EC_GROUP_set_curve_name(group, NID_X25519);
1699
		if ((ec_key = EC_KEY_new()) == NULL)
1700
			goto err;
1701
		if (!EC_KEY_set_group(ec_key, group))
1702
			goto err;
1703
		ret = EVP_PKEY_set1_EC_KEY(pkey, ec_key);
1704
	}
1705
1706
4
	if (ret == 1) {
1707
4
		*pkey_tmp = pkey;
1708
		pkey = NULL;
1709
4
	}
1710
1711
  err:
1712
4
	EVP_PKEY_free(pkey);
1713
4
	EC_GROUP_free(group);
1714
4
	EC_POINT_free(point);
1715
4
	EC_KEY_free(ec_key);
1716
4
	BN_free(order);
1717
1718
4
	return (ret);
1719
4
}
1720
1721
static int
1722
_SSL_session_reused(SSL *s)
1723
{
1724
15834
	return s->internal->hit;
1725
}
1726
1727
static int
1728
_SSL_num_renegotiations(SSL *s)
1729
{
1730
	return S3I(s)->num_renegotiations;
1731
}
1732
1733
static int
1734
_SSL_clear_num_renegotiations(SSL *s)
1735
{
1736
	int renegs;
1737
1738
	renegs = S3I(s)->num_renegotiations;
1739
	S3I(s)->num_renegotiations = 0;
1740
1741
	return renegs;
1742
}
1743
1744
static int
1745
_SSL_total_renegotiations(SSL *s)
1746
{
1747
4
	return S3I(s)->total_renegotiations;
1748
}
1749
1750
static int
1751
_SSL_set_tmp_dh(SSL *s, DH *dh)
1752
{
1753
	DH *dh_tmp;
1754
1755
	if (!ssl_cert_inst(&s->cert)) {
1756
		SSLerror(s, ERR_R_MALLOC_FAILURE);
1757
		return 0;
1758
	}
1759
1760
	if (dh == NULL) {
1761
		SSLerror(s, ERR_R_PASSED_NULL_PARAMETER);
1762
		return 0;
1763
	}
1764
1765
	if ((dh_tmp = DHparams_dup(dh)) == NULL) {
1766
		SSLerror(s, ERR_R_DH_LIB);
1767
		return 0;
1768
	}
1769
1770
	DH_free(s->cert->dh_tmp);
1771
	s->cert->dh_tmp = dh_tmp;
1772
1773
	return 1;
1774
}
1775
1776
static int
1777
_SSL_set_dh_auto(SSL *s, int state)
1778
{
1779
	s->cert->dh_tmp_auto = state;
1780
	return 1;
1781
}
1782
1783
static int
1784
_SSL_set_tmp_ecdh(SSL *s, EC_KEY *ecdh)
1785
{
1786
	const EC_GROUP *group;
1787
	int nid;
1788
1789
	if (!ssl_cert_inst(&s->cert)) {
1790
		SSLerror(s, ERR_R_MALLOC_FAILURE);
1791
		return 0;
1792
	}
1793
1794
	if (ecdh == NULL)
1795
		return 0;
1796
	if ((group = EC_KEY_get0_group(ecdh)) == NULL)
1797
		return 0;
1798
1799
	nid = EC_GROUP_get_curve_name(group);
1800
	return SSL_set1_groups(s, &nid, 1);
1801
}
1802
1803
static int
1804
_SSL_set_ecdh_auto(SSL *s, int state)
1805
{
1806
	return 1;
1807
}
1808
1809
static int
1810
_SSL_set_tlsext_host_name(SSL *s, const char *name)
1811
{
1812
48
	free(s->tlsext_hostname);
1813
24
	s->tlsext_hostname = NULL;
1814
1815
24
	if (name == NULL)
1816
		return 1;
1817
1818
24
	if (strlen(name) > TLSEXT_MAXLEN_host_name) {
1819
		SSLerror(s, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
1820
		return 0;
1821
	}
1822
1823
24
	if ((s->tlsext_hostname = strdup(name)) == NULL) {
1824
		SSLerror(s, ERR_R_INTERNAL_ERROR);
1825
		return 0;
1826
	}
1827
1828
24
	return 1;
1829
24
}
1830
1831
static int
1832
_SSL_set_tlsext_debug_arg(SSL *s, void *arg)
1833
{
1834
	s->internal->tlsext_debug_arg = arg;
1835
	return 1;
1836
}
1837
1838
static int
1839
_SSL_set_tlsext_status_type(SSL *s, int type)
1840
{
1841
40
	s->tlsext_status_type = type;
1842
20
	return 1;
1843
}
1844
1845
static int
1846
_SSL_get_tlsext_status_exts(SSL *s, STACK_OF(X509_EXTENSION) **exts)
1847
{
1848
	*exts = s->internal->tlsext_ocsp_exts;
1849
	return 1;
1850
}
1851
1852
static int
1853
_SSL_set_tlsext_status_exts(SSL *s, STACK_OF(X509_EXTENSION) *exts)
1854
{
1855
	/* XXX - leak... */
1856
	s->internal->tlsext_ocsp_exts = exts;
1857
	return 1;
1858
}
1859
1860
static int
1861
_SSL_get_tlsext_status_ids(SSL *s, STACK_OF(OCSP_RESPID) **ids)
1862
{
1863
	*ids = s->internal->tlsext_ocsp_ids;
1864
	return 1;
1865
}
1866
1867
static int
1868
_SSL_set_tlsext_status_ids(SSL *s, STACK_OF(OCSP_RESPID) *ids)
1869
{
1870
	/* XXX - leak... */
1871
	s->internal->tlsext_ocsp_ids = ids;
1872
	return 1;
1873
}
1874
1875
static int
1876
_SSL_get_tlsext_status_ocsp_resp(SSL *s, unsigned char **resp)
1877
{
1878
32
	*resp = s->internal->tlsext_ocsp_resp;
1879
16
	return s->internal->tlsext_ocsp_resplen;
1880
}
1881
1882
static int
1883
_SSL_set_tlsext_status_ocsp_resp(SSL *s, unsigned char *resp, int resp_len)
1884
{
1885
	free(s->internal->tlsext_ocsp_resp);
1886
	s->internal->tlsext_ocsp_resp = resp;
1887
	s->internal->tlsext_ocsp_resplen = resp_len;
1888
	return 1;
1889
}
1890
1891
int
1892
SSL_set1_groups(SSL *s, const int *groups, size_t groups_len)
1893
{
1894
	return tls1_set_groups(&s->internal->tlsext_supportedgroups,
1895
	    &s->internal->tlsext_supportedgroups_length, groups, groups_len);
1896
}
1897
1898
int
1899
SSL_set1_groups_list(SSL *s, const char *groups)
1900
{
1901
	return tls1_set_groups_list(&s->internal->tlsext_supportedgroups,
1902
	    &s->internal->tlsext_supportedgroups_length, groups);
1903
}
1904
1905
long
1906
ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
1907
{
1908







15966
	switch (cmd) {
1909
	case SSL_CTRL_GET_SESSION_REUSED:
1910
7917
		return _SSL_session_reused(s);
1911
1912
	case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
1913
		return _SSL_num_renegotiations(s);
1914
1915
	case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
1916
		return _SSL_clear_num_renegotiations(s);
1917
1918
	case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
1919
2
		return _SSL_total_renegotiations(s);
1920
1921
	case SSL_CTRL_SET_TMP_DH:
1922
		return _SSL_set_tmp_dh(s, parg);
1923
1924
	case SSL_CTRL_SET_TMP_DH_CB:
1925
		SSLerror(s, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1926
		return 0;
1927
1928
	case SSL_CTRL_SET_DH_AUTO:
1929
		return _SSL_set_dh_auto(s, larg);
1930
1931
	case SSL_CTRL_SET_TMP_ECDH:
1932
		return _SSL_set_tmp_ecdh(s, parg);
1933
1934
	case SSL_CTRL_SET_TMP_ECDH_CB:
1935
		SSLerror(s, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1936
		return 0;
1937
1938
	case SSL_CTRL_SET_ECDH_AUTO:
1939
		return _SSL_set_ecdh_auto(s, larg);
1940
1941
	case SSL_CTRL_SET_TLSEXT_HOSTNAME:
1942
24
		if (larg != TLSEXT_NAMETYPE_host_name) {
1943
			SSLerror(s, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
1944
			return 0;
1945
		}
1946
24
		return _SSL_set_tlsext_host_name(s, parg);
1947
1948
	case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
1949
		return _SSL_set_tlsext_debug_arg(s, parg);
1950
1951
	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
1952
20
		return _SSL_set_tlsext_status_type(s, larg);
1953
1954
	case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
1955
		return _SSL_get_tlsext_status_exts(s, parg);
1956
1957
	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
1958
		return _SSL_set_tlsext_status_exts(s, parg);
1959
1960
	case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
1961
		return _SSL_get_tlsext_status_ids(s, parg);
1962
1963
	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
1964
		return _SSL_set_tlsext_status_ids(s, parg);
1965
1966
	case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
1967
16
		return _SSL_get_tlsext_status_ocsp_resp(s, parg);
1968
1969
	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
1970
		return _SSL_set_tlsext_status_ocsp_resp(s, parg, larg);
1971
1972
	case SSL_CTRL_SET_GROUPS:
1973
		return SSL_set1_groups(s, parg, larg);
1974
1975
	case SSL_CTRL_SET_GROUPS_LIST:
1976
		return SSL_set1_groups_list(s, parg);
1977
1978
	case SSL_CTRL_GET_SERVER_TMP_KEY:
1979
4
		return ssl_ctrl_get_server_tmp_key(s, parg);
1980
1981
	case SSL_CTRL_SET_MIN_PROTO_VERSION:
1982
		if (larg < 0 || larg > UINT16_MAX)
1983
			return 0;
1984
		return SSL_set_min_proto_version(s, larg);
1985
1986
	case SSL_CTRL_SET_MAX_PROTO_VERSION:
1987
		if (larg < 0 || larg > UINT16_MAX)
1988
			return 0;
1989
		return SSL_set_max_proto_version(s, larg);
1990
1991
	/*
1992
	 * Legacy controls that should eventually be removed.
1993
	 */
1994
	case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
1995
		return 0;
1996
1997
	case SSL_CTRL_GET_FLAGS:
1998
		return (int)(s->s3->flags);
1999
2000
	case SSL_CTRL_NEED_TMP_RSA:
2001
		return 0;
2002
2003
	case SSL_CTRL_SET_TMP_RSA:
2004
	case SSL_CTRL_SET_TMP_RSA_CB:
2005
		SSLerror(s, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2006
		return 0;
2007
	}
2008
2009
	return 0;
2010
7983
}
2011
2012
long
2013
ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
2014
{
2015
	if (cmd == SSL_CTRL_SET_TMP_DH_CB || cmd == SSL_CTRL_SET_TMP_ECDH_CB) {
2016
		if (!ssl_cert_inst(&s->cert)) {
2017
			SSLerror(s, ERR_R_MALLOC_FAILURE);
2018
			return 0;
2019
		}
2020
	}
2021
2022
	switch (cmd) {
2023
	case SSL_CTRL_SET_TMP_RSA_CB:
2024
		SSLerror(s, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2025
		return 0;
2026
2027
	case SSL_CTRL_SET_TMP_DH_CB:
2028
		s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
2029
		return 1;
2030
2031
	case SSL_CTRL_SET_TMP_ECDH_CB:
2032
		return 1;
2033
2034
	case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
2035
		s->internal->tlsext_debug_cb = (void (*)(SSL *, int , int,
2036
		    unsigned char *, int, void *))fp;
2037
		return 1;
2038
	}
2039
2040
	return 0;
2041
}
2042
2043
static int
2044
_SSL_CTX_set_tmp_dh(SSL_CTX *ctx, DH *dh)
2045
{
2046
	DH *dh_tmp;
2047
2048
612
	if ((dh_tmp = DHparams_dup(dh)) == NULL) {
2049
		SSLerrorx(ERR_R_DH_LIB);
2050
		return 0;
2051
	}
2052
2053
306
	DH_free(ctx->internal->cert->dh_tmp);
2054
306
	ctx->internal->cert->dh_tmp = dh_tmp;
2055
2056
306
	return 1;
2057
306
}
2058
2059
static int
2060
_SSL_CTX_set_dh_auto(SSL_CTX *ctx, int state)
2061
{
2062
16
	ctx->internal->cert->dh_tmp_auto = state;
2063
8
	return 1;
2064
}
2065
2066
static int
2067
_SSL_CTX_set_tmp_ecdh(SSL_CTX *ctx, EC_KEY *ecdh)
2068
{
2069
	const EC_GROUP *group;
2070
612
	int nid;
2071
2072
306
	if (ecdh == NULL)
2073
		return 0;
2074
306
	if ((group = EC_KEY_get0_group(ecdh)) == NULL)
2075
		return 0;
2076
2077
306
	nid = EC_GROUP_get_curve_name(group);
2078
306
	return SSL_CTX_set1_groups(ctx, &nid, 1);
2079
306
}
2080
2081
static int
2082
_SSL_CTX_set_ecdh_auto(SSL_CTX *ctx, int state)
2083
{
2084
48
	return 1;
2085
}
2086
2087
static int
2088
_SSL_CTX_set_tlsext_servername_arg(SSL_CTX *ctx, void *arg)
2089
{
2090
32
	ctx->internal->tlsext_servername_arg = arg;
2091
16
	return 1;
2092
}
2093
2094
static int
2095
_SSL_CTX_get_tlsext_ticket_keys(SSL_CTX *ctx, unsigned char *keys, int keys_len)
2096
{
2097
	if (keys == NULL)
2098
		return 48;
2099
2100
	if (keys_len != 48) {
2101
		SSLerrorx(SSL_R_INVALID_TICKET_KEYS_LENGTH);
2102
		return 0;
2103
	}
2104
2105
	memcpy(keys, ctx->internal->tlsext_tick_key_name, 16);
2106
	memcpy(keys + 16, ctx->internal->tlsext_tick_hmac_key, 16);
2107
	memcpy(keys + 32, ctx->internal->tlsext_tick_aes_key, 16);
2108
2109
	return 1;
2110
}
2111
2112
static int
2113
_SSL_CTX_set_tlsext_ticket_keys(SSL_CTX *ctx, unsigned char *keys, int keys_len)
2114
{
2115
	if (keys == NULL)
2116
		return 48;
2117
2118
	if (keys_len != 48) {
2119
		SSLerrorx(SSL_R_INVALID_TICKET_KEYS_LENGTH);
2120
		return 0;
2121
	}
2122
2123
	memcpy(ctx->internal->tlsext_tick_key_name, keys, 16);
2124
	memcpy(ctx->internal->tlsext_tick_hmac_key, keys + 16, 16);
2125
	memcpy(ctx->internal->tlsext_tick_aes_key, keys + 32, 16);
2126
2127
	return 1;
2128
}
2129
2130
static int
2131
_SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg)
2132
{
2133
	ctx->internal->tlsext_status_arg = arg;
2134
	return 1;
2135
}
2136
2137
static int
2138
_SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *cert)
2139
{
2140
	if (ctx->extra_certs == NULL) {
2141
		if ((ctx->extra_certs = sk_X509_new_null()) == NULL)
2142
			return 0;
2143
	}
2144
	if (sk_X509_push(ctx->extra_certs, cert) == 0)
2145
		return 0;
2146
2147
	return 1;
2148
}
2149
2150
int
2151
_SSL_CTX_get_extra_chain_certs(SSL_CTX *ctx, STACK_OF(X509) **certs)
2152
{
2153
	*certs = ctx->extra_certs;
2154
	return 1;
2155
}
2156
2157
int
2158
_SSL_CTX_clear_extra_chain_certs(SSL_CTX *ctx)
2159
{
2160
	sk_X509_pop_free(ctx->extra_certs, X509_free);
2161
	ctx->extra_certs = NULL;
2162
	return 1;
2163
}
2164
2165
int
2166
SSL_CTX_set1_groups(SSL_CTX *ctx, const int *groups, size_t groups_len)
2167
{
2168
1014
	return tls1_set_groups(&ctx->internal->tlsext_supportedgroups,
2169
338
	    &ctx->internal->tlsext_supportedgroups_length, groups, groups_len);
2170
}
2171
2172
int
2173
SSL_CTX_set1_groups_list(SSL_CTX *ctx, const char *groups)
2174
{
2175
	return tls1_set_groups_list(&ctx->internal->tlsext_supportedgroups,
2176
	    &ctx->internal->tlsext_supportedgroups_length, groups);
2177
}
2178
2179
long
2180
ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2181
{
2182





1320
	switch (cmd) {
2183
	case SSL_CTRL_SET_TMP_DH:
2184
306
		return _SSL_CTX_set_tmp_dh(ctx, parg);
2185
2186
	case SSL_CTRL_SET_TMP_DH_CB:
2187
		SSLerrorx(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2188
		return 0;
2189
2190
	case SSL_CTRL_SET_DH_AUTO:
2191
8
		return _SSL_CTX_set_dh_auto(ctx, larg);
2192
2193
	case SSL_CTRL_SET_TMP_ECDH:
2194
306
		return _SSL_CTX_set_tmp_ecdh(ctx, parg);
2195
2196
	case SSL_CTRL_SET_TMP_ECDH_CB:
2197
		SSLerrorx(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2198
		return 0;
2199
2200
	case SSL_CTRL_SET_ECDH_AUTO:
2201
24
		return _SSL_CTX_set_ecdh_auto(ctx, larg);
2202
2203
	case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
2204
16
		return _SSL_CTX_set_tlsext_servername_arg(ctx, parg);
2205
2206
	case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
2207
		return _SSL_CTX_get_tlsext_ticket_keys(ctx, parg, larg);
2208
2209
	case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
2210
		return _SSL_CTX_set_tlsext_ticket_keys(ctx, parg, larg);
2211
2212
	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
2213
		return _SSL_CTX_set_tlsext_status_arg(ctx, parg);
2214
2215
	case SSL_CTRL_EXTRA_CHAIN_CERT:
2216
		return _SSL_CTX_add_extra_chain_cert(ctx, parg);
2217
2218
	case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
2219
		return _SSL_CTX_get_extra_chain_certs(ctx, parg);
2220
2221
	case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
2222
		return _SSL_CTX_clear_extra_chain_certs(ctx);
2223
2224
	case SSL_CTRL_SET_GROUPS:
2225
		return SSL_CTX_set1_groups(ctx, parg, larg);
2226
2227
	case SSL_CTRL_SET_GROUPS_LIST:
2228
		return SSL_CTX_set1_groups_list(ctx, parg);
2229
2230
	case SSL_CTRL_SET_MIN_PROTO_VERSION:
2231
		if (larg < 0 || larg > UINT16_MAX)
2232
			return 0;
2233
		return SSL_CTX_set_min_proto_version(ctx, larg);
2234
2235
	case SSL_CTRL_SET_MAX_PROTO_VERSION:
2236
		if (larg < 0 || larg > UINT16_MAX)
2237
			return 0;
2238
		return SSL_CTX_set_max_proto_version(ctx, larg);
2239
2240
	/*
2241
	 * Legacy controls that should eventually be removed.
2242
	 */
2243
	case SSL_CTRL_NEED_TMP_RSA:
2244
		return 0;
2245
2246
	case SSL_CTRL_SET_TMP_RSA:
2247
	case SSL_CTRL_SET_TMP_RSA_CB:
2248
		SSLerrorx(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2249
		return 0;
2250
	}
2251
2252
	return 0;
2253
660
}
2254
2255
long
2256
ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
2257
{
2258

504
	switch (cmd) {
2259
	case SSL_CTRL_SET_TMP_RSA_CB:
2260
204
		SSLerrorx(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2261
204
		return 0;
2262
2263
	case SSL_CTRL_SET_TMP_DH_CB:
2264
		ctx->internal->cert->dh_tmp_cb =
2265
		    (DH *(*)(SSL *, int, int))fp;
2266
		return 1;
2267
2268
	case SSL_CTRL_SET_TMP_ECDH_CB:
2269
		return 1;
2270
2271
	case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
2272
16
		ctx->internal->tlsext_servername_callback =
2273
16
		    (int (*)(SSL *, int *, void *))fp;
2274
16
		return 1;
2275
2276
	case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
2277
32
		ctx->internal->tlsext_status_cb = (int (*)(SSL *, void *))fp;
2278
32
		return 1;
2279
2280
	case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
2281
		ctx->internal->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char  *,
2282
		    unsigned char *, EVP_CIPHER_CTX *, HMAC_CTX *, int))fp;
2283
		return 1;
2284
	}
2285
2286
	return 0;
2287
252
}
2288
2289
/*
2290
 * This function needs to check if the ciphers required are actually available.
2291
 */
2292
const SSL_CIPHER *
2293
ssl3_get_cipher_by_char(const unsigned char *p)
2294
{
2295
5544
	CBS cipher;
2296
2772
	uint16_t cipher_value;
2297
2298
	/* We have to assume it is at least 2 bytes due to existing API. */
2299
2772
	CBS_init(&cipher, p, 2);
2300
2772
	if (!CBS_get_u16(&cipher, &cipher_value))
2301
		return NULL;
2302
2303
2772
	return ssl3_get_cipher_by_value(cipher_value);
2304
2772
}
2305
2306
int
2307
ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
2308
{
2309
5664
	if (p != NULL) {
2310
2772
		if ((c->id & ~SSL3_CK_VALUE_MASK) != SSL3_CK_ID)
2311
			return (0);
2312
2772
		s2n(ssl3_cipher_get_value(c), p);
2313
2772
	}
2314
2832
	return (2);
2315
2832
}
2316
2317
SSL_CIPHER *
2318
ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
2319
    STACK_OF(SSL_CIPHER) *srvr)
2320
{
2321
	unsigned long alg_k, alg_a, mask_k, mask_a;
2322
	STACK_OF(SSL_CIPHER) *prio, *allow;
2323
	SSL_CIPHER *c, *ret = NULL;
2324
	int i, ii, ok;
2325
	CERT *cert;
2326
2327
	/* Let's see which ciphers we can support */
2328
528
	cert = s->cert;
2329
2330
	/*
2331
	 * Do not set the compare functions, because this may lead to a
2332
	 * reordering by "id". We want to keep the original ordering.
2333
	 * We may pay a price in performance during sk_SSL_CIPHER_find(),
2334
	 * but would have to pay with the price of sk_SSL_CIPHER_dup().
2335
	 */
2336
2337
264
	if (s->internal->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
2338
		prio = srvr;
2339
		allow = clnt;
2340
16
	} else {
2341
		prio = clnt;
2342
		allow = srvr;
2343
	}
2344
2345
592
	for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
2346
296
		c = sk_SSL_CIPHER_value(prio, i);
2347
2348
		/* Skip TLS v1.2 only ciphersuites if not supported. */
2349

436
		if ((c->algorithm_ssl & SSL_TLSV1_2) &&
2350
140
		    !SSL_USE_TLS1_2_CIPHERS(s))
2351
			continue;
2352
2353
296
		ssl_set_cert_masks(cert, c);
2354
296
		mask_k = cert->mask_k;
2355
296
		mask_a = cert->mask_a;
2356
2357
296
		alg_k = c->algorithm_mkey;
2358
296
		alg_a = c->algorithm_auth;
2359
2360
2361
888
		ok = (alg_k & mask_k) && (alg_a & mask_a);
2362
2363
		/*
2364
		 * If we are considering an ECC cipher suite that uses our
2365
		 * certificate check it.
2366
		 */
2367
296
		if (alg_a & SSL_aECDSA)
2368
32
			ok = ok && tls1_check_ec_server_key(s);
2369
		/*
2370
		 * If we are considering an ECC cipher suite that uses
2371
		 * an ephemeral EC key check it.
2372
		 */
2373
296
		if (alg_k & SSL_kECDHE)
2374
416
			ok = ok && tls1_check_ec_tmp_key(s);
2375
2376
296
		if (!ok)
2377
			continue;
2378
264
		ii = sk_SSL_CIPHER_find(allow, c);
2379
264
		if (ii >= 0) {
2380
264
			ret = sk_SSL_CIPHER_value(allow, ii);
2381
264
			break;
2382
		}
2383
	}
2384
264
	return (ret);
2385
}
2386
2387
int
2388
ssl3_get_req_cert_types(SSL *s, CBB *cbb)
2389
{
2390
	unsigned long alg_k;
2391
2392
56
	alg_k = S3I(s)->hs.new_cipher->algorithm_mkey;
2393
2394
#ifndef OPENSSL_NO_GOST
2395
28
	if ((alg_k & SSL_kGOST) != 0) {
2396
		if (!CBB_add_u8(cbb, TLS_CT_GOST94_SIGN))
2397
			return 0;
2398
		if (!CBB_add_u8(cbb, TLS_CT_GOST01_SIGN))
2399
			return 0;
2400
		if (!CBB_add_u8(cbb, TLS_CT_GOST12_256_SIGN))
2401
			return 0;
2402
		if (!CBB_add_u8(cbb, TLS_CT_GOST12_512_SIGN))
2403
			return 0;
2404
	}
2405
#endif
2406
2407
28
	if ((alg_k & SSL_kDHE) != 0) {
2408
8
		if (!CBB_add_u8(cbb, SSL3_CT_RSA_FIXED_DH))
2409
			return 0;
2410
	}
2411
2412
28
	if (!CBB_add_u8(cbb, SSL3_CT_RSA_SIGN))
2413
		return 0;
2414
2415
	/*
2416
	 * ECDSA certs can be used with RSA cipher suites as well
2417
	 * so we don't need to check for SSL_kECDH or SSL_kECDHE.
2418
	 */
2419
28
	if (!CBB_add_u8(cbb, TLS_CT_ECDSA_SIGN))
2420
		return 0;
2421
2422
28
	return 1;
2423
28
}
2424
2425
int
2426
ssl3_shutdown(SSL *s)
2427
{
2428
	int	ret;
2429
2430
	/*
2431
	 * Don't do anything much if we have not done the handshake or
2432
	 * we don't want to send messages :-)
2433
	 */
2434

17380
	if ((s->internal->quiet_shutdown) || (S3I(s)->hs.state == SSL_ST_BEFORE)) {
2435
7919
		s->internal->shutdown = (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
2436
7919
		return (1);
2437
	}
2438
2439
514
	if (!(s->internal->shutdown & SSL_SENT_SHUTDOWN)) {
2440
514
		s->internal->shutdown|=SSL_SENT_SHUTDOWN;
2441
514
		ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
2442
		/*
2443
		 * Our shutdown alert has been sent now, and if it still needs
2444
	 	 * to be written, s->s3->alert_dispatch will be true
2445
		 */
2446
514
		if (s->s3->alert_dispatch)
2447
480
			return(-1);	/* return WANT_WRITE */
2448
	} else if (s->s3->alert_dispatch) {
2449
		/* resend it if not sent */
2450
		ret = s->method->ssl_dispatch_alert(s);
2451
		if (ret == -1) {
2452
			/*
2453
			 * We only get to return -1 here the 2nd/Nth
2454
			 * invocation, we must  have already signalled
2455
			 * return 0 upon a previous invoation,
2456
			 * return WANT_WRITE
2457
			 */
2458
			return (ret);
2459
		}
2460
	} else if (!(s->internal->shutdown & SSL_RECEIVED_SHUTDOWN)) {
2461
		/* If we are waiting for a close from our peer, we are closed */
2462
		s->method->internal->ssl_read_bytes(s, 0, NULL, 0, 0);
2463
		if (!(s->internal->shutdown & SSL_RECEIVED_SHUTDOWN)) {
2464
			return(-1);	/* return WANT_READ */
2465
		}
2466
	}
2467
2468

34
	if ((s->internal->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
2469
	    !s->s3->alert_dispatch)
2470
		return (1);
2471
	else
2472
34
		return (0);
2473
8433
}
2474
2475
int
2476
ssl3_write(SSL *s, const void *buf, int len)
2477
{
2478
	int	ret, n;
2479
2480
#if 0
2481
	if (s->internal->shutdown & SSL_SEND_SHUTDOWN) {
2482
		s->internal->rwstate = SSL_NOTHING;
2483
		return (0);
2484
	}
2485
#endif
2486
12244
	errno = 0;
2487
6122
	if (S3I(s)->renegotiate)
2488
		ssl3_renegotiate_check(s);
2489
2490
	/*
2491
	 * This is an experimental flag that sends the
2492
	 * last handshake message in the same packet as the first
2493
	 * use data - used to see if it helps the TCP protocol during
2494
	 * session-id reuse
2495
	 */
2496
	/* The second test is because the buffer may have been removed */
2497

6122
	if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) {
2498
		/* First time through, we write into the buffer */
2499
		if (S3I(s)->delay_buf_pop_ret == 0) {
2500
			ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA,
2501
			    buf, len);
2502
			if (ret <= 0)
2503
				return (ret);
2504
2505
			S3I(s)->delay_buf_pop_ret = ret;
2506
		}
2507
2508
		s->internal->rwstate = SSL_WRITING;
2509
		n = BIO_flush(s->wbio);
2510
		if (n <= 0)
2511
			return (n);
2512
		s->internal->rwstate = SSL_NOTHING;
2513
2514
		/* We have flushed the buffer, so remove it */
2515
		ssl_free_wbio_buffer(s);
2516
		s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
2517
2518
		ret = S3I(s)->delay_buf_pop_ret;
2519
		S3I(s)->delay_buf_pop_ret = 0;
2520
	} else {
2521
6122
		ret = s->method->internal->ssl_write_bytes(s,
2522
		    SSL3_RT_APPLICATION_DATA, buf, len);
2523
6122
		if (ret <= 0)
2524
5642
			return (ret);
2525
	}
2526
2527
480
	return (ret);
2528
6122
}
2529
2530
static int
2531
ssl3_read_internal(SSL *s, void *buf, int len, int peek)
2532
{
2533
	int	ret;
2534
2535
12816
	errno = 0;
2536
6408
	if (S3I(s)->renegotiate)
2537
		ssl3_renegotiate_check(s);
2538
6408
	S3I(s)->in_read_app_data = 1;
2539
6408
	ret = s->method->internal->ssl_read_bytes(s,
2540
	    SSL3_RT_APPLICATION_DATA, buf, len, peek);
2541

12336
	if ((ret == -1) && (S3I(s)->in_read_app_data == 2)) {
2542
		/*
2543
		 * ssl3_read_bytes decided to call s->internal->handshake_func, which
2544
		 * called ssl3_read_bytes to read handshake data.
2545
		 * However, ssl3_read_bytes actually found application data
2546
		 * and thinks that application data makes sense here; so disable
2547
		 * handshake processing and try to read application data again.
2548
		 */
2549
		s->internal->in_handshake++;
2550
		ret = s->method->internal->ssl_read_bytes(s,
2551
		    SSL3_RT_APPLICATION_DATA, buf, len, peek);
2552
		s->internal->in_handshake--;
2553
	} else
2554
6408
		S3I(s)->in_read_app_data = 0;
2555
2556
6408
	return (ret);
2557
}
2558
2559
int
2560
ssl3_read(SSL *s, void *buf, int len)
2561
{
2562
12816
	return ssl3_read_internal(s, buf, len, 0);
2563
}
2564
2565
int
2566
ssl3_peek(SSL *s, void *buf, int len)
2567
{
2568
	return ssl3_read_internal(s, buf, len, 1);
2569
}
2570
2571
int
2572
ssl3_renegotiate(SSL *s)
2573
{
2574
8
	if (s->internal->handshake_func == NULL)
2575
4
		return (1);
2576
2577
	if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
2578
		return (0);
2579
2580
	S3I(s)->renegotiate = 1;
2581
	return (1);
2582
4
}
2583
2584
int
2585
ssl3_renegotiate_check(SSL *s)
2586
{
2587
	int	ret = 0;
2588
2589
	if (S3I(s)->renegotiate) {
2590
		if ((s->s3->rbuf.left == 0) && (s->s3->wbuf.left == 0) &&
2591
		    !SSL_in_init(s)) {
2592
			/*
2593
			 * If we are the server, and we have sent
2594
			 * a 'RENEGOTIATE' message, we need to go
2595
			 * to SSL_ST_ACCEPT.
2596
			 */
2597
			/* SSL_ST_ACCEPT */
2598
			S3I(s)->hs.state = SSL_ST_RENEGOTIATE;
2599
			S3I(s)->renegotiate = 0;
2600
			S3I(s)->num_renegotiations++;
2601
			S3I(s)->total_renegotiations++;
2602
			ret = 1;
2603
		}
2604
	}
2605
	return (ret);
2606
}
2607
/*
2608
 * If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF
2609
 * and handshake macs if required.
2610
 */
2611
long
2612
ssl_get_algorithm2(SSL *s)
2613
{
2614
88216
	long	alg2 = S3I(s)->hs.new_cipher->algorithm2;
2615
2616
88216
	if (s->method->internal->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF &&
2617
44108
	    alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF))
2618
368
		return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
2619
43740
	return alg2;
2620
44108
}