• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ssl/s3_srvr.c -*- mode:C; c-file-style: "eay" -*- */
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 #define REUSE_CIPHER_BUG
152 #define NETSCAPE_HANG_BUG
153 
154 #include <stdio.h>
155 #include "ssl_locl.h"
156 #include "kssl_lcl.h"
157 #include <openssl/buffer.h>
158 #include <openssl/rand.h>
159 #include <openssl/objects.h>
160 #include <openssl/evp.h>
161 #include <openssl/hmac.h>
162 #include <openssl/x509.h>
163 #ifndef OPENSSL_NO_DH
164 #include <openssl/dh.h>
165 #endif
166 #include <openssl/bn.h>
167 #ifndef OPENSSL_NO_KRB5
168 #include <openssl/krb5_asn.h>
169 #endif
170 #include <openssl/md5.h>
171 
172 static const SSL_METHOD *ssl3_get_server_method(int ver);
173 
ssl3_get_server_method(int ver)174 static const SSL_METHOD *ssl3_get_server_method(int ver)
175 	{
176 	if (ver == SSL3_VERSION)
177 		return(SSLv3_server_method());
178 	else
179 		return(NULL);
180 	}
181 
182 #ifndef OPENSSL_NO_SRP
ssl_check_srp_ext_ClientHello(SSL * s,int * al)183 static int ssl_check_srp_ext_ClientHello(SSL *s, int *al)
184 	{
185 	int ret = SSL_ERROR_NONE;
186 
187 	*al = SSL_AD_UNRECOGNIZED_NAME;
188 
189 	if ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) &&
190 	    (s->srp_ctx.TLS_ext_srp_username_callback != NULL))
191 		{
192 		if(s->srp_ctx.login == NULL)
193 			{
194 			/* There isn't any srp login extension !!! */
195 			ret = SSL3_AL_FATAL;
196 			*al = SSL_AD_UNKNOWN_PSK_IDENTITY;
197 			}
198 		else
199 			{
200 			ret = SSL_srp_server_param_with_username(s,al);
201 			}
202 		}
203 	return ret;
204 	}
205 #endif
206 
IMPLEMENT_ssl3_meth_func(SSLv3_server_method,ssl3_accept,ssl_undefined_function,ssl3_get_server_method)207 IMPLEMENT_ssl3_meth_func(SSLv3_server_method,
208 			ssl3_accept,
209 			ssl_undefined_function,
210 			ssl3_get_server_method)
211 
212 int ssl3_accept(SSL *s)
213 	{
214 	BUF_MEM *buf;
215 	unsigned long alg_k,Time=(unsigned long)time(NULL);
216 	void (*cb)(const SSL *ssl,int type,int val)=NULL;
217 	int ret= -1;
218 	int new_state,state,skip=0;
219 
220 	RAND_add(&Time,sizeof(Time),0);
221 	ERR_clear_error();
222 	clear_sys_error();
223 
224 	if (s->info_callback != NULL)
225 		cb=s->info_callback;
226 	else if (s->ctx->info_callback != NULL)
227 		cb=s->ctx->info_callback;
228 
229 	/* init things to blank */
230 	s->in_handshake++;
231 	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);
232 
233 	if (s->cert == NULL)
234 		{
235 		SSLerr(SSL_F_SSL3_ACCEPT,SSL_R_NO_CERTIFICATE_SET);
236 		return(-1);
237 		}
238 
239 #ifndef OPENSSL_NO_HEARTBEATS
240 	/* If we're awaiting a HeartbeatResponse, pretend we
241 	 * already got and don't await it anymore, because
242 	 * Heartbeats don't make sense during handshakes anyway.
243 	 */
244 	if (s->tlsext_hb_pending)
245 		{
246 		s->tlsext_hb_pending = 0;
247 		s->tlsext_hb_seq++;
248 		}
249 #endif
250 
251 	for (;;)
252 		{
253 		state=s->state;
254 
255 		switch (s->state)
256 			{
257 		case SSL_ST_RENEGOTIATE:
258 			s->renegotiate=1;
259 			/* s->state=SSL_ST_ACCEPT; */
260 
261 		case SSL_ST_BEFORE:
262 		case SSL_ST_ACCEPT:
263 		case SSL_ST_BEFORE|SSL_ST_ACCEPT:
264 		case SSL_ST_OK|SSL_ST_ACCEPT:
265 
266 			s->server=1;
267 			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);
268 
269 			if ((s->version>>8) != 3)
270 				{
271 				SSLerr(SSL_F_SSL3_ACCEPT, ERR_R_INTERNAL_ERROR);
272 				return -1;
273 				}
274 			s->type=SSL_ST_ACCEPT;
275 
276 			if (s->init_buf == NULL)
277 				{
278 				if ((buf=BUF_MEM_new()) == NULL)
279 					{
280 					ret= -1;
281 					goto end;
282 					}
283 				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))
284 					{
285 					ret= -1;
286 					goto end;
287 					}
288 				s->init_buf=buf;
289 				}
290 
291 			if (!ssl3_setup_buffers(s))
292 				{
293 				ret= -1;
294 				goto end;
295 				}
296 
297 			s->init_num=0;
298 			s->s3->flags &= ~SSL3_FLAGS_SGC_RESTART_DONE;
299 
300 			if (s->state != SSL_ST_RENEGOTIATE)
301 				{
302 				/* Ok, we now need to push on a buffering BIO so that
303 				 * the output is sent in a way that TCP likes :-)
304 				 */
305 				if (!ssl_init_wbio_buffer(s,1)) { ret= -1; goto end; }
306 
307 				ssl3_init_finished_mac(s);
308 				s->state=SSL3_ST_SR_CLNT_HELLO_A;
309 				s->ctx->stats.sess_accept++;
310 				}
311 			else if (!s->s3->send_connection_binding &&
312 				!(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
313 				{
314 				/* Server attempting to renegotiate with
315 				 * client that doesn't support secure
316 				 * renegotiation.
317 				 */
318 				SSLerr(SSL_F_SSL3_ACCEPT, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
319 				ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
320 				ret = -1;
321 				goto end;
322 				}
323 			else
324 				{
325 				/* s->state == SSL_ST_RENEGOTIATE,
326 				 * we will just send a HelloRequest */
327 				s->ctx->stats.sess_accept_renegotiate++;
328 				s->state=SSL3_ST_SW_HELLO_REQ_A;
329 				}
330 			break;
331 
332 		case SSL3_ST_SW_HELLO_REQ_A:
333 		case SSL3_ST_SW_HELLO_REQ_B:
334 
335 			s->shutdown=0;
336 			ret=ssl3_send_hello_request(s);
337 			if (ret <= 0) goto end;
338 			s->s3->tmp.next_state=SSL3_ST_SW_HELLO_REQ_C;
339 			s->state=SSL3_ST_SW_FLUSH;
340 			s->init_num=0;
341 
342 			ssl3_init_finished_mac(s);
343 			break;
344 
345 		case SSL3_ST_SW_HELLO_REQ_C:
346 			s->state=SSL_ST_OK;
347 			break;
348 
349 		case SSL3_ST_SR_CLNT_HELLO_A:
350 		case SSL3_ST_SR_CLNT_HELLO_B:
351 		case SSL3_ST_SR_CLNT_HELLO_C:
352 
353 			s->shutdown=0;
354 			if (s->rwstate != SSL_X509_LOOKUP)
355 			{
356 				ret=ssl3_get_client_hello(s);
357 				if (ret <= 0) goto end;
358 			}
359 #ifndef OPENSSL_NO_SRP
360 			{
361 			int al;
362 			if ((ret = ssl_check_srp_ext_ClientHello(s,&al))  < 0)
363 					{
364 					/* callback indicates firther work to be done */
365 					s->rwstate=SSL_X509_LOOKUP;
366 					goto end;
367 					}
368 			if (ret != SSL_ERROR_NONE)
369 				{
370 				ssl3_send_alert(s,SSL3_AL_FATAL,al);
371 				/* This is not really an error but the only means to
372                                    for a client to detect whether srp is supported. */
373  				   if (al != TLS1_AD_UNKNOWN_PSK_IDENTITY)
374 					SSLerr(SSL_F_SSL3_ACCEPT,SSL_R_CLIENTHELLO_TLSEXT);
375 				ret = SSL_TLSEXT_ERR_ALERT_FATAL;
376 				ret= -1;
377 				goto end;
378 				}
379 			}
380 #endif
381 			s->renegotiate = 2;
382 			s->state=SSL3_ST_SW_SRVR_HELLO_A;
383 			s->init_num=0;
384 			break;
385 
386 		case SSL3_ST_SW_SRVR_HELLO_A:
387 		case SSL3_ST_SW_SRVR_HELLO_B:
388 			ret=ssl3_send_server_hello(s);
389 			if (ret <= 0) goto end;
390 #ifndef OPENSSL_NO_TLSEXT
391 			if (s->hit)
392 				{
393 				if (s->tlsext_ticket_expected)
394 					s->state=SSL3_ST_SW_SESSION_TICKET_A;
395 				else
396 					s->state=SSL3_ST_SW_CHANGE_A;
397 				}
398 #else
399 			if (s->hit)
400 					s->state=SSL3_ST_SW_CHANGE_A;
401 #endif
402 			else
403 				s->state=SSL3_ST_SW_CERT_A;
404 			s->init_num=0;
405 			break;
406 
407 		case SSL3_ST_SW_CERT_A:
408 		case SSL3_ST_SW_CERT_B:
409 			/* Check if it is anon DH or anon ECDH, */
410 			/* normal PSK or KRB5 or SRP */
411 			if (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)
412 				&& !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)
413 				&& !(s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5))
414 				{
415 				ret=ssl3_send_server_certificate(s);
416 				if (ret <= 0) goto end;
417 #ifndef OPENSSL_NO_TLSEXT
418 				if (s->tlsext_status_expected)
419 					s->state=SSL3_ST_SW_CERT_STATUS_A;
420 				else
421 					s->state=SSL3_ST_SW_KEY_EXCH_A;
422 				}
423 			else
424 				{
425 				skip = 1;
426 				s->state=SSL3_ST_SW_KEY_EXCH_A;
427 				}
428 #else
429 				}
430 			else
431 				skip=1;
432 
433 			s->state=SSL3_ST_SW_KEY_EXCH_A;
434 #endif
435 			s->init_num=0;
436 			break;
437 
438 		case SSL3_ST_SW_KEY_EXCH_A:
439 		case SSL3_ST_SW_KEY_EXCH_B:
440 			alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
441 
442 			/* clear this, it may get reset by
443 			 * send_server_key_exchange */
444 			if ((s->options & SSL_OP_EPHEMERAL_RSA)
445 #ifndef OPENSSL_NO_KRB5
446 				&& !(alg_k & SSL_kKRB5)
447 #endif /* OPENSSL_NO_KRB5 */
448 				)
449 				/* option SSL_OP_EPHEMERAL_RSA sends temporary RSA key
450 				 * even when forbidden by protocol specs
451 				 * (handshake may fail as clients are not required to
452 				 * be able to handle this) */
453 				s->s3->tmp.use_rsa_tmp=1;
454 			else
455 				s->s3->tmp.use_rsa_tmp=0;
456 
457 
458 			/* only send if a DH key exchange, fortezza or
459 			 * RSA but we have a sign only certificate
460 			 *
461 			 * PSK: may send PSK identity hints
462 			 *
463 			 * For ECC ciphersuites, we send a serverKeyExchange
464 			 * message only if the cipher suite is either
465 			 * ECDH-anon or ECDHE. In other cases, the
466 			 * server certificate contains the server's
467 			 * public key for key exchange.
468 			 */
469 			if (s->s3->tmp.use_rsa_tmp
470 			/* PSK: send ServerKeyExchange if PSK identity
471 			 * hint if provided */
472 #ifndef OPENSSL_NO_PSK
473 			    || ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint)
474 #endif
475 #ifndef OPENSSL_NO_SRP
476 			    /* SRP: send ServerKeyExchange */
477 			    || (alg_k & SSL_kSRP)
478 #endif
479 			    || (alg_k & (SSL_kDHr|SSL_kDHd|SSL_kEDH))
480 			    || (alg_k & SSL_kEECDH)
481 			    || ((alg_k & SSL_kRSA)
482 				&& (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL
483 				    || (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher)
484 					&& EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey)*8 > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)
485 					)
486 				    )
487 				)
488 			    )
489 				{
490 				ret=ssl3_send_server_key_exchange(s);
491 				if (ret <= 0) goto end;
492 				}
493 			else
494 				skip=1;
495 
496 			s->state=SSL3_ST_SW_CERT_REQ_A;
497 			s->init_num=0;
498 			break;
499 
500 		case SSL3_ST_SW_CERT_REQ_A:
501 		case SSL3_ST_SW_CERT_REQ_B:
502 			if (/* don't request cert unless asked for it: */
503 				!(s->verify_mode & SSL_VERIFY_PEER) ||
504 				/* if SSL_VERIFY_CLIENT_ONCE is set,
505 				 * don't request cert during re-negotiation: */
506 				((s->session->peer != NULL) &&
507 				 (s->verify_mode & SSL_VERIFY_CLIENT_ONCE)) ||
508 				/* never request cert in anonymous ciphersuites
509 				 * (see section "Certificate request" in SSL 3 drafts
510 				 * and in RFC 2246): */
511 				((s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL) &&
512 				 /* ... except when the application insists on verification
513 				  * (against the specs, but s3_clnt.c accepts this for SSL 3) */
514 				 !(s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) ||
515 				 /* never request cert in Kerberos ciphersuites */
516 				(s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5)
517 				/* With normal PSK Certificates and
518 				 * Certificate Requests are omitted */
519 				|| (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK))
520 				{
521 				/* no cert request */
522 				skip=1;
523 				s->s3->tmp.cert_request=0;
524 				s->state=SSL3_ST_SW_SRVR_DONE_A;
525 				if (s->s3->handshake_buffer)
526 					if (!ssl3_digest_cached_records(s))
527 						return -1;
528 				}
529 			else
530 				{
531 				s->s3->tmp.cert_request=1;
532 				ret=ssl3_send_certificate_request(s);
533 				if (ret <= 0) goto end;
534 #ifndef NETSCAPE_HANG_BUG
535 				s->state=SSL3_ST_SW_SRVR_DONE_A;
536 #else
537 				s->state=SSL3_ST_SW_FLUSH;
538 				s->s3->tmp.next_state=SSL3_ST_SR_CERT_A;
539 #endif
540 				s->init_num=0;
541 				}
542 			break;
543 
544 		case SSL3_ST_SW_SRVR_DONE_A:
545 		case SSL3_ST_SW_SRVR_DONE_B:
546 			ret=ssl3_send_server_done(s);
547 			if (ret <= 0) goto end;
548 			s->s3->tmp.next_state=SSL3_ST_SR_CERT_A;
549 			s->state=SSL3_ST_SW_FLUSH;
550 			s->init_num=0;
551 			break;
552 
553 		case SSL3_ST_SW_FLUSH:
554 
555 			/* This code originally checked to see if
556 			 * any data was pending using BIO_CTRL_INFO
557 			 * and then flushed. This caused problems
558 			 * as documented in PR#1939. The proposed
559 			 * fix doesn't completely resolve this issue
560 			 * as buggy implementations of BIO_CTRL_PENDING
561 			 * still exist. So instead we just flush
562 			 * unconditionally.
563 			 */
564 
565 			s->rwstate=SSL_WRITING;
566 			if (BIO_flush(s->wbio) <= 0)
567 				{
568 				ret= -1;
569 				goto end;
570 				}
571 			s->rwstate=SSL_NOTHING;
572 
573 			s->state=s->s3->tmp.next_state;
574 			break;
575 
576 		case SSL3_ST_SR_CERT_A:
577 		case SSL3_ST_SR_CERT_B:
578 			/* Check for second client hello (MS SGC) */
579 			ret = ssl3_check_client_hello(s);
580 			if (ret <= 0)
581 				goto end;
582 			if (ret == 2)
583 				s->state = SSL3_ST_SR_CLNT_HELLO_C;
584 			else {
585 				if (s->s3->tmp.cert_request)
586 					{
587 					ret=ssl3_get_client_certificate(s);
588 					if (ret <= 0) goto end;
589 					}
590 				s->init_num=0;
591 				s->state=SSL3_ST_SR_KEY_EXCH_A;
592 			}
593 			break;
594 
595 		case SSL3_ST_SR_KEY_EXCH_A:
596 		case SSL3_ST_SR_KEY_EXCH_B:
597 			ret=ssl3_get_client_key_exchange(s);
598 			if (ret <= 0)
599 				goto end;
600 			if (ret == 2)
601 				{
602 				/* For the ECDH ciphersuites when
603 				 * the client sends its ECDH pub key in
604 				 * a certificate, the CertificateVerify
605 				 * message is not sent.
606 				 * Also for GOST ciphersuites when
607 				 * the client uses its key from the certificate
608 				 * for key exchange.
609 				 */
610 #if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG)
611 				s->state=SSL3_ST_SR_FINISHED_A;
612 #else
613 				if (s->s3->next_proto_neg_seen)
614 					s->state=SSL3_ST_SR_NEXT_PROTO_A;
615 				else
616 					s->state=SSL3_ST_SR_FINISHED_A;
617 #endif
618 				s->init_num = 0;
619 				}
620 			else if (TLS1_get_version(s) >= TLS1_2_VERSION)
621 				{
622 				s->state=SSL3_ST_SR_CERT_VRFY_A;
623 				s->init_num=0;
624 				if (!s->session->peer)
625 					break;
626 				/* For TLS v1.2 freeze the handshake buffer
627 				 * at this point and digest cached records.
628 				 */
629 				if (!s->s3->handshake_buffer)
630 					{
631 					SSLerr(SSL_F_SSL3_ACCEPT,ERR_R_INTERNAL_ERROR);
632 					return -1;
633 					}
634 				s->s3->flags |= TLS1_FLAGS_KEEP_HANDSHAKE;
635 				if (!ssl3_digest_cached_records(s))
636 					return -1;
637 				}
638 			else
639 				{
640 				int offset=0;
641 				int dgst_num;
642 
643 				s->state=SSL3_ST_SR_CERT_VRFY_A;
644 				s->init_num=0;
645 
646 				/* We need to get hashes here so if there is
647 				 * a client cert, it can be verified
648 				 * FIXME - digest processing for CertificateVerify
649 				 * should be generalized. But it is next step
650 				 */
651 				if (s->s3->handshake_buffer)
652 					if (!ssl3_digest_cached_records(s))
653 						return -1;
654 				for (dgst_num=0; dgst_num<SSL_MAX_DIGEST;dgst_num++)
655 					if (s->s3->handshake_dgst[dgst_num])
656 						{
657 						int dgst_size;
658 
659 						s->method->ssl3_enc->cert_verify_mac(s,EVP_MD_CTX_type(s->s3->handshake_dgst[dgst_num]),&(s->s3->tmp.cert_verify_md[offset]));
660 						dgst_size=EVP_MD_CTX_size(s->s3->handshake_dgst[dgst_num]);
661 						if (dgst_size < 0)
662 							{
663 							ret = -1;
664 							goto end;
665 							}
666 						offset+=dgst_size;
667 						}
668 				}
669 			break;
670 
671 		case SSL3_ST_SR_CERT_VRFY_A:
672 		case SSL3_ST_SR_CERT_VRFY_B:
673 
674 			/* we should decide if we expected this one */
675 			ret=ssl3_get_cert_verify(s);
676 			if (ret <= 0) goto end;
677 
678 #if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG)
679 			s->state=SSL3_ST_SR_FINISHED_A;
680 #else
681 			if (s->s3->next_proto_neg_seen)
682 				s->state=SSL3_ST_SR_NEXT_PROTO_A;
683 			else
684 				s->state=SSL3_ST_SR_FINISHED_A;
685 #endif
686 			s->init_num=0;
687 			break;
688 
689 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
690 		case SSL3_ST_SR_NEXT_PROTO_A:
691 		case SSL3_ST_SR_NEXT_PROTO_B:
692 			ret=ssl3_get_next_proto(s);
693 			if (ret <= 0) goto end;
694 			s->init_num = 0;
695 			s->state=SSL3_ST_SR_FINISHED_A;
696 			break;
697 #endif
698 
699 		case SSL3_ST_SR_FINISHED_A:
700 		case SSL3_ST_SR_FINISHED_B:
701 			ret=ssl3_get_finished(s,SSL3_ST_SR_FINISHED_A,
702 				SSL3_ST_SR_FINISHED_B);
703 			if (ret <= 0) goto end;
704 			if (s->hit)
705 				s->state=SSL_ST_OK;
706 #ifndef OPENSSL_NO_TLSEXT
707 			else if (s->tlsext_ticket_expected)
708 				s->state=SSL3_ST_SW_SESSION_TICKET_A;
709 #endif
710 			else
711 				s->state=SSL3_ST_SW_CHANGE_A;
712 			s->init_num=0;
713 			break;
714 
715 #ifndef OPENSSL_NO_TLSEXT
716 		case SSL3_ST_SW_SESSION_TICKET_A:
717 		case SSL3_ST_SW_SESSION_TICKET_B:
718 			ret=ssl3_send_newsession_ticket(s);
719 			if (ret <= 0) goto end;
720 			s->state=SSL3_ST_SW_CHANGE_A;
721 			s->init_num=0;
722 			break;
723 
724 		case SSL3_ST_SW_CERT_STATUS_A:
725 		case SSL3_ST_SW_CERT_STATUS_B:
726 			ret=ssl3_send_cert_status(s);
727 			if (ret <= 0) goto end;
728 			s->state=SSL3_ST_SW_KEY_EXCH_A;
729 			s->init_num=0;
730 			break;
731 
732 #endif
733 
734 		case SSL3_ST_SW_CHANGE_A:
735 		case SSL3_ST_SW_CHANGE_B:
736 
737 			s->session->cipher=s->s3->tmp.new_cipher;
738 			if (!s->method->ssl3_enc->setup_key_block(s))
739 				{ ret= -1; goto end; }
740 
741 			ret=ssl3_send_change_cipher_spec(s,
742 				SSL3_ST_SW_CHANGE_A,SSL3_ST_SW_CHANGE_B);
743 
744 			if (ret <= 0) goto end;
745 			s->state=SSL3_ST_SW_FINISHED_A;
746 			s->init_num=0;
747 
748 			if (!s->method->ssl3_enc->change_cipher_state(s,
749 				SSL3_CHANGE_CIPHER_SERVER_WRITE))
750 				{
751 				ret= -1;
752 				goto end;
753 				}
754 
755 			break;
756 
757 		case SSL3_ST_SW_FINISHED_A:
758 		case SSL3_ST_SW_FINISHED_B:
759 			ret=ssl3_send_finished(s,
760 				SSL3_ST_SW_FINISHED_A,SSL3_ST_SW_FINISHED_B,
761 				s->method->ssl3_enc->server_finished_label,
762 				s->method->ssl3_enc->server_finished_label_len);
763 			if (ret <= 0) goto end;
764 			s->state=SSL3_ST_SW_FLUSH;
765 			if (s->hit)
766 				{
767 #if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG)
768 				s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A;
769 #else
770 				if (s->s3->next_proto_neg_seen)
771 					s->s3->tmp.next_state=SSL3_ST_SR_NEXT_PROTO_A;
772 				else
773 					s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A;
774 #endif
775 				}
776 			else
777 				s->s3->tmp.next_state=SSL_ST_OK;
778 			s->init_num=0;
779 			break;
780 
781 		case SSL_ST_OK:
782 			/* clean a few things up */
783 			ssl3_cleanup_key_block(s);
784 
785 			BUF_MEM_free(s->init_buf);
786 			s->init_buf=NULL;
787 
788 			/* remove buffering on output */
789 			ssl_free_wbio_buffer(s);
790 
791 			s->init_num=0;
792 
793 			if (s->renegotiate == 2) /* skipped if we just sent a HelloRequest */
794 				{
795 				s->renegotiate=0;
796 				s->new_session=0;
797 
798 				ssl_update_cache(s,SSL_SESS_CACHE_SERVER);
799 
800 				s->ctx->stats.sess_accept_good++;
801 				/* s->server=1; */
802 				s->handshake_func=ssl3_accept;
803 
804 				if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_DONE,1);
805 				}
806 
807 			ret = 1;
808 			goto end;
809 			/* break; */
810 
811 		default:
812 			SSLerr(SSL_F_SSL3_ACCEPT,SSL_R_UNKNOWN_STATE);
813 			ret= -1;
814 			goto end;
815 			/* break; */
816 			}
817 
818 		if (!s->s3->tmp.reuse_message && !skip)
819 			{
820 			if (s->debug)
821 				{
822 				if ((ret=BIO_flush(s->wbio)) <= 0)
823 					goto end;
824 				}
825 
826 
827 			if ((cb != NULL) && (s->state != state))
828 				{
829 				new_state=s->state;
830 				s->state=state;
831 				cb(s,SSL_CB_ACCEPT_LOOP,1);
832 				s->state=new_state;
833 				}
834 			}
835 		skip=0;
836 		}
837 end:
838 	/* BIO_flush(s->wbio); */
839 
840 	s->in_handshake--;
841 	if (cb != NULL)
842 		cb(s,SSL_CB_ACCEPT_EXIT,ret);
843 	return(ret);
844 	}
845 
ssl3_send_hello_request(SSL * s)846 int ssl3_send_hello_request(SSL *s)
847 	{
848 	unsigned char *p;
849 
850 	if (s->state == SSL3_ST_SW_HELLO_REQ_A)
851 		{
852 		p=(unsigned char *)s->init_buf->data;
853 		*(p++)=SSL3_MT_HELLO_REQUEST;
854 		*(p++)=0;
855 		*(p++)=0;
856 		*(p++)=0;
857 
858 		s->state=SSL3_ST_SW_HELLO_REQ_B;
859 		/* number of bytes to write */
860 		s->init_num=4;
861 		s->init_off=0;
862 		}
863 
864 	/* SSL3_ST_SW_HELLO_REQ_B */
865 	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
866 	}
867 
ssl3_check_client_hello(SSL * s)868 int ssl3_check_client_hello(SSL *s)
869 	{
870 	int ok;
871 	long n;
872 
873 	/* this function is called when we really expect a Certificate message,
874 	 * so permit appropriate message length */
875 	n=s->method->ssl_get_message(s,
876 		SSL3_ST_SR_CERT_A,
877 		SSL3_ST_SR_CERT_B,
878 		-1,
879 		s->max_cert_list,
880 		&ok);
881 	if (!ok) return((int)n);
882 	s->s3->tmp.reuse_message = 1;
883 	if (s->s3->tmp.message_type == SSL3_MT_CLIENT_HELLO)
884 		{
885 		/* We only allow the client to restart the handshake once per
886 		 * negotiation. */
887 		if (s->s3->flags & SSL3_FLAGS_SGC_RESTART_DONE)
888 			{
889 			SSLerr(SSL_F_SSL3_CHECK_CLIENT_HELLO, SSL_R_MULTIPLE_SGC_RESTARTS);
890 			return -1;
891 			}
892 		/* Throw away what we have done so far in the current handshake,
893 		 * which will now be aborted. (A full SSL_clear would be too much.) */
894 #ifndef OPENSSL_NO_DH
895 		if (s->s3->tmp.dh != NULL)
896 			{
897 			DH_free(s->s3->tmp.dh);
898 			s->s3->tmp.dh = NULL;
899 			}
900 #endif
901 #ifndef OPENSSL_NO_ECDH
902 		if (s->s3->tmp.ecdh != NULL)
903 			{
904 			EC_KEY_free(s->s3->tmp.ecdh);
905 			s->s3->tmp.ecdh = NULL;
906 			}
907 #endif
908 		s->s3->flags |= SSL3_FLAGS_SGC_RESTART_DONE;
909 		return 2;
910 		}
911 	return 1;
912 }
913 
ssl3_get_client_hello(SSL * s)914 int ssl3_get_client_hello(SSL *s)
915 	{
916 	int i,j,ok,al,ret= -1;
917 	unsigned int cookie_len;
918 	long n;
919 	unsigned long id;
920 	unsigned char *p,*d,*q;
921 	SSL_CIPHER *c;
922 #ifndef OPENSSL_NO_COMP
923 	SSL_COMP *comp=NULL;
924 #endif
925 	STACK_OF(SSL_CIPHER) *ciphers=NULL;
926 
927 	/* We do this so that we will respond with our native type.
928 	 * If we are TLSv1 and we get SSLv3, we will respond with TLSv1,
929 	 * This down switching should be handled by a different method.
930 	 * If we are SSLv3, we will respond with SSLv3, even if prompted with
931 	 * TLSv1.
932 	 */
933 	if (s->state == SSL3_ST_SR_CLNT_HELLO_A
934 		)
935 		{
936 		s->state=SSL3_ST_SR_CLNT_HELLO_B;
937 		}
938 	s->first_packet=1;
939 	n=s->method->ssl_get_message(s,
940 		SSL3_ST_SR_CLNT_HELLO_B,
941 		SSL3_ST_SR_CLNT_HELLO_C,
942 		SSL3_MT_CLIENT_HELLO,
943 		SSL3_RT_MAX_PLAIN_LENGTH,
944 		&ok);
945 
946 	if (!ok) return((int)n);
947 	s->first_packet=0;
948 	d=p=(unsigned char *)s->init_msg;
949 
950 	/* use version from inside client hello, not from record header
951 	 * (may differ: see RFC 2246, Appendix E, second paragraph) */
952 	s->client_version=(((int)p[0])<<8)|(int)p[1];
953 	p+=2;
954 
955 	if ((s->version == DTLS1_VERSION && s->client_version > s->version) ||
956 	    (s->version != DTLS1_VERSION && s->client_version < s->version))
957 		{
958 		SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER);
959 		if ((s->client_version>>8) == SSL3_VERSION_MAJOR)
960 			{
961 			/* similar to ssl3_get_record, send alert using remote version number */
962 			s->version = s->client_version;
963 			}
964 		al = SSL_AD_PROTOCOL_VERSION;
965 		goto f_err;
966 		}
967 
968 	/* If we require cookies and this ClientHello doesn't
969 	 * contain one, just return since we do not want to
970 	 * allocate any memory yet. So check cookie length...
971 	 */
972 	if (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE)
973 		{
974 		unsigned int session_length, cookie_length;
975 
976 		session_length = *(p + SSL3_RANDOM_SIZE);
977 		cookie_length = *(p + SSL3_RANDOM_SIZE + session_length + 1);
978 
979 		if (cookie_length == 0)
980 			return 1;
981 		}
982 
983 	/* load the client random */
984 	memcpy(s->s3->client_random,p,SSL3_RANDOM_SIZE);
985 	p+=SSL3_RANDOM_SIZE;
986 
987 	/* get the session-id */
988 	j= *(p++);
989 
990 	s->hit=0;
991 	/* Versions before 0.9.7 always allow clients to resume sessions in renegotiation.
992 	 * 0.9.7 and later allow this by default, but optionally ignore resumption requests
993 	 * with flag SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION (it's a new flag rather
994 	 * than a change to default behavior so that applications relying on this for security
995 	 * won't even compile against older library versions).
996 	 *
997 	 * 1.0.1 and later also have a function SSL_renegotiate_abbreviated() to request
998 	 * renegotiation but not a new session (s->new_session remains unset): for servers,
999 	 * this essentially just means that the SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
1000 	 * setting will be ignored.
1001 	 */
1002 	if ((s->new_session && (s->options & SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION)))
1003 		{
1004 	        if (!s->session_creation_enabled)
1005 			{
1006 			ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
1007 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_SESSION_MAY_NOT_BE_CREATED);
1008 			goto err;
1009 		}
1010 		if (!ssl_get_new_session(s,1))
1011 			goto err;
1012 		}
1013 	else
1014 		{
1015 		i=ssl_get_prev_session(s, p, j, d + n);
1016 		if (i == 1)
1017 			{ /* previous session */
1018 			s->hit=1;
1019 			}
1020 		else if (i == -1)
1021 			goto err;
1022 		else /* i == 0 */
1023 			{
1024 		        if (!s->session_creation_enabled)
1025 				{
1026 				ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
1027 				SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_SESSION_MAY_NOT_BE_CREATED);
1028 				goto err;
1029 				}
1030 			if (!ssl_get_new_session(s,1))
1031 				goto err;
1032 			}
1033 		}
1034 
1035 	p+=j;
1036 
1037 	if (s->version == DTLS1_VERSION || s->version == DTLS1_BAD_VER)
1038 		{
1039 		/* cookie stuff */
1040 		cookie_len = *(p++);
1041 
1042 		/*
1043 		 * The ClientHello may contain a cookie even if the
1044 		 * HelloVerify message has not been sent--make sure that it
1045 		 * does not cause an overflow.
1046 		 */
1047 		if ( cookie_len > sizeof(s->d1->rcvd_cookie))
1048 			{
1049 			/* too much data */
1050 			al = SSL_AD_DECODE_ERROR;
1051 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_COOKIE_MISMATCH);
1052 			goto f_err;
1053 			}
1054 
1055 		/* verify the cookie if appropriate option is set. */
1056 		if ((SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE) &&
1057 			cookie_len > 0)
1058 			{
1059 			memcpy(s->d1->rcvd_cookie, p, cookie_len);
1060 
1061 			if ( s->ctx->app_verify_cookie_cb != NULL)
1062 				{
1063 				if ( s->ctx->app_verify_cookie_cb(s, s->d1->rcvd_cookie,
1064 					cookie_len) == 0)
1065 					{
1066 					al=SSL_AD_HANDSHAKE_FAILURE;
1067 					SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,
1068 						SSL_R_COOKIE_MISMATCH);
1069 					goto f_err;
1070 					}
1071 				/* else cookie verification succeeded */
1072 				}
1073 			else if ( memcmp(s->d1->rcvd_cookie, s->d1->cookie,
1074 						  s->d1->cookie_len) != 0) /* default verification */
1075 				{
1076 					al=SSL_AD_HANDSHAKE_FAILURE;
1077 					SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,
1078 						SSL_R_COOKIE_MISMATCH);
1079 					goto f_err;
1080 				}
1081 
1082 			ret = 2;
1083 			}
1084 
1085 		p += cookie_len;
1086 		}
1087 
1088 	n2s(p,i);
1089 	if ((i == 0) && (j != 0))
1090 		{
1091 		/* we need a cipher if we are not resuming a session */
1092 		al=SSL_AD_ILLEGAL_PARAMETER;
1093 		SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_NO_CIPHERS_SPECIFIED);
1094 		goto f_err;
1095 		}
1096 	if ((p+i) >= (d+n))
1097 		{
1098 		/* not enough data */
1099 		al=SSL_AD_DECODE_ERROR;
1100 		SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_LENGTH_MISMATCH);
1101 		goto f_err;
1102 		}
1103 	if ((i > 0) && (ssl_bytes_to_cipher_list(s,p,i,&(ciphers))
1104 		== NULL))
1105 		{
1106 		goto err;
1107 		}
1108 	p+=i;
1109 
1110 	/* If it is a hit, check that the cipher is in the list */
1111 	if ((s->hit) && (i > 0))
1112 		{
1113 		j=0;
1114 		id=s->session->cipher->id;
1115 
1116 #ifdef CIPHER_DEBUG
1117 		printf("client sent %d ciphers\n",sk_num(ciphers));
1118 #endif
1119 		for (i=0; i<sk_SSL_CIPHER_num(ciphers); i++)
1120 			{
1121 			c=sk_SSL_CIPHER_value(ciphers,i);
1122 #ifdef CIPHER_DEBUG
1123 			printf("client [%2d of %2d]:%s\n",
1124 				i,sk_num(ciphers),SSL_CIPHER_get_name(c));
1125 #endif
1126 			if (c->id == id)
1127 				{
1128 				j=1;
1129 				break;
1130 				}
1131 			}
1132 /* Disabled because it can be used in a ciphersuite downgrade
1133  * attack: CVE-2010-4180.
1134  */
1135 #if 0
1136 		if (j == 0 && (s->options & SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG) && (sk_SSL_CIPHER_num(ciphers) == 1))
1137 			{
1138 			/* Special case as client bug workaround: the previously used cipher may
1139 			 * not be in the current list, the client instead might be trying to
1140 			 * continue using a cipher that before wasn't chosen due to server
1141 			 * preferences.  We'll have to reject the connection if the cipher is not
1142 			 * enabled, though. */
1143 			c = sk_SSL_CIPHER_value(ciphers, 0);
1144 			if (sk_SSL_CIPHER_find(SSL_get_ciphers(s), c) >= 0)
1145 				{
1146 				s->session->cipher = c;
1147 				j = 1;
1148 				}
1149 			}
1150 #endif
1151 		if (j == 0)
1152 			{
1153 			/* we need to have the cipher in the cipher
1154 			 * list if we are asked to reuse it */
1155 			al=SSL_AD_ILLEGAL_PARAMETER;
1156 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_REQUIRED_CIPHER_MISSING);
1157 			goto f_err;
1158 			}
1159 		}
1160 
1161 	/* compression */
1162 	i= *(p++);
1163 	if ((p+i) > (d+n))
1164 		{
1165 		/* not enough data */
1166 		al=SSL_AD_DECODE_ERROR;
1167 		SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_LENGTH_MISMATCH);
1168 		goto f_err;
1169 		}
1170 	q=p;
1171 	for (j=0; j<i; j++)
1172 		{
1173 		if (p[j] == 0) break;
1174 		}
1175 
1176 	p+=i;
1177 	if (j >= i)
1178 		{
1179 		/* no compress */
1180 		al=SSL_AD_DECODE_ERROR;
1181 		SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_NO_COMPRESSION_SPECIFIED);
1182 		goto f_err;
1183 		}
1184 
1185 #ifndef OPENSSL_NO_TLSEXT
1186 	/* TLS extensions*/
1187 	if (s->version >= SSL3_VERSION)
1188 		{
1189 		if (!ssl_parse_clienthello_tlsext(s,&p,d,n, &al))
1190 			{
1191 			/* 'al' set by ssl_parse_clienthello_tlsext */
1192 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_PARSE_TLSEXT);
1193 			goto f_err;
1194 			}
1195 		}
1196 		if (ssl_check_clienthello_tlsext(s) <= 0) {
1197 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT);
1198 			goto err;
1199 		}
1200 
1201 	/* Check if we want to use external pre-shared secret for this
1202 	 * handshake for not reused session only. We need to generate
1203 	 * server_random before calling tls_session_secret_cb in order to allow
1204 	 * SessionTicket processing to use it in key derivation. */
1205 	{
1206 		unsigned long Time;
1207 		unsigned char *pos;
1208 		Time=(unsigned long)time(NULL);			/* Time */
1209 		pos=s->s3->server_random;
1210 		l2n(Time,pos);
1211 		if (RAND_pseudo_bytes(pos,SSL3_RANDOM_SIZE-4) <= 0)
1212 			{
1213 			al=SSL_AD_INTERNAL_ERROR;
1214 			goto f_err;
1215 			}
1216 	}
1217 
1218 	if (!s->hit && s->version >= TLS1_VERSION && s->tls_session_secret_cb)
1219 		{
1220 		SSL_CIPHER *pref_cipher=NULL;
1221 
1222 		s->session->master_key_length=sizeof(s->session->master_key);
1223 		if(s->tls_session_secret_cb(s, s->session->master_key, &s->session->master_key_length,
1224 			ciphers, &pref_cipher, s->tls_session_secret_cb_arg))
1225 			{
1226 			s->hit=1;
1227 			s->session->ciphers=ciphers;
1228 			s->session->verify_result=X509_V_OK;
1229 
1230 			ciphers=NULL;
1231 
1232 			/* check if some cipher was preferred by call back */
1233 			pref_cipher=pref_cipher ? pref_cipher : ssl3_choose_cipher(s, s->session->ciphers, SSL_get_ciphers(s));
1234 			if (pref_cipher == NULL)
1235 				{
1236 				al=SSL_AD_HANDSHAKE_FAILURE;
1237 				SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_NO_SHARED_CIPHER);
1238 				goto f_err;
1239 				}
1240 
1241 			s->session->cipher=pref_cipher;
1242 
1243 			if (s->cipher_list)
1244 				sk_SSL_CIPHER_free(s->cipher_list);
1245 
1246 			if (s->cipher_list_by_id)
1247 				sk_SSL_CIPHER_free(s->cipher_list_by_id);
1248 
1249 			s->cipher_list = sk_SSL_CIPHER_dup(s->session->ciphers);
1250 			s->cipher_list_by_id = sk_SSL_CIPHER_dup(s->session->ciphers);
1251 			}
1252 		}
1253 #endif
1254 
1255 	/* Worst case, we will use the NULL compression, but if we have other
1256 	 * options, we will now look for them.  We have i-1 compression
1257 	 * algorithms from the client, starting at q. */
1258 	s->s3->tmp.new_compression=NULL;
1259 #ifndef OPENSSL_NO_COMP
1260 	/* This only happens if we have a cache hit */
1261 	if (s->session->compress_meth != 0)
1262 		{
1263 		int m, comp_id = s->session->compress_meth;
1264 		/* Perform sanity checks on resumed compression algorithm */
1265 		/* Can't disable compression */
1266 		if (s->options & SSL_OP_NO_COMPRESSION)
1267 			{
1268 			al=SSL_AD_INTERNAL_ERROR;
1269 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_INCONSISTENT_COMPRESSION);
1270 			goto f_err;
1271 			}
1272 		/* Look for resumed compression method */
1273 		for (m = 0; m < sk_SSL_COMP_num(s->ctx->comp_methods); m++)
1274 			{
1275 			comp=sk_SSL_COMP_value(s->ctx->comp_methods,m);
1276 			if (comp_id == comp->id)
1277 				{
1278 				s->s3->tmp.new_compression=comp;
1279 				break;
1280 				}
1281 			}
1282 		if (s->s3->tmp.new_compression == NULL)
1283 			{
1284 			al=SSL_AD_INTERNAL_ERROR;
1285 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_INVALID_COMPRESSION_ALGORITHM);
1286 			goto f_err;
1287 			}
1288 		/* Look for resumed method in compression list */
1289 		for (m = 0; m < i; m++)
1290 			{
1291 			if (q[m] == comp_id)
1292 				break;
1293 			}
1294 		if (m >= i)
1295 			{
1296 			al=SSL_AD_ILLEGAL_PARAMETER;
1297 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING);
1298 			goto f_err;
1299 			}
1300 		}
1301 	else if (s->hit)
1302 		comp = NULL;
1303 	else if (!(s->options & SSL_OP_NO_COMPRESSION) && s->ctx->comp_methods)
1304 		{ /* See if we have a match */
1305 		int m,nn,o,v,done=0;
1306 
1307 		nn=sk_SSL_COMP_num(s->ctx->comp_methods);
1308 		for (m=0; m<nn; m++)
1309 			{
1310 			comp=sk_SSL_COMP_value(s->ctx->comp_methods,m);
1311 			v=comp->id;
1312 			for (o=0; o<i; o++)
1313 				{
1314 				if (v == q[o])
1315 					{
1316 					done=1;
1317 					break;
1318 					}
1319 				}
1320 			if (done) break;
1321 			}
1322 		if (done)
1323 			s->s3->tmp.new_compression=comp;
1324 		else
1325 			comp=NULL;
1326 		}
1327 #else
1328 	/* If compression is disabled we'd better not try to resume a session
1329 	 * using compression.
1330 	 */
1331 	if (s->session->compress_meth != 0)
1332 		{
1333 		al=SSL_AD_INTERNAL_ERROR;
1334 		SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_INCONSISTENT_COMPRESSION);
1335 		goto f_err;
1336 		}
1337 #endif
1338 
1339 	/* Given s->session->ciphers and SSL_get_ciphers, we must
1340 	 * pick a cipher */
1341 
1342 	if (!s->hit)
1343 		{
1344 #ifdef OPENSSL_NO_COMP
1345 		s->session->compress_meth=0;
1346 #else
1347 		s->session->compress_meth=(comp == NULL)?0:comp->id;
1348 #endif
1349 		if (s->session->ciphers != NULL)
1350 			sk_SSL_CIPHER_free(s->session->ciphers);
1351 		s->session->ciphers=ciphers;
1352 		if (ciphers == NULL)
1353 			{
1354 			al=SSL_AD_ILLEGAL_PARAMETER;
1355 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_NO_CIPHERS_PASSED);
1356 			goto f_err;
1357 			}
1358 		ciphers=NULL;
1359 		c=ssl3_choose_cipher(s,s->session->ciphers,
1360 				     SSL_get_ciphers(s));
1361 
1362 		if (c == NULL)
1363 			{
1364 			al=SSL_AD_HANDSHAKE_FAILURE;
1365 			SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_NO_SHARED_CIPHER);
1366 			goto f_err;
1367 			}
1368 		s->s3->tmp.new_cipher=c;
1369 		}
1370 	else
1371 		{
1372 		/* Session-id reuse */
1373 #ifdef REUSE_CIPHER_BUG
1374 		STACK_OF(SSL_CIPHER) *sk;
1375 		SSL_CIPHER *nc=NULL;
1376 		SSL_CIPHER *ec=NULL;
1377 
1378 		if (s->options & SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG)
1379 			{
1380 			sk=s->session->ciphers;
1381 			for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
1382 				{
1383 				c=sk_SSL_CIPHER_value(sk,i);
1384 				if (c->algorithm_enc & SSL_eNULL)
1385 					nc=c;
1386 				if (SSL_C_IS_EXPORT(c))
1387 					ec=c;
1388 				}
1389 			if (nc != NULL)
1390 				s->s3->tmp.new_cipher=nc;
1391 			else if (ec != NULL)
1392 				s->s3->tmp.new_cipher=ec;
1393 			else
1394 				s->s3->tmp.new_cipher=s->session->cipher;
1395 			}
1396 		else
1397 #endif
1398 		s->s3->tmp.new_cipher=s->session->cipher;
1399 		}
1400 
1401 	if (TLS1_get_version(s) < TLS1_2_VERSION || !(s->verify_mode & SSL_VERIFY_PEER))
1402 		{
1403 		if (!ssl3_digest_cached_records(s))
1404 			goto f_err;
1405 		}
1406 
1407 	/* we now have the following setup.
1408 	 * client_random
1409 	 * cipher_list 		- our prefered list of ciphers
1410 	 * ciphers 		- the clients prefered list of ciphers
1411 	 * compression		- basically ignored right now
1412 	 * ssl version is set	- sslv3
1413 	 * s->session		- The ssl session has been setup.
1414 	 * s->hit		- session reuse flag
1415 	 * s->tmp.new_cipher	- the new cipher to use.
1416 	 */
1417 
1418 	if (ret < 0) ret=1;
1419 	if (0)
1420 		{
1421 f_err:
1422 		ssl3_send_alert(s,SSL3_AL_FATAL,al);
1423 		}
1424 err:
1425 	if (ciphers != NULL) sk_SSL_CIPHER_free(ciphers);
1426 	return(ret);
1427 	}
1428 
ssl3_send_server_hello(SSL * s)1429 int ssl3_send_server_hello(SSL *s)
1430 	{
1431 	unsigned char *buf;
1432 	unsigned char *p,*d;
1433 	int i,sl;
1434 	unsigned long l;
1435 #ifdef OPENSSL_NO_TLSEXT
1436 	unsigned long Time;
1437 #endif
1438 
1439 	if (s->state == SSL3_ST_SW_SRVR_HELLO_A)
1440 		{
1441 		buf=(unsigned char *)s->init_buf->data;
1442 #ifdef OPENSSL_NO_TLSEXT
1443 		p=s->s3->server_random;
1444 		/* Generate server_random if it was not needed previously */
1445 		Time=(unsigned long)time(NULL);			/* Time */
1446 		l2n(Time,p);
1447 		if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0)
1448 			return -1;
1449 #endif
1450 		/* Do the message type and length last */
1451 		d=p= &(buf[4]);
1452 
1453 		*(p++)=s->version>>8;
1454 		*(p++)=s->version&0xff;
1455 
1456 		/* Random stuff */
1457 		memcpy(p,s->s3->server_random,SSL3_RANDOM_SIZE);
1458 		p+=SSL3_RANDOM_SIZE;
1459 
1460 		/* There are several cases for the session ID to send
1461 		 * back in the server hello:
1462 		 * - For session reuse from the session cache,
1463 		 *   we send back the old session ID.
1464 		 * - If stateless session reuse (using a session ticket)
1465 		 *   is successful, we send back the client's "session ID"
1466 		 *   (which doesn't actually identify the session).
1467 		 * - If it is a new session, we send back the new
1468 		 *   session ID.
1469 		 * - However, if we want the new session to be single-use,
1470 		 *   we send back a 0-length session ID.
1471 		 * s->hit is non-zero in either case of session reuse,
1472 		 * so the following won't overwrite an ID that we're supposed
1473 		 * to send back.
1474 		 */
1475 		if (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER)
1476 			&& !s->hit)
1477 			s->session->session_id_length=0;
1478 
1479 		sl=s->session->session_id_length;
1480 		if (sl > (int)sizeof(s->session->session_id))
1481 			{
1482 			SSLerr(SSL_F_SSL3_SEND_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
1483 			return -1;
1484 			}
1485 		*(p++)=sl;
1486 		memcpy(p,s->session->session_id,sl);
1487 		p+=sl;
1488 
1489 		/* put the cipher */
1490 		i=ssl3_put_cipher_by_char(s->s3->tmp.new_cipher,p);
1491 		p+=i;
1492 
1493 		/* put the compression method */
1494 #ifdef OPENSSL_NO_COMP
1495 			*(p++)=0;
1496 #else
1497 		if (s->s3->tmp.new_compression == NULL)
1498 			*(p++)=0;
1499 		else
1500 			*(p++)=s->s3->tmp.new_compression->id;
1501 #endif
1502 #ifndef OPENSSL_NO_TLSEXT
1503 		if (ssl_prepare_serverhello_tlsext(s) <= 0)
1504 			{
1505 			SSLerr(SSL_F_SSL3_SEND_SERVER_HELLO,SSL_R_SERVERHELLO_TLSEXT);
1506 			return -1;
1507 			}
1508 		if ((p = ssl_add_serverhello_tlsext(s, p, buf+SSL3_RT_MAX_PLAIN_LENGTH)) == NULL)
1509 			{
1510 			SSLerr(SSL_F_SSL3_SEND_SERVER_HELLO,ERR_R_INTERNAL_ERROR);
1511 			return -1;
1512 			}
1513 #endif
1514 		/* do the header */
1515 		l=(p-d);
1516 		d=buf;
1517 		*(d++)=SSL3_MT_SERVER_HELLO;
1518 		l2n3(l,d);
1519 
1520 		s->state=SSL3_ST_SW_SRVR_HELLO_B;
1521 		/* number of bytes to write */
1522 		s->init_num=p-buf;
1523 		s->init_off=0;
1524 		}
1525 
1526 	/* SSL3_ST_SW_SRVR_HELLO_B */
1527 	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
1528 	}
1529 
ssl3_send_server_done(SSL * s)1530 int ssl3_send_server_done(SSL *s)
1531 	{
1532 	unsigned char *p;
1533 
1534 	if (s->state == SSL3_ST_SW_SRVR_DONE_A)
1535 		{
1536 		p=(unsigned char *)s->init_buf->data;
1537 
1538 		/* do the header */
1539 		*(p++)=SSL3_MT_SERVER_DONE;
1540 		*(p++)=0;
1541 		*(p++)=0;
1542 		*(p++)=0;
1543 
1544 		s->state=SSL3_ST_SW_SRVR_DONE_B;
1545 		/* number of bytes to write */
1546 		s->init_num=4;
1547 		s->init_off=0;
1548 		}
1549 
1550 	/* SSL3_ST_SW_SRVR_DONE_B */
1551 	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
1552 	}
1553 
ssl3_send_server_key_exchange(SSL * s)1554 int ssl3_send_server_key_exchange(SSL *s)
1555 	{
1556 #ifndef OPENSSL_NO_RSA
1557 	unsigned char *q;
1558 	int j,num;
1559 	RSA *rsa;
1560 	unsigned char md_buf[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];
1561 	unsigned int u;
1562 #endif
1563 #ifndef OPENSSL_NO_DH
1564 	DH *dh=NULL,*dhp;
1565 #endif
1566 #ifndef OPENSSL_NO_ECDH
1567 	EC_KEY *ecdh=NULL, *ecdhp;
1568 	unsigned char *encodedPoint = NULL;
1569 	int encodedlen = 0;
1570 	int curve_id = 0;
1571 	BN_CTX *bn_ctx = NULL;
1572 #endif
1573 	EVP_PKEY *pkey;
1574 	const EVP_MD *md = NULL;
1575 	unsigned char *p,*d;
1576 	int al,i;
1577 	unsigned long type;
1578 	int n;
1579 	CERT *cert;
1580 	BIGNUM *r[4];
1581 	int nr[4],kn;
1582 	BUF_MEM *buf;
1583 	EVP_MD_CTX md_ctx;
1584 
1585 	EVP_MD_CTX_init(&md_ctx);
1586 	if (s->state == SSL3_ST_SW_KEY_EXCH_A)
1587 		{
1588 		type=s->s3->tmp.new_cipher->algorithm_mkey;
1589 		cert=s->cert;
1590 
1591 		buf=s->init_buf;
1592 
1593 		r[0]=r[1]=r[2]=r[3]=NULL;
1594 		n=0;
1595 #ifndef OPENSSL_NO_RSA
1596 		if (type & SSL_kRSA)
1597 			{
1598 			rsa=cert->rsa_tmp;
1599 			if ((rsa == NULL) && (s->cert->rsa_tmp_cb != NULL))
1600 				{
1601 				rsa=s->cert->rsa_tmp_cb(s,
1602 				      SSL_C_IS_EXPORT(s->s3->tmp.new_cipher),
1603 				      SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher));
1604 				if(rsa == NULL)
1605 				{
1606 					al=SSL_AD_HANDSHAKE_FAILURE;
1607 					SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_ERROR_GENERATING_TMP_RSA_KEY);
1608 					goto f_err;
1609 				}
1610 				RSA_up_ref(rsa);
1611 				cert->rsa_tmp=rsa;
1612 				}
1613 			if (rsa == NULL)
1614 				{
1615 				al=SSL_AD_HANDSHAKE_FAILURE;
1616 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_MISSING_TMP_RSA_KEY);
1617 				goto f_err;
1618 				}
1619 			r[0]=rsa->n;
1620 			r[1]=rsa->e;
1621 			s->s3->tmp.use_rsa_tmp=1;
1622 			}
1623 		else
1624 #endif
1625 #ifndef OPENSSL_NO_DH
1626 			if (type & SSL_kEDH)
1627 			{
1628 			dhp=cert->dh_tmp;
1629 			if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL))
1630 				dhp=s->cert->dh_tmp_cb(s,
1631 				      SSL_C_IS_EXPORT(s->s3->tmp.new_cipher),
1632 				      SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher));
1633 			if (dhp == NULL)
1634 				{
1635 				al=SSL_AD_HANDSHAKE_FAILURE;
1636 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_MISSING_TMP_DH_KEY);
1637 				goto f_err;
1638 				}
1639 
1640 			if (s->s3->tmp.dh != NULL)
1641 				{
1642 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
1643 				goto err;
1644 				}
1645 
1646 			if ((dh=DHparams_dup(dhp)) == NULL)
1647 				{
1648 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_DH_LIB);
1649 				goto err;
1650 				}
1651 
1652 			s->s3->tmp.dh=dh;
1653 			if ((dhp->pub_key == NULL ||
1654 			     dhp->priv_key == NULL ||
1655 			     (s->options & SSL_OP_SINGLE_DH_USE)))
1656 				{
1657 				if(!DH_generate_key(dh))
1658 				    {
1659 				    SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,
1660 					   ERR_R_DH_LIB);
1661 				    goto err;
1662 				    }
1663 				}
1664 			else
1665 				{
1666 				dh->pub_key=BN_dup(dhp->pub_key);
1667 				dh->priv_key=BN_dup(dhp->priv_key);
1668 				if ((dh->pub_key == NULL) ||
1669 					(dh->priv_key == NULL))
1670 					{
1671 					SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_DH_LIB);
1672 					goto err;
1673 					}
1674 				}
1675 			r[0]=dh->p;
1676 			r[1]=dh->g;
1677 			r[2]=dh->pub_key;
1678 			}
1679 		else
1680 #endif
1681 #ifndef OPENSSL_NO_ECDH
1682 			if (type & SSL_kEECDH)
1683 			{
1684 			const EC_GROUP *group;
1685 
1686 			ecdhp=cert->ecdh_tmp;
1687 			if ((ecdhp == NULL) && (s->cert->ecdh_tmp_cb != NULL))
1688 				{
1689 				ecdhp=s->cert->ecdh_tmp_cb(s,
1690 				      SSL_C_IS_EXPORT(s->s3->tmp.new_cipher),
1691 				      SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher));
1692 				}
1693 			if (ecdhp == NULL)
1694 				{
1695 				al=SSL_AD_HANDSHAKE_FAILURE;
1696 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_MISSING_TMP_ECDH_KEY);
1697 				goto f_err;
1698 				}
1699 
1700 			if (s->s3->tmp.ecdh != NULL)
1701 				{
1702 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
1703 				goto err;
1704 				}
1705 
1706 			/* Duplicate the ECDH structure. */
1707 			if (ecdhp == NULL)
1708 				{
1709 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB);
1710 				goto err;
1711 				}
1712 			if ((ecdh = EC_KEY_dup(ecdhp)) == NULL)
1713 				{
1714 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB);
1715 				goto err;
1716 				}
1717 
1718 			s->s3->tmp.ecdh=ecdh;
1719 			if ((EC_KEY_get0_public_key(ecdh) == NULL) ||
1720 			    (EC_KEY_get0_private_key(ecdh) == NULL) ||
1721 			    (s->options & SSL_OP_SINGLE_ECDH_USE))
1722 				{
1723 				if(!EC_KEY_generate_key(ecdh))
1724 				    {
1725 				    SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB);
1726 				    goto err;
1727 				    }
1728 				}
1729 
1730 			if (((group = EC_KEY_get0_group(ecdh)) == NULL) ||
1731 			    (EC_KEY_get0_public_key(ecdh)  == NULL) ||
1732 			    (EC_KEY_get0_private_key(ecdh) == NULL))
1733 				{
1734 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB);
1735 				goto err;
1736 				}
1737 
1738 			if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
1739 			    (EC_GROUP_get_degree(group) > 163))
1740 				{
1741 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER);
1742 				goto err;
1743 				}
1744 
1745 			/* XXX: For now, we only support ephemeral ECDH
1746 			 * keys over named (not generic) curves. For
1747 			 * supported named curves, curve_id is non-zero.
1748 			 */
1749 			if ((curve_id =
1750 			    tls1_ec_nid2curve_id(EC_GROUP_get_curve_name(group)))
1751 			    == 0)
1752 				{
1753 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNSUPPORTED_ELLIPTIC_CURVE);
1754 				goto err;
1755 				}
1756 
1757 			/* Encode the public key.
1758 			 * First check the size of encoding and
1759 			 * allocate memory accordingly.
1760 			 */
1761 			encodedlen = EC_POINT_point2oct(group,
1762 			    EC_KEY_get0_public_key(ecdh),
1763 			    POINT_CONVERSION_UNCOMPRESSED,
1764 			    NULL, 0, NULL);
1765 
1766 			encodedPoint = (unsigned char *)
1767 			    OPENSSL_malloc(encodedlen*sizeof(unsigned char));
1768 			bn_ctx = BN_CTX_new();
1769 			if ((encodedPoint == NULL) || (bn_ctx == NULL))
1770 				{
1771 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_MALLOC_FAILURE);
1772 				goto err;
1773 				}
1774 
1775 
1776 			encodedlen = EC_POINT_point2oct(group,
1777 			    EC_KEY_get0_public_key(ecdh),
1778 			    POINT_CONVERSION_UNCOMPRESSED,
1779 			    encodedPoint, encodedlen, bn_ctx);
1780 
1781 			if (encodedlen == 0)
1782 				{
1783 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_ECDH_LIB);
1784 				goto err;
1785 				}
1786 
1787 			BN_CTX_free(bn_ctx);  bn_ctx=NULL;
1788 
1789 			/* XXX: For now, we only support named (not
1790 			 * generic) curves in ECDH ephemeral key exchanges.
1791 			 * In this situation, we need four additional bytes
1792 			 * to encode the entire ServerECDHParams
1793 			 * structure.
1794 			 */
1795 			n = 4 + encodedlen;
1796 
1797 			/* We'll generate the serverKeyExchange message
1798 			 * explicitly so we can set these to NULLs
1799 			 */
1800 			r[0]=NULL;
1801 			r[1]=NULL;
1802 			r[2]=NULL;
1803 			r[3]=NULL;
1804 			}
1805 		else
1806 #endif /* !OPENSSL_NO_ECDH */
1807 #ifndef OPENSSL_NO_PSK
1808 			if (type & SSL_kPSK)
1809 				{
1810 				/* reserve size for record length and PSK identity hint*/
1811 				n+=2+strlen(s->ctx->psk_identity_hint);
1812 				}
1813 			else
1814 #endif /* !OPENSSL_NO_PSK */
1815 #ifndef OPENSSL_NO_SRP
1816 		if (type & SSL_kSRP)
1817 			{
1818 			if ((s->srp_ctx.N == NULL) ||
1819 				(s->srp_ctx.g == NULL) ||
1820 				(s->srp_ctx.s == NULL) ||
1821 				(s->srp_ctx.B == NULL))
1822 				{
1823 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_MISSING_SRP_PARAM);
1824 				goto err;
1825 				}
1826 			r[0]=s->srp_ctx.N;
1827 			r[1]=s->srp_ctx.g;
1828 			r[2]=s->srp_ctx.s;
1829 			r[3]=s->srp_ctx.B;
1830 			}
1831 		else
1832 #endif
1833 			{
1834 			al=SSL_AD_HANDSHAKE_FAILURE;
1835 			SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
1836 			goto f_err;
1837 			}
1838 		for (i=0; r[i] != NULL && i<4; i++)
1839 			{
1840 			nr[i]=BN_num_bytes(r[i]);
1841 #ifndef OPENSSL_NO_SRP
1842 			if ((i == 2) && (type & SSL_kSRP))
1843 				n+=1+nr[i];
1844 			else
1845 #endif
1846 			n+=2+nr[i];
1847 			}
1848 
1849 		if (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)
1850 			&& !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK))
1851 			{
1852 			if ((pkey=ssl_get_sign_pkey(s,s->s3->tmp.new_cipher,&md))
1853 				== NULL)
1854 				{
1855 				al=SSL_AD_DECODE_ERROR;
1856 				goto f_err;
1857 				}
1858 			kn=EVP_PKEY_size(pkey);
1859 			}
1860 		else
1861 			{
1862 			pkey=NULL;
1863 			kn=0;
1864 			}
1865 
1866 		if (!BUF_MEM_grow_clean(buf,n+4+kn))
1867 			{
1868 			SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_LIB_BUF);
1869 			goto err;
1870 			}
1871 		d=(unsigned char *)s->init_buf->data;
1872 		p= &(d[4]);
1873 
1874 		for (i=0; r[i] != NULL && i<4; i++)
1875 			{
1876 #ifndef OPENSSL_NO_SRP
1877 			if ((i == 2) && (type & SSL_kSRP))
1878 				{
1879 				*p = nr[i];
1880 				p++;
1881 				}
1882 			else
1883 #endif
1884 			s2n(nr[i],p);
1885 			BN_bn2bin(r[i],p);
1886 			p+=nr[i];
1887 			}
1888 
1889 #ifndef OPENSSL_NO_ECDH
1890 		if (type & SSL_kEECDH)
1891 			{
1892 			/* XXX: For now, we only support named (not generic) curves.
1893 			 * In this situation, the serverKeyExchange message has:
1894 			 * [1 byte CurveType], [2 byte CurveName]
1895 			 * [1 byte length of encoded point], followed by
1896 			 * the actual encoded point itself
1897 			 */
1898 			*p = NAMED_CURVE_TYPE;
1899 			p += 1;
1900 			*p = 0;
1901 			p += 1;
1902 			*p = curve_id;
1903 			p += 1;
1904 			*p = encodedlen;
1905 			p += 1;
1906 			memcpy((unsigned char*)p,
1907 			    (unsigned char *)encodedPoint,
1908 			    encodedlen);
1909 			OPENSSL_free(encodedPoint);
1910 			encodedPoint = NULL;
1911 			p += encodedlen;
1912 			}
1913 #endif
1914 
1915 #ifndef OPENSSL_NO_PSK
1916 		if (type & SSL_kPSK)
1917 			{
1918 			/* copy PSK identity hint */
1919 			s2n(strlen(s->ctx->psk_identity_hint), p);
1920 			strncpy((char *)p, s->ctx->psk_identity_hint, strlen(s->ctx->psk_identity_hint));
1921 			p+=strlen(s->ctx->psk_identity_hint);
1922 			}
1923 #endif
1924 
1925 		/* not anonymous */
1926 		if (pkey != NULL)
1927 			{
1928 			/* n is the length of the params, they start at &(d[4])
1929 			 * and p points to the space at the end. */
1930 #ifndef OPENSSL_NO_RSA
1931 			if (pkey->type == EVP_PKEY_RSA
1932 					&& TLS1_get_version(s) < TLS1_2_VERSION)
1933 				{
1934 				q=md_buf;
1935 				j=0;
1936 				for (num=2; num > 0; num--)
1937 					{
1938 					EVP_MD_CTX_set_flags(&md_ctx,
1939 						EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
1940 					EVP_DigestInit_ex(&md_ctx,(num == 2)
1941 						?s->ctx->md5:s->ctx->sha1, NULL);
1942 					EVP_DigestUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
1943 					EVP_DigestUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
1944 					EVP_DigestUpdate(&md_ctx,&(d[4]),n);
1945 					EVP_DigestFinal_ex(&md_ctx,q,
1946 						(unsigned int *)&i);
1947 					q+=i;
1948 					j+=i;
1949 					}
1950 				if (RSA_sign(NID_md5_sha1, md_buf, j,
1951 					&(p[2]), &u, pkey->pkey.rsa) <= 0)
1952 					{
1953 					SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_LIB_RSA);
1954 					goto err;
1955 					}
1956 				s2n(u,p);
1957 				n+=u+2;
1958 				}
1959 			else
1960 #endif
1961 			if (md)
1962 				{
1963 				/* For TLS1.2 and later send signature
1964 				 * algorithm */
1965 				if (TLS1_get_version(s) >= TLS1_2_VERSION)
1966 					{
1967 					if (!tls12_get_sigandhash(p, pkey, md))
1968 						{
1969 						/* Should never happen */
1970 						al=SSL_AD_INTERNAL_ERROR;
1971 						SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
1972 						goto f_err;
1973 						}
1974 					p+=2;
1975 					}
1976 #ifdef SSL_DEBUG
1977 				fprintf(stderr, "Using hash %s\n",
1978 							EVP_MD_name(md));
1979 #endif
1980 				EVP_SignInit_ex(&md_ctx, md, NULL);
1981 				EVP_SignUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
1982 				EVP_SignUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
1983 				EVP_SignUpdate(&md_ctx,&(d[4]),n);
1984 				if (!EVP_SignFinal(&md_ctx,&(p[2]),
1985 					(unsigned int *)&i,pkey))
1986 					{
1987 					SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_LIB_EVP);
1988 					goto err;
1989 					}
1990 				s2n(i,p);
1991 				n+=i+2;
1992 				if (TLS1_get_version(s) >= TLS1_2_VERSION)
1993 					n+= 2;
1994 				}
1995 			else
1996 				{
1997 				/* Is this error check actually needed? */
1998 				al=SSL_AD_HANDSHAKE_FAILURE;
1999 				SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNKNOWN_PKEY_TYPE);
2000 				goto f_err;
2001 				}
2002 			}
2003 
2004 		*(d++)=SSL3_MT_SERVER_KEY_EXCHANGE;
2005 		l2n3(n,d);
2006 
2007 		/* we should now have things packed up, so lets send
2008 		 * it off */
2009 		s->init_num=n+4;
2010 		s->init_off=0;
2011 		}
2012 
2013 	s->state = SSL3_ST_SW_KEY_EXCH_B;
2014 	EVP_MD_CTX_cleanup(&md_ctx);
2015 	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
2016 f_err:
2017 	ssl3_send_alert(s,SSL3_AL_FATAL,al);
2018 err:
2019 #ifndef OPENSSL_NO_ECDH
2020 	if (encodedPoint != NULL) OPENSSL_free(encodedPoint);
2021 	BN_CTX_free(bn_ctx);
2022 #endif
2023 	EVP_MD_CTX_cleanup(&md_ctx);
2024 	return(-1);
2025 	}
2026 
ssl3_send_certificate_request(SSL * s)2027 int ssl3_send_certificate_request(SSL *s)
2028 	{
2029 	unsigned char *p,*d;
2030 	int i,j,nl,off,n;
2031 	STACK_OF(X509_NAME) *sk=NULL;
2032 	X509_NAME *name;
2033 	BUF_MEM *buf;
2034 
2035 	if (s->state == SSL3_ST_SW_CERT_REQ_A)
2036 		{
2037 		buf=s->init_buf;
2038 
2039 		d=p=(unsigned char *)&(buf->data[4]);
2040 
2041 		/* get the list of acceptable cert types */
2042 		p++;
2043 		n=ssl3_get_req_cert_type(s,p);
2044 		d[0]=n;
2045 		p+=n;
2046 		n++;
2047 
2048 		if (TLS1_get_version(s) >= TLS1_2_VERSION)
2049 			{
2050 			nl = tls12_get_req_sig_algs(s, p + 2);
2051 			s2n(nl, p);
2052 			p += nl + 2;
2053 			n += nl + 2;
2054 			}
2055 
2056 		off=n;
2057 		p+=2;
2058 		n+=2;
2059 
2060 		sk=SSL_get_client_CA_list(s);
2061 		nl=0;
2062 		if (sk != NULL)
2063 			{
2064 			for (i=0; i<sk_X509_NAME_num(sk); i++)
2065 				{
2066 				name=sk_X509_NAME_value(sk,i);
2067 				j=i2d_X509_NAME(name,NULL);
2068 				if (!BUF_MEM_grow_clean(buf,4+n+j+2))
2069 					{
2070 					SSLerr(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST,ERR_R_BUF_LIB);
2071 					goto err;
2072 					}
2073 				p=(unsigned char *)&(buf->data[4+n]);
2074 				if (!(s->options & SSL_OP_NETSCAPE_CA_DN_BUG))
2075 					{
2076 					s2n(j,p);
2077 					i2d_X509_NAME(name,&p);
2078 					n+=2+j;
2079 					nl+=2+j;
2080 					}
2081 				else
2082 					{
2083 					d=p;
2084 					i2d_X509_NAME(name,&p);
2085 					j-=2; s2n(j,d); j+=2;
2086 					n+=j;
2087 					nl+=j;
2088 					}
2089 				}
2090 			}
2091 		/* else no CA names */
2092 		p=(unsigned char *)&(buf->data[4+off]);
2093 		s2n(nl,p);
2094 
2095 		d=(unsigned char *)buf->data;
2096 		*(d++)=SSL3_MT_CERTIFICATE_REQUEST;
2097 		l2n3(n,d);
2098 
2099 		/* we should now have things packed up, so lets send
2100 		 * it off */
2101 
2102 		s->init_num=n+4;
2103 		s->init_off=0;
2104 #ifdef NETSCAPE_HANG_BUG
2105 		p=(unsigned char *)s->init_buf->data + s->init_num;
2106 
2107 		/* do the header */
2108 		*(p++)=SSL3_MT_SERVER_DONE;
2109 		*(p++)=0;
2110 		*(p++)=0;
2111 		*(p++)=0;
2112 		s->init_num += 4;
2113 #endif
2114 
2115 		s->state = SSL3_ST_SW_CERT_REQ_B;
2116 		}
2117 
2118 	/* SSL3_ST_SW_CERT_REQ_B */
2119 	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
2120 err:
2121 	return(-1);
2122 	}
2123 
ssl3_get_client_key_exchange(SSL * s)2124 int ssl3_get_client_key_exchange(SSL *s)
2125 	{
2126 	int i,al,ok;
2127 	long n;
2128 	unsigned long alg_k;
2129 	unsigned char *p;
2130 #ifndef OPENSSL_NO_RSA
2131 	RSA *rsa=NULL;
2132 	EVP_PKEY *pkey=NULL;
2133 #endif
2134 #ifndef OPENSSL_NO_DH
2135 	BIGNUM *pub=NULL;
2136 	DH *dh_srvr;
2137 #endif
2138 #ifndef OPENSSL_NO_KRB5
2139 	KSSL_ERR kssl_err;
2140 #endif /* OPENSSL_NO_KRB5 */
2141 
2142 #ifndef OPENSSL_NO_ECDH
2143 	EC_KEY *srvr_ecdh = NULL;
2144 	EVP_PKEY *clnt_pub_pkey = NULL;
2145 	EC_POINT *clnt_ecpoint = NULL;
2146 	BN_CTX *bn_ctx = NULL;
2147 #endif
2148 
2149 	n=s->method->ssl_get_message(s,
2150 		SSL3_ST_SR_KEY_EXCH_A,
2151 		SSL3_ST_SR_KEY_EXCH_B,
2152 		SSL3_MT_CLIENT_KEY_EXCHANGE,
2153 		2048, /* ??? */
2154 		&ok);
2155 
2156 	if (!ok) return((int)n);
2157 	p=(unsigned char *)s->init_msg;
2158 
2159 	alg_k=s->s3->tmp.new_cipher->algorithm_mkey;
2160 
2161 #ifndef OPENSSL_NO_RSA
2162 	if (alg_k & SSL_kRSA)
2163 		{
2164 		/* FIX THIS UP EAY EAY EAY EAY */
2165 		if (s->s3->tmp.use_rsa_tmp)
2166 			{
2167 			if ((s->cert != NULL) && (s->cert->rsa_tmp != NULL))
2168 				rsa=s->cert->rsa_tmp;
2169 			/* Don't do a callback because rsa_tmp should
2170 			 * be sent already */
2171 			if (rsa == NULL)
2172 				{
2173 				al=SSL_AD_HANDSHAKE_FAILURE;
2174 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_MISSING_TMP_RSA_PKEY);
2175 				goto f_err;
2176 
2177 				}
2178 			}
2179 		else
2180 			{
2181 			pkey=s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey;
2182 			if (	(pkey == NULL) ||
2183 				(pkey->type != EVP_PKEY_RSA) ||
2184 				(pkey->pkey.rsa == NULL))
2185 				{
2186 				al=SSL_AD_HANDSHAKE_FAILURE;
2187 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_MISSING_RSA_CERTIFICATE);
2188 				goto f_err;
2189 				}
2190 			rsa=pkey->pkey.rsa;
2191 			}
2192 
2193 		/* TLS and [incidentally] DTLS{0xFEFF} */
2194 		if (s->version > SSL3_VERSION && s->version != DTLS1_BAD_VER)
2195 			{
2196 			n2s(p,i);
2197 			if (n != i+2)
2198 				{
2199 				if (!(s->options & SSL_OP_TLS_D5_BUG))
2200 					{
2201 					SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG);
2202 					goto err;
2203 					}
2204 				else
2205 					p-=2;
2206 				}
2207 			else
2208 				n=i;
2209 			}
2210 
2211 		i=RSA_private_decrypt((int)n,p,p,rsa,RSA_PKCS1_PADDING);
2212 
2213 		al = -1;
2214 
2215 		if (i != SSL_MAX_MASTER_KEY_LENGTH)
2216 			{
2217 			al=SSL_AD_DECODE_ERROR;
2218 			/* SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT); */
2219 			}
2220 
2221 		if ((al == -1) && !((p[0] == (s->client_version>>8)) && (p[1] == (s->client_version & 0xff))))
2222 			{
2223 			/* The premaster secret must contain the same version number as the
2224 			 * ClientHello to detect version rollback attacks (strangely, the
2225 			 * protocol does not offer such protection for DH ciphersuites).
2226 			 * However, buggy clients exist that send the negotiated protocol
2227 			 * version instead if the server does not support the requested
2228 			 * protocol version.
2229 			 * If SSL_OP_TLS_ROLLBACK_BUG is set, tolerate such clients. */
2230 			if (!((s->options & SSL_OP_TLS_ROLLBACK_BUG) &&
2231 				(p[0] == (s->version>>8)) && (p[1] == (s->version & 0xff))))
2232 				{
2233 				al=SSL_AD_DECODE_ERROR;
2234 				/* SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_PROTOCOL_VERSION_NUMBER); */
2235 
2236 				/* The Klima-Pokorny-Rosa extension of Bleichenbacher's attack
2237 				 * (http://eprint.iacr.org/2003/052/) exploits the version
2238 				 * number check as a "bad version oracle" -- an alert would
2239 				 * reveal that the plaintext corresponding to some ciphertext
2240 				 * made up by the adversary is properly formatted except
2241 				 * that the version number is wrong.  To avoid such attacks,
2242 				 * we should treat this just like any other decryption error. */
2243 				}
2244 			}
2245 
2246 		if (al != -1)
2247 			{
2248 			/* Some decryption failure -- use random value instead as countermeasure
2249 			 * against Bleichenbacher's attack on PKCS #1 v1.5 RSA padding
2250 			 * (see RFC 2246, section 7.4.7.1). */
2251 			ERR_clear_error();
2252 			i = SSL_MAX_MASTER_KEY_LENGTH;
2253 			p[0] = s->client_version >> 8;
2254 			p[1] = s->client_version & 0xff;
2255 			if (RAND_pseudo_bytes(p+2, i-2) <= 0) /* should be RAND_bytes, but we cannot work around a failure */
2256 				goto err;
2257 			}
2258 
2259 		s->session->master_key_length=
2260 			s->method->ssl3_enc->generate_master_secret(s,
2261 				s->session->master_key,
2262 				p,i);
2263 		OPENSSL_cleanse(p,i);
2264 		}
2265 	else
2266 #endif
2267 #ifndef OPENSSL_NO_DH
2268 		if (alg_k & (SSL_kEDH|SSL_kDHr|SSL_kDHd))
2269 		{
2270 		n2s(p,i);
2271 		if (n != i+2)
2272 			{
2273 			if (!(s->options & SSL_OP_SSLEAY_080_CLIENT_DH_BUG))
2274 				{
2275 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG);
2276 				goto err;
2277 				}
2278 			else
2279 				{
2280 				p-=2;
2281 				i=(int)n;
2282 				}
2283 			}
2284 
2285 		if (n == 0L) /* the parameters are in the cert */
2286 			{
2287 			al=SSL_AD_HANDSHAKE_FAILURE;
2288 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_UNABLE_TO_DECODE_DH_CERTS);
2289 			goto f_err;
2290 			}
2291 		else
2292 			{
2293 			if (s->s3->tmp.dh == NULL)
2294 				{
2295 				al=SSL_AD_HANDSHAKE_FAILURE;
2296 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_MISSING_TMP_DH_KEY);
2297 				goto f_err;
2298 				}
2299 			else
2300 				dh_srvr=s->s3->tmp.dh;
2301 			}
2302 
2303 		pub=BN_bin2bn(p,i,NULL);
2304 		if (pub == NULL)
2305 			{
2306 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BN_LIB);
2307 			goto err;
2308 			}
2309 
2310 		i=DH_compute_key(p,pub,dh_srvr);
2311 
2312 		if (i <= 0)
2313 			{
2314 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,ERR_R_DH_LIB);
2315 			BN_clear_free(pub);
2316 			goto err;
2317 			}
2318 
2319 		DH_free(s->s3->tmp.dh);
2320 		s->s3->tmp.dh=NULL;
2321 
2322 		BN_clear_free(pub);
2323 		pub=NULL;
2324 		s->session->master_key_length=
2325 			s->method->ssl3_enc->generate_master_secret(s,
2326 				s->session->master_key,p,i);
2327 		OPENSSL_cleanse(p,i);
2328 		}
2329 	else
2330 #endif
2331 #ifndef OPENSSL_NO_KRB5
2332 	if (alg_k & SSL_kKRB5)
2333 		{
2334 		krb5_error_code		krb5rc;
2335 		krb5_data		enc_ticket;
2336 		krb5_data		authenticator;
2337 		krb5_data		enc_pms;
2338 		KSSL_CTX		*kssl_ctx = s->kssl_ctx;
2339 		EVP_CIPHER_CTX		ciph_ctx;
2340 		const EVP_CIPHER	*enc = NULL;
2341 		unsigned char		iv[EVP_MAX_IV_LENGTH];
2342 		unsigned char		pms[SSL_MAX_MASTER_KEY_LENGTH
2343 					       + EVP_MAX_BLOCK_LENGTH];
2344 		int		     padl, outl;
2345 		krb5_timestamp		authtime = 0;
2346 		krb5_ticket_times	ttimes;
2347 
2348 		EVP_CIPHER_CTX_init(&ciph_ctx);
2349 
2350 		if (!kssl_ctx)  kssl_ctx = kssl_ctx_new();
2351 
2352 		n2s(p,i);
2353 		enc_ticket.length = i;
2354 
2355 		if (n < (long)(enc_ticket.length + 6))
2356 			{
2357 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2358 				SSL_R_DATA_LENGTH_TOO_LONG);
2359 			goto err;
2360 			}
2361 
2362 		enc_ticket.data = (char *)p;
2363 		p+=enc_ticket.length;
2364 
2365 		n2s(p,i);
2366 		authenticator.length = i;
2367 
2368 		if (n < (long)(enc_ticket.length + authenticator.length + 6))
2369 			{
2370 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2371 				SSL_R_DATA_LENGTH_TOO_LONG);
2372 			goto err;
2373 			}
2374 
2375 		authenticator.data = (char *)p;
2376 		p+=authenticator.length;
2377 
2378 		n2s(p,i);
2379 		enc_pms.length = i;
2380 		enc_pms.data = (char *)p;
2381 		p+=enc_pms.length;
2382 
2383 		/* Note that the length is checked again below,
2384 		** after decryption
2385 		*/
2386 		if(enc_pms.length > sizeof pms)
2387 			{
2388 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2389 			       SSL_R_DATA_LENGTH_TOO_LONG);
2390 			goto err;
2391 			}
2392 
2393 		if (n != (long)(enc_ticket.length + authenticator.length +
2394 						enc_pms.length + 6))
2395 			{
2396 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2397 				SSL_R_DATA_LENGTH_TOO_LONG);
2398 			goto err;
2399 			}
2400 
2401 		if ((krb5rc = kssl_sget_tkt(kssl_ctx, &enc_ticket, &ttimes,
2402 					&kssl_err)) != 0)
2403 			{
2404 #ifdef KSSL_DEBUG
2405 			printf("kssl_sget_tkt rtn %d [%d]\n",
2406 				krb5rc, kssl_err.reason);
2407 			if (kssl_err.text)
2408 				printf("kssl_err text= %s\n", kssl_err.text);
2409 #endif	/* KSSL_DEBUG */
2410 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2411 				kssl_err.reason);
2412 			goto err;
2413 			}
2414 
2415 		/*  Note: no authenticator is not considered an error,
2416 		**  but will return authtime == 0.
2417 		*/
2418 		if ((krb5rc = kssl_check_authent(kssl_ctx, &authenticator,
2419 					&authtime, &kssl_err)) != 0)
2420 			{
2421 #ifdef KSSL_DEBUG
2422 			printf("kssl_check_authent rtn %d [%d]\n",
2423 				krb5rc, kssl_err.reason);
2424 			if (kssl_err.text)
2425 				printf("kssl_err text= %s\n", kssl_err.text);
2426 #endif	/* KSSL_DEBUG */
2427 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2428 				kssl_err.reason);
2429 			goto err;
2430 			}
2431 
2432 		if ((krb5rc = kssl_validate_times(authtime, &ttimes)) != 0)
2433 			{
2434 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, krb5rc);
2435 			goto err;
2436 			}
2437 
2438 #ifdef KSSL_DEBUG
2439 		kssl_ctx_show(kssl_ctx);
2440 #endif	/* KSSL_DEBUG */
2441 
2442 		enc = kssl_map_enc(kssl_ctx->enctype);
2443 		if (enc == NULL)
2444 		    goto err;
2445 
2446 		memset(iv, 0, sizeof iv);	/* per RFC 1510 */
2447 
2448 		if (!EVP_DecryptInit_ex(&ciph_ctx,enc,NULL,kssl_ctx->key,iv))
2449 			{
2450 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2451 				SSL_R_DECRYPTION_FAILED);
2452 			goto err;
2453 			}
2454 		if (!EVP_DecryptUpdate(&ciph_ctx, pms,&outl,
2455 					(unsigned char *)enc_pms.data, enc_pms.length))
2456 			{
2457 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2458 				SSL_R_DECRYPTION_FAILED);
2459 			goto err;
2460 			}
2461 		if (outl > SSL_MAX_MASTER_KEY_LENGTH)
2462 			{
2463 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2464 				SSL_R_DATA_LENGTH_TOO_LONG);
2465 			goto err;
2466 			}
2467 		if (!EVP_DecryptFinal_ex(&ciph_ctx,&(pms[outl]),&padl))
2468 			{
2469 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2470 				SSL_R_DECRYPTION_FAILED);
2471 			goto err;
2472 			}
2473 		outl += padl;
2474 		if (outl > SSL_MAX_MASTER_KEY_LENGTH)
2475 			{
2476 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2477 				SSL_R_DATA_LENGTH_TOO_LONG);
2478 			goto err;
2479 			}
2480 		if (!((pms[0] == (s->client_version>>8)) && (pms[1] == (s->client_version & 0xff))))
2481 		    {
2482 		    /* The premaster secret must contain the same version number as the
2483 		     * ClientHello to detect version rollback attacks (strangely, the
2484 		     * protocol does not offer such protection for DH ciphersuites).
2485 		     * However, buggy clients exist that send random bytes instead of
2486 		     * the protocol version.
2487 		     * If SSL_OP_TLS_ROLLBACK_BUG is set, tolerate such clients.
2488 		     * (Perhaps we should have a separate BUG value for the Kerberos cipher)
2489 		     */
2490 		    if (!(s->options & SSL_OP_TLS_ROLLBACK_BUG))
2491 			{
2492 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2493 			       SSL_AD_DECODE_ERROR);
2494 			goto err;
2495 			}
2496 		    }
2497 
2498 		EVP_CIPHER_CTX_cleanup(&ciph_ctx);
2499 
2500 		s->session->master_key_length=
2501 			s->method->ssl3_enc->generate_master_secret(s,
2502 				s->session->master_key, pms, outl);
2503 
2504 		if (kssl_ctx->client_princ)
2505 			{
2506 			size_t len = strlen(kssl_ctx->client_princ);
2507 			if ( len < SSL_MAX_KRB5_PRINCIPAL_LENGTH )
2508 				{
2509 				s->session->krb5_client_princ_len = len;
2510 				memcpy(s->session->krb5_client_princ,kssl_ctx->client_princ,len);
2511 				}
2512 			}
2513 
2514 
2515 		/*  Was doing kssl_ctx_free() here,
2516 		**  but it caused problems for apache.
2517 		**  kssl_ctx = kssl_ctx_free(kssl_ctx);
2518 		**  if (s->kssl_ctx)  s->kssl_ctx = NULL;
2519 		*/
2520 		}
2521 	else
2522 #endif	/* OPENSSL_NO_KRB5 */
2523 
2524 #ifndef OPENSSL_NO_ECDH
2525 		if (alg_k & (SSL_kEECDH|SSL_kECDHr|SSL_kECDHe))
2526 		{
2527 		int ret = 1;
2528 		int field_size = 0;
2529 		const EC_KEY   *tkey;
2530 		const EC_GROUP *group;
2531 		const BIGNUM *priv_key;
2532 
2533 		/* initialize structures for server's ECDH key pair */
2534 		if ((srvr_ecdh = EC_KEY_new()) == NULL)
2535 			{
2536 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2537 			    ERR_R_MALLOC_FAILURE);
2538 			goto err;
2539 			}
2540 
2541 		/* Let's get server private key and group information */
2542 		if (alg_k & (SSL_kECDHr|SSL_kECDHe))
2543 			{
2544 			/* use the certificate */
2545 			tkey = s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec;
2546 			}
2547 		else
2548 			{
2549 			/* use the ephermeral values we saved when
2550 			 * generating the ServerKeyExchange msg.
2551 			 */
2552 			tkey = s->s3->tmp.ecdh;
2553 			}
2554 
2555 		group    = EC_KEY_get0_group(tkey);
2556 		priv_key = EC_KEY_get0_private_key(tkey);
2557 
2558 		if (!EC_KEY_set_group(srvr_ecdh, group) ||
2559 		    !EC_KEY_set_private_key(srvr_ecdh, priv_key))
2560 			{
2561 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2562 			       ERR_R_EC_LIB);
2563 			goto err;
2564 			}
2565 
2566 		/* Let's get client's public key */
2567 		if ((clnt_ecpoint = EC_POINT_new(group)) == NULL)
2568 			{
2569 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2570 			    ERR_R_MALLOC_FAILURE);
2571 			goto err;
2572 			}
2573 
2574 		if (n == 0L)
2575 			{
2576 			/* Client Publickey was in Client Certificate */
2577 
2578 			 if (alg_k & SSL_kEECDH)
2579 				 {
2580 				 al=SSL_AD_HANDSHAKE_FAILURE;
2581 				 SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_MISSING_TMP_ECDH_KEY);
2582 				 goto f_err;
2583 				 }
2584 			if (((clnt_pub_pkey=X509_get_pubkey(s->session->peer))
2585 			    == NULL) ||
2586 			    (clnt_pub_pkey->type != EVP_PKEY_EC))
2587 				{
2588 				/* XXX: For now, we do not support client
2589 				 * authentication using ECDH certificates
2590 				 * so this branch (n == 0L) of the code is
2591 				 * never executed. When that support is
2592 				 * added, we ought to ensure the key
2593 				 * received in the certificate is
2594 				 * authorized for key agreement.
2595 				 * ECDH_compute_key implicitly checks that
2596 				 * the two ECDH shares are for the same
2597 				 * group.
2598 				 */
2599 			   	al=SSL_AD_HANDSHAKE_FAILURE;
2600 			   	SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2601 				    SSL_R_UNABLE_TO_DECODE_ECDH_CERTS);
2602 			   	goto f_err;
2603 			   	}
2604 
2605 			if (EC_POINT_copy(clnt_ecpoint,
2606 			    EC_KEY_get0_public_key(clnt_pub_pkey->pkey.ec)) == 0)
2607 				{
2608 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2609 					ERR_R_EC_LIB);
2610 				goto err;
2611 				}
2612 			ret = 2; /* Skip certificate verify processing */
2613 			}
2614 		else
2615 			{
2616 			/* Get client's public key from encoded point
2617 			 * in the ClientKeyExchange message.
2618 			 */
2619 			if ((bn_ctx = BN_CTX_new()) == NULL)
2620 				{
2621 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2622 				    ERR_R_MALLOC_FAILURE);
2623 				goto err;
2624 				}
2625 
2626 			/* Get encoded point length */
2627 			i = *p;
2628 			p += 1;
2629 			if (n != 1 + i)
2630 				{
2631 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2632 				    ERR_R_EC_LIB);
2633 				goto err;
2634 				}
2635 			if (EC_POINT_oct2point(group,
2636 			    clnt_ecpoint, p, i, bn_ctx) == 0)
2637 				{
2638 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2639 				    ERR_R_EC_LIB);
2640 				goto err;
2641 				}
2642 			/* p is pointing to somewhere in the buffer
2643 			 * currently, so set it to the start
2644 			 */
2645 			p=(unsigned char *)s->init_buf->data;
2646 			}
2647 
2648 		/* Compute the shared pre-master secret */
2649 		field_size = EC_GROUP_get_degree(group);
2650 		if (field_size <= 0)
2651 			{
2652 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2653 			       ERR_R_ECDH_LIB);
2654 			goto err;
2655 			}
2656 		i = ECDH_compute_key(p, (field_size+7)/8, clnt_ecpoint, srvr_ecdh, NULL);
2657 		if (i <= 0)
2658 			{
2659 			SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2660 			    ERR_R_ECDH_LIB);
2661 			goto err;
2662 			}
2663 
2664 		EVP_PKEY_free(clnt_pub_pkey);
2665 		EC_POINT_free(clnt_ecpoint);
2666 		EC_KEY_free(srvr_ecdh);
2667 		BN_CTX_free(bn_ctx);
2668 		EC_KEY_free(s->s3->tmp.ecdh);
2669 		s->s3->tmp.ecdh = NULL;
2670 
2671 		/* Compute the master secret */
2672 		s->session->master_key_length = s->method->ssl3_enc-> \
2673 		    generate_master_secret(s, s->session->master_key, p, i);
2674 
2675 		OPENSSL_cleanse(p, i);
2676 		return (ret);
2677 		}
2678 	else
2679 #endif
2680 #ifndef OPENSSL_NO_PSK
2681 		if (alg_k & SSL_kPSK)
2682 			{
2683 			unsigned char *t = NULL;
2684 			unsigned char psk_or_pre_ms[PSK_MAX_PSK_LEN*2+4];
2685 			unsigned int pre_ms_len = 0, psk_len = 0;
2686 			int psk_err = 1;
2687 			char tmp_id[PSK_MAX_IDENTITY_LEN+1];
2688 
2689 			al=SSL_AD_HANDSHAKE_FAILURE;
2690 
2691 			n2s(p,i);
2692 			if (n != i+2)
2693 				{
2694 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2695 					SSL_R_LENGTH_MISMATCH);
2696 				goto psk_err;
2697 				}
2698 			if (i > PSK_MAX_IDENTITY_LEN)
2699 				{
2700 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2701 					SSL_R_DATA_LENGTH_TOO_LONG);
2702 				goto psk_err;
2703 				}
2704 			if (s->psk_server_callback == NULL)
2705 				{
2706 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2707 				       SSL_R_PSK_NO_SERVER_CB);
2708 				goto psk_err;
2709 				}
2710 
2711 			/* Create guaranteed NULL-terminated identity
2712 			 * string for the callback */
2713 			memcpy(tmp_id, p, i);
2714 			memset(tmp_id+i, 0, PSK_MAX_IDENTITY_LEN+1-i);
2715 			psk_len = s->psk_server_callback(s, tmp_id,
2716 				psk_or_pre_ms, sizeof(psk_or_pre_ms));
2717 			OPENSSL_cleanse(tmp_id, PSK_MAX_IDENTITY_LEN+1);
2718 
2719 			if (psk_len > PSK_MAX_PSK_LEN)
2720 				{
2721 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2722 					ERR_R_INTERNAL_ERROR);
2723 				goto psk_err;
2724 				}
2725 			else if (psk_len == 0)
2726 				{
2727 				/* PSK related to the given identity not found */
2728 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2729 				       SSL_R_PSK_IDENTITY_NOT_FOUND);
2730 				al=SSL_AD_UNKNOWN_PSK_IDENTITY;
2731 				goto psk_err;
2732 				}
2733 
2734 			/* create PSK pre_master_secret */
2735 			pre_ms_len=2+psk_len+2+psk_len;
2736 			t = psk_or_pre_ms;
2737 			memmove(psk_or_pre_ms+psk_len+4, psk_or_pre_ms, psk_len);
2738 			s2n(psk_len, t);
2739 			memset(t, 0, psk_len);
2740 			t+=psk_len;
2741 			s2n(psk_len, t);
2742 
2743 			if (s->session->psk_identity != NULL)
2744 				OPENSSL_free(s->session->psk_identity);
2745 			s->session->psk_identity = BUF_strdup((char *)p);
2746 			if (s->session->psk_identity == NULL)
2747 				{
2748 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2749 					ERR_R_MALLOC_FAILURE);
2750 				goto psk_err;
2751 				}
2752 
2753 			if (s->session->psk_identity_hint != NULL)
2754 				OPENSSL_free(s->session->psk_identity_hint);
2755 			s->session->psk_identity_hint = BUF_strdup(s->ctx->psk_identity_hint);
2756 			if (s->ctx->psk_identity_hint != NULL &&
2757 				s->session->psk_identity_hint == NULL)
2758 				{
2759 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2760 					ERR_R_MALLOC_FAILURE);
2761 				goto psk_err;
2762 				}
2763 
2764 			s->session->master_key_length=
2765 				s->method->ssl3_enc->generate_master_secret(s,
2766 					s->session->master_key, psk_or_pre_ms, pre_ms_len);
2767 			psk_err = 0;
2768 		psk_err:
2769 			OPENSSL_cleanse(psk_or_pre_ms, sizeof(psk_or_pre_ms));
2770 			if (psk_err != 0)
2771 				goto f_err;
2772 			}
2773 		else
2774 #endif
2775 #ifndef OPENSSL_NO_SRP
2776 		if (alg_k & SSL_kSRP)
2777 			{
2778 			int param_len;
2779 
2780 			n2s(p,i);
2781 			param_len=i+2;
2782 			if (param_len > n)
2783 				{
2784 				al=SSL_AD_DECODE_ERROR;
2785 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_SRP_A_LENGTH);
2786 				goto f_err;
2787 				}
2788 			if (!(s->srp_ctx.A=BN_bin2bn(p,i,NULL)))
2789 				{
2790 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,ERR_R_BN_LIB);
2791 				goto err;
2792 				}
2793 			if (s->session->srp_username != NULL)
2794 				OPENSSL_free(s->session->srp_username);
2795 			s->session->srp_username = BUF_strdup(s->srp_ctx.login);
2796 			if (s->session->srp_username == NULL)
2797 				{
2798 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2799 					ERR_R_MALLOC_FAILURE);
2800 				goto err;
2801 				}
2802 
2803 			if ((s->session->master_key_length = SRP_generate_server_master_secret(s,s->session->master_key))<0)
2804 				{
2805 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
2806 				goto err;
2807 				}
2808 
2809 			p+=i;
2810 			}
2811 		else
2812 #endif	/* OPENSSL_NO_SRP */
2813 		if (alg_k & SSL_kGOST)
2814 			{
2815 			int ret = 0;
2816 			EVP_PKEY_CTX *pkey_ctx;
2817 			EVP_PKEY *client_pub_pkey = NULL, *pk = NULL;
2818 			unsigned char premaster_secret[32], *start;
2819 			size_t outlen=32, inlen;
2820 			unsigned long alg_a;
2821 
2822 			/* Get our certificate private key*/
2823 			alg_a = s->s3->tmp.new_cipher->algorithm_auth;
2824 			if (alg_a & SSL_aGOST94)
2825 				pk = s->cert->pkeys[SSL_PKEY_GOST94].privatekey;
2826 			else if (alg_a & SSL_aGOST01)
2827 				pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey;
2828 
2829 			pkey_ctx = EVP_PKEY_CTX_new(pk,NULL);
2830 			EVP_PKEY_decrypt_init(pkey_ctx);
2831 			/* If client certificate is present and is of the same type, maybe
2832 			 * use it for key exchange.  Don't mind errors from
2833 			 * EVP_PKEY_derive_set_peer, because it is completely valid to use
2834 			 * a client certificate for authorization only. */
2835 			client_pub_pkey = X509_get_pubkey(s->session->peer);
2836 			if (client_pub_pkey)
2837 				{
2838 				if (EVP_PKEY_derive_set_peer(pkey_ctx, client_pub_pkey) <= 0)
2839 					ERR_clear_error();
2840 				}
2841 			/* Decrypt session key */
2842 			if ((*p!=( V_ASN1_SEQUENCE| V_ASN1_CONSTRUCTED)))
2843 				{
2844 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_DECRYPTION_FAILED);
2845 				goto gerr;
2846 				}
2847 			if (p[1] == 0x81)
2848 				{
2849 				start = p+3;
2850 				inlen = p[2];
2851 				}
2852 			else if (p[1] < 0x80)
2853 				{
2854 				start = p+2;
2855 				inlen = p[1];
2856 				}
2857 			else
2858 				{
2859 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_DECRYPTION_FAILED);
2860 				goto gerr;
2861 				}
2862 			if (EVP_PKEY_decrypt(pkey_ctx,premaster_secret,&outlen,start,inlen) <=0)
2863 
2864 				{
2865 				SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_DECRYPTION_FAILED);
2866 				goto gerr;
2867 				}
2868 			/* Generate master secret */
2869 			s->session->master_key_length=
2870 				s->method->ssl3_enc->generate_master_secret(s,
2871 					s->session->master_key,premaster_secret,32);
2872 			/* Check if pubkey from client certificate was used */
2873 			if (EVP_PKEY_CTX_ctrl(pkey_ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 2, NULL) > 0)
2874 				ret = 2;
2875 			else
2876 				ret = 1;
2877 		gerr:
2878 			EVP_PKEY_free(client_pub_pkey);
2879 			EVP_PKEY_CTX_free(pkey_ctx);
2880 			if (ret)
2881 				return ret;
2882 			else
2883 				goto err;
2884 			}
2885 		else
2886 		{
2887 		al=SSL_AD_HANDSHAKE_FAILURE;
2888 		SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
2889 				SSL_R_UNKNOWN_CIPHER_TYPE);
2890 		goto f_err;
2891 		}
2892 
2893 	return(1);
2894 f_err:
2895 	ssl3_send_alert(s,SSL3_AL_FATAL,al);
2896 #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_ECDH) || defined(OPENSSL_NO_SRP)
2897 err:
2898 #endif
2899 #ifndef OPENSSL_NO_ECDH
2900 	EVP_PKEY_free(clnt_pub_pkey);
2901 	EC_POINT_free(clnt_ecpoint);
2902 	if (srvr_ecdh != NULL)
2903 		EC_KEY_free(srvr_ecdh);
2904 	BN_CTX_free(bn_ctx);
2905 #endif
2906 	return(-1);
2907 	}
2908 
ssl3_get_cert_verify(SSL * s)2909 int ssl3_get_cert_verify(SSL *s)
2910 	{
2911 	EVP_PKEY *pkey=NULL;
2912 	unsigned char *p;
2913 	int al,ok,ret=0;
2914 	long n;
2915 	int type=0,i,j;
2916 	X509 *peer;
2917 	const EVP_MD *md = NULL;
2918 	EVP_MD_CTX mctx;
2919 	EVP_MD_CTX_init(&mctx);
2920 
2921 	n=s->method->ssl_get_message(s,
2922 		SSL3_ST_SR_CERT_VRFY_A,
2923 		SSL3_ST_SR_CERT_VRFY_B,
2924 		-1,
2925 		516, /* Enough for 4096 bit RSA key with TLS v1.2 */
2926 		&ok);
2927 
2928 	if (!ok) return((int)n);
2929 
2930 	if (s->session->peer != NULL)
2931 		{
2932 		peer=s->session->peer;
2933 		pkey=X509_get_pubkey(peer);
2934 		type=X509_certificate_type(peer,pkey);
2935 		}
2936 	else
2937 		{
2938 		peer=NULL;
2939 		pkey=NULL;
2940 		}
2941 
2942 	if (s->s3->tmp.message_type != SSL3_MT_CERTIFICATE_VERIFY)
2943 		{
2944 		s->s3->tmp.reuse_message=1;
2945 		if ((peer != NULL) && (type & EVP_PKT_SIGN))
2946 			{
2947 			al=SSL_AD_UNEXPECTED_MESSAGE;
2948 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_MISSING_VERIFY_MESSAGE);
2949 			goto f_err;
2950 			}
2951 		ret=1;
2952 		goto end;
2953 		}
2954 
2955 	if (peer == NULL)
2956 		{
2957 		SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_NO_CLIENT_CERT_RECEIVED);
2958 		al=SSL_AD_UNEXPECTED_MESSAGE;
2959 		goto f_err;
2960 		}
2961 
2962 	if (!(type & EVP_PKT_SIGN))
2963 		{
2964 		SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE);
2965 		al=SSL_AD_ILLEGAL_PARAMETER;
2966 		goto f_err;
2967 		}
2968 
2969 	if (s->s3->change_cipher_spec)
2970 		{
2971 		SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_CCS_RECEIVED_EARLY);
2972 		al=SSL_AD_UNEXPECTED_MESSAGE;
2973 		goto f_err;
2974 		}
2975 
2976 	/* we now have a signature that we need to verify */
2977 	p=(unsigned char *)s->init_msg;
2978 	/* Check for broken implementations of GOST ciphersuites */
2979 	/* If key is GOST and n is exactly 64, it is bare
2980 	 * signature without length field */
2981 	if (n==64 && (pkey->type==NID_id_GostR3410_94 ||
2982 		pkey->type == NID_id_GostR3410_2001) )
2983 		{
2984 		i=64;
2985 		}
2986 	else
2987 		{
2988 		if (TLS1_get_version(s) >= TLS1_2_VERSION)
2989 			{
2990 			int sigalg = tls12_get_sigid(pkey);
2991 			/* Should never happen */
2992 			if (sigalg == -1)
2993 				{
2994 				SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,ERR_R_INTERNAL_ERROR);
2995 				al=SSL_AD_INTERNAL_ERROR;
2996 				goto f_err;
2997 				}
2998 			/* Check key type is consistent with signature */
2999 			if (sigalg != (int)p[1])
3000 				{
3001 				SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_WRONG_SIGNATURE_TYPE);
3002 				al=SSL_AD_DECODE_ERROR;
3003 				goto f_err;
3004 				}
3005 			md = tls12_get_hash(p[0]);
3006 			if (md == NULL)
3007 				{
3008 				SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_UNKNOWN_DIGEST);
3009 				al=SSL_AD_DECODE_ERROR;
3010 				goto f_err;
3011 				}
3012 #ifdef SSL_DEBUG
3013 fprintf(stderr, "USING TLSv1.2 HASH %s\n", EVP_MD_name(md));
3014 #endif
3015 			p += 2;
3016 			n -= 2;
3017 			}
3018 		n2s(p,i);
3019 		n-=2;
3020 		if (i > n)
3021 			{
3022 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_LENGTH_MISMATCH);
3023 			al=SSL_AD_DECODE_ERROR;
3024 			goto f_err;
3025 			}
3026     	}
3027 	j=EVP_PKEY_size(pkey);
3028 	if ((i > j) || (n > j) || (n <= 0))
3029 		{
3030 		SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_WRONG_SIGNATURE_SIZE);
3031 		al=SSL_AD_DECODE_ERROR;
3032 		goto f_err;
3033 		}
3034 
3035 	if (TLS1_get_version(s) >= TLS1_2_VERSION)
3036 		{
3037 		long hdatalen = 0;
3038 		void *hdata;
3039 		hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata);
3040 		if (hdatalen <= 0)
3041 			{
3042 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, ERR_R_INTERNAL_ERROR);
3043 			al=SSL_AD_INTERNAL_ERROR;
3044 			goto f_err;
3045 			}
3046 #ifdef SSL_DEBUG
3047 		fprintf(stderr, "Using TLS 1.2 with client verify alg %s\n",
3048 							EVP_MD_name(md));
3049 #endif
3050 		if (!EVP_VerifyInit_ex(&mctx, md, NULL)
3051 			|| !EVP_VerifyUpdate(&mctx, hdata, hdatalen))
3052 			{
3053 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, ERR_R_EVP_LIB);
3054 			al=SSL_AD_INTERNAL_ERROR;
3055 			goto f_err;
3056 			}
3057 
3058 		if (EVP_VerifyFinal(&mctx, p , i, pkey) <= 0)
3059 			{
3060 			al=SSL_AD_DECRYPT_ERROR;
3061 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_BAD_SIGNATURE);
3062 			goto f_err;
3063 			}
3064 		}
3065 	else
3066 #ifndef OPENSSL_NO_RSA
3067 	if (pkey->type == EVP_PKEY_RSA)
3068 		{
3069 		i=RSA_verify(NID_md5_sha1, s->s3->tmp.cert_verify_md,
3070 			MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, p, i,
3071 							pkey->pkey.rsa);
3072 		if (i < 0)
3073 			{
3074 			al=SSL_AD_DECRYPT_ERROR;
3075 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_BAD_RSA_DECRYPT);
3076 			goto f_err;
3077 			}
3078 		if (i == 0)
3079 			{
3080 			al=SSL_AD_DECRYPT_ERROR;
3081 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_BAD_RSA_SIGNATURE);
3082 			goto f_err;
3083 			}
3084 		}
3085 	else
3086 #endif
3087 #ifndef OPENSSL_NO_DSA
3088 		if (pkey->type == EVP_PKEY_DSA)
3089 		{
3090 		j=DSA_verify(pkey->save_type,
3091 			&(s->s3->tmp.cert_verify_md[MD5_DIGEST_LENGTH]),
3092 			SHA_DIGEST_LENGTH,p,i,pkey->pkey.dsa);
3093 		if (j <= 0)
3094 			{
3095 			/* bad signature */
3096 			al=SSL_AD_DECRYPT_ERROR;
3097 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_BAD_DSA_SIGNATURE);
3098 			goto f_err;
3099 			}
3100 		}
3101 	else
3102 #endif
3103 #ifndef OPENSSL_NO_ECDSA
3104 		if (pkey->type == EVP_PKEY_EC)
3105 		{
3106 		j=ECDSA_verify(pkey->save_type,
3107 			&(s->s3->tmp.cert_verify_md[MD5_DIGEST_LENGTH]),
3108 			SHA_DIGEST_LENGTH,p,i,pkey->pkey.ec);
3109 		if (j <= 0)
3110 			{
3111 			/* bad signature */
3112 			al=SSL_AD_DECRYPT_ERROR;
3113 			SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,
3114 			    SSL_R_BAD_ECDSA_SIGNATURE);
3115 			goto f_err;
3116 			}
3117 		}
3118 	else
3119 #endif
3120 	if (pkey->type == NID_id_GostR3410_94 || pkey->type == NID_id_GostR3410_2001)
3121 		{   unsigned char signature[64];
3122 			int idx;
3123 			EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new(pkey,NULL);
3124 			EVP_PKEY_verify_init(pctx);
3125 			if (i!=64) {
3126 				fprintf(stderr,"GOST signature length is %d",i);
3127 			}
3128 			for (idx=0;idx<64;idx++) {
3129 				signature[63-idx]=p[idx];
3130 			}
3131 			j=EVP_PKEY_verify(pctx,signature,64,s->s3->tmp.cert_verify_md,32);
3132 			EVP_PKEY_CTX_free(pctx);
3133 			if (j<=0)
3134 				{
3135 				al=SSL_AD_DECRYPT_ERROR;
3136 				SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,
3137 					SSL_R_BAD_ECDSA_SIGNATURE);
3138 				goto f_err;
3139 				}
3140 		}
3141 	else
3142 		{
3143 		SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,ERR_R_INTERNAL_ERROR);
3144 		al=SSL_AD_UNSUPPORTED_CERTIFICATE;
3145 		goto f_err;
3146 		}
3147 
3148 
3149 	ret=1;
3150 	if (0)
3151 		{
3152 f_err:
3153 		ssl3_send_alert(s,SSL3_AL_FATAL,al);
3154 		}
3155 end:
3156 	if (s->s3->handshake_buffer)
3157 		{
3158 		BIO_free(s->s3->handshake_buffer);
3159 		s->s3->handshake_buffer = NULL;
3160 		s->s3->flags &= ~TLS1_FLAGS_KEEP_HANDSHAKE;
3161 		}
3162 	EVP_MD_CTX_cleanup(&mctx);
3163 	EVP_PKEY_free(pkey);
3164 	return(ret);
3165 	}
3166 
ssl3_get_client_certificate(SSL * s)3167 int ssl3_get_client_certificate(SSL *s)
3168 	{
3169 	int i,ok,al,ret= -1;
3170 	X509 *x=NULL;
3171 	unsigned long l,nc,llen,n;
3172 	const unsigned char *p,*q;
3173 	unsigned char *d;
3174 	STACK_OF(X509) *sk=NULL;
3175 
3176 	n=s->method->ssl_get_message(s,
3177 		SSL3_ST_SR_CERT_A,
3178 		SSL3_ST_SR_CERT_B,
3179 		-1,
3180 		s->max_cert_list,
3181 		&ok);
3182 
3183 	if (!ok) return((int)n);
3184 
3185 	if	(s->s3->tmp.message_type == SSL3_MT_CLIENT_KEY_EXCHANGE)
3186 		{
3187 		if (	(s->verify_mode & SSL_VERIFY_PEER) &&
3188 			(s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))
3189 			{
3190 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
3191 			al=SSL_AD_HANDSHAKE_FAILURE;
3192 			goto f_err;
3193 			}
3194 		/* If tls asked for a client cert, the client must return a 0 list */
3195 		if ((s->version > SSL3_VERSION) && s->s3->tmp.cert_request)
3196 			{
3197 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST);
3198 			al=SSL_AD_UNEXPECTED_MESSAGE;
3199 			goto f_err;
3200 			}
3201 		s->s3->tmp.reuse_message=1;
3202 		return(1);
3203 		}
3204 
3205 	if (s->s3->tmp.message_type != SSL3_MT_CERTIFICATE)
3206 		{
3207 		al=SSL_AD_UNEXPECTED_MESSAGE;
3208 		SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_WRONG_MESSAGE_TYPE);
3209 		goto f_err;
3210 		}
3211 	p=d=(unsigned char *)s->init_msg;
3212 
3213 	if ((sk=sk_X509_new_null()) == NULL)
3214 		{
3215 		SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,ERR_R_MALLOC_FAILURE);
3216 		goto err;
3217 		}
3218 
3219 	n2l3(p,llen);
3220 	if (llen+3 != n)
3221 		{
3222 		al=SSL_AD_DECODE_ERROR;
3223 		SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_LENGTH_MISMATCH);
3224 		goto f_err;
3225 		}
3226 	for (nc=0; nc<llen; )
3227 		{
3228 		n2l3(p,l);
3229 		if ((l+nc+3) > llen)
3230 			{
3231 			al=SSL_AD_DECODE_ERROR;
3232 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_CERT_LENGTH_MISMATCH);
3233 			goto f_err;
3234 			}
3235 
3236 		q=p;
3237 		x=d2i_X509(NULL,&p,l);
3238 		if (x == NULL)
3239 			{
3240 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,ERR_R_ASN1_LIB);
3241 			goto err;
3242 			}
3243 		if (p != (q+l))
3244 			{
3245 			al=SSL_AD_DECODE_ERROR;
3246 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_CERT_LENGTH_MISMATCH);
3247 			goto f_err;
3248 			}
3249 		if (!sk_X509_push(sk,x))
3250 			{
3251 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,ERR_R_MALLOC_FAILURE);
3252 			goto err;
3253 			}
3254 		x=NULL;
3255 		nc+=l+3;
3256 		}
3257 
3258 	if (sk_X509_num(sk) <= 0)
3259 		{
3260 		/* TLS does not mind 0 certs returned */
3261 		if (s->version == SSL3_VERSION)
3262 			{
3263 			al=SSL_AD_HANDSHAKE_FAILURE;
3264 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_NO_CERTIFICATES_RETURNED);
3265 			goto f_err;
3266 			}
3267 		/* Fail for TLS only if we required a certificate */
3268 		else if ((s->verify_mode & SSL_VERIFY_PEER) &&
3269 			 (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))
3270 			{
3271 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
3272 			al=SSL_AD_HANDSHAKE_FAILURE;
3273 			goto f_err;
3274 			}
3275 		/* No client certificate so digest cached records */
3276 		if (s->s3->handshake_buffer && !ssl3_digest_cached_records(s))
3277 			{
3278 			al=SSL_AD_INTERNAL_ERROR;
3279 			goto f_err;
3280 			}
3281 		}
3282 	else
3283 		{
3284 		i=ssl_verify_cert_chain(s,sk);
3285 		if (i <= 0)
3286 			{
3287 			al=ssl_verify_alarm_type(s->verify_result);
3288 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_NO_CERTIFICATE_RETURNED);
3289 			goto f_err;
3290 			}
3291 		}
3292 
3293 	if (s->session->peer != NULL) /* This should not be needed */
3294 		X509_free(s->session->peer);
3295 	s->session->peer=sk_X509_shift(sk);
3296 	s->session->verify_result = s->verify_result;
3297 
3298 	/* With the current implementation, sess_cert will always be NULL
3299 	 * when we arrive here. */
3300 	if (s->session->sess_cert == NULL)
3301 		{
3302 		s->session->sess_cert = ssl_sess_cert_new();
3303 		if (s->session->sess_cert == NULL)
3304 			{
3305 			SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE, ERR_R_MALLOC_FAILURE);
3306 			goto err;
3307 			}
3308 		}
3309 	if (s->session->sess_cert->cert_chain != NULL)
3310 		sk_X509_pop_free(s->session->sess_cert->cert_chain, X509_free);
3311 	s->session->sess_cert->cert_chain=sk;
3312 	/* Inconsistency alert: cert_chain does *not* include the
3313 	 * peer's own certificate, while we do include it in s3_clnt.c */
3314 
3315 	sk=NULL;
3316 
3317 	ret=1;
3318 	if (0)
3319 		{
3320 f_err:
3321 		ssl3_send_alert(s,SSL3_AL_FATAL,al);
3322 		}
3323 err:
3324 	if (x != NULL) X509_free(x);
3325 	if (sk != NULL) sk_X509_pop_free(sk,X509_free);
3326 	return(ret);
3327 	}
3328 
ssl3_send_server_certificate(SSL * s)3329 int ssl3_send_server_certificate(SSL *s)
3330 	{
3331 	unsigned long l;
3332 	X509 *x;
3333 
3334 	if (s->state == SSL3_ST_SW_CERT_A)
3335 		{
3336 		x=ssl_get_server_send_cert(s);
3337 		if (x == NULL)
3338 			{
3339 			/* VRS: allow null cert if auth == KRB5 */
3340 			if ((s->s3->tmp.new_cipher->algorithm_auth != SSL_aKRB5) ||
3341 			    (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5))
3342 				{
3343 				SSLerr(SSL_F_SSL3_SEND_SERVER_CERTIFICATE,ERR_R_INTERNAL_ERROR);
3344 				return(0);
3345 				}
3346 			}
3347 
3348 		l=ssl3_output_cert_chain(s,x);
3349 		s->state=SSL3_ST_SW_CERT_B;
3350 		s->init_num=(int)l;
3351 		s->init_off=0;
3352 		}
3353 
3354 	/* SSL3_ST_SW_CERT_B */
3355 	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
3356 	}
3357 
3358 #ifndef OPENSSL_NO_TLSEXT
3359 /* send a new session ticket (not necessarily for a new session) */
ssl3_send_newsession_ticket(SSL * s)3360 int ssl3_send_newsession_ticket(SSL *s)
3361 	{
3362 	if (s->state == SSL3_ST_SW_SESSION_TICKET_A)
3363 		{
3364 		unsigned char *p, *senc, *macstart;
3365 		const unsigned char *const_p;
3366 		int len, slen_full, slen;
3367 		SSL_SESSION *sess;
3368 		unsigned int hlen;
3369 		EVP_CIPHER_CTX ctx;
3370 		HMAC_CTX hctx;
3371 		SSL_CTX *tctx = s->initial_ctx;
3372 		unsigned char iv[EVP_MAX_IV_LENGTH];
3373 		unsigned char key_name[16];
3374 
3375 		/* get session encoding length */
3376 		slen_full = i2d_SSL_SESSION(s->session, NULL);
3377 		/* Some length values are 16 bits, so forget it if session is
3378  		 * too long
3379  		 */
3380 		if (slen_full > 0xFF00)
3381 			return -1;
3382 		senc = OPENSSL_malloc(slen_full);
3383 		if (!senc)
3384 			return -1;
3385 		p = senc;
3386 		i2d_SSL_SESSION(s->session, &p);
3387 
3388 		/* create a fresh copy (not shared with other threads) to clean up */
3389 		const_p = senc;
3390 		sess = d2i_SSL_SESSION(NULL, &const_p, slen_full);
3391 		if (sess == NULL)
3392 			{
3393 			OPENSSL_free(senc);
3394 			return -1;
3395 			}
3396 		sess->session_id_length = 0; /* ID is irrelevant for the ticket */
3397 
3398 		slen = i2d_SSL_SESSION(sess, NULL);
3399 		if (slen > slen_full) /* shouldn't ever happen */
3400 			{
3401 			OPENSSL_free(senc);
3402 			return -1;
3403 			}
3404 		p = senc;
3405 		i2d_SSL_SESSION(sess, &p);
3406 		SSL_SESSION_free(sess);
3407 
3408 		/* Grow buffer if need be: the length calculation is as
3409  		 * follows 1 (size of message name) + 3 (message length
3410  		 * bytes) + 4 (ticket lifetime hint) + 2 (ticket length) +
3411  		 * 16 (key name) + max_iv_len (iv length) +
3412  		 * session_length + max_enc_block_size (max encrypted session
3413  		 * length) + max_md_size (HMAC).
3414  		 */
3415 		if (!BUF_MEM_grow(s->init_buf,
3416 			26 + EVP_MAX_IV_LENGTH + EVP_MAX_BLOCK_LENGTH +
3417 			EVP_MAX_MD_SIZE + slen))
3418 			return -1;
3419 
3420 		p=(unsigned char *)s->init_buf->data;
3421 		/* do the header */
3422 		*(p++)=SSL3_MT_NEWSESSION_TICKET;
3423 		/* Skip message length for now */
3424 		p += 3;
3425 		EVP_CIPHER_CTX_init(&ctx);
3426 		HMAC_CTX_init(&hctx);
3427 		/* Initialize HMAC and cipher contexts. If callback present
3428 		 * it does all the work otherwise use generated values
3429 		 * from parent ctx.
3430 		 */
3431 		if (tctx->tlsext_ticket_key_cb)
3432 			{
3433 			if (tctx->tlsext_ticket_key_cb(s, key_name, iv, &ctx,
3434 							 &hctx, 1) < 0)
3435 				{
3436 				OPENSSL_free(senc);
3437 				return -1;
3438 				}
3439 			}
3440 		else
3441 			{
3442 			RAND_pseudo_bytes(iv, 16);
3443 			EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
3444 					tctx->tlsext_tick_aes_key, iv);
3445 			HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16,
3446 					tlsext_tick_md(), NULL);
3447 			memcpy(key_name, tctx->tlsext_tick_key_name, 16);
3448 			}
3449 
3450 		/* Ticket lifetime hint (advisory only):
3451 		 * We leave this unspecified for resumed session (for simplicity),
3452 		 * and guess that tickets for new sessions will live as long
3453 		 * as their sessions. */
3454 		l2n(s->hit ? 0 : s->session->timeout, p);
3455 
3456 		/* Skip ticket length for now */
3457 		p += 2;
3458 		/* Output key name */
3459 		macstart = p;
3460 		memcpy(p, key_name, 16);
3461 		p += 16;
3462 		/* output IV */
3463 		memcpy(p, iv, EVP_CIPHER_CTX_iv_length(&ctx));
3464 		p += EVP_CIPHER_CTX_iv_length(&ctx);
3465 		/* Encrypt session data */
3466 		EVP_EncryptUpdate(&ctx, p, &len, senc, slen);
3467 		p += len;
3468 		EVP_EncryptFinal(&ctx, p, &len);
3469 		p += len;
3470 		EVP_CIPHER_CTX_cleanup(&ctx);
3471 
3472 		HMAC_Update(&hctx, macstart, p - macstart);
3473 		HMAC_Final(&hctx, p, &hlen);
3474 		HMAC_CTX_cleanup(&hctx);
3475 
3476 		p += hlen;
3477 		/* Now write out lengths: p points to end of data written */
3478 		/* Total length */
3479 		len = p - (unsigned char *)s->init_buf->data;
3480 		p=(unsigned char *)s->init_buf->data + 1;
3481 		l2n3(len - 4, p); /* Message length */
3482 		p += 4;
3483 		s2n(len - 10, p);  /* Ticket length */
3484 
3485 		/* number of bytes to write */
3486 		s->init_num= len;
3487 		s->state=SSL3_ST_SW_SESSION_TICKET_B;
3488 		s->init_off=0;
3489 		OPENSSL_free(senc);
3490 		}
3491 
3492 	/* SSL3_ST_SW_SESSION_TICKET_B */
3493 	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
3494 	}
3495 
ssl3_send_cert_status(SSL * s)3496 int ssl3_send_cert_status(SSL *s)
3497 	{
3498 	if (s->state == SSL3_ST_SW_CERT_STATUS_A)
3499 		{
3500 		unsigned char *p;
3501 		/* Grow buffer if need be: the length calculation is as
3502  		 * follows 1 (message type) + 3 (message length) +
3503  		 * 1 (ocsp response type) + 3 (ocsp response length)
3504  		 * + (ocsp response)
3505  		 */
3506 		if (!BUF_MEM_grow(s->init_buf, 8 + s->tlsext_ocsp_resplen))
3507 			return -1;
3508 
3509 		p=(unsigned char *)s->init_buf->data;
3510 
3511 		/* do the header */
3512 		*(p++)=SSL3_MT_CERTIFICATE_STATUS;
3513 		/* message length */
3514 		l2n3(s->tlsext_ocsp_resplen + 4, p);
3515 		/* status type */
3516 		*(p++)= s->tlsext_status_type;
3517 		/* length of OCSP response */
3518 		l2n3(s->tlsext_ocsp_resplen, p);
3519 		/* actual response */
3520 		memcpy(p, s->tlsext_ocsp_resp, s->tlsext_ocsp_resplen);
3521 		/* number of bytes to write */
3522 		s->init_num = 8 + s->tlsext_ocsp_resplen;
3523 		s->state=SSL3_ST_SW_CERT_STATUS_B;
3524 		s->init_off = 0;
3525 		}
3526 
3527 	/* SSL3_ST_SW_CERT_STATUS_B */
3528 	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
3529 	}
3530 
3531 # ifndef OPENSSL_NO_NEXTPROTONEG
3532 /* ssl3_get_next_proto reads a Next Protocol Negotiation handshake message. It
3533  * sets the next_proto member in s if found */
ssl3_get_next_proto(SSL * s)3534 int ssl3_get_next_proto(SSL *s)
3535 	{
3536 	int ok;
3537 	int proto_len, padding_len;
3538 	long n;
3539 	const unsigned char *p;
3540 
3541 	/* Clients cannot send a NextProtocol message if we didn't see the
3542 	 * extension in their ClientHello */
3543 	if (!s->s3->next_proto_neg_seen)
3544 		{
3545 		SSLerr(SSL_F_SSL3_GET_NEXT_PROTO,SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION);
3546 		return -1;
3547 		}
3548 
3549 	n=s->method->ssl_get_message(s,
3550 		SSL3_ST_SR_NEXT_PROTO_A,
3551 		SSL3_ST_SR_NEXT_PROTO_B,
3552 		SSL3_MT_NEXT_PROTO,
3553 		514,  /* See the payload format below */
3554 		&ok);
3555 
3556 	if (!ok)
3557 		return((int)n);
3558 
3559 	/* s->state doesn't reflect whether ChangeCipherSpec has been received
3560 	 * in this handshake, but s->s3->change_cipher_spec does (will be reset
3561 	 * by ssl3_get_finished). */
3562 	if (!s->s3->change_cipher_spec)
3563 		{
3564 		SSLerr(SSL_F_SSL3_GET_NEXT_PROTO,SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS);
3565 		return -1;
3566 		}
3567 
3568 	if (n < 2)
3569 		return 0;  /* The body must be > 1 bytes long */
3570 
3571 	p=(unsigned char *)s->init_msg;
3572 
3573 	/* The payload looks like:
3574 	 *   uint8 proto_len;
3575 	 *   uint8 proto[proto_len];
3576 	 *   uint8 padding_len;
3577 	 *   uint8 padding[padding_len];
3578 	 */
3579 	proto_len = p[0];
3580 	if (proto_len + 2 > s->init_num)
3581 		return 0;
3582 	padding_len = p[proto_len + 1];
3583 	if (proto_len + padding_len + 2 != s->init_num)
3584 		return 0;
3585 
3586 	s->next_proto_negotiated = OPENSSL_malloc(proto_len);
3587 	if (!s->next_proto_negotiated)
3588 		{
3589 		SSLerr(SSL_F_SSL3_GET_NEXT_PROTO,ERR_R_MALLOC_FAILURE);
3590 		return 0;
3591 		}
3592 	memcpy(s->next_proto_negotiated, p + 1, proto_len);
3593 	s->next_proto_negotiated_len = proto_len;
3594 
3595 	return 1;
3596 	}
3597 # endif
3598 #endif
3599