]> git.ipfire.org Git - thirdparty/openssl.git/blame - ssl/statem/statem_srvr.c
Split extensions code into core extensions and server extensions code
[thirdparty/openssl.git] / ssl / statem / statem_srvr.c
CommitLineData
846e33c7
RS
1/*
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
8e2f6b79 3 *
846e33c7
RS
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8e2f6b79 8 */
846e33c7 9
ea262260
BM
10/* ====================================================================
11 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
12 *
0f113f3e 13 * Portions of the attached software ("Contribution") are developed by
ea262260
BM
14 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
15 *
16 * The Contribution is licensed pursuant to the OpenSSL open source
17 * license provided above.
18 *
ea262260
BM
19 * ECC cipher suite support in OpenSSL originally written by
20 * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
21 *
22 */
ddac1974
NL
23/* ====================================================================
24 * Copyright 2005 Nokia. All rights reserved.
25 *
26 * The portions of the attached software ("Contribution") is developed by
27 * Nokia Corporation and is licensed pursuant to the OpenSSL open source
28 * license.
29 *
30 * The Contribution, originally written by Mika Kousa and Pasi Eronen of
31 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
32 * support (see RFC 4279) to OpenSSL.
33 *
34 * No patent licenses or other rights except those expressly stated in
35 * the OpenSSL open source license shall be deemed granted or received
36 * expressly, by implication, estoppel, or otherwise.
37 *
38 * No assurances are provided by Nokia that the Contribution does not
39 * infringe the patent or other intellectual property rights of any third
40 * party or that the license provides you with all the necessary rights
41 * to make use of the Contribution.
42 *
43 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
44 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
45 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
46 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
47 * OTHERWISE.
48 */
d02b48c6 49
d02b48c6 50#include <stdio.h>
8ba708e5 51#include "../ssl_locl.h"
61ae935a 52#include "statem_locl.h"
68570797 53#include "internal/constant_time_locl.h"
ec577822
BM
54#include <openssl/buffer.h>
55#include <openssl/rand.h>
56#include <openssl/objects.h>
57#include <openssl/evp.h>
6434abbf 58#include <openssl/hmac.h>
ec577822 59#include <openssl/x509.h>
3c27208f 60#include <openssl/dh.h>
d095b68d 61#include <openssl/bn.h>
dbad1690 62#include <openssl/md5.h>
f9b3bff6 63
e46f2334 64static int tls_construct_encrypted_extensions(SSL *s, WPACKET *pkt);
38a3cbfb
EK
65static STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,
66 PACKET *cipher_suites,
a230b26e
EK
67 STACK_OF(SSL_CIPHER)
68 **skp, int sslv2format,
69 int *al);
d45ba43d 70
61ae935a 71/*
0f1e51ea
MC
72 * ossl_statem_server13_read_transition() encapsulates the logic for the allowed
73 * handshake state transitions when a TLSv1.3 server is reading messages from
74 * the client. The message type that the client has sent is provided in |mt|.
75 * The current state is in |s->statem.hand_state|.
76 *
94ed2c67
MC
77 * Return values are 1 for success (transition allowed) and 0 on error
78 * (transition not allowed)
0f1e51ea
MC
79 */
80static int ossl_statem_server13_read_transition(SSL *s, int mt)
81{
82 OSSL_STATEM *st = &s->statem;
83
94ed2c67
MC
84 /*
85 * TODO(TLS1.3): This is still based on the TLSv1.2 state machine. Over time
86 * we will update this to look more like real TLSv1.3
87 */
88
0f1e51ea
MC
89 /*
90 * Note: There is no case for TLS_ST_BEFORE because at that stage we have
91 * not negotiated TLSv1.3 yet, so that case is handled by
92 * ossl_statem_server_read_transition()
93 */
94 switch (st->hand_state) {
95 default:
96 break;
97
92760c21 98 case TLS_ST_SW_FINISHED:
0f1e51ea
MC
99 if (s->s3->tmp.cert_request) {
100 if (mt == SSL3_MT_CERTIFICATE) {
101 st->hand_state = TLS_ST_SR_CERT;
102 return 1;
103 }
104 } else {
92760c21
MC
105 if (mt == SSL3_MT_FINISHED) {
106 st->hand_state = TLS_ST_SR_FINISHED;
0f1e51ea
MC
107 return 1;
108 }
109 }
110 break;
111
112 case TLS_ST_SR_CERT:
113 if (s->session->peer == NULL) {
92760c21
MC
114 if (mt == SSL3_MT_FINISHED) {
115 st->hand_state = TLS_ST_SR_FINISHED;
0f1e51ea
MC
116 return 1;
117 }
118 } else {
119 if (mt == SSL3_MT_CERTIFICATE_VERIFY) {
120 st->hand_state = TLS_ST_SR_CERT_VRFY;
121 return 1;
122 }
123 }
124 break;
125
126 case TLS_ST_SR_CERT_VRFY:
0f1e51ea
MC
127 if (mt == SSL3_MT_FINISHED) {
128 st->hand_state = TLS_ST_SR_FINISHED;
129 return 1;
130 }
131 break;
0f1e51ea
MC
132 }
133
134 /* No valid transition found */
135 ssl3_send_alert(s, SSL3_AL_FATAL, SSL3_AD_UNEXPECTED_MESSAGE);
136 SSLerr(SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION,
137 SSL_R_UNEXPECTED_MESSAGE);
138 return 0;
139}
140
141/*
142 * ossl_statem_server_read_transition() encapsulates the logic for the allowed
143 * handshake state transitions when the server is reading messages from the
144 * client. The message type that the client has sent is provided in |mt|. The
145 * current state is in |s->statem.hand_state|.
61ae935a 146 *
94ed2c67
MC
147 * Return values are 1 for success (transition allowed) and 0 on error
148 * (transition not allowed)
61ae935a 149 */
8481f583 150int ossl_statem_server_read_transition(SSL *s, int mt)
61ae935a 151{
d6f1a6e9 152 OSSL_STATEM *st = &s->statem;
61ae935a 153
f5ca0b04 154 if (SSL_IS_TLS13(s)) {
5abeaf35
MC
155 if (!ossl_statem_server13_read_transition(s, mt))
156 goto err;
157 return 1;
158 }
0f1e51ea 159
e8aa8b6c 160 switch (st->hand_state) {
f3b3d7f0
RS
161 default:
162 break;
163
61ae935a
MC
164 case TLS_ST_BEFORE:
165 case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
166 if (mt == SSL3_MT_CLIENT_HELLO) {
167 st->hand_state = TLS_ST_SR_CLNT_HELLO;
168 return 1;
169 }
170 break;
171
172 case TLS_ST_SW_SRVR_DONE:
173 /*
174 * If we get a CKE message after a ServerDone then either
175 * 1) We didn't request a Certificate
176 * OR
177 * 2) If we did request one then
178 * a) We allow no Certificate to be returned
179 * AND
180 * b) We are running SSL3 (in TLS1.0+ the client must return a 0
181 * list if we requested a certificate)
182 */
0f512756
MC
183 if (mt == SSL3_MT_CLIENT_KEY_EXCHANGE) {
184 if (s->s3->tmp.cert_request) {
185 if (s->version == SSL3_VERSION) {
23dd09b5
MC
186 if ((s->verify_mode & SSL_VERIFY_PEER)
187 && (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) {
0f512756
MC
188 /*
189 * This isn't an unexpected message as such - we're just
23dd09b5
MC
190 * not going to accept it because we require a client
191 * cert.
0f512756
MC
192 */
193 ssl3_send_alert(s, SSL3_AL_FATAL,
194 SSL3_AD_HANDSHAKE_FAILURE);
340a2828 195 SSLerr(SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION,
0f512756
MC
196 SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
197 return 0;
198 }
199 st->hand_state = TLS_ST_SR_KEY_EXCH;
200 return 1;
201 }
202 } else {
203 st->hand_state = TLS_ST_SR_KEY_EXCH;
204 return 1;
205 }
61ae935a
MC
206 } else if (s->s3->tmp.cert_request) {
207 if (mt == SSL3_MT_CERTIFICATE) {
208 st->hand_state = TLS_ST_SR_CERT;
209 return 1;
f100b031 210 }
61ae935a
MC
211 }
212 break;
213
214 case TLS_ST_SR_CERT:
215 if (mt == SSL3_MT_CLIENT_KEY_EXCHANGE) {
216 st->hand_state = TLS_ST_SR_KEY_EXCH;
217 return 1;
218 }
219 break;
220
221 case TLS_ST_SR_KEY_EXCH:
222 /*
223 * We should only process a CertificateVerify message if we have
224 * received a Certificate from the client. If so then |s->session->peer|
225 * will be non NULL. In some instances a CertificateVerify message is
226 * not required even if the peer has sent a Certificate (e.g. such as in
a71a4966 227 * the case of static DH). In that case |st->no_cert_verify| should be
61ae935a
MC
228 * set.
229 */
a71a4966 230 if (s->session->peer == NULL || st->no_cert_verify) {
61ae935a
MC
231 if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
232 /*
233 * For the ECDH ciphersuites when the client sends its ECDH
234 * pub key in a certificate, the CertificateVerify message is
235 * not sent. Also for GOST ciphersuites when the client uses
236 * its key from the certificate for key exchange.
237 */
238 st->hand_state = TLS_ST_SR_CHANGE;
239 return 1;
240 }
241 } else {
242 if (mt == SSL3_MT_CERTIFICATE_VERIFY) {
243 st->hand_state = TLS_ST_SR_CERT_VRFY;
244 return 1;
245 }
246 }
247 break;
248
249 case TLS_ST_SR_CERT_VRFY:
250 if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
251 st->hand_state = TLS_ST_SR_CHANGE;
252 return 1;
253 }
254 break;
255
256 case TLS_ST_SR_CHANGE:
257#ifndef OPENSSL_NO_NEXTPROTONEG
258 if (s->s3->next_proto_neg_seen) {
259 if (mt == SSL3_MT_NEXT_PROTO) {
260 st->hand_state = TLS_ST_SR_NEXT_PROTO;
261 return 1;
262 }
263 } else {
264#endif
265 if (mt == SSL3_MT_FINISHED) {
266 st->hand_state = TLS_ST_SR_FINISHED;
267 return 1;
268 }
269#ifndef OPENSSL_NO_NEXTPROTONEG
270 }
271#endif
272 break;
273
274#ifndef OPENSSL_NO_NEXTPROTONEG
275 case TLS_ST_SR_NEXT_PROTO:
276 if (mt == SSL3_MT_FINISHED) {
277 st->hand_state = TLS_ST_SR_FINISHED;
278 return 1;
279 }
280 break;
281#endif
282
283 case TLS_ST_SW_FINISHED:
284 if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
285 st->hand_state = TLS_ST_SR_CHANGE;
286 return 1;
287 }
288 break;
61ae935a
MC
289 }
290
5abeaf35 291 err:
61ae935a 292 /* No valid transition found */
672f3337 293 ssl3_send_alert(s, SSL3_AL_FATAL, SSL3_AD_UNEXPECTED_MESSAGE);
340a2828 294 SSLerr(SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION, SSL_R_UNEXPECTED_MESSAGE);
61ae935a
MC
295 return 0;
296}
297
298/*
299 * Should we send a ServerKeyExchange message?
300 *
301 * Valid return values are:
302 * 1: Yes
303 * 0: No
304 */
bb3e20cf 305static int send_server_key_exchange(SSL *s)
61ae935a
MC
306{
307 unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
308
309 /*
361a1191 310 * only send a ServerKeyExchange if DH or fortezza but we have a
61ae935a
MC
311 * sign only certificate PSK: may send PSK identity hints For
312 * ECC ciphersuites, we send a serverKeyExchange message only if
313 * the cipher suite is either ECDH-anon or ECDHE. In other cases,
314 * the server certificate contains the server's public key for
315 * key exchange.
316 */
a230b26e 317 if (alg_k & (SSL_kDHE | SSL_kECDHE)
61ae935a
MC
318 /*
319 * PSK: send ServerKeyExchange if PSK identity hint if
320 * provided
321 */
322#ifndef OPENSSL_NO_PSK
323 /* Only send SKE if we have identity hint for plain PSK */
324 || ((alg_k & (SSL_kPSK | SSL_kRSAPSK))
325 && s->cert->psk_identity_hint)
326 /* For other PSK always send SKE */
327 || (alg_k & (SSL_PSK & (SSL_kDHEPSK | SSL_kECDHEPSK)))
328#endif
329#ifndef OPENSSL_NO_SRP
330 /* SRP: send ServerKeyExchange */
331 || (alg_k & SSL_kSRP)
332#endif
a230b26e 333 ) {
61ae935a
MC
334 return 1;
335 }
336
337 return 0;
338}
339
340/*
341 * Should we send a CertificateRequest message?
342 *
343 * Valid return values are:
344 * 1: Yes
345 * 0: No
346 */
bb3e20cf 347static int send_certificate_request(SSL *s)
61ae935a
MC
348{
349 if (
350 /* don't request cert unless asked for it: */
351 s->verify_mode & SSL_VERIFY_PEER
352 /*
353 * if SSL_VERIFY_CLIENT_ONCE is set, don't request cert
354 * during re-negotiation:
355 */
356 && ((s->session->peer == NULL) ||
357 !(s->verify_mode & SSL_VERIFY_CLIENT_ONCE))
358 /*
359 * never request cert in anonymous ciphersuites (see
360 * section "Certificate request" in SSL 3 drafts and in
361 * RFC 2246):
362 */
363 && (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)
a230b26e
EK
364 /*
365 * ... except when the application insists on
366 * verification (against the specs, but statem_clnt.c accepts
367 * this for SSL 3)
368 */
61ae935a
MC
369 || (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))
370 /* don't request certificate for SRP auth */
371 && !(s->s3->tmp.new_cipher->algorithm_auth & SSL_aSRP)
372 /*
373 * With normal PSK Certificates and Certificate Requests
374 * are omitted
375 */
b7fa1f98 376 && !(s->s3->tmp.new_cipher->algorithm_auth & SSL_aPSK)) {
61ae935a
MC
377 return 1;
378 }
379
380 return 0;
381}
382
383/*
0f1e51ea
MC
384 * ossl_statem_server13_write_transition() works out what handshake state to
385 * move to next when a TLSv1.3 server is writing messages to be sent to the
386 * client.
0f1e51ea
MC
387 */
388static WRITE_TRAN ossl_statem_server13_write_transition(SSL *s)
389{
390 OSSL_STATEM *st = &s->statem;
391
94ed2c67
MC
392 /*
393 * TODO(TLS1.3): This is still based on the TLSv1.2 state machine. Over time
394 * we will update this to look more like real TLSv1.3
395 */
396
0f1e51ea
MC
397 /*
398 * No case for TLS_ST_BEFORE, because at that stage we have not negotiated
399 * TLSv1.3 yet, so that is handled by ossl_statem_server_write_transition()
400 */
401
402 switch (st->hand_state) {
403 default:
404 /* Shouldn't happen */
405 return WRITE_TRAN_ERROR;
406
407 case TLS_ST_SR_CLNT_HELLO:
408 st->hand_state = TLS_ST_SW_SRVR_HELLO;
409 return WRITE_TRAN_CONTINUE;
410
411 case TLS_ST_SW_SRVR_HELLO:
e46f2334
MC
412 st->hand_state = TLS_ST_SW_ENCRYPTED_EXTENSIONS;
413 return WRITE_TRAN_CONTINUE;
414
415 case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
94ed2c67 416 if (s->hit)
92760c21
MC
417 st->hand_state = TLS_ST_SW_FINISHED;
418 else if (send_certificate_request(s))
419 st->hand_state = TLS_ST_SW_CERT_REQ;
94ed2c67 420 else
0f1e51ea 421 st->hand_state = TLS_ST_SW_CERT;
94ed2c67 422
0f1e51ea
MC
423 return WRITE_TRAN_CONTINUE;
424
0f1e51ea 425 case TLS_ST_SW_CERT_REQ:
92760c21 426 st->hand_state = TLS_ST_SW_CERT;
0f1e51ea
MC
427 return WRITE_TRAN_CONTINUE;
428
92760c21 429 case TLS_ST_SW_CERT:
f5ca0b04
MC
430 st->hand_state = s->tlsext_status_expected ? TLS_ST_SW_CERT_STATUS
431 : TLS_ST_SW_FINISHED;
0f1e51ea
MC
432 return WRITE_TRAN_CONTINUE;
433
92760c21 434 case TLS_ST_SW_CERT_STATUS:
0f1e51ea
MC
435 st->hand_state = TLS_ST_SW_FINISHED;
436 return WRITE_TRAN_CONTINUE;
437
438 case TLS_ST_SW_FINISHED:
92760c21 439 return WRITE_TRAN_FINISHED;
94ed2c67 440
92760c21 441 case TLS_ST_SR_FINISHED:
0f1e51ea
MC
442 st->hand_state = TLS_ST_OK;
443 ossl_statem_set_in_init(s, 0);
444 return WRITE_TRAN_CONTINUE;
445 }
446}
447
448/*
449 * ossl_statem_server_write_transition() works out what handshake state to move
450 * to next when the server is writing messages to be sent to the client.
61ae935a 451 */
8481f583 452WRITE_TRAN ossl_statem_server_write_transition(SSL *s)
61ae935a 453{
d6f1a6e9 454 OSSL_STATEM *st = &s->statem;
61ae935a 455
0f1e51ea
MC
456 /*
457 * Note that before the ClientHello we don't know what version we are going
458 * to negotiate yet, so we don't take this branch until later
459 */
460
f5ca0b04 461 if (SSL_IS_TLS13(s))
0f1e51ea
MC
462 return ossl_statem_server13_write_transition(s);
463
e8aa8b6c 464 switch (st->hand_state) {
f3b3d7f0
RS
465 default:
466 /* Shouldn't happen */
467 return WRITE_TRAN_ERROR;
468
e8aa8b6c 469 case TLS_ST_BEFORE:
a230b26e 470 /* Just go straight to trying to read from the client */
e8aa8b6c 471 return WRITE_TRAN_FINISHED;
61ae935a 472
e8aa8b6c
F
473 case TLS_ST_OK:
474 /* We must be trying to renegotiate */
475 st->hand_state = TLS_ST_SW_HELLO_REQ;
476 return WRITE_TRAN_CONTINUE;
61ae935a 477
e8aa8b6c
F
478 case TLS_ST_SW_HELLO_REQ:
479 st->hand_state = TLS_ST_OK;
480 ossl_statem_set_in_init(s, 0);
481 return WRITE_TRAN_CONTINUE;
61ae935a 482
e8aa8b6c
F
483 case TLS_ST_SR_CLNT_HELLO:
484 if (SSL_IS_DTLS(s) && !s->d1->cookie_verified
a230b26e 485 && (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE))
e8aa8b6c
F
486 st->hand_state = DTLS_ST_SW_HELLO_VERIFY_REQUEST;
487 else
488 st->hand_state = TLS_ST_SW_SRVR_HELLO;
489 return WRITE_TRAN_CONTINUE;
61ae935a 490
e8aa8b6c
F
491 case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
492 return WRITE_TRAN_FINISHED;
61ae935a 493
e8aa8b6c
F
494 case TLS_ST_SW_SRVR_HELLO:
495 if (s->hit) {
496 if (s->tlsext_ticket_expected)
497 st->hand_state = TLS_ST_SW_SESSION_TICKET;
498 else
499 st->hand_state = TLS_ST_SW_CHANGE;
500 } else {
501 /* Check if it is anon DH or anon ECDH, */
502 /* normal PSK or SRP */
503 if (!(s->s3->tmp.new_cipher->algorithm_auth &
a230b26e 504 (SSL_aNULL | SSL_aSRP | SSL_aPSK))) {
e8aa8b6c
F
505 st->hand_state = TLS_ST_SW_CERT;
506 } else if (send_server_key_exchange(s)) {
61ae935a 507 st->hand_state = TLS_ST_SW_KEY_EXCH;
e8aa8b6c 508 } else if (send_certificate_request(s)) {
61ae935a 509 st->hand_state = TLS_ST_SW_CERT_REQ;
e8aa8b6c
F
510 } else {
511 st->hand_state = TLS_ST_SW_SRVR_DONE;
61ae935a 512 }
e8aa8b6c
F
513 }
514 return WRITE_TRAN_CONTINUE;
61ae935a 515
e8aa8b6c
F
516 case TLS_ST_SW_CERT:
517 if (s->tlsext_status_expected) {
518 st->hand_state = TLS_ST_SW_CERT_STATUS;
61ae935a 519 return WRITE_TRAN_CONTINUE;
e8aa8b6c
F
520 }
521 /* Fall through */
61ae935a 522
e8aa8b6c
F
523 case TLS_ST_SW_CERT_STATUS:
524 if (send_server_key_exchange(s)) {
525 st->hand_state = TLS_ST_SW_KEY_EXCH;
61ae935a 526 return WRITE_TRAN_CONTINUE;
e8aa8b6c
F
527 }
528 /* Fall through */
61ae935a 529
e8aa8b6c
F
530 case TLS_ST_SW_KEY_EXCH:
531 if (send_certificate_request(s)) {
532 st->hand_state = TLS_ST_SW_CERT_REQ;
61ae935a 533 return WRITE_TRAN_CONTINUE;
e8aa8b6c
F
534 }
535 /* Fall through */
61ae935a 536
e8aa8b6c
F
537 case TLS_ST_SW_CERT_REQ:
538 st->hand_state = TLS_ST_SW_SRVR_DONE;
539 return WRITE_TRAN_CONTINUE;
61ae935a 540
e8aa8b6c
F
541 case TLS_ST_SW_SRVR_DONE:
542 return WRITE_TRAN_FINISHED;
543
544 case TLS_ST_SR_FINISHED:
545 if (s->hit) {
61ae935a 546 st->hand_state = TLS_ST_OK;
fe3a3291 547 ossl_statem_set_in_init(s, 0);
61ae935a 548 return WRITE_TRAN_CONTINUE;
e8aa8b6c
F
549 } else if (s->tlsext_ticket_expected) {
550 st->hand_state = TLS_ST_SW_SESSION_TICKET;
551 } else {
552 st->hand_state = TLS_ST_SW_CHANGE;
553 }
554 return WRITE_TRAN_CONTINUE;
555
556 case TLS_ST_SW_SESSION_TICKET:
557 st->hand_state = TLS_ST_SW_CHANGE;
558 return WRITE_TRAN_CONTINUE;
61ae935a 559
e8aa8b6c
F
560 case TLS_ST_SW_CHANGE:
561 st->hand_state = TLS_ST_SW_FINISHED;
562 return WRITE_TRAN_CONTINUE;
563
564 case TLS_ST_SW_FINISHED:
565 if (s->hit) {
566 return WRITE_TRAN_FINISHED;
567 }
568 st->hand_state = TLS_ST_OK;
569 ossl_statem_set_in_init(s, 0);
570 return WRITE_TRAN_CONTINUE;
61ae935a
MC
571 }
572}
573
574/*
575 * Perform any pre work that needs to be done prior to sending a message from
576 * the server to the client.
577 */
8481f583 578WORK_STATE ossl_statem_server_pre_work(SSL *s, WORK_STATE wst)
61ae935a 579{
d6f1a6e9 580 OSSL_STATEM *st = &s->statem;
61ae935a 581
e8aa8b6c 582 switch (st->hand_state) {
f3b3d7f0
RS
583 default:
584 /* No pre work to be done */
585 break;
586
61ae935a
MC
587 case TLS_ST_SW_HELLO_REQ:
588 s->shutdown = 0;
589 if (SSL_IS_DTLS(s))
f5c7f5df 590 dtls1_clear_sent_buffer(s);
61ae935a
MC
591 break;
592
593 case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
594 s->shutdown = 0;
595 if (SSL_IS_DTLS(s)) {
f5c7f5df 596 dtls1_clear_sent_buffer(s);
61ae935a
MC
597 /* We don't buffer this message so don't use the timer */
598 st->use_timer = 0;
599 }
600 break;
601
602 case TLS_ST_SW_SRVR_HELLO:
603 if (SSL_IS_DTLS(s)) {
604 /*
605 * Messages we write from now on should be bufferred and
606 * retransmitted if necessary, so we need to use the timer now
607 */
608 st->use_timer = 1;
609 }
610 break;
611
612 case TLS_ST_SW_SRVR_DONE:
613#ifndef OPENSSL_NO_SCTP
614 if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s)))
615 return dtls_wait_for_dry(s);
616#endif
617 return WORK_FINISHED_CONTINUE;
618
619 case TLS_ST_SW_SESSION_TICKET:
620 if (SSL_IS_DTLS(s)) {
621 /*
622 * We're into the last flight. We don't retransmit the last flight
623 * unless we need to, so we don't use the timer
624 */
625 st->use_timer = 0;
626 }
627 break;
628
629 case TLS_ST_SW_CHANGE:
630 s->session->cipher = s->s3->tmp.new_cipher;
631 if (!s->method->ssl3_enc->setup_key_block(s)) {
fe3a3291 632 ossl_statem_set_error(s);
61ae935a
MC
633 return WORK_ERROR;
634 }
635 if (SSL_IS_DTLS(s)) {
636 /*
637 * We're into the last flight. We don't retransmit the last flight
638 * unless we need to, so we don't use the timer. This might have
639 * already been set to 0 if we sent a NewSessionTicket message,
640 * but we'll set it again here in case we didn't.
641 */
642 st->use_timer = 0;
643 }
644 return WORK_FINISHED_CONTINUE;
645
646 case TLS_ST_OK:
647 return tls_finish_handshake(s, wst);
61ae935a
MC
648 }
649
650 return WORK_FINISHED_CONTINUE;
651}
652
653/*
654 * Perform any work that needs to be done after sending a message from the
655 * server to the client.
656 */
8481f583 657WORK_STATE ossl_statem_server_post_work(SSL *s, WORK_STATE wst)
61ae935a 658{
d6f1a6e9 659 OSSL_STATEM *st = &s->statem;
61ae935a
MC
660
661 s->init_num = 0;
662
e8aa8b6c 663 switch (st->hand_state) {
f3b3d7f0
RS
664 default:
665 /* No post work to be done */
666 break;
667
61ae935a
MC
668 case TLS_ST_SW_HELLO_REQ:
669 if (statem_flush(s) != 1)
670 return WORK_MORE_A;
2c4a056f
MC
671 if (!ssl3_init_finished_mac(s)) {
672 ossl_statem_set_error(s);
673 return WORK_ERROR;
674 }
61ae935a
MC
675 break;
676
677 case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
678 if (statem_flush(s) != 1)
679 return WORK_MORE_A;
680 /* HelloVerifyRequest resets Finished MAC */
2c4a056f
MC
681 if (s->version != DTLS1_BAD_VER && !ssl3_init_finished_mac(s)) {
682 ossl_statem_set_error(s);
683 return WORK_ERROR;
684 }
61ae935a
MC
685 /*
686 * The next message should be another ClientHello which we need to
687 * treat like it was the first packet
688 */
689 s->first_packet = 1;
690 break;
691
692 case TLS_ST_SW_SRVR_HELLO:
693#ifndef OPENSSL_NO_SCTP
694 if (SSL_IS_DTLS(s) && s->hit) {
695 unsigned char sctpauthkey[64];
696 char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
697
698 /*
699 * Add new shared key for SCTP-Auth, will be ignored if no
700 * SCTP used.
701 */
141eb8c6
MC
702 memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
703 sizeof(DTLS1_SCTP_AUTH_LABEL));
61ae935a
MC
704
705 if (SSL_export_keying_material(s, sctpauthkey,
a230b26e
EK
706 sizeof(sctpauthkey), labelbuffer,
707 sizeof(labelbuffer), NULL, 0,
708 0) <= 0) {
fe3a3291 709 ossl_statem_set_error(s);
61ae935a
MC
710 return WORK_ERROR;
711 }
712
713 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
714 sizeof(sctpauthkey), sctpauthkey);
715 }
716#endif
92760c21
MC
717 /*
718 * TODO(TLS1.3): This actually causes a problem. We don't yet know
719 * whether the next record we are going to receive is an unencrypted
720 * alert, or an encrypted handshake message. We're going to need
721 * something clever in the record layer for this.
722 */
723 if (SSL_IS_TLS13(s)) {
724 if (!s->method->ssl3_enc->setup_key_block(s)
725 || !s->method->ssl3_enc->change_cipher_state(s,
726 SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_SERVER_WRITE)
727 || !s->method->ssl3_enc->change_cipher_state(s,
728 SSL3_CC_HANDSHAKE |SSL3_CHANGE_CIPHER_SERVER_READ))
729 return WORK_ERROR;
730 }
61ae935a
MC
731 break;
732
733 case TLS_ST_SW_CHANGE:
734#ifndef OPENSSL_NO_SCTP
735 if (SSL_IS_DTLS(s) && !s->hit) {
736 /*
737 * Change to new shared key of SCTP-Auth, will be ignored if
738 * no SCTP used.
739 */
740 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
741 0, NULL);
742 }
743#endif
744 if (!s->method->ssl3_enc->change_cipher_state(s,
a230b26e
EK
745 SSL3_CHANGE_CIPHER_SERVER_WRITE))
746 {
fe3a3291 747 ossl_statem_set_error(s);
61ae935a
MC
748 return WORK_ERROR;
749 }
750
751 if (SSL_IS_DTLS(s))
752 dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
753 break;
754
755 case TLS_ST_SW_SRVR_DONE:
756 if (statem_flush(s) != 1)
757 return WORK_MORE_A;
758 break;
759
760 case TLS_ST_SW_FINISHED:
761 if (statem_flush(s) != 1)
762 return WORK_MORE_A;
763#ifndef OPENSSL_NO_SCTP
764 if (SSL_IS_DTLS(s) && s->hit) {
765 /*
766 * Change to new shared key of SCTP-Auth, will be ignored if
767 * no SCTP used.
768 */
769 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
770 0, NULL);
771 }
772#endif
92760c21
MC
773 if (SSL_IS_TLS13(s)) {
774 if (!s->method->ssl3_enc->generate_master_secret(s,
775 s->session->master_key, s->handshake_secret, 0,
776 &s->session->master_key_length)
777 || !s->method->ssl3_enc->change_cipher_state(s,
778 SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_SERVER_WRITE))
779 return WORK_ERROR;
780 }
61ae935a 781 break;
61ae935a
MC
782 }
783
784 return WORK_FINISHED_CONTINUE;
785}
786
787/*
6392fb8e
MC
788 * Get the message construction function and message type for sending from the
789 * server
61ae935a
MC
790 *
791 * Valid return values are:
792 * 1: Success
793 * 0: Error
794 */
6392fb8e 795int ossl_statem_server_construct_message(SSL *s, WPACKET *pkt,
a15c953f 796 confunc_f *confunc, int *mt)
61ae935a 797{
d6f1a6e9 798 OSSL_STATEM *st = &s->statem;
61ae935a 799
4a01c59f
MC
800 switch (st->hand_state) {
801 default:
802 /* Shouldn't happen */
803 return 0;
804
805 case TLS_ST_SW_CHANGE:
5923ad4b 806 if (SSL_IS_DTLS(s))
6392fb8e 807 *confunc = dtls_construct_change_cipher_spec;
4a01c59f 808 else
6392fb8e
MC
809 *confunc = tls_construct_change_cipher_spec;
810 *mt = SSL3_MT_CHANGE_CIPHER_SPEC;
4a01c59f 811 break;
f3b3d7f0 812
4a01c59f 813 case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
6392fb8e
MC
814 *confunc = dtls_construct_hello_verify_request;
815 *mt = DTLS1_MT_HELLO_VERIFY_REQUEST;
4a01c59f 816 break;
61ae935a 817
4a01c59f
MC
818 case TLS_ST_SW_HELLO_REQ:
819 /* No construction function needed */
6392fb8e
MC
820 *confunc = NULL;
821 *mt = SSL3_MT_HELLO_REQUEST;
4a01c59f 822 break;
61ae935a 823
4a01c59f 824 case TLS_ST_SW_SRVR_HELLO:
6392fb8e
MC
825 *confunc = tls_construct_server_hello;
826 *mt = SSL3_MT_SERVER_HELLO;
4a01c59f 827 break;
61ae935a 828
4a01c59f 829 case TLS_ST_SW_CERT:
6392fb8e
MC
830 *confunc = tls_construct_server_certificate;
831 *mt = SSL3_MT_CERTIFICATE;
4a01c59f 832 break;
61ae935a 833
4a01c59f 834 case TLS_ST_SW_KEY_EXCH:
6392fb8e
MC
835 *confunc = tls_construct_server_key_exchange;
836 *mt = SSL3_MT_SERVER_KEY_EXCHANGE;
4a01c59f 837 break;
61ae935a 838
4a01c59f 839 case TLS_ST_SW_CERT_REQ:
6392fb8e
MC
840 *confunc = tls_construct_certificate_request;
841 *mt = SSL3_MT_CERTIFICATE_REQUEST;
4a01c59f 842 break;
61ae935a 843
4a01c59f 844 case TLS_ST_SW_SRVR_DONE:
6392fb8e
MC
845 *confunc = tls_construct_server_done;
846 *mt = SSL3_MT_SERVER_DONE;
4a01c59f 847 break;
61ae935a 848
4a01c59f 849 case TLS_ST_SW_SESSION_TICKET:
6392fb8e
MC
850 *confunc = tls_construct_new_session_ticket;
851 *mt = SSL3_MT_NEWSESSION_TICKET;
4a01c59f 852 break;
61ae935a 853
4a01c59f 854 case TLS_ST_SW_CERT_STATUS:
6392fb8e
MC
855 *confunc = tls_construct_cert_status;
856 *mt = SSL3_MT_CERTIFICATE_STATUS;
4a01c59f 857 break;
61ae935a 858
4a01c59f 859 case TLS_ST_SW_FINISHED:
6392fb8e
MC
860 *confunc = tls_construct_finished;
861 *mt = SSL3_MT_FINISHED;
4a01c59f 862 break;
e46f2334
MC
863
864 case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
865 *confunc = tls_construct_encrypted_extensions;
866 *mt = SSL3_MT_ENCRYPTED_EXTENSIONS;
867 break;
4a01c59f 868 }
61ae935a 869
5923ad4b 870 return 1;
61ae935a
MC
871}
872
8a18bc25
AG
873/*
874 * Maximum size (excluding the Handshake header) of a ClientHello message,
875 * calculated as follows:
876 *
877 * 2 + # client_version
878 * 32 + # only valid length for random
879 * 1 + # length of session_id
880 * 32 + # maximum size for session_id
881 * 2 + # length of cipher suites
882 * 2^16-2 + # maximum length of cipher suites array
883 * 1 + # length of compression_methods
884 * 2^8-1 + # maximum length of compression methods
885 * 2 + # length of extensions
886 * 2^16-1 # maximum length of extensions
887 */
888#define CLIENT_HELLO_MAX_LENGTH 131396
889
61ae935a
MC
890#define CLIENT_KEY_EXCH_MAX_LENGTH 2048
891#define NEXT_PROTO_MAX_LENGTH 514
892
893/*
894 * Returns the maximum allowed length for the current message that we are
895 * reading. Excludes the message header.
896 */
eda75751 897size_t ossl_statem_server_max_message_size(SSL *s)
61ae935a 898{
d6f1a6e9 899 OSSL_STATEM *st = &s->statem;
61ae935a 900
e8aa8b6c 901 switch (st->hand_state) {
f3b3d7f0
RS
902 default:
903 /* Shouldn't happen */
904 return 0;
905
61ae935a 906 case TLS_ST_SR_CLNT_HELLO:
8a18bc25 907 return CLIENT_HELLO_MAX_LENGTH;
61ae935a
MC
908
909 case TLS_ST_SR_CERT:
910 return s->max_cert_list;
911
912 case TLS_ST_SR_KEY_EXCH:
913 return CLIENT_KEY_EXCH_MAX_LENGTH;
914
915 case TLS_ST_SR_CERT_VRFY:
916 return SSL3_RT_MAX_PLAIN_LENGTH;
917
918#ifndef OPENSSL_NO_NEXTPROTONEG
919 case TLS_ST_SR_NEXT_PROTO:
920 return NEXT_PROTO_MAX_LENGTH;
921#endif
922
923 case TLS_ST_SR_CHANGE:
924 return CCS_MAX_LENGTH;
925
926 case TLS_ST_SR_FINISHED:
927 return FINISHED_MAX_LENGTH;
61ae935a 928 }
61ae935a
MC
929}
930
931/*
932 * Process a message that the server has received from the client.
933 */
8481f583 934MSG_PROCESS_RETURN ossl_statem_server_process_message(SSL *s, PACKET *pkt)
61ae935a 935{
d6f1a6e9 936 OSSL_STATEM *st = &s->statem;
61ae935a 937
e8aa8b6c 938 switch (st->hand_state) {
f3b3d7f0
RS
939 default:
940 /* Shouldn't happen */
941 return MSG_PROCESS_ERROR;
942
61ae935a
MC
943 case TLS_ST_SR_CLNT_HELLO:
944 return tls_process_client_hello(s, pkt);
945
946 case TLS_ST_SR_CERT:
947 return tls_process_client_certificate(s, pkt);
948
949 case TLS_ST_SR_KEY_EXCH:
950 return tls_process_client_key_exchange(s, pkt);
951
952 case TLS_ST_SR_CERT_VRFY:
953 return tls_process_cert_verify(s, pkt);
954
955#ifndef OPENSSL_NO_NEXTPROTONEG
956 case TLS_ST_SR_NEXT_PROTO:
957 return tls_process_next_proto(s, pkt);
958#endif
959
960 case TLS_ST_SR_CHANGE:
961 return tls_process_change_cipher_spec(s, pkt);
962
963 case TLS_ST_SR_FINISHED:
964 return tls_process_finished(s, pkt);
61ae935a 965 }
61ae935a
MC
966}
967
968/*
969 * Perform any further processing required following the receipt of a message
970 * from the client
971 */
8481f583 972WORK_STATE ossl_statem_server_post_process_message(SSL *s, WORK_STATE wst)
61ae935a 973{
d6f1a6e9 974 OSSL_STATEM *st = &s->statem;
61ae935a 975
e8aa8b6c 976 switch (st->hand_state) {
f3b3d7f0
RS
977 default:
978 /* Shouldn't happen */
979 return WORK_ERROR;
980
61ae935a
MC
981 case TLS_ST_SR_CLNT_HELLO:
982 return tls_post_process_client_hello(s, wst);
983
984 case TLS_ST_SR_KEY_EXCH:
985 return tls_post_process_client_key_exchange(s, wst);
986
987 case TLS_ST_SR_CERT_VRFY:
988#ifndef OPENSSL_NO_SCTP
a230b26e
EK
989 if ( /* Is this SCTP? */
990 BIO_dgram_is_sctp(SSL_get_wbio(s))
991 /* Are we renegotiating? */
992 && s->renegotiate && BIO_dgram_sctp_msg_waiting(SSL_get_rbio(s))) {
61ae935a
MC
993 s->s3->in_read_app_data = 2;
994 s->rwstate = SSL_READING;
995 BIO_clear_retry_flags(SSL_get_rbio(s));
996 BIO_set_retry_read(SSL_get_rbio(s));
d99b0691 997 ossl_statem_set_sctp_read_sock(s, 1);
61ae935a
MC
998 return WORK_MORE_A;
999 } else {
d99b0691 1000 ossl_statem_set_sctp_read_sock(s, 0);
61ae935a
MC
1001 }
1002#endif
1003 return WORK_FINISHED_CONTINUE;
61ae935a 1004 }
92760c21 1005 return WORK_FINISHED_CONTINUE;
61ae935a
MC
1006}
1007
edc032b5 1008#ifndef OPENSSL_NO_SRP
71fa4513 1009static int ssl_check_srp_ext_ClientHello(SSL *s, int *al)
0f113f3e
MC
1010{
1011 int ret = SSL_ERROR_NONE;
1012
1013 *al = SSL_AD_UNRECOGNIZED_NAME;
1014
1015 if ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) &&
1016 (s->srp_ctx.TLS_ext_srp_username_callback != NULL)) {
1017 if (s->srp_ctx.login == NULL) {
1018 /*
1019 * RFC 5054 says SHOULD reject, we do so if There is no srp
1020 * login name
1021 */
1022 ret = SSL3_AL_FATAL;
1023 *al = SSL_AD_UNKNOWN_PSK_IDENTITY;
1024 } else {
1025 ret = SSL_srp_server_param_with_username(s, al);
1026 }
1027 }
1028 return ret;
1029}
edc032b5
BL
1030#endif
1031
c536b6be 1032int dtls_raw_hello_verify_request(WPACKET *pkt, unsigned char *cookie,
cb150cbc 1033 size_t cookie_len)
8ba708e5 1034{
8ba708e5 1035 /* Always use DTLS 1.0 version: see RFC 6347 */
c536b6be
MC
1036 if (!WPACKET_put_bytes_u16(pkt, DTLS1_VERSION)
1037 || !WPACKET_sub_memcpy_u8(pkt, cookie, cookie_len))
1038 return 0;
8ba708e5 1039
c536b6be 1040 return 1;
8ba708e5
MC
1041}
1042
7cea05dc 1043int dtls_construct_hello_verify_request(SSL *s, WPACKET *pkt)
8ba708e5 1044{
cb150cbc 1045 unsigned int cookie_leni;
8ba708e5
MC
1046 if (s->ctx->app_gen_cookie_cb == NULL ||
1047 s->ctx->app_gen_cookie_cb(s, s->d1->cookie,
cb150cbc
MC
1048 &cookie_leni) == 0 ||
1049 cookie_leni > 255) {
f0659bdb 1050 SSLerr(SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST,
8ba708e5 1051 SSL_R_COOKIE_GEN_CALLBACK_FAILURE);
8ba708e5
MC
1052 return 0;
1053 }
cb150cbc 1054 s->d1->cookie_len = cookie_leni;
8ba708e5 1055
4a01c59f
MC
1056 if (!dtls_raw_hello_verify_request(pkt, s->d1->cookie,
1057 s->d1->cookie_len)) {
c536b6be 1058 SSLerr(SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST, ERR_R_INTERNAL_ERROR);
c536b6be
MC
1059 return 0;
1060 }
8ba708e5 1061
8ba708e5
MC
1062 return 1;
1063}
1064
6b473aca
MC
1065#ifndef OPENSSL_NO_EC
1066/*-
1067 * ssl_check_for_safari attempts to fingerprint Safari using OS X
1068 * SecureTransport using the TLS extension block in |hello|.
1069 * Safari, since 10.6, sends exactly these extensions, in this order:
1070 * SNI,
1071 * elliptic_curves
1072 * ec_point_formats
1073 *
1074 * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
1075 * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
1076 * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
1077 * 10.8..10.8.3 (which don't work).
1078 */
1079static void ssl_check_for_safari(SSL *s, const CLIENTHELLO_MSG *hello)
1080{
1081 unsigned int type;
1082 PACKET sni, tmppkt;
1083 size_t ext_len;
1084
1085 static const unsigned char kSafariExtensionsBlock[] = {
1086 0x00, 0x0a, /* elliptic_curves extension */
1087 0x00, 0x08, /* 8 bytes */
1088 0x00, 0x06, /* 6 bytes of curve ids */
1089 0x00, 0x17, /* P-256 */
1090 0x00, 0x18, /* P-384 */
1091 0x00, 0x19, /* P-521 */
1092
1093 0x00, 0x0b, /* ec_point_formats */
1094 0x00, 0x02, /* 2 bytes */
1095 0x01, /* 1 point format */
1096 0x00, /* uncompressed */
1097 /* The following is only present in TLS 1.2 */
1098 0x00, 0x0d, /* signature_algorithms */
1099 0x00, 0x0c, /* 12 bytes */
1100 0x00, 0x0a, /* 10 bytes */
1101 0x05, 0x01, /* SHA-384/RSA */
1102 0x04, 0x01, /* SHA-256/RSA */
1103 0x02, 0x01, /* SHA-1/RSA */
1104 0x04, 0x03, /* SHA-256/ECDSA */
1105 0x02, 0x03, /* SHA-1/ECDSA */
1106 };
1107
1108 /* Length of the common prefix (first two extensions). */
1109 static const size_t kSafariCommonExtensionsLength = 18;
1110
1111 tmppkt = hello->extensions;
1112
1113 if (!PACKET_forward(&tmppkt, 2)
1114 || !PACKET_get_net_2(&tmppkt, &type)
1115 || !PACKET_get_length_prefixed_2(&tmppkt, &sni)) {
1116 return;
1117 }
1118
1119 if (type != TLSEXT_TYPE_server_name)
1120 return;
1121
1122 ext_len = TLS1_get_client_version(s) >= TLS1_2_VERSION ?
1123 sizeof(kSafariExtensionsBlock) : kSafariCommonExtensionsLength;
1124
1125 s->s3->is_probably_safari = PACKET_equal(&tmppkt, kSafariExtensionsBlock,
1126 ext_len);
1127}
1128#endif /* !OPENSSL_NO_EC */
1129
1130/*
1131 * Process all remaining ClientHello extensions that we collected earlier and
1132 * haven't already processed.
1133 *
1134 * Behaviour upon resumption is extension-specific. If the extension has no
1135 * effect during resumption, it is parsed (to verify its format) but otherwise
1136 * ignored. Returns 1 on success and 0 on failure. Upon failure, sets |al| to
1137 * the appropriate alert.
1138 */
1139static int tls_scan_clienthello_tlsext(SSL *s, CLIENTHELLO_MSG *hello, int *al)
1140{
1141 /* Reset various flags that might get set by extensions during parsing */
1142 s->servername_done = 0;
1143 s->tlsext_status_type = -1;
1144#ifndef OPENSSL_NO_NEXTPROTONEG
1145 s->s3->next_proto_neg_seen = 0;
1146#endif
1147
1148 OPENSSL_free(s->s3->alpn_selected);
1149 s->s3->alpn_selected = NULL;
1150 s->s3->alpn_selected_len = 0;
1151 OPENSSL_free(s->s3->alpn_proposed);
1152 s->s3->alpn_proposed = NULL;
1153 s->s3->alpn_proposed_len = 0;
1154
1155#ifndef OPENSSL_NO_EC
1156 if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
1157 ssl_check_for_safari(s, hello);
1158#endif /* !OPENSSL_NO_EC */
1159
1160 /* Clear any signature algorithms extension received */
1161 OPENSSL_free(s->s3->tmp.peer_sigalgs);
1162 s->s3->tmp.peer_sigalgs = NULL;
1163 s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
1164
1165#ifndef OPENSSL_NO_SRP
1166 OPENSSL_free(s->srp_ctx.login);
1167 s->srp_ctx.login = NULL;
1168#endif
1169
1170 s->srtp_profile = NULL;
1171
1172 /*
1173 * We process the supported_groups extension first so that is done before
1174 * we get to key_share which needs to use the information in it.
1175 */
4b299b8e 1176 if (!tls_parse_extension(s, TLSEXT_TYPE_supported_groups, EXT_CLIENT_HELLO,
6b473aca
MC
1177 hello->pre_proc_exts, hello->num_extensions, al)) {
1178 return 0;
1179 }
1180
1181 /* Need RI if renegotiating */
1182 if (s->renegotiate
1183 && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)
1184 && tls_get_extension_by_type(hello->pre_proc_exts,
1185 hello->num_extensions,
1186 TLSEXT_TYPE_renegotiate) == NULL) {
1187 *al = SSL_AD_HANDSHAKE_FAILURE;
4b299b8e 1188 SSLerr(SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT,
6b473aca
MC
1189 SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
1190 return 0;
1191 }
1192
4b299b8e 1193 return tls_parse_all_extensions(s, EXT_CLIENT_HELLO, hello->pre_proc_exts,
6b473aca
MC
1194 hello->num_extensions, al);
1195}
1196
1197/*
1198 * Check the results of extension parsing. Currently just calls the servername
1199 * callback. Returns 1 for success or 0 for failure.
1200 */
1201static int tls_check_clienthello_tlsext(SSL *s)
1202{
1203 int ret = SSL_TLSEXT_ERR_NOACK;
1204 int al = SSL_AD_UNRECOGNIZED_NAME;
1205
1206 if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
1207 ret = s->ctx->tlsext_servername_callback(s, &al,
1208 s->ctx->tlsext_servername_arg);
1209 else if (s->initial_ctx != NULL
1210 && s->initial_ctx->tlsext_servername_callback != 0)
1211 ret = s->initial_ctx->tlsext_servername_callback(s, &al,
1212 s->initial_ctx->tlsext_servername_arg);
1213
1214 switch (ret) {
1215 case SSL_TLSEXT_ERR_ALERT_FATAL:
1216 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1217 return 0;
1218
1219 case SSL_TLSEXT_ERR_ALERT_WARNING:
1220 ssl3_send_alert(s, SSL3_AL_WARNING, al);
1221 return 1;
1222
1223 case SSL_TLSEXT_ERR_NOACK:
1224 s->servername_done = 0;
1225 return 1;
1226
1227 default:
1228 return 1;
1229 }
1230}
1231
1232/*
1233 * Parse the extensions in the ClientHello that were collected earlier. Returns
1234 * 1 for success or 0 for failure.
1235 */
1236static int tls_parse_clienthello_tlsext(SSL *s, CLIENTHELLO_MSG *hello)
1237{
1238 int al = -1;
1239
1240 custom_ext_init(&s->cert->srv_ext);
1241
1242 if (tls_scan_clienthello_tlsext(s, hello, &al) <= 0) {
1243 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1244 return 0;
1245 }
1246
1247 if (!tls_check_clienthello_tlsext(s)) {
4b299b8e 1248 SSLerr(SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT, SSL_R_CLIENTHELLO_TLSEXT);
6b473aca
MC
1249 return 0;
1250 }
1251
1252 return 1;
1253}
1254
be3583fa 1255MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, PACKET *pkt)
e27f234a
MC
1256{
1257 int i, al = SSL_AD_INTERNAL_ERROR;
348240c6 1258 unsigned int j;
1ab3836b 1259 size_t loop;
e27f234a 1260 unsigned long id;
4a640fb6 1261 const SSL_CIPHER *c;
e27f234a
MC
1262#ifndef OPENSSL_NO_COMP
1263 SSL_COMP *comp = NULL;
1264#endif
1265 STACK_OF(SSL_CIPHER) *ciphers = NULL;
4fa52141 1266 int protverr;
e27f234a 1267 /* |cookie| will only be initialized for DTLS. */
1ab3836b 1268 PACKET session_id, compression, extensions, cookie;
6e3ff632 1269 static const unsigned char null_compression = 0;
1ab3836b 1270 CLIENTHELLO_MSG clienthello;
e27f234a 1271
1ab3836b 1272 /*
b1b4b543 1273 * First, parse the raw ClientHello data into the CLIENTHELLO_MSG structure.
1ab3836b 1274 */
9529419d 1275 memset(&clienthello, 0, sizeof(clienthello));
1ab3836b 1276 clienthello.isv2 = RECORD_LAYER_is_sslv2_record(&s->rlayer);
bbafa47b 1277 PACKET_null_init(&cookie);
1ab3836b
MC
1278
1279 if (clienthello.isv2) {
9ceb2426 1280 unsigned int mt;
b1b4b543 1281
32ec4153
MC
1282 /*-
1283 * An SSLv3/TLSv1 backwards-compatible CLIENT-HELLO in an SSLv2
1284 * header is sent directly on the wire, not wrapped as a TLS
1285 * record. Our record layer just processes the message length and passes
1286 * the rest right through. Its format is:
1287 * Byte Content
1288 * 0-1 msg_length - decoded by the record layer
1289 * 2 msg_type - s->init_msg points here
1290 * 3-4 version
1291 * 5-6 cipher_spec_length
1292 * 7-8 session_id_length
1293 * 9-10 challenge_length
1294 * ... ...
1295 */
1296
73999b62 1297 if (!PACKET_get_1(pkt, &mt)
a230b26e 1298 || mt != SSL2_MT_CLIENT_HELLO) {
32ec4153
MC
1299 /*
1300 * Should never happen. We should have tested this in the record
1301 * layer in order to have determined that this is a SSLv2 record
1302 * in the first place
1303 */
e27f234a 1304 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
d45ba43d 1305 goto err;
32ec4153 1306 }
32ec4153
MC
1307 }
1308
df7ce507 1309 if (!PACKET_get_net_2(pkt, &clienthello.legacy_version)) {
1ab3836b
MC
1310 al = SSL_AD_DECODE_ERROR;
1311 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_TOO_SHORT);
1312 goto err;
0f113f3e
MC
1313 }
1314
b3e2272c 1315 /* Parse the message and load client random. */
1ab3836b 1316 if (clienthello.isv2) {
32ec4153
MC
1317 /*
1318 * Handle an SSLv2 backwards compatible ClientHello
1319 * Note, this is only for SSLv3+ using the backward compatible format.
e2994cf0 1320 * Real SSLv2 is not supported, and is rejected below.
32ec4153 1321 */
1ab3836b 1322 unsigned int ciphersuite_len, session_id_len, challenge_len;
b3e2272c 1323 PACKET challenge;
0f113f3e 1324
1ab3836b 1325 if (!PACKET_get_net_2(pkt, &ciphersuite_len)
a230b26e
EK
1326 || !PACKET_get_net_2(pkt, &session_id_len)
1327 || !PACKET_get_net_2(pkt, &challenge_len)) {
e27f234a
MC
1328 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1329 SSL_R_RECORD_LENGTH_MISMATCH);
6c3cca57
AE
1330 al = SSL_AD_DECODE_ERROR;
1331 goto f_err;
5e9f0eeb 1332 }
0f113f3e 1333
293b5ca4
AG
1334 if (session_id_len > SSL_MAX_SSL_SESSION_ID_LENGTH) {
1335 al = SSL_AD_DECODE_ERROR;
1336 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1337 goto f_err;
1338 }
1339
1ab3836b
MC
1340 if (!PACKET_get_sub_packet(pkt, &clienthello.ciphersuites,
1341 ciphersuite_len)
035b1e69 1342 || !PACKET_copy_bytes(pkt, clienthello.session_id, session_id_len)
73999b62 1343 || !PACKET_get_sub_packet(pkt, &challenge, challenge_len)
b3e2272c 1344 /* No extensions. */
73999b62 1345 || PACKET_remaining(pkt) != 0) {
f0659bdb
MC
1346 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1347 SSL_R_RECORD_LENGTH_MISMATCH);
9ceb2426
MC
1348 al = SSL_AD_DECODE_ERROR;
1349 goto f_err;
1350 }
035b1e69 1351 clienthello.session_id_len = session_id_len;
9ceb2426 1352
fba7b84c
MC
1353 /* Load the client random and compression list. We use SSL3_RANDOM_SIZE
1354 * here rather than sizeof(clienthello.random) because that is the limit
1355 * for SSLv3 and it is fixed. It won't change even if
1356 * sizeof(clienthello.random) does.
1357 */
1358 challenge_len = challenge_len > SSL3_RANDOM_SIZE
1359 ? SSL3_RANDOM_SIZE : challenge_len;
1360 memset(clienthello.random, 0, SSL3_RANDOM_SIZE);
b3e2272c 1361 if (!PACKET_copy_bytes(&challenge,
fba7b84c 1362 clienthello.random + SSL3_RANDOM_SIZE -
cb21df32
DB
1363 challenge_len, challenge_len)
1364 /* Advertise only null compression. */
1365 || !PACKET_buf_init(&compression, &null_compression, 1)) {
f0659bdb 1366 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
b3e2272c 1367 al = SSL_AD_INTERNAL_ERROR;
9ceb2426
MC
1368 goto f_err;
1369 }
b3e2272c 1370
1ab3836b 1371 PACKET_null_init(&clienthello.extensions);
0f113f3e 1372 } else {
b3e2272c 1373 /* Regular ClientHello. */
1ab3836b 1374 if (!PACKET_copy_bytes(pkt, clienthello.random, SSL3_RANDOM_SIZE)
e2994cf0
MC
1375 || !PACKET_get_length_prefixed_1(pkt, &session_id)
1376 || !PACKET_copy_all(&session_id, clienthello.session_id,
1377 SSL_MAX_SSL_SESSION_ID_LENGTH,
1378 &clienthello.session_id_len)) {
9ceb2426 1379 al = SSL_AD_DECODE_ERROR;
f0659bdb 1380 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
9ceb2426
MC
1381 goto f_err;
1382 }
32ec4153 1383
b3e2272c 1384 if (SSL_IS_DTLS(s)) {
73999b62 1385 if (!PACKET_get_length_prefixed_1(pkt, &cookie)) {
32ec4153 1386 al = SSL_AD_DECODE_ERROR;
f0659bdb 1387 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
32ec4153
MC
1388 goto f_err;
1389 }
1ab3836b
MC
1390 if (!PACKET_copy_all(&cookie, clienthello.dtls_cookie,
1391 DTLS1_COOKIE_LENGTH,
1392 &clienthello.dtls_cookie_len)) {
1393 al = SSL_AD_DECODE_ERROR;
1394 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1395 goto f_err;
1396 }
b3e2272c
EK
1397 /*
1398 * If we require cookies and this ClientHello doesn't contain one,
1399 * just return since we do not want to allocate any memory yet.
1400 * So check cookie length...
1401 */
1402 if (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE) {
1ab3836b 1403 if (clienthello.dtls_cookie_len == 0)
a230b26e 1404 return 1;
b3e2272c 1405 }
5e9f0eeb 1406 }
0f113f3e 1407
1ab3836b
MC
1408 if (!PACKET_get_length_prefixed_2(pkt, &clienthello.ciphersuites)) {
1409 al = SSL_AD_DECODE_ERROR;
1410 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1411 goto f_err;
1412 }
1413
4bfe1432 1414 if (!PACKET_get_length_prefixed_1(pkt, &compression)) {
a230b26e
EK
1415 al = SSL_AD_DECODE_ERROR;
1416 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1417 goto f_err;
b3e2272c 1418 }
1ab3836b 1419
b3e2272c 1420 /* Could be empty. */
1ab3836b
MC
1421 if (PACKET_remaining(pkt) == 0) {
1422 PACKET_null_init(&clienthello.extensions);
1423 } else {
1424 if (!PACKET_get_length_prefixed_2(pkt, &clienthello.extensions)) {
1425 al = SSL_AD_DECODE_ERROR;
1426 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1427 goto f_err;
1428 }
1429 }
1430 }
1431
4bfe1432 1432 if (!PACKET_copy_all(&compression, clienthello.compressions,
e2994cf0
MC
1433 MAX_COMPRESSIONS_SIZE,
1434 &clienthello.compressions_len)) {
1ab3836b
MC
1435 al = SSL_AD_DECODE_ERROR;
1436 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1437 goto f_err;
1438 }
1439
b1b4b543 1440 /* Preserve the raw extensions PACKET for later use */
1ab3836b 1441 extensions = clienthello.extensions;
fadd9a1e
MC
1442 if (!tls_collect_extensions(s, &extensions, EXT_CLIENT_HELLO,
1443 &clienthello.pre_proc_exts,
1444 &clienthello.num_extensions, &al)) {
1ab3836b
MC
1445 /* SSLerr already been called */
1446 goto f_err;
1447 }
1448
1449 /* Finished parsing the ClientHello, now we can start processing it */
1450
1451 /* Set up the client_random */
1452 memcpy(s->s3->client_random, clienthello.random, SSL3_RANDOM_SIZE);
1453
1454 /* Choose the version */
1455
1456 if (clienthello.isv2) {
df7ce507
MC
1457 if (clienthello.legacy_version == SSL2_VERSION
1458 || (clienthello.legacy_version & 0xff00)
b1b4b543
MC
1459 != (SSL3_VERSION_MAJOR << 8)) {
1460 /*
1461 * This is real SSLv2 or something complete unknown. We don't
1462 * support it.
1463 */
1ab3836b
MC
1464 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_UNKNOWN_PROTOCOL);
1465 goto err;
1466 }
b1b4b543 1467 /* SSLv3/TLS */
df7ce507 1468 s->client_version = clienthello.legacy_version;
1ab3836b
MC
1469 }
1470 /*
1471 * Do SSL/TLS version negotiation if applicable. For DTLS we just check
1472 * versions are potentially compatible. Version negotiation comes later.
1473 */
1474 if (!SSL_IS_DTLS(s)) {
1475 protverr = ssl_choose_server_version(s, &clienthello);
1476 } else if (s->method->version != DTLS_ANY_VERSION &&
df7ce507 1477 DTLS_VERSION_LT((int)clienthello.legacy_version, s->version)) {
1ab3836b
MC
1478 protverr = SSL_R_VERSION_TOO_LOW;
1479 } else {
1480 protverr = 0;
1481 }
1482
1483 if (protverr) {
1484 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, protverr);
1485 if ((!s->enc_write_ctx && !s->write_hash)) {
b1b4b543 1486 /* like ssl3_get_record, send alert using remote version number */
df7ce507 1487 s->version = s->client_version = clienthello.legacy_version;
1ab3836b
MC
1488 }
1489 al = SSL_AD_PROTOCOL_VERSION;
1490 goto f_err;
b3e2272c
EK
1491 }
1492
1ed65871
DB
1493 if (SSL_IS_DTLS(s)) {
1494 /* Empty cookie was already handled above by returning early. */
1495 if (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE) {
1496 if (s->ctx->app_verify_cookie_cb != NULL) {
1ab3836b
MC
1497 if (s->ctx->app_verify_cookie_cb(s, clienthello.dtls_cookie,
1498 clienthello.dtls_cookie_len) == 0) {
1ed65871
DB
1499 al = SSL_AD_HANDSHAKE_FAILURE;
1500 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1501 SSL_R_COOKIE_MISMATCH);
1502 goto f_err;
1503 /* else cookie verification succeeded */
1504 }
a230b26e 1505 /* default verification */
1ab3836b
MC
1506 } else if (s->d1->cookie_len != clienthello.dtls_cookie_len
1507 || memcmp(clienthello.dtls_cookie, s->d1->cookie,
1508 s->d1->cookie_len) != 0) {
1ed65871
DB
1509 al = SSL_AD_HANDSHAKE_FAILURE;
1510 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_COOKIE_MISMATCH);
1511 goto f_err;
1512 }
1513 s->d1->cookie_verified = 1;
1514 }
1515 if (s->method->version == DTLS_ANY_VERSION) {
1ab3836b 1516 protverr = ssl_choose_server_version(s, &clienthello);
1ed65871
DB
1517 if (protverr != 0) {
1518 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, protverr);
1519 s->version = s->client_version;
1520 al = SSL_AD_PROTOCOL_VERSION;
1521 goto f_err;
1522 }
1523 }
1524 }
1525
b3e2272c
EK
1526 s->hit = 0;
1527
1ab3836b 1528 /* We need to do this before getting the session */
6b473aca 1529 if (!tls_parse_extension(s, TLSEXT_TYPE_extended_master_secret,
4b299b8e 1530 EXT_CLIENT_HELLO,
6b473aca
MC
1531 clienthello.pre_proc_exts,
1532 clienthello.num_extensions, &al)) {
1ab3836b
MC
1533 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
1534 goto f_err;
1535 }
1536
b3e2272c
EK
1537 /*
1538 * We don't allow resumption in a backwards compatible ClientHello.
1539 * TODO(openssl-team): in TLS1.1+, session_id MUST be empty.
1540 *
1541 * Versions before 0.9.7 always allow clients to resume sessions in
1542 * renegotiation. 0.9.7 and later allow this by default, but optionally
1543 * ignore resumption requests with flag
1544 * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION (it's a new flag rather
1545 * than a change to default behavior so that applications relying on
1546 * this for security won't even compile against older library versions).
1547 * 1.0.1 and later also have a function SSL_renegotiate_abbreviated() to
1548 * request renegotiation but not a new session (s->new_session remains
1549 * unset): for servers, this essentially just means that the
1550 * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION setting will be
1551 * ignored.
1552 */
1ab3836b 1553 if (clienthello.isv2 ||
b3e2272c
EK
1554 (s->new_session &&
1555 (s->options & SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION))) {
1556 if (!ssl_get_new_session(s, 1))
1557 goto err;
1558 } else {
1ab3836b 1559 i = ssl_get_prev_session(s, &clienthello);
0f113f3e 1560 /*
b3e2272c
EK
1561 * Only resume if the session's version matches the negotiated
1562 * version.
1563 * RFC 5246 does not provide much useful advice on resumption
1564 * with a different protocol version. It doesn't forbid it but
1565 * the sanity of such behaviour would be questionable.
1566 * In practice, clients do not accept a version mismatch and
1567 * will abort the handshake with an error.
0f113f3e 1568 */
b3e2272c
EK
1569 if (i == 1 && s->version == s->session->ssl_version) {
1570 /* previous session */
1571 s->hit = 1;
1572 } else if (i == -1) {
1573 goto err;
32ec4153 1574 } else {
b3e2272c
EK
1575 /* i == 0 */
1576 if (!ssl_get_new_session(s, 1))
32ec4153 1577 goto err;
0f113f3e 1578 }
b3e2272c 1579 }
0f113f3e 1580
b1b4b543 1581 if (ssl_bytes_to_cipher_list(s, &clienthello.ciphersuites, &ciphers,
1ab3836b 1582 clienthello.isv2, &al) == NULL) {
b3e2272c
EK
1583 goto f_err;
1584 }
5e9f0eeb 1585
b3e2272c
EK
1586 /* If it is a hit, check that the cipher is in the list */
1587 if (s->hit) {
1588 j = 0;
1589 id = s->session->cipher->id;
d02b48c6 1590
413c4f45 1591#ifdef CIPHER_DEBUG
a230b26e 1592 fprintf(stderr, "client sent %d ciphers\n", sk_SSL_CIPHER_num(ciphers));
413c4f45 1593#endif
b3e2272c
EK
1594 for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
1595 c = sk_SSL_CIPHER_value(ciphers, i);
413c4f45 1596#ifdef CIPHER_DEBUG
b3e2272c
EK
1597 fprintf(stderr, "client [%2d of %2d]:%s\n",
1598 i, sk_SSL_CIPHER_num(ciphers), SSL_CIPHER_get_name(c));
88f2a4cf 1599#endif
b3e2272c
EK
1600 if (c->id == id) {
1601 j = 1;
1602 break;
32ec4153 1603 }
0f113f3e 1604 }
b3e2272c 1605 if (j == 0) {
ec30e856 1606 /*
b3e2272c
EK
1607 * we need to have the cipher in the cipher list if we are asked
1608 * to reuse it
ec30e856 1609 */
b3e2272c 1610 al = SSL_AD_ILLEGAL_PARAMETER;
f0659bdb 1611 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
b3e2272c 1612 SSL_R_REQUIRED_CIPHER_MISSING);
32ec4153
MC
1613 goto f_err;
1614 }
b3e2272c 1615 }
9ceb2426 1616
1ab3836b
MC
1617 for (loop = 0; loop < clienthello.compressions_len; loop++) {
1618 if (clienthello.compressions[loop] == 0)
b3e2272c 1619 break;
0f113f3e 1620 }
32ec4153 1621
1ab3836b 1622 if (loop >= clienthello.compressions_len) {
b3e2272c
EK
1623 /* no compress */
1624 al = SSL_AD_DECODE_ERROR;
f0659bdb 1625 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_NO_COMPRESSION_SPECIFIED);
b3e2272c
EK
1626 goto f_err;
1627 }
f100b031 1628
0f113f3e 1629 /* TLS extensions */
6b473aca 1630 if (!tls_parse_clienthello_tlsext(s, &clienthello)) {
1ab3836b
MC
1631 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_PARSE_TLSEXT);
1632 goto err;
0f113f3e
MC
1633 }
1634
b1834ad7 1635 /* Check we've got a key_share for TLSv1.3 */
657a43f6 1636 if (SSL_IS_TLS13(s) && s->s3->peer_tmp == NULL && !s->hit) {
b1834ad7 1637 /* No suitable share */
94ed2c67 1638 /* TODO(TLS1.3): Send a HelloRetryRequest */
b1834ad7
MC
1639 al = SSL_AD_HANDSHAKE_FAILURE;
1640 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_NO_SUITABLE_KEY_SHARE);
1641 goto f_err;
1642 }
1643
0f113f3e
MC
1644 /*
1645 * Check if we want to use external pre-shared secret for this handshake
1646 * for not reused session only. We need to generate server_random before
1647 * calling tls_session_secret_cb in order to allow SessionTicket
1648 * processing to use it in key derivation.
1649 */
1650 {
1651 unsigned char *pos;
1652 pos = s->s3->server_random;
1653 if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE) <= 0) {
1654 goto f_err;
1655 }
1656 }
1657
1658 if (!s->hit && s->version >= TLS1_VERSION && s->tls_session_secret_cb) {
4a640fb6 1659 const SSL_CIPHER *pref_cipher = NULL;
8c1a5343
MC
1660 /*
1661 * s->session->master_key_length is a size_t, but this is an int for
1662 * backwards compat reasons
1663 */
1664 int master_key_length;
0f113f3e 1665
8c1a5343 1666 master_key_length = sizeof(s->session->master_key);
0f113f3e 1667 if (s->tls_session_secret_cb(s, s->session->master_key,
8c1a5343 1668 &master_key_length, ciphers,
0f113f3e 1669 &pref_cipher,
8c1a5343
MC
1670 s->tls_session_secret_cb_arg)
1671 && master_key_length > 0) {
1672 s->session->master_key_length = master_key_length;
0f113f3e
MC
1673 s->hit = 1;
1674 s->session->ciphers = ciphers;
1675 s->session->verify_result = X509_V_OK;
1676
1677 ciphers = NULL;
1678
1679 /* check if some cipher was preferred by call back */
1680 pref_cipher =
1681 pref_cipher ? pref_cipher : ssl3_choose_cipher(s,
1682 s->
1683 session->ciphers,
1684 SSL_get_ciphers
1685 (s));
1686 if (pref_cipher == NULL) {
1687 al = SSL_AD_HANDSHAKE_FAILURE;
e27f234a 1688 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_NO_SHARED_CIPHER);
0f113f3e
MC
1689 goto f_err;
1690 }
1691
1692 s->session->cipher = pref_cipher;
25aaa98a 1693 sk_SSL_CIPHER_free(s->cipher_list);
0f113f3e 1694 s->cipher_list = sk_SSL_CIPHER_dup(s->session->ciphers);
25aaa98a 1695 sk_SSL_CIPHER_free(s->cipher_list_by_id);
0f113f3e
MC
1696 s->cipher_list_by_id = sk_SSL_CIPHER_dup(s->session->ciphers);
1697 }
1698 }
58ece833 1699
0f113f3e
MC
1700 /*
1701 * Worst case, we will use the NULL compression, but if we have other
b2ce0337 1702 * options, we will now look for them. We have complen-1 compression
0f113f3e
MC
1703 * algorithms from the client, starting at q.
1704 */
1705 s->s3->tmp.new_compression = NULL;
09b6c2ef 1706#ifndef OPENSSL_NO_COMP
0f113f3e
MC
1707 /* This only happens if we have a cache hit */
1708 if (s->session->compress_meth != 0) {
1709 int m, comp_id = s->session->compress_meth;
9ceb2426 1710 unsigned int k;
0f113f3e
MC
1711 /* Perform sanity checks on resumed compression algorithm */
1712 /* Can't disable compression */
1713 if (!ssl_allow_compression(s)) {
e27f234a 1714 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
0f113f3e
MC
1715 SSL_R_INCONSISTENT_COMPRESSION);
1716 goto f_err;
1717 }
1718 /* Look for resumed compression method */
1719 for (m = 0; m < sk_SSL_COMP_num(s->ctx->comp_methods); m++) {
1720 comp = sk_SSL_COMP_value(s->ctx->comp_methods, m);
1721 if (comp_id == comp->id) {
1722 s->s3->tmp.new_compression = comp;
1723 break;
1724 }
1725 }
1726 if (s->s3->tmp.new_compression == NULL) {
e27f234a 1727 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
0f113f3e
MC
1728 SSL_R_INVALID_COMPRESSION_ALGORITHM);
1729 goto f_err;
1730 }
1731 /* Look for resumed method in compression list */
1ab3836b
MC
1732 for (k = 0; k < clienthello.compressions_len; k++) {
1733 if (clienthello.compressions[k] == comp_id)
0f113f3e
MC
1734 break;
1735 }
1ab3836b 1736 if (k >= clienthello.compressions_len) {
0f113f3e 1737 al = SSL_AD_ILLEGAL_PARAMETER;
e27f234a 1738 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
8fdc99cb 1739 SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING);
0f113f3e
MC
1740 goto f_err;
1741 }
1742 } else if (s->hit)
1743 comp = NULL;
1744 else if (ssl_allow_compression(s) && s->ctx->comp_methods) {
df6741c9 1745 /* See if we have a match */
9ceb2426
MC
1746 int m, nn, v, done = 0;
1747 unsigned int o;
0f113f3e
MC
1748
1749 nn = sk_SSL_COMP_num(s->ctx->comp_methods);
1750 for (m = 0; m < nn; m++) {
1751 comp = sk_SSL_COMP_value(s->ctx->comp_methods, m);
1752 v = comp->id;
1ab3836b
MC
1753 for (o = 0; o < clienthello.compressions_len; o++) {
1754 if (v == clienthello.compressions[o]) {
0f113f3e
MC
1755 done = 1;
1756 break;
1757 }
1758 }
1759 if (done)
1760 break;
1761 }
1762 if (done)
1763 s->s3->tmp.new_compression = comp;
1764 else
1765 comp = NULL;
1766 }
e6f418bc 1767#else
0f113f3e
MC
1768 /*
1769 * If compression is disabled we'd better not try to resume a session
1770 * using compression.
1771 */
1772 if (s->session->compress_meth != 0) {
e27f234a 1773 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_INCONSISTENT_COMPRESSION);
0f113f3e
MC
1774 goto f_err;
1775 }
09b6c2ef 1776#endif
413c4f45 1777
0f113f3e
MC
1778 /*
1779 * Given s->session->ciphers and SSL_get_ciphers, we must pick a cipher
1780 */
d02b48c6 1781
0f113f3e 1782 if (!s->hit) {
09b6c2ef 1783#ifdef OPENSSL_NO_COMP
0f113f3e 1784 s->session->compress_meth = 0;
09b6c2ef 1785#else
0f113f3e 1786 s->session->compress_meth = (comp == NULL) ? 0 : comp->id;
09b6c2ef 1787#endif
25aaa98a 1788 sk_SSL_CIPHER_free(s->session->ciphers);
0f113f3e
MC
1789 s->session->ciphers = ciphers;
1790 if (ciphers == NULL) {
3ae91cfb 1791 al = SSL_AD_INTERNAL_ERROR;
e27f234a 1792 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
0f113f3e
MC
1793 goto f_err;
1794 }
1795 ciphers = NULL;
1796 if (!tls1_set_server_sigalgs(s)) {
e27f234a 1797 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
0f113f3e
MC
1798 goto err;
1799 }
e27f234a
MC
1800 }
1801
1802 sk_SSL_CIPHER_free(ciphers);
9529419d 1803 OPENSSL_free(clienthello.pre_proc_exts);
e27f234a
MC
1804 return MSG_PROCESS_CONTINUE_PROCESSING;
1805 f_err:
1806 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1807 err:
fe3a3291 1808 ossl_statem_set_error(s);
e27f234a
MC
1809
1810 sk_SSL_CIPHER_free(ciphers);
9529419d 1811 OPENSSL_free(clienthello.pre_proc_exts);
e27f234a 1812
58c9e32a 1813 return MSG_PROCESS_ERROR;
e27f234a
MC
1814}
1815
be3583fa 1816WORK_STATE tls_post_process_client_hello(SSL *s, WORK_STATE wst)
e27f234a 1817{
d13dd4be 1818 int al = SSL_AD_HANDSHAKE_FAILURE;
4a640fb6 1819 const SSL_CIPHER *cipher;
e27f234a
MC
1820
1821 if (wst == WORK_MORE_A) {
1822 if (!s->hit) {
1823 /* Let cert callback update server certificates if required */
1824 if (s->cert->cert_cb) {
1825 int rv = s->cert->cert_cb(s, s->cert->cert_cb_arg);
1826 if (rv == 0) {
1827 al = SSL_AD_INTERNAL_ERROR;
a230b26e
EK
1828 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
1829 SSL_R_CERT_CB_ERROR);
e27f234a
MC
1830 goto f_err;
1831 }
1832 if (rv < 0) {
1833 s->rwstate = SSL_X509_LOOKUP;
1834 return WORK_MORE_A;
1835 }
1836 s->rwstate = SSL_NOTHING;
0f113f3e 1837 }
a230b26e
EK
1838 cipher =
1839 ssl3_choose_cipher(s, s->session->ciphers, SSL_get_ciphers(s));
e27f234a
MC
1840
1841 if (cipher == NULL) {
a230b26e
EK
1842 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
1843 SSL_R_NO_SHARED_CIPHER);
e27f234a 1844 goto f_err;
0f113f3e 1845 }
e27f234a
MC
1846 s->s3->tmp.new_cipher = cipher;
1847 /* check whether we should disable session resumption */
1848 if (s->not_resumable_session_cb != NULL)
1849 s->session->not_resumable = s->not_resumable_session_cb(s,
a230b26e 1850 ((cipher->algorithm_mkey & (SSL_kDHE | SSL_kECDHE)) != 0));
e27f234a
MC
1851 if (s->session->not_resumable)
1852 /* do not send a session ticket */
1853 s->tlsext_ticket_expected = 0;
1854 } else {
1855 /* Session-id reuse */
1856 s->s3->tmp.new_cipher = s->session->cipher;
0f113f3e 1857 }
0f113f3e 1858
28f4580c 1859 if (!(s->verify_mode & SSL_VERIFY_PEER)) {
d13dd4be
MC
1860 if (!ssl3_digest_cached_records(s, 0)) {
1861 al = SSL_AD_INTERNAL_ERROR;
e27f234a 1862 goto f_err;
d13dd4be 1863 }
0f113f3e 1864 }
0f113f3e 1865
e27f234a
MC
1866 /*-
1867 * we now have the following setup.
1868 * client_random
60250017 1869 * cipher_list - our preferred list of ciphers
1870 * ciphers - the clients preferred list of ciphers
e27f234a
MC
1871 * compression - basically ignored right now
1872 * ssl version is set - sslv3
1873 * s->session - The ssl session has been setup.
1874 * s->hit - session reuse flag
1875 * s->s3->tmp.new_cipher- the new cipher to use.
1876 */
0f113f3e 1877
e27f234a
MC
1878 /* Handles TLS extensions that we couldn't check earlier */
1879 if (s->version >= SSL3_VERSION) {
70c22888 1880 if (!ssl_check_clienthello_tlsext_late(s, &al)) {
d13dd4be
MC
1881 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
1882 SSL_R_CLIENTHELLO_TLSEXT);
e27f234a
MC
1883 goto f_err;
1884 }
1885 }
0f113f3e 1886
e27f234a
MC
1887 wst = WORK_MORE_B;
1888 }
1889#ifndef OPENSSL_NO_SRP
1890 if (wst == WORK_MORE_B) {
1891 int ret;
1892 if ((ret = ssl_check_srp_ext_ClientHello(s, &al)) < 0) {
1893 /*
1894 * callback indicates further work to be done
1895 */
1896 s->rwstate = SSL_X509_LOOKUP;
1897 return WORK_MORE_B;
1898 }
1899 if (ret != SSL_ERROR_NONE) {
1900 /*
1901 * This is not really an error but the only means to for
1902 * a client to detect whether srp is supported.
1903 */
1904 if (al != TLS1_AD_UNKNOWN_PSK_IDENTITY)
1905 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
a230b26e 1906 SSL_R_CLIENTHELLO_TLSEXT);
7bb37cb5
E
1907 else
1908 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
1909 SSL_R_PSK_IDENTITY_NOT_FOUND);
e27f234a 1910 goto f_err;
0f113f3e
MC
1911 }
1912 }
e27f234a
MC
1913#endif
1914 s->renegotiate = 2;
0f113f3e 1915
e27f234a 1916 return WORK_FINISHED_STOP;
0f113f3e 1917 f_err:
e27f234a 1918 ssl3_send_alert(s, SSL3_AL_FATAL, al);
fe3a3291 1919 ossl_statem_set_error(s);
e27f234a
MC
1920 return WORK_ERROR;
1921}
1922
7cea05dc 1923int tls_construct_server_hello(SSL *s, WPACKET *pkt)
0f113f3e 1924{
ec60ccc1
MC
1925 int compm, al = SSL_AD_INTERNAL_ERROR;
1926 size_t sl, len;
f2342b7a 1927 int version;
0f113f3e 1928
b97667ce 1929 /* TODO(TLS1.3): Remove the DRAFT conditional before release */
f2342b7a
MC
1930 version = SSL_IS_TLS13(s) ? TLS1_3_VERSION_DRAFT : s->version;
1931 if (!WPACKET_put_bytes_u16(pkt, version)
8157d44b
MC
1932 /*
1933 * Random stuff. Filling of the server_random takes place in
1934 * tls_process_client_hello()
1935 */
7cea05dc 1936 || !WPACKET_memcpy(pkt, s->s3->server_random, SSL3_RANDOM_SIZE)) {
8157d44b
MC
1937 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
1938 goto err;
1939 }
0f113f3e 1940
e27f234a
MC
1941 /*-
1942 * There are several cases for the session ID to send
1943 * back in the server hello:
1944 * - For session reuse from the session cache,
1945 * we send back the old session ID.
1946 * - If stateless session reuse (using a session ticket)
1947 * is successful, we send back the client's "session ID"
1948 * (which doesn't actually identify the session).
1949 * - If it is a new session, we send back the new
1950 * session ID.
1951 * - However, if we want the new session to be single-use,
1952 * we send back a 0-length session ID.
1953 * s->hit is non-zero in either case of session reuse,
1954 * so the following won't overwrite an ID that we're supposed
1955 * to send back.
1956 */
1957 if (s->session->not_resumable ||
1958 (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER)
1959 && !s->hit))
1960 s->session->session_id_length = 0;
1961
1962 sl = s->session->session_id_length;
ec60ccc1 1963 if (sl > sizeof(s->session->session_id)) {
e27f234a 1964 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
8157d44b 1965 goto err;
e27f234a 1966 }
0f113f3e 1967
8157d44b 1968 /* set up the compression method */
09b6c2ef 1969#ifdef OPENSSL_NO_COMP
8157d44b 1970 compm = 0;
09b6c2ef 1971#else
e27f234a 1972 if (s->s3->tmp.new_compression == NULL)
8157d44b 1973 compm = 0;
e27f234a 1974 else
8157d44b 1975 compm = s->s3->tmp.new_compression->id;
09b6c2ef 1976#endif
e481f9b9 1977
71728dd8
MC
1978 if ((!SSL_IS_TLS13(s)
1979 && !WPACKET_sub_memcpy_u8(pkt, s->session->session_id, sl))
7cea05dc 1980 || !s->method->put_cipher_by_char(s->s3->tmp.new_cipher, pkt, &len)
71728dd8
MC
1981 || (!SSL_IS_TLS13(s)
1982 && !WPACKET_put_bytes_u8(pkt, compm))
8157d44b 1983 || !ssl_prepare_serverhello_tlsext(s)
5923ad4b 1984 || !ssl_add_serverhello_tlsext(s, pkt, &al)) {
e27f234a 1985 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
8157d44b 1986 goto err;
0f113f3e 1987 }
d02b48c6 1988
e27f234a 1989 return 1;
8157d44b 1990 err:
8157d44b 1991 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
8157d44b 1992 return 0;
0f113f3e 1993}
d02b48c6 1994
7cea05dc 1995int tls_construct_server_done(SSL *s, WPACKET *pkt)
e27f234a 1996{
e27f234a 1997 if (!s->s3->tmp.cert_request) {
5923ad4b
MC
1998 if (!ssl3_digest_cached_records(s, 0)) {
1999 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2000 return 0;
2001 }
e27f234a 2002 }
e27f234a
MC
2003 return 1;
2004}
2005
7cea05dc 2006int tls_construct_server_key_exchange(SSL *s, WPACKET *pkt)
0f113f3e 2007{
bc36ee62 2008#ifndef OPENSSL_NO_DH
e2b420fd 2009 EVP_PKEY *pkdh = NULL;
ea262260 2010#endif
10bf4fc2 2011#ifndef OPENSSL_NO_EC
0f113f3e 2012 unsigned char *encodedPoint = NULL;
348240c6 2013 size_t encodedlen = 0;
0f113f3e 2014 int curve_id = 0;
d02b48c6 2015#endif
0f113f3e
MC
2016 EVP_PKEY *pkey;
2017 const EVP_MD *md = NULL;
c13d2a5b 2018 int al = SSL_AD_INTERNAL_ERROR, i;
0f113f3e 2019 unsigned long type;
2ac6115d 2020 const BIGNUM *r[4];
bfb0641f 2021 EVP_MD_CTX *md_ctx = EVP_MD_CTX_new();
c13d2a5b
MC
2022 size_t paramlen, paramoffset;
2023
5923ad4b 2024 if (!WPACKET_get_total_written(pkt, &paramoffset)) {
e4e1aa90 2025 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
c13d2a5b
MC
2026 goto f_err;
2027 }
0f113f3e 2028
6e59a892
RL
2029 if (md_ctx == NULL) {
2030 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE);
6e59a892
RL
2031 goto f_err;
2032 }
0f113f3e 2033
e27f234a 2034 type = s->s3->tmp.new_cipher->algorithm_mkey;
e27f234a 2035
e27f234a 2036 r[0] = r[1] = r[2] = r[3] = NULL;
85269210 2037#ifndef OPENSSL_NO_PSK
e27f234a
MC
2038 /* Plain PSK or RSAPSK nothing to do */
2039 if (type & (SSL_kPSK | SSL_kRSAPSK)) {
2040 } else
85269210 2041#endif /* !OPENSSL_NO_PSK */
bc36ee62 2042#ifndef OPENSSL_NO_DH
e27f234a 2043 if (type & (SSL_kDHE | SSL_kDHEPSK)) {
94d61512
BL
2044 CERT *cert = s->cert;
2045
e2b420fd
DSH
2046 EVP_PKEY *pkdhp = NULL;
2047 DH *dh;
2048
e27f234a 2049 if (s->cert->dh_tmp_auto) {
e2b420fd
DSH
2050 DH *dhp = ssl_get_auto_dh(s);
2051 pkdh = EVP_PKEY_new();
2052 if (pkdh == NULL || dhp == NULL) {
2053 DH_free(dhp);
e27f234a 2054 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
0f113f3e 2055 ERR_R_INTERNAL_ERROR);
e27f234a 2056 goto f_err;
0f113f3e 2057 }
e2b420fd
DSH
2058 EVP_PKEY_assign_DH(pkdh, dhp);
2059 pkdhp = pkdh;
2060 } else {
2061 pkdhp = cert->dh_tmp;
2062 }
2063 if ((pkdhp == NULL) && (s->cert->dh_tmp_cb != NULL)) {
2064 DH *dhp = s->cert->dh_tmp_cb(s, 0, 1024);
2065 pkdh = ssl_dh_to_pkey(dhp);
2066 if (pkdh == NULL) {
e2b420fd
DSH
2067 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2068 ERR_R_INTERNAL_ERROR);
2069 goto f_err;
2070 }
2071 pkdhp = pkdh;
2072 }
2073 if (pkdhp == NULL) {
e27f234a
MC
2074 al = SSL_AD_HANDSHAKE_FAILURE;
2075 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2076 SSL_R_MISSING_TMP_DH_KEY);
2077 goto f_err;
2078 }
2079 if (!ssl_security(s, SSL_SECOP_TMP_DH,
e2b420fd 2080 EVP_PKEY_security_bits(pkdhp), 0, pkdhp)) {
e27f234a
MC
2081 al = SSL_AD_HANDSHAKE_FAILURE;
2082 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2083 SSL_R_DH_KEY_TOO_SMALL);
2084 goto f_err;
2085 }
e2b420fd 2086 if (s->s3->tmp.pkey != NULL) {
e27f234a
MC
2087 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2088 ERR_R_INTERNAL_ERROR);
2089 goto err;
2090 }
0f113f3e 2091
0a699a07 2092 s->s3->tmp.pkey = ssl_generate_pkey(pkdhp);
e27f234a 2093
e2b420fd
DSH
2094 if (s->s3->tmp.pkey == NULL) {
2095 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_EVP_LIB);
ffaef3f1 2096 goto err;
e27f234a 2097 }
e2b420fd
DSH
2098
2099 dh = EVP_PKEY_get0_DH(s->s3->tmp.pkey);
2100
2101 EVP_PKEY_free(pkdh);
2102 pkdh = NULL;
2103
0aeddcfa
MC
2104 DH_get0_pqg(dh, &r[0], NULL, &r[1]);
2105 DH_get0_key(dh, &r[2], NULL);
e27f234a 2106 } else
d02b48c6 2107#endif
10bf4fc2 2108#ifndef OPENSSL_NO_EC
e27f234a 2109 if (type & (SSL_kECDHE | SSL_kECDHEPSK)) {
57be4444 2110 int nid;
e27f234a 2111
880d9d86 2112 if (s->s3->tmp.pkey != NULL) {
e27f234a
MC
2113 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2114 ERR_R_INTERNAL_ERROR);
2115 goto err;
2116 }
2117
57be4444 2118 /* Get NID of appropriate shared curve */
de4d764e 2119 nid = tls1_shared_group(s, -2);
57be4444
DSH
2120 curve_id = tls1_ec_nid2curve_id(nid);
2121 if (curve_id == 0) {
e27f234a
MC
2122 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2123 SSL_R_UNSUPPORTED_ELLIPTIC_CURVE);
2124 goto err;
2125 }
0a699a07 2126 s->s3->tmp.pkey = ssl_generate_pkey_curve(curve_id);
880d9d86
DSH
2127 /* Generate a new key for this curve */
2128 if (s->s3->tmp.pkey == NULL) {
880d9d86 2129 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_EVP_LIB);
57be4444
DSH
2130 goto f_err;
2131 }
2132
880d9d86 2133 /* Encode the public key. */
ec24630a
DSH
2134 encodedlen = EVP_PKEY_get1_tls_encodedpoint(s->s3->tmp.pkey,
2135 &encodedPoint);
e27f234a 2136 if (encodedlen == 0) {
cae41364 2137 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_EC_LIB);
e27f234a
MC
2138 goto err;
2139 }
0f113f3e 2140
e27f234a
MC
2141 /*
2142 * We'll generate the serverKeyExchange message explicitly so we
2143 * can set these to NULLs
2144 */
2145 r[0] = NULL;
2146 r[1] = NULL;
2147 r[2] = NULL;
2148 r[3] = NULL;
2149 } else
10bf4fc2 2150#endif /* !OPENSSL_NO_EC */
edc032b5 2151#ifndef OPENSSL_NO_SRP
e27f234a
MC
2152 if (type & SSL_kSRP) {
2153 if ((s->srp_ctx.N == NULL) ||
2154 (s->srp_ctx.g == NULL) ||
2155 (s->srp_ctx.s == NULL) || (s->srp_ctx.B == NULL)) {
2156 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2157 SSL_R_MISSING_SRP_PARAM);
2158 goto err;
0f113f3e 2159 }
e27f234a
MC
2160 r[0] = s->srp_ctx.N;
2161 r[1] = s->srp_ctx.g;
2162 r[2] = s->srp_ctx.s;
2163 r[3] = s->srp_ctx.B;
2164 } else
2165#endif
2166 {
2167 al = SSL_AD_HANDSHAKE_FAILURE;
2168 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2169 SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
2170 goto f_err;
2171 }
0f113f3e 2172
a230b26e 2173 if (!(s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
e27f234a
MC
2174 && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_PSK)) {
2175 if ((pkey = ssl_get_sign_pkey(s, s->s3->tmp.new_cipher, &md))
2176 == NULL) {
2177 al = SSL_AD_DECODE_ERROR;
2178 goto f_err;
0f113f3e 2179 }
e27f234a
MC
2180 } else {
2181 pkey = NULL;
e27f234a 2182 }
0f113f3e 2183
85269210 2184#ifndef OPENSSL_NO_PSK
e27f234a 2185 if (type & SSL_PSK) {
c13d2a5b
MC
2186 size_t len = (s->cert->psk_identity_hint == NULL)
2187 ? 0 : strlen(s->cert->psk_identity_hint);
2188
2189 /*
2190 * It should not happen that len > PSK_MAX_IDENTITY_LEN - we already
2191 * checked this when we set the identity hint - but just in case
2192 */
2193 if (len > PSK_MAX_IDENTITY_LEN
7cea05dc 2194 || !WPACKET_sub_memcpy_u16(pkt, s->cert->psk_identity_hint,
c13d2a5b
MC
2195 len)) {
2196 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2197 ERR_R_INTERNAL_ERROR);
2198 goto f_err;
85269210 2199 }
e27f234a 2200 }
85269210
DSH
2201#endif
2202
e27f234a 2203 for (i = 0; i < 4 && r[i] != NULL; i++) {
c13d2a5b
MC
2204 unsigned char *binval;
2205 int res;
2206
edc032b5 2207#ifndef OPENSSL_NO_SRP
e27f234a 2208 if ((i == 2) && (type & SSL_kSRP)) {
7cea05dc 2209 res = WPACKET_start_sub_packet_u8(pkt);
e27f234a 2210 } else
78a01b3f 2211#endif
7cea05dc 2212 res = WPACKET_start_sub_packet_u16(pkt);
c13d2a5b
MC
2213
2214 if (!res) {
2215 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2216 ERR_R_INTERNAL_ERROR);
2217 goto f_err;
2218 }
2219
78a01b3f 2220#ifndef OPENSSL_NO_DH
a230b26e 2221 /*-
78a01b3f 2222 * for interoperability with some versions of the Microsoft TLS
2223 * stack, we need to zero pad the DHE pub key to the same length
2224 * as the prime
2225 */
2226 if ((i == 2) && (type & (SSL_kDHE | SSL_kDHEPSK))) {
c13d2a5b 2227 size_t len = BN_num_bytes(r[0]) - BN_num_bytes(r[2]);
ff819477 2228
c13d2a5b 2229 if (len > 0) {
7cea05dc 2230 if (!WPACKET_allocate_bytes(pkt, len, &binval)) {
c13d2a5b
MC
2231 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2232 ERR_R_INTERNAL_ERROR);
2233 goto f_err;
2234 }
2235 memset(binval, 0, len);
78a01b3f 2236 }
c13d2a5b 2237 }
edc032b5 2238#endif
7cea05dc
MC
2239 if (!WPACKET_allocate_bytes(pkt, BN_num_bytes(r[i]), &binval)
2240 || !WPACKET_close(pkt)) {
c13d2a5b
MC
2241 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2242 ERR_R_INTERNAL_ERROR);
2243 goto f_err;
2244 }
2245
2246 BN_bn2bin(r[i], binval);
e27f234a 2247 }
d02b48c6 2248
10bf4fc2 2249#ifndef OPENSSL_NO_EC
e27f234a
MC
2250 if (type & (SSL_kECDHE | SSL_kECDHEPSK)) {
2251 /*
c13d2a5b
MC
2252 * We only support named (not generic) curves. In this situation, the
2253 * ServerKeyExchange message has: [1 byte CurveType], [2 byte CurveName]
2254 * [1 byte length of encoded point], followed by the actual encoded
2255 * point itself
e27f234a 2256 */
7cea05dc
MC
2257 if (!WPACKET_put_bytes_u8(pkt, NAMED_CURVE_TYPE)
2258 || !WPACKET_put_bytes_u8(pkt, 0)
2259 || !WPACKET_put_bytes_u8(pkt, curve_id)
2260 || !WPACKET_sub_memcpy_u8(pkt, encodedPoint, encodedlen)) {
c13d2a5b
MC
2261 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2262 ERR_R_INTERNAL_ERROR);
2263 goto f_err;
2264 }
e27f234a
MC
2265 OPENSSL_free(encodedPoint);
2266 encodedPoint = NULL;
e27f234a 2267 }
ea262260
BM
2268#endif
2269
e27f234a
MC
2270 /* not anonymous */
2271 if (pkey != NULL) {
2272 /*
2273 * n is the length of the params, they start at &(d[4]) and p
2274 * points to the space at the end.
2275 */
e27f234a 2276 if (md) {
c13d2a5b
MC
2277 unsigned char *sigbytes1, *sigbytes2;
2278 unsigned int siglen;
2279
2280 /* Get length of the parameters we have written above */
7cea05dc 2281 if (!WPACKET_get_length(pkt, &paramlen)) {
c13d2a5b
MC
2282 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2283 ERR_R_INTERNAL_ERROR);
2284 goto f_err;
2285 }
e27f234a
MC
2286 /* send signature algorithm */
2287 if (SSL_USE_SIGALGS(s)) {
7cea05dc 2288 if (!tls12_get_sigandhash(pkt, pkey, md)) {
e27f234a 2289 /* Should never happen */
e27f234a
MC
2290 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2291 ERR_R_INTERNAL_ERROR);
2292 goto f_err;
0f113f3e 2293 }
e27f234a 2294 }
a2f9200f 2295#ifdef SSL_DEBUG
e27f234a 2296 fprintf(stderr, "Using hash %s\n", EVP_MD_name(md));
a2f9200f 2297#endif
c13d2a5b
MC
2298 /*
2299 * Create the signature. We don't know the actual length of the sig
2300 * until after we've created it, so we reserve enough bytes for it
2301 * up front, and then properly allocate them in the WPACKET
2302 * afterwards.
2303 */
7cea05dc 2304 if (!WPACKET_sub_reserve_bytes_u16(pkt, EVP_PKEY_size(pkey),
c13d2a5b
MC
2305 &sigbytes1)
2306 || EVP_SignInit_ex(md_ctx, md, NULL) <= 0
2307 || EVP_SignUpdate(md_ctx, &(s->s3->client_random[0]),
2308 SSL3_RANDOM_SIZE) <= 0
2309 || EVP_SignUpdate(md_ctx, &(s->s3->server_random[0]),
2310 SSL3_RANDOM_SIZE) <= 0
2311 || EVP_SignUpdate(md_ctx, s->init_buf->data + paramoffset,
2312 paramlen) <= 0
2313 || EVP_SignFinal(md_ctx, sigbytes1, &siglen, pkey) <= 0
7cea05dc 2314 || !WPACKET_sub_allocate_bytes_u16(pkt, siglen, &sigbytes2)
c13d2a5b
MC
2315 || sigbytes1 != sigbytes2) {
2316 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2317 ERR_R_INTERNAL_ERROR);
5f3d93e4 2318 goto f_err;
0f113f3e 2319 }
e27f234a
MC
2320 } else {
2321 /* Is this error check actually needed? */
77d514c5 2322 al = SSL_AD_HANDSHAKE_FAILURE;
e27f234a
MC
2323 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
2324 SSL_R_UNKNOWN_PKEY_TYPE);
77d514c5
MC
2325 goto f_err;
2326 }
0f113f3e
MC
2327 }
2328
bfb0641f 2329 EVP_MD_CTX_free(md_ctx);
e27f234a 2330 return 1;
0f113f3e
MC
2331 f_err:
2332 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2333 err:
e2b420fd
DSH
2334#ifndef OPENSSL_NO_DH
2335 EVP_PKEY_free(pkdh);
2336#endif
556efe79 2337#ifndef OPENSSL_NO_EC
b548a1f1 2338 OPENSSL_free(encodedPoint);
ea262260 2339#endif
bfb0641f 2340 EVP_MD_CTX_free(md_ctx);
e27f234a 2341 return 0;
0f113f3e 2342}
d02b48c6 2343
7cea05dc 2344int tls_construct_certificate_request(SSL *s, WPACKET *pkt)
0f113f3e 2345{
348240c6 2346 int i;
0f113f3e 2347 STACK_OF(X509_NAME) *sk = NULL;
0f113f3e 2348
e27f234a 2349 /* get the list of acceptable cert types */
7cea05dc
MC
2350 if (!WPACKET_start_sub_packet_u8(pkt)
2351 || !ssl3_get_req_cert_type(s, pkt)
2352 || !WPACKET_close(pkt)) {
28ff8ef3
MC
2353 SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, ERR_R_INTERNAL_ERROR);
2354 goto err;
2355 }
0f113f3e 2356
e27f234a
MC
2357 if (SSL_USE_SIGALGS(s)) {
2358 const unsigned char *psigs;
348240c6 2359 size_t nl = tls12_get_psigalgs(s, &psigs);
7cea05dc
MC
2360 if (!WPACKET_start_sub_packet_u16(pkt)
2361 || !tls12_copy_sigalgs(s, pkt, psigs, nl)
2362 || !WPACKET_close(pkt)) {
28ff8ef3
MC
2363 SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST,
2364 ERR_R_INTERNAL_ERROR);
2365 goto err;
2366 }
e27f234a 2367 }
0f113f3e 2368
28ff8ef3 2369 /* Start sub-packet for client CA list */
7cea05dc 2370 if (!WPACKET_start_sub_packet_u16(pkt)) {
28ff8ef3
MC
2371 SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, ERR_R_INTERNAL_ERROR);
2372 goto err;
2373 }
e27f234a
MC
2374
2375 sk = SSL_get_client_CA_list(s);
e27f234a
MC
2376 if (sk != NULL) {
2377 for (i = 0; i < sk_X509_NAME_num(sk); i++) {
28ff8ef3
MC
2378 unsigned char *namebytes;
2379 X509_NAME *name = sk_X509_NAME_value(sk, i);
2380 int namelen;
2381
2382 if (name == NULL
2383 || (namelen = i2d_X509_NAME(name, NULL)) < 0
7cea05dc 2384 || !WPACKET_sub_allocate_bytes_u16(pkt, namelen,
28ff8ef3
MC
2385 &namebytes)
2386 || i2d_X509_NAME(name, &namebytes) != namelen) {
2387 SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST,
2388 ERR_R_INTERNAL_ERROR);
e27f234a 2389 goto err;
0f113f3e
MC
2390 }
2391 }
e27f234a
MC
2392 }
2393 /* else no CA names */
d02b48c6 2394
5923ad4b 2395 if (!WPACKET_close(pkt)) {
e27f234a
MC
2396 SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, ERR_R_INTERNAL_ERROR);
2397 goto err;
0f113f3e 2398 }
d02b48c6 2399
e27f234a
MC
2400 s->s3->tmp.cert_request = 1;
2401
2402 return 1;
0f113f3e 2403 err:
28ff8ef3 2404 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
e27f234a 2405 return 0;
0f113f3e 2406}
d02b48c6 2407
0907d710 2408static int tls_process_cke_psk_preamble(SSL *s, PACKET *pkt, int *al)
e27f234a 2409{
85269210 2410#ifndef OPENSSL_NO_PSK
0907d710
MC
2411 unsigned char psk[PSK_MAX_PSK_LEN];
2412 size_t psklen;
2413 PACKET psk_identity;
efcdbcbe 2414
0907d710
MC
2415 if (!PACKET_get_length_prefixed_2(pkt, &psk_identity)) {
2416 *al = SSL_AD_DECODE_ERROR;
c76a4aea 2417 SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, SSL_R_LENGTH_MISMATCH);
0907d710
MC
2418 return 0;
2419 }
2420 if (PACKET_remaining(&psk_identity) > PSK_MAX_IDENTITY_LEN) {
2421 *al = SSL_AD_DECODE_ERROR;
c76a4aea 2422 SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, SSL_R_DATA_LENGTH_TOO_LONG);
0907d710
MC
2423 return 0;
2424 }
2425 if (s->psk_server_callback == NULL) {
2426 *al = SSL_AD_INTERNAL_ERROR;
a230b26e 2427 SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, SSL_R_PSK_NO_SERVER_CB);
0907d710
MC
2428 return 0;
2429 }
85269210 2430
0907d710
MC
2431 if (!PACKET_strndup(&psk_identity, &s->session->psk_identity)) {
2432 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2433 SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
0907d710
MC
2434 return 0;
2435 }
85269210 2436
0907d710 2437 psklen = s->psk_server_callback(s, s->session->psk_identity,
a230b26e 2438 psk, sizeof(psk));
85269210 2439
0907d710
MC
2440 if (psklen > PSK_MAX_PSK_LEN) {
2441 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2442 SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
0907d710
MC
2443 return 0;
2444 } else if (psklen == 0) {
2445 /*
2446 * PSK related to the given identity not found
2447 */
2448 *al = SSL_AD_UNKNOWN_PSK_IDENTITY;
c76a4aea 2449 SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
0907d710
MC
2450 SSL_R_PSK_IDENTITY_NOT_FOUND);
2451 return 0;
2452 }
85269210 2453
0907d710
MC
2454 OPENSSL_free(s->s3->tmp.psk);
2455 s->s3->tmp.psk = OPENSSL_memdup(psk, psklen);
2456 OPENSSL_cleanse(psk, psklen);
85269210 2457
0907d710
MC
2458 if (s->s3->tmp.psk == NULL) {
2459 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2460 SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_MALLOC_FAILURE);
0907d710 2461 return 0;
85269210 2462 }
0907d710
MC
2463
2464 s->s3->tmp.psklen = psklen;
2465
2466 return 1;
2467#else
2468 /* Should never happen */
2469 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2470 SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
0907d710 2471 return 0;
85269210 2472#endif
0907d710
MC
2473}
2474
0907d710
MC
2475static int tls_process_cke_rsa(SSL *s, PACKET *pkt, int *al)
2476{
bc36ee62 2477#ifndef OPENSSL_NO_RSA
0907d710
MC
2478 unsigned char rand_premaster_secret[SSL_MAX_MASTER_KEY_LENGTH];
2479 int decrypt_len;
2480 unsigned char decrypt_good, version_good;
2481 size_t j, padding_len;
2482 PACKET enc_premaster;
2483 RSA *rsa = NULL;
2484 unsigned char *rsa_decrypt = NULL;
2485 int ret = 0;
2486
2487 rsa = EVP_PKEY_get0_RSA(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey);
2488 if (rsa == NULL) {
2489 *al = SSL_AD_HANDSHAKE_FAILURE;
c76a4aea 2490 SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, SSL_R_MISSING_RSA_CERTIFICATE);
0907d710
MC
2491 return 0;
2492 }
2493
2494 /* SSLv3 and pre-standard DTLS omit the length bytes. */
2495 if (s->version == SSL3_VERSION || s->version == DTLS1_BAD_VER) {
2496 enc_premaster = *pkt;
2497 } else {
2498 if (!PACKET_get_length_prefixed_2(pkt, &enc_premaster)
2499 || PACKET_remaining(pkt) != 0) {
2500 *al = SSL_AD_DECODE_ERROR;
c76a4aea 2501 SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, SSL_R_LENGTH_MISMATCH);
0907d710 2502 return 0;
0f113f3e 2503 }
0907d710 2504 }
0f113f3e 2505
0907d710
MC
2506 /*
2507 * We want to be sure that the plaintext buffer size makes it safe to
2508 * iterate over the entire size of a premaster secret
2509 * (SSL_MAX_MASTER_KEY_LENGTH). Reject overly short RSA keys because
2510 * their ciphertext cannot accommodate a premaster secret anyway.
2511 */
2512 if (RSA_size(rsa) < SSL_MAX_MASTER_KEY_LENGTH) {
2513 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2514 SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, RSA_R_KEY_SIZE_TOO_SMALL);
0907d710
MC
2515 return 0;
2516 }
0f113f3e 2517
0907d710
MC
2518 rsa_decrypt = OPENSSL_malloc(RSA_size(rsa));
2519 if (rsa_decrypt == NULL) {
2520 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2521 SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, ERR_R_MALLOC_FAILURE);
0907d710
MC
2522 return 0;
2523 }
0f113f3e 2524
0907d710
MC
2525 /*
2526 * We must not leak whether a decryption failure occurs because of
2527 * Bleichenbacher's attack on PKCS #1 v1.5 RSA padding (see RFC 2246,
2528 * section 7.4.7.1). The code follows that advice of the TLS RFC and
2529 * generates a random premaster secret for the case that the decrypt
2530 * fails. See https://tools.ietf.org/html/rfc5246#section-7.4.7.1
2531 */
20ca916d 2532
a230b26e 2533 if (RAND_bytes(rand_premaster_secret, sizeof(rand_premaster_secret)) <= 0)
0907d710 2534 goto err;
0f113f3e 2535
0907d710
MC
2536 /*
2537 * Decrypt with no padding. PKCS#1 padding will be removed as part of
2538 * the timing-sensitive code below.
2539 */
348240c6
MC
2540 /* TODO(size_t): Convert this function */
2541 decrypt_len = (int)RSA_private_decrypt((int)PACKET_remaining(&enc_premaster),
2542 PACKET_data(&enc_premaster),
2543 rsa_decrypt, rsa, RSA_NO_PADDING);
0907d710
MC
2544 if (decrypt_len < 0)
2545 goto err;
20ca916d 2546
0907d710 2547 /* Check the padding. See RFC 3447, section 7.2.2. */
5b8fa431 2548
0907d710
MC
2549 /*
2550 * The smallest padded premaster is 11 bytes of overhead. Small keys
2551 * are publicly invalid, so this may return immediately. This ensures
2552 * PS is at least 8 bytes.
2553 */
2554 if (decrypt_len < 11 + SSL_MAX_MASTER_KEY_LENGTH) {
2555 *al = SSL_AD_DECRYPT_ERROR;
c76a4aea 2556 SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, SSL_R_DECRYPTION_FAILED);
0907d710
MC
2557 goto err;
2558 }
0f113f3e 2559
0907d710
MC
2560 padding_len = decrypt_len - SSL_MAX_MASTER_KEY_LENGTH;
2561 decrypt_good = constant_time_eq_int_8(rsa_decrypt[0], 0) &
a230b26e 2562 constant_time_eq_int_8(rsa_decrypt[1], 2);
0907d710
MC
2563 for (j = 2; j < padding_len - 1; j++) {
2564 decrypt_good &= ~constant_time_is_zero_8(rsa_decrypt[j]);
2565 }
2566 decrypt_good &= constant_time_is_zero_8(rsa_decrypt[padding_len - 1]);
5b8fa431 2567
0907d710
MC
2568 /*
2569 * If the version in the decrypted pre-master secret is correct then
2570 * version_good will be 0xff, otherwise it'll be zero. The
2571 * Klima-Pokorny-Rosa extension of Bleichenbacher's attack
2572 * (http://eprint.iacr.org/2003/052/) exploits the version number
2573 * check as a "bad version oracle". Thus version checks are done in
2574 * constant time and are treated like any other decryption error.
2575 */
2576 version_good =
2577 constant_time_eq_8(rsa_decrypt[padding_len],
2578 (unsigned)(s->client_version >> 8));
2579 version_good &=
2580 constant_time_eq_8(rsa_decrypt[padding_len + 1],
2581 (unsigned)(s->client_version & 0xff));
0f113f3e 2582
0907d710
MC
2583 /*
2584 * The premaster secret must contain the same version number as the
2585 * ClientHello to detect version rollback attacks (strangely, the
2586 * protocol does not offer such protection for DH ciphersuites).
2587 * However, buggy clients exist that send the negotiated protocol
2588 * version instead if the server does not support the requested
2589 * protocol version. If SSL_OP_TLS_ROLLBACK_BUG is set, tolerate such
2590 * clients.
2591 */
2592 if (s->options & SSL_OP_TLS_ROLLBACK_BUG) {
2593 unsigned char workaround_good;
2594 workaround_good = constant_time_eq_8(rsa_decrypt[padding_len],
2595 (unsigned)(s->version >> 8));
2596 workaround_good &=
5b8fa431 2597 constant_time_eq_8(rsa_decrypt[padding_len + 1],
0907d710
MC
2598 (unsigned)(s->version & 0xff));
2599 version_good |= workaround_good;
2600 }
0f113f3e 2601
0907d710
MC
2602 /*
2603 * Both decryption and version must be good for decrypt_good to
2604 * remain non-zero (0xff).
2605 */
2606 decrypt_good &= version_good;
0f113f3e 2607
0907d710
MC
2608 /*
2609 * Now copy rand_premaster_secret over from p using
2610 * decrypt_good_mask. If decryption failed, then p does not
2611 * contain valid plaintext, however, a check above guarantees
2612 * it is still sufficiently large to read from.
2613 */
2614 for (j = 0; j < sizeof(rand_premaster_secret); j++) {
2615 rsa_decrypt[padding_len + j] =
2616 constant_time_select_8(decrypt_good,
2617 rsa_decrypt[padding_len + j],
2618 rand_premaster_secret[j]);
2619 }
0f113f3e 2620
0907d710
MC
2621 if (!ssl_generate_master_secret(s, rsa_decrypt + padding_len,
2622 sizeof(rand_premaster_secret), 0)) {
2623 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2624 SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, ERR_R_INTERNAL_ERROR);
0907d710
MC
2625 goto err;
2626 }
0f113f3e 2627
0907d710
MC
2628 ret = 1;
2629 err:
2630 OPENSSL_free(rsa_decrypt);
2631 return ret;
2632#else
2633 /* Should never happen */
2634 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2635 SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, ERR_R_INTERNAL_ERROR);
0907d710
MC
2636 return 0;
2637#endif
2638}
2639
642360f9
MC
2640static int tls_process_cke_dhe(SSL *s, PACKET *pkt, int *al)
2641{
2642#ifndef OPENSSL_NO_DH
2643 EVP_PKEY *skey = NULL;
2644 DH *cdh;
2645 unsigned int i;
2646 BIGNUM *pub_key;
2647 const unsigned char *data;
2648 EVP_PKEY *ckey = NULL;
2649 int ret = 0;
2650
31a7d80d 2651 if (!PACKET_get_net_2(pkt, &i) || PACKET_remaining(pkt) != i) {
642360f9 2652 *al = SSL_AD_HANDSHAKE_FAILURE;
c76a4aea 2653 SSLerr(SSL_F_TLS_PROCESS_CKE_DHE,
642360f9
MC
2654 SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG);
2655 goto err;
2656 }
642360f9
MC
2657 skey = s->s3->tmp.pkey;
2658 if (skey == NULL) {
2659 *al = SSL_AD_HANDSHAKE_FAILURE;
c76a4aea 2660 SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, SSL_R_MISSING_TMP_DH_KEY);
642360f9
MC
2661 goto err;
2662 }
2663
2664 if (PACKET_remaining(pkt) == 0L) {
2665 *al = SSL_AD_HANDSHAKE_FAILURE;
c76a4aea 2666 SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, SSL_R_MISSING_TMP_DH_KEY);
642360f9
MC
2667 goto err;
2668 }
2669 if (!PACKET_get_bytes(pkt, &data, i)) {
2670 /* We already checked we have enough data */
2671 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2672 SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, ERR_R_INTERNAL_ERROR);
642360f9
MC
2673 goto err;
2674 }
2675 ckey = EVP_PKEY_new();
2676 if (ckey == NULL || EVP_PKEY_copy_parameters(ckey, skey) == 0) {
c76a4aea 2677 SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, SSL_R_BN_LIB);
642360f9
MC
2678 goto err;
2679 }
2680 cdh = EVP_PKEY_get0_DH(ckey);
2681 pub_key = BN_bin2bn(data, i, NULL);
2682
2683 if (pub_key == NULL || !DH_set0_key(cdh, pub_key, NULL)) {
c76a4aea 2684 SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, ERR_R_INTERNAL_ERROR);
642360f9
MC
2685 if (pub_key != NULL)
2686 BN_free(pub_key);
2687 goto err;
2688 }
2689
0f1e51ea 2690 if (ssl_derive(s, skey, ckey, 1) == 0) {
642360f9 2691 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2692 SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, ERR_R_INTERNAL_ERROR);
642360f9
MC
2693 goto err;
2694 }
2695
2696 ret = 1;
2697 EVP_PKEY_free(s->s3->tmp.pkey);
2698 s->s3->tmp.pkey = NULL;
2699 err:
2700 EVP_PKEY_free(ckey);
2701 return ret;
2702#else
2703 /* Should never happen */
2704 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2705 SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, ERR_R_INTERNAL_ERROR);
642360f9
MC
2706 return 0;
2707#endif
2708}
2709
19ed1ec1
MC
2710static int tls_process_cke_ecdhe(SSL *s, PACKET *pkt, int *al)
2711{
2712#ifndef OPENSSL_NO_EC
2713 EVP_PKEY *skey = s->s3->tmp.pkey;
2714 EVP_PKEY *ckey = NULL;
2715 int ret = 0;
2716
2717 if (PACKET_remaining(pkt) == 0L) {
2718 /* We don't support ECDH client auth */
2719 *al = SSL_AD_HANDSHAKE_FAILURE;
c76a4aea 2720 SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, SSL_R_MISSING_TMP_ECDH_KEY);
19ed1ec1
MC
2721 goto err;
2722 } else {
2723 unsigned int i;
2724 const unsigned char *data;
2725
2726 /*
2727 * Get client's public key from encoded point in the
2728 * ClientKeyExchange message.
2729 */
2730
2731 /* Get encoded point length */
fb933982
DSH
2732 if (!PACKET_get_1(pkt, &i) || !PACKET_get_bytes(pkt, &data, i)
2733 || PACKET_remaining(pkt) != 0) {
19ed1ec1 2734 *al = SSL_AD_DECODE_ERROR;
c76a4aea 2735 SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, SSL_R_LENGTH_MISMATCH);
19ed1ec1
MC
2736 goto err;
2737 }
19ed1ec1
MC
2738 ckey = EVP_PKEY_new();
2739 if (ckey == NULL || EVP_PKEY_copy_parameters(ckey, skey) <= 0) {
c76a4aea 2740 SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, ERR_R_EVP_LIB);
19ed1ec1
MC
2741 goto err;
2742 }
ec24630a 2743 if (EVP_PKEY_set1_tls_encodedpoint(ckey, data, i) == 0) {
fb933982 2744 *al = SSL_AD_HANDSHAKE_FAILURE;
c76a4aea 2745 SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, ERR_R_EC_LIB);
19ed1ec1
MC
2746 goto err;
2747 }
2748 }
2749
0f1e51ea 2750 if (ssl_derive(s, skey, ckey, 1) == 0) {
19ed1ec1 2751 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2752 SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, ERR_R_INTERNAL_ERROR);
19ed1ec1
MC
2753 goto err;
2754 }
2755
2756 ret = 1;
2757 EVP_PKEY_free(s->s3->tmp.pkey);
2758 s->s3->tmp.pkey = NULL;
2759 err:
2760 EVP_PKEY_free(ckey);
2761
2762 return ret;
2763#else
2764 /* Should never happen */
2765 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2766 SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, ERR_R_INTERNAL_ERROR);
19ed1ec1
MC
2767 return 0;
2768#endif
2769}
2770
c437eef6
MC
2771static int tls_process_cke_srp(SSL *s, PACKET *pkt, int *al)
2772{
2773#ifndef OPENSSL_NO_SRP
2774 unsigned int i;
2775 const unsigned char *data;
2776
2777 if (!PACKET_get_net_2(pkt, &i)
a230b26e 2778 || !PACKET_get_bytes(pkt, &data, i)) {
c437eef6 2779 *al = SSL_AD_DECODE_ERROR;
c76a4aea 2780 SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, SSL_R_BAD_SRP_A_LENGTH);
c437eef6
MC
2781 return 0;
2782 }
2783 if ((s->srp_ctx.A = BN_bin2bn(data, i, NULL)) == NULL) {
c76a4aea 2784 SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, ERR_R_BN_LIB);
c437eef6
MC
2785 return 0;
2786 }
a230b26e 2787 if (BN_ucmp(s->srp_ctx.A, s->srp_ctx.N) >= 0 || BN_is_zero(s->srp_ctx.A)) {
c437eef6 2788 *al = SSL_AD_ILLEGAL_PARAMETER;
c76a4aea 2789 SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, SSL_R_BAD_SRP_PARAMETERS);
c437eef6
MC
2790 return 0;
2791 }
2792 OPENSSL_free(s->session->srp_username);
2793 s->session->srp_username = OPENSSL_strdup(s->srp_ctx.login);
2794 if (s->session->srp_username == NULL) {
c76a4aea 2795 SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, ERR_R_MALLOC_FAILURE);
c437eef6
MC
2796 return 0;
2797 }
2798
2799 if (!srp_generate_server_master_secret(s)) {
c76a4aea 2800 SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, ERR_R_INTERNAL_ERROR);
c437eef6
MC
2801 return 0;
2802 }
2803
2804 return 1;
2805#else
2806 /* Should never happen */
2807 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2808 SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, ERR_R_INTERNAL_ERROR);
c437eef6
MC
2809 return 0;
2810#endif
2811}
2812
2813static int tls_process_cke_gost(SSL *s, PACKET *pkt, int *al)
2814{
2815#ifndef OPENSSL_NO_GOST
2816 EVP_PKEY_CTX *pkey_ctx;
2817 EVP_PKEY *client_pub_pkey = NULL, *pk = NULL;
2818 unsigned char premaster_secret[32];
2819 const unsigned char *start;
2820 size_t outlen = 32, inlen;
2821 unsigned long alg_a;
2822 int Ttag, Tclass;
2823 long Tlen;
348240c6 2824 size_t sess_key_len;
c437eef6
MC
2825 const unsigned char *data;
2826 int ret = 0;
2827
2828 /* Get our certificate private key */
2829 alg_a = s->s3->tmp.new_cipher->algorithm_auth;
2830 if (alg_a & SSL_aGOST12) {
2831 /*
2832 * New GOST ciphersuites have SSL_aGOST01 bit too
2833 */
2834 pk = s->cert->pkeys[SSL_PKEY_GOST12_512].privatekey;
2835 if (pk == NULL) {
2836 pk = s->cert->pkeys[SSL_PKEY_GOST12_256].privatekey;
2837 }
2838 if (pk == NULL) {
2839 pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey;
2840 }
2841 } else if (alg_a & SSL_aGOST01) {
2842 pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey;
2843 }
2844
2845 pkey_ctx = EVP_PKEY_CTX_new(pk, NULL);
2846 if (pkey_ctx == NULL) {
2847 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2848 SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_MALLOC_FAILURE);
c437eef6
MC
2849 return 0;
2850 }
2851 if (EVP_PKEY_decrypt_init(pkey_ctx) <= 0) {
2852 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2853 SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_INTERNAL_ERROR);
c437eef6
MC
2854 return 0;
2855 }
2856 /*
2857 * If client certificate is present and is of the same type, maybe
2858 * use it for key exchange. Don't mind errors from
2859 * EVP_PKEY_derive_set_peer, because it is completely valid to use a
2860 * client certificate for authorization only.
2861 */
2862 client_pub_pkey = X509_get0_pubkey(s->session->peer);
2863 if (client_pub_pkey) {
2864 if (EVP_PKEY_derive_set_peer(pkey_ctx, client_pub_pkey) <= 0)
2865 ERR_clear_error();
2866 }
2867 /* Decrypt session key */
2868 sess_key_len = PACKET_remaining(pkt);
2869 if (!PACKET_get_bytes(pkt, &data, sess_key_len)) {
2870 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2871 SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_INTERNAL_ERROR);
c437eef6
MC
2872 goto err;
2873 }
348240c6 2874 /* TODO(size_t): Convert this function */
a230b26e 2875 if (ASN1_get_object((const unsigned char **)&data, &Tlen, &Ttag,
348240c6 2876 &Tclass, (long)sess_key_len) != V_ASN1_CONSTRUCTED
a230b26e 2877 || Ttag != V_ASN1_SEQUENCE || Tclass != V_ASN1_UNIVERSAL) {
c437eef6 2878 *al = SSL_AD_DECODE_ERROR;
c76a4aea 2879 SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, SSL_R_DECRYPTION_FAILED);
c437eef6
MC
2880 goto err;
2881 }
2882 start = data;
2883 inlen = Tlen;
2884 if (EVP_PKEY_decrypt
2885 (pkey_ctx, premaster_secret, &outlen, start, inlen) <= 0) {
2886 *al = SSL_AD_DECODE_ERROR;
c76a4aea 2887 SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, SSL_R_DECRYPTION_FAILED);
c437eef6
MC
2888 goto err;
2889 }
2890 /* Generate master secret */
2891 if (!ssl_generate_master_secret(s, premaster_secret,
2892 sizeof(premaster_secret), 0)) {
2893 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2894 SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_INTERNAL_ERROR);
c437eef6
MC
2895 goto err;
2896 }
2897 /* Check if pubkey from client certificate was used */
2898 if (EVP_PKEY_CTX_ctrl
2899 (pkey_ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 2, NULL) > 0)
2900 s->statem.no_cert_verify = 1;
2901
2902 ret = 1;
2903 err:
2904 EVP_PKEY_CTX_free(pkey_ctx);
2905 return ret;
2906#else
2907 /* Should never happen */
2908 *al = SSL_AD_INTERNAL_ERROR;
c76a4aea 2909 SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_INTERNAL_ERROR);
c437eef6
MC
2910 return 0;
2911#endif
2912}
2913
0907d710
MC
2914MSG_PROCESS_RETURN tls_process_client_key_exchange(SSL *s, PACKET *pkt)
2915{
2916 int al = -1;
2917 unsigned long alg_k;
2918
2919 alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2920
2921 /* For PSK parse and retrieve identity, obtain PSK key */
2922 if ((alg_k & SSL_PSK) && !tls_process_cke_psk_preamble(s, pkt, &al))
2923 goto err;
2924
2925 if (alg_k & SSL_kPSK) {
2926 /* Identity extracted earlier: should be nothing left */
2927 if (PACKET_remaining(pkt) != 0) {
2928 al = SSL_AD_HANDSHAKE_FAILURE;
a230b26e
EK
2929 SSLerr(SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE,
2930 SSL_R_LENGTH_MISMATCH);
9059eb71 2931 goto err;
0907d710
MC
2932 }
2933 /* PSK handled by ssl_generate_master_secret */
2934 if (!ssl_generate_master_secret(s, NULL, 0, 0)) {
69f68237 2935 al = SSL_AD_INTERNAL_ERROR;
e27f234a 2936 SSLerr(SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
9059eb71 2937 goto err;
69f68237 2938 }
0907d710
MC
2939 } else if (alg_k & (SSL_kRSA | SSL_kRSAPSK)) {
2940 if (!tls_process_cke_rsa(s, pkt, &al))
2941 goto err;
642360f9
MC
2942 } else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
2943 if (!tls_process_cke_dhe(s, pkt, &al))
0f113f3e 2944 goto err;
19ed1ec1
MC
2945 } else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
2946 if (!tls_process_cke_ecdhe(s, pkt, &al))
2947 goto err;
c437eef6
MC
2948 } else if (alg_k & SSL_kSRP) {
2949 if (!tls_process_cke_srp(s, pkt, &al))
0f113f3e 2950 goto err;
c437eef6
MC
2951 } else if (alg_k & SSL_kGOST) {
2952 if (!tls_process_cke_gost(s, pkt, &al))
0f113f3e 2953 goto err;
c437eef6 2954 } else {
0f113f3e 2955 al = SSL_AD_HANDSHAKE_FAILURE;
a230b26e
EK
2956 SSLerr(SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE,
2957 SSL_R_UNKNOWN_CIPHER_TYPE);
9059eb71 2958 goto err;
0f113f3e
MC
2959 }
2960
e27f234a 2961 return MSG_PROCESS_CONTINUE_PROCESSING;
0f113f3e 2962 err:
0907d710
MC
2963 if (al != -1)
2964 ssl3_send_alert(s, SSL3_AL_FATAL, al);
85269210
DSH
2965#ifndef OPENSSL_NO_PSK
2966 OPENSSL_clear_free(s->s3->tmp.psk, s->s3->tmp.psklen);
2967 s->s3->tmp.psk = NULL;
58964a49 2968#endif
fe3a3291 2969 ossl_statem_set_error(s);
e27f234a 2970 return MSG_PROCESS_ERROR;
0f113f3e 2971}
d02b48c6 2972
be3583fa 2973WORK_STATE tls_post_process_client_key_exchange(SSL *s, WORK_STATE wst)
94836de2 2974{
94836de2 2975#ifndef OPENSSL_NO_SCTP
c130dd8e
MC
2976 if (wst == WORK_MORE_A) {
2977 if (SSL_IS_DTLS(s)) {
2978 unsigned char sctpauthkey[64];
2979 char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
2980 /*
2981 * Add new shared key for SCTP-Auth, will be ignored if no SCTP
2982 * used.
2983 */
141eb8c6
MC
2984 memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
2985 sizeof(DTLS1_SCTP_AUTH_LABEL));
c130dd8e
MC
2986
2987 if (SSL_export_keying_material(s, sctpauthkey,
a230b26e
EK
2988 sizeof(sctpauthkey), labelbuffer,
2989 sizeof(labelbuffer), NULL, 0,
2990 0) <= 0) {
fe3a3291 2991 ossl_statem_set_error(s);
c130dd8e
MC
2992 return WORK_ERROR;;
2993 }
94836de2 2994
c130dd8e
MC
2995 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
2996 sizeof(sctpauthkey), sctpauthkey);
94836de2 2997 }
c130dd8e
MC
2998 wst = WORK_MORE_B;
2999 }
94836de2 3000
c130dd8e 3001 if ((wst == WORK_MORE_B)
a230b26e
EK
3002 /* Is this SCTP? */
3003 && BIO_dgram_is_sctp(SSL_get_wbio(s))
3004 /* Are we renegotiating? */
3005 && s->renegotiate
3006 /* Are we going to skip the CertificateVerify? */
3007 && (s->session->peer == NULL || s->statem.no_cert_verify)
3008 && BIO_dgram_sctp_msg_waiting(SSL_get_rbio(s))) {
c130dd8e
MC
3009 s->s3->in_read_app_data = 2;
3010 s->rwstate = SSL_READING;
3011 BIO_clear_retry_flags(SSL_get_rbio(s));
3012 BIO_set_retry_read(SSL_get_rbio(s));
d99b0691 3013 ossl_statem_set_sctp_read_sock(s, 1);
c130dd8e
MC
3014 return WORK_MORE_B;
3015 } else {
fe3a3291 3016 ossl_statem_set_sctp_read_sock(s, 0);
94836de2
MC
3017 }
3018#endif
3019
149c2ef5 3020 if (s->statem.no_cert_verify || !s->session->peer) {
a230b26e
EK
3021 /*
3022 * No certificate verify or no peer certificate so we no longer need
3023 * the handshake_buffer
149c2ef5
MC
3024 */
3025 if (!ssl3_digest_cached_records(s, 0)) {
3026 ossl_statem_set_error(s);
3027 return WORK_ERROR;
3028 }
94836de2 3029 return WORK_FINISHED_CONTINUE;
28f4580c 3030 } else {
94836de2
MC
3031 if (!s->s3->handshake_buffer) {
3032 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE,
3033 ERR_R_INTERNAL_ERROR);
fe3a3291 3034 ossl_statem_set_error(s);
94836de2
MC
3035 return WORK_ERROR;
3036 }
3037 /*
3038 * For sigalgs freeze the handshake buffer. If we support
3039 * extms we've done this already so this is a no-op
3040 */
3041 if (!ssl3_digest_cached_records(s, 1)) {
fe3a3291 3042 ossl_statem_set_error(s);
94836de2
MC
3043 return WORK_ERROR;
3044 }
94836de2
MC
3045 }
3046
3047 return WORK_FINISHED_CONTINUE;
3048}
3049
be3583fa 3050MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
e27f234a
MC
3051{
3052 EVP_PKEY *pkey = NULL;
b6981744 3053 const unsigned char *sig, *data;
5ca17d8c 3054#ifndef OPENSSL_NO_GOST
b6981744 3055 unsigned char *gost_data = NULL;
5ca17d8c 3056#endif
e27f234a 3057 int al, ret = MSG_PROCESS_ERROR;
28f4580c 3058 int type = 0, j;
e27f234a
MC
3059 unsigned int len;
3060 X509 *peer;
3061 const EVP_MD *md = NULL;
28f4580c
DSH
3062 long hdatalen = 0;
3063 void *hdata;
3064
bfb0641f 3065 EVP_MD_CTX *mctx = EVP_MD_CTX_new();
6e59a892
RL
3066
3067 if (mctx == NULL) {
3068 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_MALLOC_FAILURE);
3069 al = SSL_AD_INTERNAL_ERROR;
3070 goto f_err;
3071 }
e27f234a 3072
a0bd6493 3073 peer = s->session->peer;
8382fd3a 3074 pkey = X509_get0_pubkey(peer);
a0bd6493 3075 type = X509_certificate_type(peer, pkey);
0f113f3e
MC
3076
3077 if (!(type & EVP_PKT_SIGN)) {
e27f234a 3078 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY,
0f113f3e
MC
3079 SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE);
3080 al = SSL_AD_ILLEGAL_PARAMETER;
3081 goto f_err;
3082 }
3083
0f113f3e
MC
3084 /* Check for broken implementations of GOST ciphersuites */
3085 /*
3086 * If key is GOST and n is exactly 64, it is bare signature without
e44380a9 3087 * length field (CryptoPro implementations at least till CSP 4.0)
0f113f3e 3088 */
2a9b9654 3089#ifndef OPENSSL_NO_GOST
3aeb9348
DSH
3090 if (PACKET_remaining(pkt) == 64
3091 && EVP_PKEY_id(pkey) == NID_id_GostR3410_2001) {
f532a35d 3092 len = 64;
2a9b9654
MC
3093 } else
3094#endif
3095 {
0f113f3e 3096 if (SSL_USE_SIGALGS(s)) {
f532a35d
MC
3097 int rv;
3098
73999b62 3099 if (!PACKET_get_bytes(pkt, &sig, 2)) {
f532a35d
MC
3100 al = SSL_AD_DECODE_ERROR;
3101 goto f_err;
3102 }
3103 rv = tls12_check_peer_sigalg(&md, s, sig, pkey);
0f113f3e
MC
3104 if (rv == -1) {
3105 al = SSL_AD_INTERNAL_ERROR;
3106 goto f_err;
3107 } else if (rv == 0) {
3108 al = SSL_AD_DECODE_ERROR;
3109 goto f_err;
3110 }
f37f20ff 3111#ifdef SSL_DEBUG
0f113f3e 3112 fprintf(stderr, "USING TLSv1.2 HASH %s\n", EVP_MD_name(md));
f37f20ff 3113#endif
28f4580c 3114 } else {
aa430c74
DSH
3115 /* Use default digest for this key type */
3116 int idx = ssl_cert_type(NULL, pkey);
3117 if (idx >= 0)
3118 md = s->s3->tmp.md[idx];
3119 if (md == NULL) {
3120 al = SSL_AD_INTERNAL_ERROR;
3121 goto f_err;
3122 }
0f113f3e 3123 }
aa430c74 3124
73999b62 3125 if (!PACKET_get_net_2(pkt, &len)) {
e27f234a 3126 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, SSL_R_LENGTH_MISMATCH);
0f113f3e
MC
3127 al = SSL_AD_DECODE_ERROR;
3128 goto f_err;
3129 }
3130 }
3131 j = EVP_PKEY_size(pkey);
73999b62 3132 if (((int)len > j) || ((int)PACKET_remaining(pkt) > j)
a230b26e 3133 || (PACKET_remaining(pkt) == 0)) {
e27f234a 3134 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, SSL_R_WRONG_SIGNATURE_SIZE);
0f113f3e
MC
3135 al = SSL_AD_DECODE_ERROR;
3136 goto f_err;
3137 }
73999b62 3138 if (!PACKET_get_bytes(pkt, &data, len)) {
e27f234a 3139 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, SSL_R_LENGTH_MISMATCH);
f532a35d
MC
3140 al = SSL_AD_DECODE_ERROR;
3141 goto f_err;
3142 }
0f113f3e 3143
28f4580c
DSH
3144 hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata);
3145 if (hdatalen <= 0) {
3146 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_INTERNAL_ERROR);
3147 al = SSL_AD_INTERNAL_ERROR;
3148 goto f_err;
3149 }
0f1e51ea 3150
f37f20ff 3151#ifdef SSL_DEBUG
28f4580c 3152 fprintf(stderr, "Using client verify alg %s\n", EVP_MD_name(md));
f37f20ff 3153#endif
6e59a892
RL
3154 if (!EVP_VerifyInit_ex(mctx, md, NULL)
3155 || !EVP_VerifyUpdate(mctx, hdata, hdatalen)) {
28f4580c
DSH
3156 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_EVP_LIB);
3157 al = SSL_AD_INTERNAL_ERROR;
3158 goto f_err;
3159 }
2a9b9654 3160#ifndef OPENSSL_NO_GOST
3aeb9348
DSH
3161 {
3162 int pktype = EVP_PKEY_id(pkey);
3163 if (pktype == NID_id_GostR3410_2001
3164 || pktype == NID_id_GostR3410_2012_256
b6981744
EK
3165 || pktype == NID_id_GostR3410_2012_512) {
3166 if ((gost_data = OPENSSL_malloc(len)) == NULL) {
3167 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_MALLOC_FAILURE);
3168 al = SSL_AD_INTERNAL_ERROR;
3169 goto f_err;
3170 }
3171 BUF_reverse(gost_data, data, len);
3172 data = gost_data;
3173 }
28f4580c 3174 }
2a9b9654 3175#endif
e44380a9 3176
28f4580c 3177 if (s->version == SSL3_VERSION
6e59a892 3178 && !EVP_MD_CTX_ctrl(mctx, EVP_CTRL_SSL3_MASTER_SECRET,
348240c6 3179 (int)s->session->master_key_length,
28f4580c
DSH
3180 s->session->master_key)) {
3181 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_EVP_LIB);
3182 al = SSL_AD_INTERNAL_ERROR;
3183 goto f_err;
3184 }
3185
6e59a892 3186 if (EVP_VerifyFinal(mctx, data, len, pkey) <= 0) {
28f4580c
DSH
3187 al = SSL_AD_DECRYPT_ERROR;
3188 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, SSL_R_BAD_SIGNATURE);
0f113f3e
MC
3189 goto f_err;
3190 }
3191
c130dd8e 3192 ret = MSG_PROCESS_CONTINUE_PROCESSING;
0f113f3e
MC
3193 if (0) {
3194 f_err:
3195 ssl3_send_alert(s, SSL3_AL_FATAL, al);
fe3a3291 3196 ossl_statem_set_error(s);
0f113f3e 3197 }
25aaa98a
RS
3198 BIO_free(s->s3->handshake_buffer);
3199 s->s3->handshake_buffer = NULL;
bfb0641f 3200 EVP_MD_CTX_free(mctx);
5ca17d8c 3201#ifndef OPENSSL_NO_GOST
b6981744 3202 OPENSSL_free(gost_data);
5ca17d8c 3203#endif
e27f234a 3204 return ret;
0f113f3e 3205}
d02b48c6 3206
be3583fa 3207MSG_PROCESS_RETURN tls_process_client_certificate(SSL *s, PACKET *pkt)
e27f234a 3208{
20dbe585 3209 int i, al = SSL_AD_INTERNAL_ERROR, ret = MSG_PROCESS_ERROR;
e27f234a
MC
3210 X509 *x = NULL;
3211 unsigned long l, llen;
b6981744 3212 const unsigned char *certstart, *certbytes;
e27f234a 3213 STACK_OF(X509) *sk = NULL;
73999b62 3214 PACKET spkt;
0f113f3e
MC
3215
3216 if ((sk = sk_X509_new_null()) == NULL) {
e27f234a
MC
3217 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, ERR_R_MALLOC_FAILURE);
3218 goto f_err;
0f113f3e
MC
3219 }
3220
73999b62 3221 if (!PACKET_get_net_3(pkt, &llen)
a230b26e
EK
3222 || !PACKET_get_sub_packet(pkt, &spkt, llen)
3223 || PACKET_remaining(pkt) != 0) {
0f113f3e 3224 al = SSL_AD_DECODE_ERROR;
e27f234a 3225 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, SSL_R_LENGTH_MISMATCH);
0f113f3e
MC
3226 goto f_err;
3227 }
0bc09ecd
MC
3228
3229 while (PACKET_remaining(&spkt) > 0) {
3230 if (!PACKET_get_net_3(&spkt, &l)
a230b26e 3231 || !PACKET_get_bytes(&spkt, &certbytes, l)) {
0f113f3e 3232 al = SSL_AD_DECODE_ERROR;
e27f234a 3233 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
0f113f3e
MC
3234 SSL_R_CERT_LENGTH_MISMATCH);
3235 goto f_err;
3236 }
3237
0bc09ecd
MC
3238 certstart = certbytes;
3239 x = d2i_X509(NULL, (const unsigned char **)&certbytes, l);
0f113f3e 3240 if (x == NULL) {
e27f234a
MC
3241 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, ERR_R_ASN1_LIB);
3242 goto f_err;
0f113f3e 3243 }
0bc09ecd 3244 if (certbytes != (certstart + l)) {
0f113f3e 3245 al = SSL_AD_DECODE_ERROR;
e27f234a 3246 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
0f113f3e
MC
3247 SSL_R_CERT_LENGTH_MISMATCH);
3248 goto f_err;
3249 }
3250 if (!sk_X509_push(sk, x)) {
e27f234a
MC
3251 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, ERR_R_MALLOC_FAILURE);
3252 goto f_err;
0f113f3e
MC
3253 }
3254 x = NULL;
0f113f3e
MC
3255 }
3256
3257 if (sk_X509_num(sk) <= 0) {
3258 /* TLS does not mind 0 certs returned */
3259 if (s->version == SSL3_VERSION) {
3260 al = SSL_AD_HANDSHAKE_FAILURE;
e27f234a 3261 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
0f113f3e
MC
3262 SSL_R_NO_CERTIFICATES_RETURNED);
3263 goto f_err;
3264 }
3265 /* Fail for TLS only if we required a certificate */
3266 else if ((s->verify_mode & SSL_VERIFY_PEER) &&
3267 (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) {
e27f234a 3268 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
0f113f3e
MC
3269 SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
3270 al = SSL_AD_HANDSHAKE_FAILURE;
3271 goto f_err;
3272 }
3273 /* No client certificate so digest cached records */
124037fd 3274 if (s->s3->handshake_buffer && !ssl3_digest_cached_records(s, 0)) {
0f113f3e
MC
3275 goto f_err;
3276 }
3277 } else {
3278 EVP_PKEY *pkey;
3279 i = ssl_verify_cert_chain(s, sk);
3280 if (i <= 0) {
3281 al = ssl_verify_alarm_type(s->verify_result);
e27f234a 3282 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
0f113f3e
MC
3283 SSL_R_CERTIFICATE_VERIFY_FAILED);
3284 goto f_err;
3285 }
3286 if (i > 1) {
e27f234a 3287 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, i);
0f113f3e
MC
3288 al = SSL_AD_HANDSHAKE_FAILURE;
3289 goto f_err;
3290 }
8382fd3a 3291 pkey = X509_get0_pubkey(sk_X509_value(sk, 0));
0f113f3e
MC
3292 if (pkey == NULL) {
3293 al = SSL3_AD_HANDSHAKE_FAILURE;
e27f234a 3294 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
0f113f3e
MC
3295 SSL_R_UNKNOWN_CERTIFICATE_TYPE);
3296 goto f_err;
3297 }
0f113f3e
MC
3298 }
3299
222561fe 3300 X509_free(s->session->peer);
0f113f3e
MC
3301 s->session->peer = sk_X509_shift(sk);
3302 s->session->verify_result = s->verify_result;
3303
c34b0f99
DSH
3304 sk_X509_pop_free(s->session->peer_chain, X509_free);
3305 s->session->peer_chain = sk;
0f1e51ea
MC
3306
3307 /*
3308 * Freeze the handshake buffer. For <TLS1.3 we do this after the CKE
3309 * message
3310 */
94ed2c67 3311 if (SSL_IS_TLS13(s) && !ssl3_digest_cached_records(s, 1)) {
0f1e51ea
MC
3312 al = SSL_AD_INTERNAL_ERROR;
3313 SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, ERR_R_INTERNAL_ERROR);
3314 goto f_err;
3315 }
3316
0f113f3e
MC
3317 /*
3318 * Inconsistency alert: cert_chain does *not* include the peer's own
d4d78943 3319 * certificate, while we do include it in statem_clnt.c
0f113f3e 3320 */
0f113f3e 3321 sk = NULL;
e27f234a 3322 ret = MSG_PROCESS_CONTINUE_READING;
66696478
RS
3323 goto done;
3324
0f113f3e 3325 f_err:
66696478 3326 ssl3_send_alert(s, SSL3_AL_FATAL, al);
fe3a3291 3327 ossl_statem_set_error(s);
66696478 3328 done:
222561fe
RS
3329 X509_free(x);
3330 sk_X509_pop_free(sk, X509_free);
e27f234a 3331 return ret;
0f113f3e 3332}
d02b48c6 3333
7cea05dc 3334int tls_construct_server_certificate(SSL *s, WPACKET *pkt)
e27f234a
MC
3335{
3336 CERT_PKEY *cpk;
3337
3338 cpk = ssl_get_server_send_pkey(s);
3339 if (cpk == NULL) {
3340 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
e27f234a
MC
3341 return 0;
3342 }
3343
7cea05dc 3344 if (!ssl3_output_cert_chain(s, pkt, cpk)) {
e27f234a 3345 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
e27f234a
MC
3346 return 0;
3347 }
3348
3349 return 1;
3350}
3351
7cea05dc 3352int tls_construct_new_session_ticket(SSL *s, WPACKET *pkt)
e27f234a
MC
3353{
3354 unsigned char *senc = NULL;
83ae4661 3355 EVP_CIPHER_CTX *ctx = NULL;
bf7c6817 3356 HMAC_CTX *hctx = NULL;
a00d75e1 3357 unsigned char *p, *encdata1, *encdata2, *macdata1, *macdata2;
e27f234a 3358 const unsigned char *const_p;
a00d75e1 3359 int len, slen_full, slen, lenfinal;
e27f234a
MC
3360 SSL_SESSION *sess;
3361 unsigned int hlen;
3362 SSL_CTX *tctx = s->initial_ctx;
3363 unsigned char iv[EVP_MAX_IV_LENGTH];
d139723b
KR
3364 unsigned char key_name[TLSEXT_KEYNAME_LENGTH];
3365 int iv_len;
a00d75e1 3366 size_t macoffset, macendoffset;
e27f234a
MC
3367
3368 /* get session encoding length */
3369 slen_full = i2d_SSL_SESSION(s->session, NULL);
3370 /*
3371 * Some length values are 16 bits, so forget it if session is too
3372 * long
3373 */
3374 if (slen_full == 0 || slen_full > 0xFF00) {
fe3a3291 3375 ossl_statem_set_error(s);
e27f234a
MC
3376 return 0;
3377 }
3378 senc = OPENSSL_malloc(slen_full);
a71edf3b 3379 if (senc == NULL) {
fe3a3291 3380 ossl_statem_set_error(s);
e27f234a
MC
3381 return 0;
3382 }
0f113f3e 3383
846ec07d 3384 ctx = EVP_CIPHER_CTX_new();
bf7c6817 3385 hctx = HMAC_CTX_new();
83ae4661
MC
3386 if (ctx == NULL || hctx == NULL) {
3387 SSLerr(SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE);
3388 goto err;
3389 }
0f113f3e 3390
e27f234a
MC
3391 p = senc;
3392 if (!i2d_SSL_SESSION(s->session, &p))
3393 goto err;
687eaf27 3394
e27f234a
MC
3395 /*
3396 * create a fresh copy (not shared with other threads) to clean up
3397 */
3398 const_p = senc;
3399 sess = d2i_SSL_SESSION(NULL, &const_p, slen_full);
3400 if (sess == NULL)
3401 goto err;
3402 sess->session_id_length = 0; /* ID is irrelevant for the ticket */
0f113f3e 3403
e27f234a
MC
3404 slen = i2d_SSL_SESSION(sess, NULL);
3405 if (slen == 0 || slen > slen_full) { /* shouldn't ever happen */
3406 SSL_SESSION_free(sess);
3407 goto err;
3408 }
3409 p = senc;
3410 if (!i2d_SSL_SESSION(sess, &p)) {
3411 SSL_SESSION_free(sess);
3412 goto err;
3413 }
3414 SSL_SESSION_free(sess);
0f113f3e 3415
e27f234a
MC
3416 /*
3417 * Initialize HMAC and cipher contexts. If callback present it does
3418 * all the work otherwise use generated values from parent ctx.
3419 */
3420 if (tctx->tlsext_ticket_key_cb) {
5c753de6
TS
3421 /* if 0 is returned, write an empty ticket */
3422 int ret = tctx->tlsext_ticket_key_cb(s, key_name, iv, ctx,
3423 hctx, 1);
3424
3425 if (ret == 0) {
a00d75e1
MC
3426
3427 /* Put timeout and length */
7cea05dc 3428 if (!WPACKET_put_bytes_u32(pkt, 0)
4a01c59f 3429 || !WPACKET_put_bytes_u16(pkt, 0)) {
a00d75e1
MC
3430 SSLerr(SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET,
3431 ERR_R_INTERNAL_ERROR);
5c753de6 3432 goto err;
a00d75e1 3433 }
5c753de6
TS
3434 OPENSSL_free(senc);
3435 EVP_CIPHER_CTX_free(ctx);
3436 HMAC_CTX_free(hctx);
3437 return 1;
3438 }
3439 if (ret < 0)
e27f234a 3440 goto err;
d139723b 3441 iv_len = EVP_CIPHER_CTX_iv_length(ctx);
e27f234a 3442 } else {
d139723b
KR
3443 const EVP_CIPHER *cipher = EVP_aes_256_cbc();
3444
3445 iv_len = EVP_CIPHER_iv_length(cipher);
3446 if (RAND_bytes(iv, iv_len) <= 0)
687eaf27 3447 goto err;
d139723b 3448 if (!EVP_EncryptInit_ex(ctx, cipher, NULL,
e27f234a 3449 tctx->tlsext_tick_aes_key, iv))
687eaf27 3450 goto err;
4e2e1ec9
TS
3451 if (!HMAC_Init_ex(hctx, tctx->tlsext_tick_hmac_key,
3452 sizeof(tctx->tlsext_tick_hmac_key),
e27f234a 3453 EVP_sha256(), NULL))
4f9fab6b 3454 goto err;
4e2e1ec9
TS
3455 memcpy(key_name, tctx->tlsext_tick_key_name,
3456 sizeof(tctx->tlsext_tick_key_name));
0f113f3e
MC
3457 }
3458
e27f234a
MC
3459 /*
3460 * Ticket lifetime hint (advisory only): We leave this unspecified
3461 * for resumed session (for simplicity), and guess that tickets for
3462 * new sessions will live as long as their sessions.
3463 */
7cea05dc 3464 if (!WPACKET_put_bytes_u32(pkt, s->hit ? 0 : s->session->timeout)
a00d75e1 3465 /* Now the actual ticket data */
7cea05dc
MC
3466 || !WPACKET_start_sub_packet_u16(pkt)
3467 || !WPACKET_get_total_written(pkt, &macoffset)
a00d75e1 3468 /* Output key name */
7cea05dc 3469 || !WPACKET_memcpy(pkt, key_name, sizeof(key_name))
a00d75e1 3470 /* output IV */
7cea05dc
MC
3471 || !WPACKET_memcpy(pkt, iv, iv_len)
3472 || !WPACKET_reserve_bytes(pkt, slen + EVP_MAX_BLOCK_LENGTH,
a00d75e1
MC
3473 &encdata1)
3474 /* Encrypt session data */
3475 || !EVP_EncryptUpdate(ctx, encdata1, &len, senc, slen)
7cea05dc 3476 || !WPACKET_allocate_bytes(pkt, len, &encdata2)
a00d75e1
MC
3477 || encdata1 != encdata2
3478 || !EVP_EncryptFinal(ctx, encdata1 + len, &lenfinal)
7cea05dc 3479 || !WPACKET_allocate_bytes(pkt, lenfinal, &encdata2)
a00d75e1
MC
3480 || encdata1 + len != encdata2
3481 || len + lenfinal > slen + EVP_MAX_BLOCK_LENGTH
7cea05dc 3482 || !WPACKET_get_total_written(pkt, &macendoffset)
a00d75e1
MC
3483 || !HMAC_Update(hctx,
3484 (unsigned char *)s->init_buf->data + macoffset,
3485 macendoffset - macoffset)
7cea05dc 3486 || !WPACKET_reserve_bytes(pkt, EVP_MAX_MD_SIZE, &macdata1)
a00d75e1
MC
3487 || !HMAC_Final(hctx, macdata1, &hlen)
3488 || hlen > EVP_MAX_MD_SIZE
7cea05dc 3489 || !WPACKET_allocate_bytes(pkt, hlen, &macdata2)
a00d75e1 3490 || macdata1 != macdata2
5923ad4b 3491 || !WPACKET_close(pkt)) {
a00d75e1 3492 SSLerr(SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET, ERR_R_INTERNAL_ERROR);
e27f234a 3493 goto err;
a00d75e1 3494 }
bcaad809
DSH
3495 EVP_CIPHER_CTX_free(ctx);
3496 HMAC_CTX_free(hctx);
e27f234a
MC
3497 OPENSSL_free(senc);
3498
3499 return 1;
687eaf27 3500 err:
b548a1f1 3501 OPENSSL_free(senc);
846ec07d 3502 EVP_CIPHER_CTX_free(ctx);
bf7c6817 3503 HMAC_CTX_free(hctx);
a00d75e1 3504 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
e27f234a 3505 return 0;
0f113f3e 3506}
67c8e7f4 3507
7cea05dc 3508int tls_construct_cert_status(SSL *s, WPACKET *pkt)
e27f234a 3509{
5923ad4b 3510 if (!WPACKET_put_bytes_u8(pkt, s->tlsext_status_type)
7cea05dc 3511 || !WPACKET_sub_memcpy_u24(pkt, s->tlsext_ocsp_resp,
5923ad4b 3512 s->tlsext_ocsp_resplen)) {
cc59ad10
MC
3513 SSLerr(SSL_F_TLS_CONSTRUCT_CERT_STATUS, ERR_R_INTERNAL_ERROR);
3514 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
cc59ad10
MC
3515 return 0;
3516 }
e27f234a
MC
3517
3518 return 1;
3519}
3520
e481f9b9 3521#ifndef OPENSSL_NO_NEXTPROTONEG
e27f234a
MC
3522/*
3523 * tls_process_next_proto reads a Next Protocol Negotiation handshake message.
3524 * It sets the next_proto member in s if found
3525 */
be3583fa 3526MSG_PROCESS_RETURN tls_process_next_proto(SSL *s, PACKET *pkt)
e27f234a 3527{
73999b62 3528 PACKET next_proto, padding;
e27f234a
MC
3529 size_t next_proto_len;
3530
50e735f9
MC
3531 /*-
3532 * The payload looks like:
3533 * uint8 proto_len;
3534 * uint8 proto[proto_len];
3535 * uint8 padding_len;
3536 * uint8 padding[padding_len];
3537 */
73999b62
MC
3538 if (!PACKET_get_length_prefixed_1(pkt, &next_proto)
3539 || !PACKET_get_length_prefixed_1(pkt, &padding)
3540 || PACKET_remaining(pkt) > 0) {
e27f234a 3541 SSLerr(SSL_F_TLS_PROCESS_NEXT_PROTO, SSL_R_LENGTH_MISMATCH);
c3fc7eea 3542 goto err;
cf9b0b6f 3543 }
0f113f3e 3544
a230b26e 3545 if (!PACKET_memdup(&next_proto, &s->next_proto_negotiated, &next_proto_len)) {
6d41fc80 3546 s->next_proto_negotiated_len = 0;
c3fc7eea
MC
3547 goto err;
3548 }
3549
6d41fc80 3550 s->next_proto_negotiated_len = (unsigned char)next_proto_len;
0f113f3e 3551
e27f234a 3552 return MSG_PROCESS_CONTINUE_READING;
a230b26e 3553 err:
fe3a3291 3554 ossl_statem_set_error(s);
e27f234a 3555 return MSG_PROCESS_ERROR;
0f113f3e 3556}
6434abbf 3557#endif
d45ba43d 3558
e46f2334
MC
3559static int tls_construct_encrypted_extensions(SSL *s, WPACKET *pkt)
3560{
3561 /* TODO(TLS1.3): Zero length encrypted extensions message for now */
3562 if (!WPACKET_put_bytes_u16(pkt, 0)) {
3563 SSLerr(SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS, ERR_R_INTERNAL_ERROR);
3564 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
3565 return 0;
3566 }
3567
3568 return 1;
3569}
3570
d45ba43d
MC
3571#define SSLV2_CIPHER_LEN 3
3572
38a3cbfb
EK
3573STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,
3574 PACKET *cipher_suites,
d45ba43d 3575 STACK_OF(SSL_CIPHER) **skp,
a230b26e 3576 int sslv2format, int *al)
d45ba43d
MC
3577{
3578 const SSL_CIPHER *c;
3579 STACK_OF(SSL_CIPHER) *sk;
38a3cbfb
EK
3580 int n;
3581 /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
3582 unsigned char cipher[SSLV2_CIPHER_LEN];
d45ba43d 3583
38a3cbfb
EK
3584 s->s3->send_connection_binding = 0;
3585
3586 n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
3587
3588 if (PACKET_remaining(cipher_suites) == 0) {
3589 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, SSL_R_NO_CIPHERS_SPECIFIED);
3590 *al = SSL_AD_ILLEGAL_PARAMETER;
3591 return NULL;
d45ba43d 3592 }
38a3cbfb
EK
3593
3594 if (PACKET_remaining(cipher_suites) % n != 0) {
d45ba43d
MC
3595 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
3596 SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
38a3cbfb
EK
3597 *al = SSL_AD_DECODE_ERROR;
3598 return NULL;
d45ba43d 3599 }
38a3cbfb 3600
d45ba43d
MC
3601 if ((skp == NULL) || (*skp == NULL)) {
3602 sk = sk_SSL_CIPHER_new_null(); /* change perhaps later */
e8aa8b6c 3603 if (sk == NULL) {
d45ba43d 3604 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
38a3cbfb 3605 *al = SSL_AD_INTERNAL_ERROR;
d45ba43d
MC
3606 return NULL;
3607 }
3608 } else {
3609 sk = *skp;
3610 sk_SSL_CIPHER_zero(sk);
3611 }
3612
38a3cbfb
EK
3613 if (!PACKET_memdup(cipher_suites, &s->s3->tmp.ciphers_raw,
3614 &s->s3->tmp.ciphers_rawlen)) {
3615 *al = SSL_AD_INTERNAL_ERROR;
d45ba43d
MC
3616 goto err;
3617 }
d45ba43d 3618
38a3cbfb
EK
3619 while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
3620 /*
20218b58
EK
3621 * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
3622 * first byte set to zero, while true SSLv2 ciphers have a non-zero
3623 * first byte. We don't support any true SSLv2 ciphers, so skip them.
38a3cbfb
EK
3624 */
3625 if (sslv2format && cipher[0] != '\0')
a230b26e 3626 continue;
38a3cbfb 3627
d45ba43d 3628 /* Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */
38a3cbfb
EK
3629 if ((cipher[n - 2] == ((SSL3_CK_SCSV >> 8) & 0xff)) &&
3630 (cipher[n - 1] == (SSL3_CK_SCSV & 0xff))) {
d45ba43d
MC
3631 /* SCSV fatal if renegotiating */
3632 if (s->renegotiate) {
3633 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
3634 SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
38a3cbfb 3635 *al = SSL_AD_HANDSHAKE_FAILURE;
d45ba43d
MC
3636 goto err;
3637 }
3638 s->s3->send_connection_binding = 1;
d45ba43d
MC
3639 continue;
3640 }
3641
3642 /* Check for TLS_FALLBACK_SCSV */
38a3cbfb
EK
3643 if ((cipher[n - 2] == ((SSL3_CK_FALLBACK_SCSV >> 8) & 0xff)) &&
3644 (cipher[n - 1] == (SSL3_CK_FALLBACK_SCSV & 0xff))) {
d45ba43d
MC
3645 /*
3646 * The SCSV indicates that the client previously tried a higher
3647 * version. Fail if the current version is an unexpected
3648 * downgrade.
3649 */
4fa52141 3650 if (!ssl_check_version_downgrade(s)) {
d45ba43d
MC
3651 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
3652 SSL_R_INAPPROPRIATE_FALLBACK);
38a3cbfb 3653 *al = SSL_AD_INAPPROPRIATE_FALLBACK;
d45ba43d
MC
3654 goto err;
3655 }
d45ba43d
MC
3656 continue;
3657 }
3658
38a3cbfb
EK
3659 /* For SSLv2-compat, ignore leading 0-byte. */
3660 c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher);
d45ba43d
MC
3661 if (c != NULL) {
3662 if (!sk_SSL_CIPHER_push(sk, c)) {
3663 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
38a3cbfb 3664 *al = SSL_AD_INTERNAL_ERROR;
d45ba43d
MC
3665 goto err;
3666 }
3667 }
3668 }
38a3cbfb
EK
3669 if (PACKET_remaining(cipher_suites) > 0) {
3670 *al = SSL_AD_INTERNAL_ERROR;
3671 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_INTERNAL_ERROR);
3672 goto err;
3673 }
d45ba43d
MC
3674
3675 if (skp != NULL)
3676 *skp = sk;
3677 return (sk);
3678 err:
3679 if ((skp == NULL) || (*skp == NULL))
3680 sk_SSL_CIPHER_free(sk);
38a3cbfb 3681 return NULL;
d45ba43d 3682}