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