]> git.ipfire.org Git - thirdparty/openssl.git/blame - ssl/statem/statem_clnt.c
Send and Receive a TLSv1.3 format ServerHello
[thirdparty/openssl.git] / ssl / statem / statem_clnt.c
CommitLineData
846e33c7
RS
1/*
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
8c74b5e5 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
8c74b5e5 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
RE
49
50#include <stdio.h>
8ba708e5 51#include "../ssl_locl.h"
61ae935a 52#include "statem_locl.h"
ec577822
BM
53#include <openssl/buffer.h>
54#include <openssl/rand.h>
55#include <openssl/objects.h>
56#include <openssl/evp.h>
dbad1690 57#include <openssl/md5.h>
3c27208f 58#include <openssl/dh.h>
d095b68d 59#include <openssl/bn.h>
3c27208f 60#include <openssl/engine.h>
f9b3bff6 61
7ab09630 62static ossl_inline int cert_req_allowed(SSL *s);
a455d0f6 63static int key_exchange_expected(SSL *s);
0f113f3e 64static int ca_dn_cmp(const X509_NAME *const *a, const X509_NAME *const *b);
d45ba43d 65static int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
ae2f7b37 66 WPACKET *pkt);
ea262260 67
61ae935a
MC
68/*
69 * Is a CertificateRequest message allowed at the moment or not?
70 *
71 * Return values are:
72 * 1: Yes
73 * 0: No
74 */
7ab09630 75static ossl_inline int cert_req_allowed(SSL *s)
61ae935a
MC
76{
77 /* TLS does not like anon-DH with client cert */
b7fa1f98 78 if ((s->version > SSL3_VERSION
a230b26e
EK
79 && (s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL))
80 || (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aSRP | SSL_aPSK)))
61ae935a
MC
81 return 0;
82
83 return 1;
84}
85
86/*
a455d0f6 87 * Should we expect the ServerKeyExchange message or not?
61ae935a
MC
88 *
89 * Return values are:
90 * 1: Yes
91 * 0: No
92 */
a455d0f6 93static int key_exchange_expected(SSL *s)
61ae935a
MC
94{
95 long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
96
97 /*
98 * Can't skip server key exchange if this is an ephemeral
a455d0f6 99 * ciphersuite or for SRP
61ae935a 100 */
a455d0f6
MC
101 if (alg_k & (SSL_kDHE | SSL_kECDHE | SSL_kDHEPSK | SSL_kECDHEPSK
102 | SSL_kSRP)) {
103 return 1;
61ae935a
MC
104 }
105
a455d0f6 106 return 0;
61ae935a
MC
107}
108
0f1e51ea
MC
109/*
110 * ossl_statem_client_read_transition() encapsulates the logic for the allowed
111 * handshake state transitions when a TLS1.3 client is reading messages from the
112 * server. The message type that the server has sent is provided in |mt|. The
113 * current state is in |s->statem.hand_state|.
114 *
94ed2c67
MC
115 * Return values are 1 for success (transition allowed) and 0 on error
116 * (transition not allowed)
0f1e51ea
MC
117 */
118static int ossl_statem_client13_read_transition(SSL *s, int mt)
119{
120 OSSL_STATEM *st = &s->statem;
121
94ed2c67
MC
122 /*
123 * TODO(TLS1.3): This is still based on the TLSv1.2 state machine. Over time
124 * we will update this to look more like real TLSv1.3
125 */
126
0f1e51ea
MC
127 /*
128 * Note: There is no case for TLS_ST_CW_CLNT_HELLO, because we haven't
129 * yet negotiated TLSv1.3 at that point so that is handled by
130 * ossl_statem_client_read_transition()
131 */
132
133 switch (st->hand_state) {
134 default:
135 break;
136
137 case TLS_ST_CR_SRVR_HELLO:
138 if (s->hit) {
92760c21
MC
139 if (mt == SSL3_MT_FINISHED) {
140 st->hand_state = TLS_ST_CR_FINISHED;
0f1e51ea
MC
141 return 1;
142 }
143 } else {
92760c21
MC
144 if (mt == SSL3_MT_CERTIFICATE_REQUEST) {
145 st->hand_state = TLS_ST_CR_CERT_REQ;
146 return 1;
f5ca0b04
MC
147 }
148 if (mt == SSL3_MT_CERTIFICATE) {
0f1e51ea
MC
149 st->hand_state = TLS_ST_CR_CERT;
150 return 1;
151 }
152 }
153 break;
154
92760c21
MC
155 case TLS_ST_CR_CERT_REQ:
156 if (mt == SSL3_MT_CERTIFICATE) {
157 st->hand_state = TLS_ST_CR_CERT;
158 return 1;
159 }
160 break;
161
0f1e51ea
MC
162 case TLS_ST_CR_CERT:
163 /*
164 * The CertificateStatus message is optional even if
165 * |tlsext_status_expected| is set
166 */
167 if (s->tlsext_status_expected && mt == SSL3_MT_CERTIFICATE_STATUS) {
168 st->hand_state = TLS_ST_CR_CERT_STATUS;
169 return 1;
170 }
171 /* Fall through */
172
173 case TLS_ST_CR_CERT_STATUS:
0f1e51ea
MC
174 if (mt == SSL3_MT_FINISHED) {
175 st->hand_state = TLS_ST_CR_FINISHED;
176 return 1;
177 }
178 break;
92760c21 179
0f1e51ea
MC
180 }
181
0f1e51ea 182 /* No valid transition found */
0f1e51ea
MC
183 return 0;
184}
185
61ae935a 186/*
8481f583
MC
187 * ossl_statem_client_read_transition() encapsulates the logic for the allowed
188 * handshake state transitions when the client is reading messages from the
189 * server. The message type that the server has sent is provided in |mt|. The
190 * current state is in |s->statem.hand_state|.
61ae935a 191 *
94ed2c67
MC
192 * Return values are 1 for success (transition allowed) and 0 on error
193 * (transition not allowed)
61ae935a 194 */
8481f583 195int ossl_statem_client_read_transition(SSL *s, int mt)
61ae935a 196{
d6f1a6e9 197 OSSL_STATEM *st = &s->statem;
a455d0f6 198 int ske_expected;
61ae935a 199
0f1e51ea
MC
200 /*
201 * Note that after a ClientHello we don't know what version we are going
202 * to negotiate yet, so we don't take this branch until later
203 */
f5ca0b04 204 if (SSL_IS_TLS13(s)) {
5abeaf35
MC
205 if (!ossl_statem_client13_read_transition(s, mt))
206 goto err;
207 return 1;
208 }
0f1e51ea 209
a230b26e 210 switch (st->hand_state) {
f3b3d7f0
RS
211 default:
212 break;
213
61ae935a
MC
214 case TLS_ST_CW_CLNT_HELLO:
215 if (mt == SSL3_MT_SERVER_HELLO) {
216 st->hand_state = TLS_ST_CR_SRVR_HELLO;
217 return 1;
218 }
219
220 if (SSL_IS_DTLS(s)) {
221 if (mt == DTLS1_MT_HELLO_VERIFY_REQUEST) {
222 st->hand_state = DTLS_ST_CR_HELLO_VERIFY_REQUEST;
223 return 1;
224 }
225 }
226 break;
227
228 case TLS_ST_CR_SRVR_HELLO:
229 if (s->hit) {
230 if (s->tlsext_ticket_expected) {
231 if (mt == SSL3_MT_NEWSESSION_TICKET) {
232 st->hand_state = TLS_ST_CR_SESSION_TICKET;
233 return 1;
234 }
235 } else if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
236 st->hand_state = TLS_ST_CR_CHANGE;
237 return 1;
238 }
239 } else {
240 if (SSL_IS_DTLS(s) && mt == DTLS1_MT_HELLO_VERIFY_REQUEST) {
241 st->hand_state = DTLS_ST_CR_HELLO_VERIFY_REQUEST;
242 return 1;
ad3819c2 243 } else if (s->version >= TLS1_VERSION
a230b26e
EK
244 && s->tls_session_secret_cb != NULL
245 && s->session->tlsext_tick != NULL
246 && mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
ad3819c2
MC
247 /*
248 * Normally, we can tell if the server is resuming the session
249 * from the session ID. EAP-FAST (RFC 4851), however, relies on
250 * the next server message after the ServerHello to determine if
251 * the server is resuming.
252 */
253 s->hit = 1;
254 st->hand_state = TLS_ST_CR_CHANGE;
255 return 1;
61ae935a 256 } else if (!(s->s3->tmp.new_cipher->algorithm_auth
a230b26e 257 & (SSL_aNULL | SSL_aSRP | SSL_aPSK))) {
61ae935a
MC
258 if (mt == SSL3_MT_CERTIFICATE) {
259 st->hand_state = TLS_ST_CR_CERT;
260 return 1;
261 }
262 } else {
a455d0f6 263 ske_expected = key_exchange_expected(s);
a455d0f6
MC
264 /* SKE is optional for some PSK ciphersuites */
265 if (ske_expected
a230b26e
EK
266 || ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_PSK)
267 && mt == SSL3_MT_SERVER_KEY_EXCHANGE)) {
a455d0f6
MC
268 if (mt == SSL3_MT_SERVER_KEY_EXCHANGE) {
269 st->hand_state = TLS_ST_CR_KEY_EXCH;
270 return 1;
271 }
272 } else if (mt == SSL3_MT_CERTIFICATE_REQUEST
a230b26e
EK
273 && cert_req_allowed(s)) {
274 st->hand_state = TLS_ST_CR_CERT_REQ;
275 return 1;
a455d0f6 276 } else if (mt == SSL3_MT_SERVER_DONE) {
a230b26e
EK
277 st->hand_state = TLS_ST_CR_SRVR_DONE;
278 return 1;
61ae935a
MC
279 }
280 }
281 }
282 break;
283
284 case TLS_ST_CR_CERT:
bb1aaab4
MC
285 /*
286 * The CertificateStatus message is optional even if
287 * |tlsext_status_expected| is set
288 */
289 if (s->tlsext_status_expected && mt == SSL3_MT_CERTIFICATE_STATUS) {
290 st->hand_state = TLS_ST_CR_CERT_STATUS;
291 return 1;
a455d0f6
MC
292 }
293 /* Fall through */
294
295 case TLS_ST_CR_CERT_STATUS:
296 ske_expected = key_exchange_expected(s);
a455d0f6 297 /* SKE is optional for some PSK ciphersuites */
a230b26e
EK
298 if (ske_expected || ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_PSK)
299 && mt == SSL3_MT_SERVER_KEY_EXCHANGE)) {
61ae935a
MC
300 if (mt == SSL3_MT_SERVER_KEY_EXCHANGE) {
301 st->hand_state = TLS_ST_CR_KEY_EXCH;
302 return 1;
61ae935a 303 }
672f3337 304 goto err;
61ae935a 305 }
a455d0f6 306 /* Fall through */
61ae935a 307
a455d0f6
MC
308 case TLS_ST_CR_KEY_EXCH:
309 if (mt == SSL3_MT_CERTIFICATE_REQUEST) {
310 if (cert_req_allowed(s)) {
61ae935a
MC
311 st->hand_state = TLS_ST_CR_CERT_REQ;
312 return 1;
61ae935a 313 }
672f3337 314 goto err;
61ae935a 315 }
a455d0f6 316 /* Fall through */
61ae935a
MC
317
318 case TLS_ST_CR_CERT_REQ:
319 if (mt == SSL3_MT_SERVER_DONE) {
320 st->hand_state = TLS_ST_CR_SRVR_DONE;
321 return 1;
322 }
323 break;
324
325 case TLS_ST_CW_FINISHED:
c45d6b2b
DB
326 if (s->tlsext_ticket_expected) {
327 if (mt == SSL3_MT_NEWSESSION_TICKET) {
328 st->hand_state = TLS_ST_CR_SESSION_TICKET;
329 return 1;
330 }
61ae935a
MC
331 } else if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
332 st->hand_state = TLS_ST_CR_CHANGE;
333 return 1;
334 }
335 break;
336
337 case TLS_ST_CR_SESSION_TICKET:
338 if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
339 st->hand_state = TLS_ST_CR_CHANGE;
340 return 1;
341 }
342 break;
343
344 case TLS_ST_CR_CHANGE:
345 if (mt == SSL3_MT_FINISHED) {
346 st->hand_state = TLS_ST_CR_FINISHED;
347 return 1;
348 }
349 break;
61ae935a
MC
350 }
351
672f3337 352 err:
61ae935a 353 /* No valid transition found */
672f3337 354 ssl3_send_alert(s, SSL3_AL_FATAL, SSL3_AD_UNEXPECTED_MESSAGE);
340a2828 355 SSLerr(SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION, SSL_R_UNEXPECTED_MESSAGE);
61ae935a
MC
356 return 0;
357}
358
359/*
0f1e51ea
MC
360 * ossl_statem_client13_write_transition() works out what handshake state to
361 * move to next when the TLSv1.3 client is writing messages to be sent to the
362 * server.
0f1e51ea
MC
363 */
364static WRITE_TRAN ossl_statem_client13_write_transition(SSL *s)
365{
366 OSSL_STATEM *st = &s->statem;
367
94ed2c67
MC
368 /*
369 * TODO(TLS1.3): This is still based on the TLSv1.2 state machine. Over time
370 * we will update this to look more like real TLSv1.3
371 */
372
0f1e51ea
MC
373 /*
374 * Note: There are no cases for TLS_ST_BEFORE or TLS_ST_CW_CLNT_HELLO,
375 * because we haven't negotiated TLSv1.3 yet at that point. They are
376 * handled by ossl_statem_client_write_transition().
377 */
378 switch (st->hand_state) {
379 default:
380 /* Shouldn't happen */
381 return WRITE_TRAN_ERROR;
382
92760c21 383 case TLS_ST_CR_FINISHED:
94ed2c67 384 st->hand_state = (s->s3->tmp.cert_req != 0) ? TLS_ST_CW_CERT
92760c21 385 : TLS_ST_CW_FINISHED;
0f1e51ea
MC
386 return WRITE_TRAN_CONTINUE;
387
388 case TLS_ST_CW_CERT:
389 /* If a non-empty Certificate we also send CertificateVerify */
94ed2c67 390 st->hand_state = (s->s3->tmp.cert_req == 1) ? TLS_ST_CW_CERT_VRFY
92760c21 391 : TLS_ST_CW_FINISHED;
0f1e51ea
MC
392 return WRITE_TRAN_CONTINUE;
393
394 case TLS_ST_CW_CERT_VRFY:
0f1e51ea
MC
395 st->hand_state = TLS_ST_CW_FINISHED;
396 return WRITE_TRAN_CONTINUE;
397
398 case TLS_ST_CW_FINISHED:
94ed2c67
MC
399 st->hand_state = TLS_ST_OK;
400 ossl_statem_set_in_init(s, 0);
401 return WRITE_TRAN_CONTINUE;
0f1e51ea
MC
402 }
403}
404
405/*
406 * ossl_statem_client_write_transition() works out what handshake state to
407 * move to next when the client is writing messages to be sent to the server.
61ae935a 408 */
8481f583 409WRITE_TRAN ossl_statem_client_write_transition(SSL *s)
61ae935a 410{
d6f1a6e9 411 OSSL_STATEM *st = &s->statem;
61ae935a 412
0f1e51ea
MC
413 /*
414 * Note that immediately before/after a ClientHello we don't know what
415 * version we are going to negotiate yet, so we don't take this branch until
416 * later
417 */
f5ca0b04 418 if (SSL_IS_TLS13(s))
0f1e51ea
MC
419 return ossl_statem_client13_write_transition(s);
420
a230b26e 421 switch (st->hand_state) {
f3b3d7f0
RS
422 default:
423 /* Shouldn't happen */
424 return WRITE_TRAN_ERROR;
425
a230b26e
EK
426 case TLS_ST_OK:
427 /* Renegotiation - fall through */
428 case TLS_ST_BEFORE:
429 st->hand_state = TLS_ST_CW_CLNT_HELLO;
430 return WRITE_TRAN_CONTINUE;
61ae935a 431
a230b26e
EK
432 case TLS_ST_CW_CLNT_HELLO:
433 /*
434 * No transition at the end of writing because we don't know what
435 * we will be sent
436 */
437 return WRITE_TRAN_FINISHED;
61ae935a 438
a230b26e
EK
439 case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
440 st->hand_state = TLS_ST_CW_CLNT_HELLO;
441 return WRITE_TRAN_CONTINUE;
61ae935a 442
a230b26e
EK
443 case TLS_ST_CR_SRVR_DONE:
444 if (s->s3->tmp.cert_req)
445 st->hand_state = TLS_ST_CW_CERT;
446 else
61ae935a 447 st->hand_state = TLS_ST_CW_KEY_EXCH;
a230b26e 448 return WRITE_TRAN_CONTINUE;
61ae935a 449
a230b26e
EK
450 case TLS_ST_CW_CERT:
451 st->hand_state = TLS_ST_CW_KEY_EXCH;
452 return WRITE_TRAN_CONTINUE;
61ae935a 453
a230b26e
EK
454 case TLS_ST_CW_KEY_EXCH:
455 /*
456 * For TLS, cert_req is set to 2, so a cert chain of nothing is
457 * sent, but no verify packet is sent
458 */
459 /*
460 * XXX: For now, we do not support client authentication in ECDH
461 * cipher suites with ECDH (rather than ECDSA) certificates. We
462 * need to skip the certificate verify message when client's
463 * ECDH public key is sent inside the client certificate.
464 */
465 if (s->s3->tmp.cert_req == 1) {
466 st->hand_state = TLS_ST_CW_CERT_VRFY;
467 } else {
61ae935a 468 st->hand_state = TLS_ST_CW_CHANGE;
a230b26e
EK
469 }
470 if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) {
471 st->hand_state = TLS_ST_CW_CHANGE;
472 }
473 return WRITE_TRAN_CONTINUE;
61ae935a 474
a230b26e
EK
475 case TLS_ST_CW_CERT_VRFY:
476 st->hand_state = TLS_ST_CW_CHANGE;
477 return WRITE_TRAN_CONTINUE;
478
479 case TLS_ST_CW_CHANGE:
61ae935a 480#if defined(OPENSSL_NO_NEXTPROTONEG)
a230b26e 481 st->hand_state = TLS_ST_CW_FINISHED;
61ae935a 482#else
a230b26e
EK
483 if (!SSL_IS_DTLS(s) && s->s3->next_proto_neg_seen)
484 st->hand_state = TLS_ST_CW_NEXT_PROTO;
485 else
486 st->hand_state = TLS_ST_CW_FINISHED;
61ae935a 487#endif
a230b26e 488 return WRITE_TRAN_CONTINUE;
61ae935a
MC
489
490#if !defined(OPENSSL_NO_NEXTPROTONEG)
a230b26e
EK
491 case TLS_ST_CW_NEXT_PROTO:
492 st->hand_state = TLS_ST_CW_FINISHED;
493 return WRITE_TRAN_CONTINUE;
61ae935a
MC
494#endif
495
a230b26e
EK
496 case TLS_ST_CW_FINISHED:
497 if (s->hit) {
498 st->hand_state = TLS_ST_OK;
499 ossl_statem_set_in_init(s, 0);
500 return WRITE_TRAN_CONTINUE;
501 } else {
502 return WRITE_TRAN_FINISHED;
503 }
61ae935a 504
a230b26e
EK
505 case TLS_ST_CR_FINISHED:
506 if (s->hit) {
507 st->hand_state = TLS_ST_CW_CHANGE;
508 return WRITE_TRAN_CONTINUE;
509 } else {
510 st->hand_state = TLS_ST_OK;
511 ossl_statem_set_in_init(s, 0);
512 return WRITE_TRAN_CONTINUE;
513 }
61ae935a
MC
514 }
515}
516
517/*
518 * Perform any pre work that needs to be done prior to sending a message from
519 * the client to the server.
520 */
8481f583 521WORK_STATE ossl_statem_client_pre_work(SSL *s, WORK_STATE wst)
61ae935a 522{
d6f1a6e9 523 OSSL_STATEM *st = &s->statem;
61ae935a 524
a230b26e 525 switch (st->hand_state) {
f3b3d7f0
RS
526 default:
527 /* No pre work to be done */
528 break;
529
61ae935a
MC
530 case TLS_ST_CW_CLNT_HELLO:
531 s->shutdown = 0;
532 if (SSL_IS_DTLS(s)) {
533 /* every DTLS ClientHello resets Finished MAC */
2c4a056f
MC
534 if (!ssl3_init_finished_mac(s)) {
535 ossl_statem_set_error(s);
536 return WORK_ERROR;
537 }
61ae935a
MC
538 }
539 break;
540
61ae935a
MC
541 case TLS_ST_CW_CHANGE:
542 if (SSL_IS_DTLS(s)) {
543 if (s->hit) {
544 /*
545 * We're into the last flight so we don't retransmit these
546 * messages unless we need to.
547 */
548 st->use_timer = 0;
549 }
550#ifndef OPENSSL_NO_SCTP
551 if (BIO_dgram_is_sctp(SSL_get_wbio(s)))
552 return dtls_wait_for_dry(s);
553#endif
554 }
f3b3d7f0 555 break;
61ae935a
MC
556
557 case TLS_ST_OK:
558 return tls_finish_handshake(s, wst);
61ae935a
MC
559 }
560
561 return WORK_FINISHED_CONTINUE;
562}
563
564/*
565 * Perform any work that needs to be done after sending a message from the
566 * client to the server.
567 */
8481f583 568WORK_STATE ossl_statem_client_post_work(SSL *s, WORK_STATE wst)
61ae935a 569{
d6f1a6e9 570 OSSL_STATEM *st = &s->statem;
61ae935a
MC
571
572 s->init_num = 0;
573
a230b26e 574 switch (st->hand_state) {
f3b3d7f0
RS
575 default:
576 /* No post work to be done */
577 break;
578
61ae935a 579 case TLS_ST_CW_CLNT_HELLO:
46417569 580 if (wst == WORK_MORE_A && statem_flush(s) != 1)
61ae935a 581 return WORK_MORE_A;
46417569 582
61ae935a
MC
583 if (SSL_IS_DTLS(s)) {
584 /* Treat the next message as the first packet */
585 s->first_packet = 1;
586 }
587 break;
588
589 case TLS_ST_CW_KEY_EXCH:
590 if (tls_client_key_exchange_post_work(s) == 0)
591 return WORK_ERROR;
592 break;
593
594 case TLS_ST_CW_CHANGE:
595 s->session->cipher = s->s3->tmp.new_cipher;
596#ifdef OPENSSL_NO_COMP
597 s->session->compress_meth = 0;
598#else
599 if (s->s3->tmp.new_compression == NULL)
600 s->session->compress_meth = 0;
601 else
602 s->session->compress_meth = s->s3->tmp.new_compression->id;
603#endif
604 if (!s->method->ssl3_enc->setup_key_block(s))
605 return WORK_ERROR;
606
607 if (!s->method->ssl3_enc->change_cipher_state(s,
608 SSL3_CHANGE_CIPHER_CLIENT_WRITE))
609 return WORK_ERROR;
610
611 if (SSL_IS_DTLS(s)) {
612#ifndef OPENSSL_NO_SCTP
613 if (s->hit) {
614 /*
615 * Change to new shared key of SCTP-Auth, will be ignored if
616 * no SCTP used.
617 */
618 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
619 0, NULL);
620 }
621#endif
622
623 dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
624 }
625 break;
626
627 case TLS_ST_CW_FINISHED:
628#ifndef OPENSSL_NO_SCTP
629 if (wst == WORK_MORE_A && SSL_IS_DTLS(s) && s->hit == 0) {
630 /*
631 * Change to new shared key of SCTP-Auth, will be ignored if
632 * no SCTP used.
633 */
634 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
635 0, NULL);
636 }
637#endif
638 if (statem_flush(s) != 1)
639 return WORK_MORE_B;
92760c21
MC
640
641 if (SSL_IS_TLS13(s)) {
642 if (!s->method->ssl3_enc->change_cipher_state(s,
643 SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_CLIENT_WRITE))
644 return WORK_ERROR;
645 }
61ae935a 646 break;
61ae935a
MC
647 }
648
649 return WORK_FINISHED_CONTINUE;
650}
651
652/*
6392fb8e
MC
653 * Get the message construction function and message type for sending from the
654 * client
61ae935a
MC
655 *
656 * Valid return values are:
657 * 1: Success
658 * 0: Error
659 */
6392fb8e 660int ossl_statem_client_construct_message(SSL *s, WPACKET *pkt,
a15c953f 661 confunc_f *confunc, int *mt)
61ae935a 662{
d6f1a6e9 663 OSSL_STATEM *st = &s->statem;
61ae935a 664
4a01c59f
MC
665 switch (st->hand_state) {
666 default:
667 /* Shouldn't happen */
668 return 0;
669
670 case TLS_ST_CW_CHANGE:
5923ad4b 671 if (SSL_IS_DTLS(s))
6392fb8e 672 *confunc = dtls_construct_change_cipher_spec;
4a01c59f 673 else
6392fb8e
MC
674 *confunc = tls_construct_change_cipher_spec;
675 *mt = SSL3_MT_CHANGE_CIPHER_SPEC;
4a01c59f
MC
676 break;
677
678 case TLS_ST_CW_CLNT_HELLO:
6392fb8e
MC
679 *confunc = tls_construct_client_hello;
680 *mt = SSL3_MT_CLIENT_HELLO;
4a01c59f
MC
681 break;
682
683 case TLS_ST_CW_CERT:
6392fb8e
MC
684 *confunc = tls_construct_client_certificate;
685 *mt = SSL3_MT_CERTIFICATE;
4a01c59f
MC
686 break;
687
688 case TLS_ST_CW_KEY_EXCH:
6392fb8e
MC
689 *confunc = tls_construct_client_key_exchange;
690 *mt = SSL3_MT_CLIENT_KEY_EXCHANGE;
4a01c59f
MC
691 break;
692
693 case TLS_ST_CW_CERT_VRFY:
6392fb8e
MC
694 *confunc = tls_construct_client_verify;
695 *mt = SSL3_MT_CERTIFICATE_VERIFY;
4a01c59f 696 break;
61ae935a
MC
697
698#if !defined(OPENSSL_NO_NEXTPROTONEG)
4a01c59f 699 case TLS_ST_CW_NEXT_PROTO:
6392fb8e
MC
700 *confunc = tls_construct_next_proto;
701 *mt = SSL3_MT_NEXT_PROTO;
4a01c59f 702 break;
61ae935a 703#endif
4a01c59f 704 case TLS_ST_CW_FINISHED:
6392fb8e
MC
705 *confunc = tls_construct_finished;
706 *mt = SSL3_MT_FINISHED;
4a01c59f
MC
707 break;
708 }
5923ad4b 709
5923ad4b 710 return 1;
61ae935a
MC
711}
712
713/*
714 * Returns the maximum allowed length for the current message that we are
715 * reading. Excludes the message header.
716 */
eda75751 717size_t ossl_statem_client_max_message_size(SSL *s)
61ae935a 718{
d6f1a6e9 719 OSSL_STATEM *st = &s->statem;
61ae935a 720
a230b26e 721 switch (st->hand_state) {
f3b3d7f0
RS
722 default:
723 /* Shouldn't happen */
724 return 0;
725
a230b26e
EK
726 case TLS_ST_CR_SRVR_HELLO:
727 return SERVER_HELLO_MAX_LENGTH;
61ae935a 728
a230b26e
EK
729 case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
730 return HELLO_VERIFY_REQUEST_MAX_LENGTH;
61ae935a 731
a230b26e
EK
732 case TLS_ST_CR_CERT:
733 return s->max_cert_list;
61ae935a 734
a230b26e
EK
735 case TLS_ST_CR_CERT_STATUS:
736 return SSL3_RT_MAX_PLAIN_LENGTH;
61ae935a 737
a230b26e
EK
738 case TLS_ST_CR_KEY_EXCH:
739 return SERVER_KEY_EXCH_MAX_LENGTH;
61ae935a 740
a230b26e
EK
741 case TLS_ST_CR_CERT_REQ:
742 /*
743 * Set to s->max_cert_list for compatibility with previous releases. In
744 * practice these messages can get quite long if servers are configured
745 * to provide a long list of acceptable CAs
746 */
747 return s->max_cert_list;
61ae935a 748
a230b26e
EK
749 case TLS_ST_CR_SRVR_DONE:
750 return SERVER_HELLO_DONE_MAX_LENGTH;
61ae935a 751
a230b26e
EK
752 case TLS_ST_CR_CHANGE:
753 if (s->version == DTLS1_BAD_VER)
754 return 3;
755 return CCS_MAX_LENGTH;
61ae935a 756
a230b26e
EK
757 case TLS_ST_CR_SESSION_TICKET:
758 return SSL3_RT_MAX_PLAIN_LENGTH;
61ae935a 759
a230b26e
EK
760 case TLS_ST_CR_FINISHED:
761 return FINISHED_MAX_LENGTH;
61ae935a 762 }
61ae935a
MC
763}
764
765/*
766 * Process a message that the client has been received from the server.
767 */
8481f583 768MSG_PROCESS_RETURN ossl_statem_client_process_message(SSL *s, PACKET *pkt)
61ae935a 769{
d6f1a6e9 770 OSSL_STATEM *st = &s->statem;
61ae935a 771
a230b26e 772 switch (st->hand_state) {
f3b3d7f0
RS
773 default:
774 /* Shouldn't happen */
775 return MSG_PROCESS_ERROR;
776
a230b26e
EK
777 case TLS_ST_CR_SRVR_HELLO:
778 return tls_process_server_hello(s, pkt);
61ae935a 779
a230b26e
EK
780 case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
781 return dtls_process_hello_verify(s, pkt);
61ae935a 782
a230b26e
EK
783 case TLS_ST_CR_CERT:
784 return tls_process_server_certificate(s, pkt);
61ae935a 785
a230b26e
EK
786 case TLS_ST_CR_CERT_STATUS:
787 return tls_process_cert_status(s, pkt);
61ae935a 788
a230b26e
EK
789 case TLS_ST_CR_KEY_EXCH:
790 return tls_process_key_exchange(s, pkt);
61ae935a 791
a230b26e
EK
792 case TLS_ST_CR_CERT_REQ:
793 return tls_process_certificate_request(s, pkt);
61ae935a 794
a230b26e
EK
795 case TLS_ST_CR_SRVR_DONE:
796 return tls_process_server_done(s, pkt);
61ae935a 797
a230b26e
EK
798 case TLS_ST_CR_CHANGE:
799 return tls_process_change_cipher_spec(s, pkt);
61ae935a 800
a230b26e
EK
801 case TLS_ST_CR_SESSION_TICKET:
802 return tls_process_new_session_ticket(s, pkt);
61ae935a 803
a230b26e
EK
804 case TLS_ST_CR_FINISHED:
805 return tls_process_finished(s, pkt);
61ae935a 806 }
61ae935a
MC
807}
808
809/*
810 * Perform any further processing required following the receipt of a message
811 * from the server
812 */
8481f583 813WORK_STATE ossl_statem_client_post_process_message(SSL *s, WORK_STATE wst)
61ae935a 814{
d6f1a6e9 815 OSSL_STATEM *st = &s->statem;
61ae935a 816
a230b26e 817 switch (st->hand_state) {
f3b3d7f0
RS
818 default:
819 /* Shouldn't happen */
820 return WORK_ERROR;
821
05c4f1d5
MC
822 case TLS_ST_CR_CERT_REQ:
823 return tls_prepare_client_certificate(s, wst);
824
61ae935a
MC
825#ifndef OPENSSL_NO_SCTP
826 case TLS_ST_CR_SRVR_DONE:
827 /* We only get here if we are using SCTP and we are renegotiating */
828 if (BIO_dgram_sctp_msg_waiting(SSL_get_rbio(s))) {
829 s->s3->in_read_app_data = 2;
830 s->rwstate = SSL_READING;
831 BIO_clear_retry_flags(SSL_get_rbio(s));
832 BIO_set_retry_read(SSL_get_rbio(s));
fe3a3291 833 ossl_statem_set_sctp_read_sock(s, 1);
61ae935a
MC
834 return WORK_MORE_A;
835 }
fe3a3291 836 ossl_statem_set_sctp_read_sock(s, 0);
61ae935a
MC
837 return WORK_FINISHED_STOP;
838#endif
61ae935a 839 }
61ae935a
MC
840}
841
7cea05dc 842int tls_construct_client_hello(SSL *s, WPACKET *pkt)
0f113f3e 843{
2c7b4dbc 844 unsigned char *p;
ec60ccc1
MC
845 size_t sess_id_len;
846 int i, protverr;
2c7b4dbc 847 int al = SSL_AD_HANDSHAKE_FAILURE;
09b6c2ef 848#ifndef OPENSSL_NO_COMP
0f113f3e
MC
849 SSL_COMP *comp;
850#endif
b9908bf9 851 SSL_SESSION *sess = s->session;
0f113f3e 852
7cea05dc 853 if (!WPACKET_set_max_size(pkt, SSL3_RT_MAX_PLAIN_LENGTH)) {
2c7b4dbc
MC
854 /* Should not happen */
855 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 856 return 0;
2c7b4dbc 857 }
0f113f3e 858
b9908bf9 859 /* Work out what SSL/TLS/DTLS version to use */
4fa52141
VD
860 protverr = ssl_set_client_hello_version(s);
861 if (protverr != 0) {
862 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, protverr);
7cea05dc 863 return 0;
4fa52141 864 }
0f113f3e 865
a230b26e 866 if ((sess == NULL) || !ssl_version_supported(s, sess->ssl_version) ||
0f113f3e 867 /*
b9908bf9
MC
868 * In the case of EAP-FAST, we can have a pre-shared
869 * "ticket" without a session ID.
0f113f3e 870 */
b9908bf9
MC
871 (!sess->session_id_length && !sess->tlsext_tick) ||
872 (sess->not_resumable)) {
873 if (!ssl_get_new_session(s, 0))
7cea05dc 874 return 0;
b9908bf9
MC
875 }
876 /* else use the pre-loaded session */
0f113f3e 877
b9908bf9 878 p = s->s3->client_random;
0f113f3e 879
b9908bf9
MC
880 /*
881 * for DTLS if client_random is initialized, reuse it, we are
882 * required to use same upon reply to HelloVerify
883 */
884 if (SSL_IS_DTLS(s)) {
885 size_t idx;
886 i = 1;
887 for (idx = 0; idx < sizeof(s->s3->client_random); idx++) {
888 if (p[idx]) {
889 i = 0;
890 break;
0f113f3e 891 }
0f113f3e 892 }
b9908bf9
MC
893 } else
894 i = 1;
0f113f3e 895
a230b26e 896 if (i && ssl_fill_hello_random(s, 0, p, sizeof(s->s3->client_random)) <= 0)
7cea05dc 897 return 0;
b9908bf9 898
b9908bf9
MC
899 /*-
900 * version indicates the negotiated version: for example from
901 * an SSLv2/v3 compatible client hello). The client_version
902 * field is the maximum version we permit and it is also
903 * used in RSA encrypted premaster secrets. Some servers can
904 * choke if we initially report a higher version then
905 * renegotiate to a lower one in the premaster secret. This
906 * didn't happen with TLS 1.0 as most servers supported it
907 * but it can with TLS 1.1 or later if the server only supports
908 * 1.0.
909 *
910 * Possible scenario with previous logic:
911 * 1. Client hello indicates TLS 1.2
912 * 2. Server hello says TLS 1.0
913 * 3. RSA encrypted premaster secret uses 1.2.
8483a003 914 * 4. Handshake proceeds using TLS 1.0.
b9908bf9
MC
915 * 5. Server sends hello request to renegotiate.
916 * 6. Client hello indicates TLS v1.0 as we now
917 * know that is maximum server supports.
918 * 7. Server chokes on RSA encrypted premaster secret
919 * containing version 1.0.
920 *
921 * For interoperability it should be OK to always use the
922 * maximum version we support in client hello and then rely
923 * on the checking of version to ensure the servers isn't
924 * being inconsistent: for example initially negotiating with
925 * TLS 1.0 and renegotiating with TLS 1.2. We do this by using
926 * client_version in client hello and not resetting it to
927 * the negotiated version.
cd998837
MC
928 *
929 * For TLS 1.3 we always set the ClientHello version to 1.2 and rely on the
16bce0e0 930 * supported_versions extension for the real supported versions.
b9908bf9 931 */
7acb8b64 932 if (!WPACKET_put_bytes_u16(pkt, s->client_version)
7cea05dc 933 || !WPACKET_memcpy(pkt, s->s3->client_random, SSL3_RANDOM_SIZE)) {
2c7b4dbc 934 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 935 return 0;
2c7b4dbc 936 }
b9908bf9
MC
937
938 /* Session ID */
939 if (s->new_session)
ec60ccc1 940 sess_id_len = 0;
b9908bf9 941 else
ec60ccc1
MC
942 sess_id_len = s->session->session_id_length;
943 if (sess_id_len > sizeof(s->session->session_id)
7cea05dc 944 || !WPACKET_start_sub_packet_u8(pkt)
ec60ccc1
MC
945 || (sess_id_len != 0 && !WPACKET_memcpy(pkt, s->session->session_id,
946 sess_id_len))
7cea05dc 947 || !WPACKET_close(pkt)) {
2c7b4dbc 948 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 949 return 0;
b9908bf9 950 }
0f113f3e 951
b9908bf9
MC
952 /* cookie stuff for DTLS */
953 if (SSL_IS_DTLS(s)) {
2c7b4dbc 954 if (s->d1->cookie_len > sizeof(s->d1->cookie)
7cea05dc 955 || !WPACKET_sub_memcpy_u8(pkt, s->d1->cookie,
b2b3024e 956 s->d1->cookie_len)) {
b9908bf9 957 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 958 return 0;
0f113f3e 959 }
b9908bf9
MC
960 }
961
962 /* Ciphers supported */
7cea05dc 963 if (!WPACKET_start_sub_packet_u16(pkt)) {
2c7b4dbc 964 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 965 return 0;
2c7b4dbc
MC
966 }
967 /* ssl_cipher_list_to_bytes() raises SSLerr if appropriate */
7cea05dc
MC
968 if (!ssl_cipher_list_to_bytes(s, SSL_get_ciphers(s), pkt))
969 return 0;
970 if (!WPACKET_close(pkt)) {
2c7b4dbc 971 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 972 return 0;
b9908bf9 973 }
0f113f3e 974
b9908bf9 975 /* COMPRESSION */
7cea05dc 976 if (!WPACKET_start_sub_packet_u8(pkt)) {
2c7b4dbc 977 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 978 return 0;
2c7b4dbc
MC
979 }
980#ifndef OPENSSL_NO_COMP
981 if (ssl_allow_compression(s) && s->ctx->comp_methods) {
982 int compnum = sk_SSL_COMP_num(s->ctx->comp_methods);
983 for (i = 0; i < compnum; i++) {
984 comp = sk_SSL_COMP_value(s->ctx->comp_methods, i);
7cea05dc 985 if (!WPACKET_put_bytes_u8(pkt, comp->id)) {
2c7b4dbc 986 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 987 return 0;
2c7b4dbc
MC
988 }
989 }
b9908bf9 990 }
09b6c2ef 991#endif
2c7b4dbc 992 /* Add the NULL method */
7cea05dc 993 if (!WPACKET_put_bytes_u8(pkt, 0) || !WPACKET_close(pkt)) {
2c7b4dbc 994 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 995 return 0;
2c7b4dbc 996 }
761772d7 997
b9908bf9
MC
998 /* TLS extensions */
999 if (ssl_prepare_clienthello_tlsext(s) <= 0) {
1000 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
7cea05dc 1001 return 0;
b9908bf9 1002 }
7cea05dc 1003 if (!WPACKET_start_sub_packet_u16(pkt)
2c7b4dbc
MC
1004 /*
1005 * If extensions are of zero length then we don't even add the
1006 * extensions length bytes
1007 */
7cea05dc
MC
1008 || !WPACKET_set_flags(pkt, WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH)
1009 || !ssl_add_clienthello_tlsext(s, pkt, &al)
1010 || !WPACKET_close(pkt)) {
b9908bf9
MC
1011 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1012 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
7cea05dc 1013 return 0;
b9908bf9 1014 }
0f113f3e 1015
b9908bf9 1016 return 1;
0f113f3e 1017}
d02b48c6 1018
be3583fa 1019MSG_PROCESS_RETURN dtls_process_hello_verify(SSL *s, PACKET *pkt)
8ba708e5
MC
1020{
1021 int al;
cb150cbc 1022 size_t cookie_len;
8ba708e5
MC
1023 PACKET cookiepkt;
1024
1025 if (!PACKET_forward(pkt, 2)
a230b26e 1026 || !PACKET_get_length_prefixed_1(pkt, &cookiepkt)) {
8ba708e5
MC
1027 al = SSL_AD_DECODE_ERROR;
1028 SSLerr(SSL_F_DTLS_PROCESS_HELLO_VERIFY, SSL_R_LENGTH_MISMATCH);
1029 goto f_err;
1030 }
1031
1032 cookie_len = PACKET_remaining(&cookiepkt);
1033 if (cookie_len > sizeof(s->d1->cookie)) {
1034 al = SSL_AD_ILLEGAL_PARAMETER;
1035 SSLerr(SSL_F_DTLS_PROCESS_HELLO_VERIFY, SSL_R_LENGTH_TOO_LONG);
1036 goto f_err;
1037 }
1038
1039 if (!PACKET_copy_bytes(&cookiepkt, s->d1->cookie, cookie_len)) {
1040 al = SSL_AD_DECODE_ERROR;
1041 SSLerr(SSL_F_DTLS_PROCESS_HELLO_VERIFY, SSL_R_LENGTH_MISMATCH);
1042 goto f_err;
1043 }
1044 s->d1->cookie_len = cookie_len;
1045
1046 return MSG_PROCESS_FINISHED_READING;
1047 f_err:
1048 ssl3_send_alert(s, SSL3_AL_FATAL, al);
fe3a3291 1049 ossl_statem_set_error(s);
8ba708e5
MC
1050 return MSG_PROCESS_ERROR;
1051}
1052
be3583fa 1053MSG_PROCESS_RETURN tls_process_server_hello(SSL *s, PACKET *pkt)
b9908bf9
MC
1054{
1055 STACK_OF(SSL_CIPHER) *sk;
1056 const SSL_CIPHER *c;
73999b62 1057 PACKET session_id;
b9908bf9 1058 size_t session_id_len;
b6981744 1059 const unsigned char *cipherchars;
b9908bf9
MC
1060 int i, al = SSL_AD_INTERNAL_ERROR;
1061 unsigned int compression;
4fa52141
VD
1062 unsigned int sversion;
1063 int protverr;
b9908bf9
MC
1064#ifndef OPENSSL_NO_COMP
1065 SSL_COMP *comp;
1066#endif
1067
4fa52141
VD
1068 if (!PACKET_get_net_2(pkt, &sversion)) {
1069 al = SSL_AD_DECODE_ERROR;
1070 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
1071 goto f_err;
1072 }
50932c4a 1073
4fa52141
VD
1074 protverr = ssl_choose_client_version(s, sversion);
1075 if (protverr != 0) {
1076 al = SSL_AD_PROTOCOL_VERSION;
1077 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, protverr);
1078 goto f_err;
0f113f3e 1079 }
0f113f3e
MC
1080
1081 /* load the server hello data */
1082 /* load the server random */
73999b62 1083 if (!PACKET_copy_bytes(pkt, s->s3->server_random, SSL3_RANDOM_SIZE)) {
50932c4a 1084 al = SSL_AD_DECODE_ERROR;
b9908bf9 1085 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
50932c4a
MC
1086 goto f_err;
1087 }
0f113f3e
MC
1088
1089 s->hit = 0;
1090
fc5ce51d 1091 /* Get the session-id. */
71728dd8
MC
1092 if (!SSL_IS_TLS13(s)) {
1093 if (!PACKET_get_length_prefixed_1(pkt, &session_id)) {
1094 al = SSL_AD_DECODE_ERROR;
1095 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
1096 goto f_err;
1097 }
1098 session_id_len = PACKET_remaining(&session_id);
1099 if (session_id_len > sizeof s->session->session_id
1100 || session_id_len > SSL3_SESSION_ID_SIZE) {
1101 al = SSL_AD_ILLEGAL_PARAMETER;
1102 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
1103 SSL_R_SSL3_SESSION_ID_TOO_LONG);
1104 goto f_err;
1105 }
1106 } else {
1107 session_id_len = 0;
0f113f3e 1108 }
e481f9b9 1109
73999b62 1110 if (!PACKET_get_bytes(pkt, &cipherchars, TLS_CIPHER_LEN)) {
f0659bdb 1111 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
fc5ce51d
EK
1112 al = SSL_AD_DECODE_ERROR;
1113 goto f_err;
1114 }
1115
0f113f3e 1116 /*
6e3d0153
EK
1117 * Check if we can resume the session based on external pre-shared secret.
1118 * EAP-FAST (RFC 4851) supports two types of session resumption.
1119 * Resumption based on server-side state works with session IDs.
1120 * Resumption based on pre-shared Protected Access Credentials (PACs)
1121 * works by overriding the SessionTicket extension at the application
1122 * layer, and does not send a session ID. (We do not know whether EAP-FAST
1123 * servers would honour the session ID.) Therefore, the session ID alone
1124 * is not a reliable indicator of session resumption, so we first check if
1125 * we can resume, and later peek at the next handshake message to see if the
1126 * server wants to resume.
0f113f3e 1127 */
71728dd8
MC
1128 if (s->version >= TLS1_VERSION && !SSL_IS_TLS13(s)
1129 && s->tls_session_secret_cb && s->session->tlsext_tick) {
4a640fb6 1130 const SSL_CIPHER *pref_cipher = NULL;
8c1a5343
MC
1131 /*
1132 * s->session->master_key_length is a size_t, but this is an int for
1133 * backwards compat reasons
1134 */
1135 int master_key_length;
1136 master_key_length = sizeof(s->session->master_key);
0f113f3e 1137 if (s->tls_session_secret_cb(s, s->session->master_key,
8c1a5343 1138 &master_key_length,
0f113f3e 1139 NULL, &pref_cipher,
8c1a5343
MC
1140 s->tls_session_secret_cb_arg)
1141 && master_key_length > 0) {
1142 s->session->master_key_length = master_key_length;
0f113f3e 1143 s->session->cipher = pref_cipher ?
50932c4a 1144 pref_cipher : ssl_get_cipher_by_char(s, cipherchars);
6e3d0153 1145 } else {
b9908bf9 1146 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
6e3d0153
EK
1147 al = SSL_AD_INTERNAL_ERROR;
1148 goto f_err;
0f113f3e 1149 }
50932c4a
MC
1150 }
1151
fc5ce51d
EK
1152 if (session_id_len != 0 && session_id_len == s->session->session_id_length
1153 && memcmp(PACKET_data(&session_id), s->session->session_id,
1154 session_id_len) == 0) {
0f113f3e
MC
1155 if (s->sid_ctx_length != s->session->sid_ctx_length
1156 || memcmp(s->session->sid_ctx, s->sid_ctx, s->sid_ctx_length)) {
1157 /* actually a client application bug */
1158 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1159 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
0f113f3e
MC
1160 SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
1161 goto f_err;
1162 }
1163 s->hit = 1;
6e3d0153 1164 } else {
0f113f3e 1165 /*
6e3d0153
EK
1166 * If we were trying for session-id reuse but the server
1167 * didn't echo the ID, make a new SSL_SESSION.
1168 * In the case of EAP-FAST and PAC, we do not send a session ID,
1169 * so the PAC-based session secret is always preserved. It'll be
1170 * overwritten if the server refuses resumption.
0f113f3e
MC
1171 */
1172 if (s->session->session_id_length > 0) {
4f6eaa59 1173 s->ctx->stats.sess_miss++;
0f113f3e
MC
1174 if (!ssl_get_new_session(s, 0)) {
1175 goto f_err;
1176 }
1177 }
50932c4a 1178
ccae4a15 1179 s->session->ssl_version = s->version;
fc5ce51d
EK
1180 s->session->session_id_length = session_id_len;
1181 /* session_id_len could be 0 */
1182 memcpy(s->session->session_id, PACKET_data(&session_id),
1183 session_id_len);
0f113f3e 1184 }
fc5ce51d 1185
ccae4a15
FI
1186 /* Session version and negotiated protocol version should match */
1187 if (s->version != s->session->ssl_version) {
1188 al = SSL_AD_PROTOCOL_VERSION;
1189
1190 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
1191 SSL_R_SSL_SESSION_VERSION_MISMATCH);
1192 goto f_err;
1193 }
1194
50932c4a 1195 c = ssl_get_cipher_by_char(s, cipherchars);
0f113f3e
MC
1196 if (c == NULL) {
1197 /* unknown cipher */
1198 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1199 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_UNKNOWN_CIPHER_RETURNED);
0f113f3e
MC
1200 goto f_err;
1201 }
0f113f3e 1202 /*
3eb2aff4
KR
1203 * Now that we know the version, update the check to see if it's an allowed
1204 * version.
1205 */
1206 s->s3->tmp.min_ver = s->version;
1207 s->s3->tmp.max_ver = s->version;
1208 /*
1209 * If it is a disabled cipher we either didn't send it in client hello,
1210 * or it's not allowed for the selected protocol. So we return an error.
0f113f3e
MC
1211 */
1212 if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_CHECK)) {
1213 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1214 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_WRONG_CIPHER_RETURNED);
0f113f3e
MC
1215 goto f_err;
1216 }
0f113f3e
MC
1217
1218 sk = ssl_get_ciphers_by_id(s);
1219 i = sk_SSL_CIPHER_find(sk, c);
1220 if (i < 0) {
1221 /* we did not say we would use this cipher */
1222 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1223 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_WRONG_CIPHER_RETURNED);
0f113f3e
MC
1224 goto f_err;
1225 }
1226
1227 /*
1228 * Depending on the session caching (internal/external), the cipher
1229 * and/or cipher_id values may not be set. Make sure that cipher_id is
1230 * set and use it for comparison.
1231 */
1232 if (s->session->cipher)
1233 s->session->cipher_id = s->session->cipher->id;
1234 if (s->hit && (s->session->cipher_id != c->id)) {
9e9858d1 1235 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1236 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
9e9858d1
RS
1237 SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED);
1238 goto f_err;
0f113f3e
MC
1239 }
1240 s->s3->tmp.new_cipher = c;
0f113f3e
MC
1241 /* lets get the compression algorithm */
1242 /* COMPRESSION */
71728dd8
MC
1243 if (!SSL_IS_TLS13(s)) {
1244 if (!PACKET_get_1(pkt, &compression)) {
1245 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
1246 al = SSL_AD_DECODE_ERROR;
1247 goto f_err;
1248 }
1249 } else {
1250 compression = 0;
50932c4a 1251 }
71728dd8 1252
09b6c2ef 1253#ifdef OPENSSL_NO_COMP
fc5ce51d 1254 if (compression != 0) {
0f113f3e 1255 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1256 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
0f113f3e
MC
1257 SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
1258 goto f_err;
1259 }
1260 /*
1261 * If compression is disabled we'd better not try to resume a session
1262 * using compression.
1263 */
1264 if (s->session->compress_meth != 0) {
b9908bf9 1265 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_INCONSISTENT_COMPRESSION);
0f113f3e
MC
1266 goto f_err;
1267 }
09b6c2ef 1268#else
fc5ce51d 1269 if (s->hit && compression != s->session->compress_meth) {
0f113f3e 1270 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1271 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
0f113f3e
MC
1272 SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED);
1273 goto f_err;
1274 }
fc5ce51d 1275 if (compression == 0)
0f113f3e
MC
1276 comp = NULL;
1277 else if (!ssl_allow_compression(s)) {
1278 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1279 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_COMPRESSION_DISABLED);
0f113f3e 1280 goto f_err;
fc5ce51d
EK
1281 } else {
1282 comp = ssl3_comp_find(s->ctx->comp_methods, compression);
1283 }
0f113f3e 1284
fc5ce51d 1285 if (compression != 0 && comp == NULL) {
0f113f3e 1286 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1287 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
0f113f3e
MC
1288 SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
1289 goto f_err;
1290 } else {
1291 s->s3->tmp.new_compression = comp;
1292 }
09b6c2ef 1293#endif
761772d7 1294
0f113f3e 1295 /* TLS extensions */
73999b62 1296 if (!ssl_parse_serverhello_tlsext(s, pkt)) {
b9908bf9 1297 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_PARSE_TLSEXT);
0f113f3e
MC
1298 goto err;
1299 }
0f113f3e 1300
73999b62 1301 if (PACKET_remaining(pkt) != 0) {
0f113f3e
MC
1302 /* wrong packet length */
1303 al = SSL_AD_DECODE_ERROR;
b9908bf9 1304 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_BAD_PACKET_LENGTH);
0f113f3e
MC
1305 goto f_err;
1306 }
8723588e
MC
1307#ifndef OPENSSL_NO_SCTP
1308 if (SSL_IS_DTLS(s) && s->hit) {
1309 unsigned char sctpauthkey[64];
1310 char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
1311
1312 /*
1313 * Add new shared key for SCTP-Auth, will be ignored if
1314 * no SCTP used.
1315 */
141eb8c6
MC
1316 memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
1317 sizeof(DTLS1_SCTP_AUTH_LABEL));
8723588e
MC
1318
1319 if (SSL_export_keying_material(s, sctpauthkey,
a230b26e
EK
1320 sizeof(sctpauthkey),
1321 labelbuffer,
1322 sizeof(labelbuffer), NULL, 0, 0) <= 0)
8723588e
MC
1323 goto err;
1324
1325 BIO_ctrl(SSL_get_wbio(s),
1326 BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
1327 sizeof(sctpauthkey), sctpauthkey);
1328 }
1329#endif
1330
92760c21
MC
1331 /*
1332 * In TLSv1.3 we have some post-processing to change cipher state, otherwise
1333 * we're done with this message
1334 */
1335 if (SSL_IS_TLS13(s)
1336 && (!s->method->ssl3_enc->setup_key_block(s)
1337 || !s->method->ssl3_enc->change_cipher_state(s,
1338 SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_CLIENT_WRITE)
1339 || !s->method->ssl3_enc->change_cipher_state(s,
1340 SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_CLIENT_READ))) {
1341 al = SSL_AD_INTERNAL_ERROR;
1342 SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_CANNOT_CHANGE_CIPHER);
1343 goto f_err;
1344 }
1345
b9908bf9 1346 return MSG_PROCESS_CONTINUE_READING;
0f113f3e
MC
1347 f_err:
1348 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1349 err:
fe3a3291 1350 ossl_statem_set_error(s);
b9908bf9 1351 return MSG_PROCESS_ERROR;
0f113f3e 1352}
d02b48c6 1353
be3583fa 1354MSG_PROCESS_RETURN tls_process_server_certificate(SSL *s, PACKET *pkt)
b9908bf9
MC
1355{
1356 int al, i, ret = MSG_PROCESS_ERROR, exp_idx;
1357 unsigned long cert_list_len, cert_len;
1358 X509 *x = NULL;
b6981744 1359 const unsigned char *certstart, *certbytes;
b9908bf9
MC
1360 STACK_OF(X509) *sk = NULL;
1361 EVP_PKEY *pkey = NULL;
0f113f3e
MC
1362
1363 if ((sk = sk_X509_new_null()) == NULL) {
b9908bf9 1364 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, ERR_R_MALLOC_FAILURE);
cc273a93 1365 goto err;
0f113f3e
MC
1366 }
1367
73999b62 1368 if (!PACKET_get_net_3(pkt, &cert_list_len)
a230b26e 1369 || PACKET_remaining(pkt) != cert_list_len) {
0f113f3e 1370 al = SSL_AD_DECODE_ERROR;
b9908bf9 1371 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, SSL_R_LENGTH_MISMATCH);
0f113f3e
MC
1372 goto f_err;
1373 }
73999b62
MC
1374 while (PACKET_remaining(pkt)) {
1375 if (!PACKET_get_net_3(pkt, &cert_len)
a230b26e 1376 || !PACKET_get_bytes(pkt, &certbytes, cert_len)) {
0f113f3e 1377 al = SSL_AD_DECODE_ERROR;
b9908bf9 1378 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
0f113f3e
MC
1379 SSL_R_CERT_LENGTH_MISMATCH);
1380 goto f_err;
1381 }
1382
df758a85
MC
1383 certstart = certbytes;
1384 x = d2i_X509(NULL, (const unsigned char **)&certbytes, cert_len);
0f113f3e
MC
1385 if (x == NULL) {
1386 al = SSL_AD_BAD_CERTIFICATE;
b9908bf9 1387 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, ERR_R_ASN1_LIB);
0f113f3e
MC
1388 goto f_err;
1389 }
df758a85 1390 if (certbytes != (certstart + cert_len)) {
0f113f3e 1391 al = SSL_AD_DECODE_ERROR;
b9908bf9 1392 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
0f113f3e
MC
1393 SSL_R_CERT_LENGTH_MISMATCH);
1394 goto f_err;
1395 }
1396 if (!sk_X509_push(sk, x)) {
b9908bf9 1397 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, ERR_R_MALLOC_FAILURE);
cc273a93 1398 goto err;
0f113f3e
MC
1399 }
1400 x = NULL;
0f113f3e
MC
1401 }
1402
1403 i = ssl_verify_cert_chain(s, sk);
c8e2f98c
MC
1404 /*
1405 * The documented interface is that SSL_VERIFY_PEER should be set in order
1406 * for client side verification of the server certificate to take place.
1407 * However, historically the code has only checked that *any* flag is set
1408 * to cause server verification to take place. Use of the other flags makes
1409 * no sense in client mode. An attempt to clean up the semantics was
1410 * reverted because at least one application *only* set
1411 * SSL_VERIFY_FAIL_IF_NO_PEER_CERT. Prior to the clean up this still caused
1412 * server verification to take place, after the clean up it silently did
1413 * nothing. SSL_CTX_set_verify()/SSL_set_verify() cannot validate the flags
1414 * sent to them because they are void functions. Therefore, we now use the
1415 * (less clean) historic behaviour of performing validation if any flag is
1416 * set. The *documented* interface remains the same.
1417 */
1418 if (s->verify_mode != SSL_VERIFY_NONE && i <= 0) {
0f113f3e 1419 al = ssl_verify_alarm_type(s->verify_result);
b9908bf9 1420 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
0f113f3e
MC
1421 SSL_R_CERTIFICATE_VERIFY_FAILED);
1422 goto f_err;
1423 }
1424 ERR_clear_error(); /* but we keep s->verify_result */
1425 if (i > 1) {
b9908bf9 1426 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, i);
0f113f3e
MC
1427 al = SSL_AD_HANDSHAKE_FAILURE;
1428 goto f_err;
1429 }
1430
c34b0f99 1431 s->session->peer_chain = sk;
0f113f3e
MC
1432 /*
1433 * Inconsistency alert: cert_chain does include the peer's certificate,
d4d78943 1434 * which we don't include in statem_srvr.c
0f113f3e
MC
1435 */
1436 x = sk_X509_value(sk, 0);
1437 sk = NULL;
1438 /*
1439 * VRS 19990621: possible memory leak; sk=null ==> !sk_pop_free() @end
1440 */
1441
8382fd3a 1442 pkey = X509_get0_pubkey(x);
0f113f3e 1443
55a9a16f 1444 if (pkey == NULL || EVP_PKEY_missing_parameters(pkey)) {
0f113f3e
MC
1445 x = NULL;
1446 al = SSL3_AL_FATAL;
b9908bf9 1447 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
0f113f3e
MC
1448 SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS);
1449 goto f_err;
1450 }
1451
1452 i = ssl_cert_type(x, pkey);
55a9a16f 1453 if (i < 0) {
0f113f3e
MC
1454 x = NULL;
1455 al = SSL3_AL_FATAL;
b9908bf9 1456 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
0f113f3e
MC
1457 SSL_R_UNKNOWN_CERTIFICATE_TYPE);
1458 goto f_err;
1459 }
1460
55a9a16f 1461 exp_idx = ssl_cipher_get_cert_index(s->s3->tmp.new_cipher);
e44380a9 1462 if (exp_idx >= 0 && i != exp_idx
a230b26e
EK
1463 && (exp_idx != SSL_PKEY_GOST_EC ||
1464 (i != SSL_PKEY_GOST12_512 && i != SSL_PKEY_GOST12_256
1465 && i != SSL_PKEY_GOST01))) {
55a9a16f
MC
1466 x = NULL;
1467 al = SSL_AD_ILLEGAL_PARAMETER;
b9908bf9 1468 SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
55a9a16f
MC
1469 SSL_R_WRONG_CERTIFICATE_TYPE);
1470 goto f_err;
0f113f3e 1471 }
a273c6ee 1472 s->session->peer_type = i;
55a9a16f
MC
1473
1474 X509_free(s->session->peer);
05f0fb9f 1475 X509_up_ref(x);
55a9a16f 1476 s->session->peer = x;
0f113f3e
MC
1477 s->session->verify_result = s->verify_result;
1478
1479 x = NULL;
b9908bf9 1480 ret = MSG_PROCESS_CONTINUE_READING;
66696478
RS
1481 goto done;
1482
0f113f3e 1483 f_err:
66696478 1484 ssl3_send_alert(s, SSL3_AL_FATAL, al);
cc273a93 1485 err:
fe3a3291 1486 ossl_statem_set_error(s);
66696478 1487 done:
0f113f3e
MC
1488 X509_free(x);
1489 sk_X509_pop_free(sk, X509_free);
b9908bf9 1490 return ret;
0f113f3e 1491}
d02b48c6 1492
7dc1c647 1493static int tls_process_ske_psk_preamble(SSL *s, PACKET *pkt, int *al)
02a74590
MC
1494{
1495#ifndef OPENSSL_NO_PSK
7dc1c647 1496 PACKET psk_identity_hint;
02a74590 1497
7dc1c647
MC
1498 /* PSK ciphersuites are preceded by an identity hint */
1499
1500 if (!PACKET_get_length_prefixed_2(pkt, &psk_identity_hint)) {
1501 *al = SSL_AD_DECODE_ERROR;
4fa88861 1502 SSLerr(SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE, SSL_R_LENGTH_MISMATCH);
7dc1c647
MC
1503 return 0;
1504 }
1505
1506 /*
1507 * Store PSK identity hint for later use, hint is used in
1508 * tls_construct_client_key_exchange. Assume that the maximum length of
1509 * a PSK identity hint can be as long as the maximum length of a PSK
1510 * identity.
1511 */
1512 if (PACKET_remaining(&psk_identity_hint) > PSK_MAX_IDENTITY_LEN) {
1513 *al = SSL_AD_HANDSHAKE_FAILURE;
4fa88861 1514 SSLerr(SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE, SSL_R_DATA_LENGTH_TOO_LONG);
7dc1c647
MC
1515 return 0;
1516 }
02a74590 1517
7dc1c647
MC
1518 if (PACKET_remaining(&psk_identity_hint) == 0) {
1519 OPENSSL_free(s->session->psk_identity_hint);
1520 s->session->psk_identity_hint = NULL;
1521 } else if (!PACKET_strndup(&psk_identity_hint,
a230b26e 1522 &s->session->psk_identity_hint)) {
7dc1c647
MC
1523 *al = SSL_AD_INTERNAL_ERROR;
1524 return 0;
1525 }
1526
1527 return 1;
1528#else
4fa88861 1529 SSLerr(SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
7dc1c647
MC
1530 *al = SSL_AD_INTERNAL_ERROR;
1531 return 0;
02a74590
MC
1532#endif
1533}
1534
25c6c10c
MC
1535static int tls_process_ske_srp(SSL *s, PACKET *pkt, EVP_PKEY **pkey, int *al)
1536{
1537#ifndef OPENSSL_NO_SRP
1538 PACKET prime, generator, salt, server_pub;
1539
1540 if (!PACKET_get_length_prefixed_2(pkt, &prime)
1541 || !PACKET_get_length_prefixed_2(pkt, &generator)
1542 || !PACKET_get_length_prefixed_1(pkt, &salt)
1543 || !PACKET_get_length_prefixed_2(pkt, &server_pub)) {
1544 *al = SSL_AD_DECODE_ERROR;
4fa88861 1545 SSLerr(SSL_F_TLS_PROCESS_SKE_SRP, SSL_R_LENGTH_MISMATCH);
25c6c10c
MC
1546 return 0;
1547 }
1548
348240c6 1549 /* TODO(size_t): Convert BN_bin2bn() calls */
25c6c10c
MC
1550 if ((s->srp_ctx.N =
1551 BN_bin2bn(PACKET_data(&prime),
348240c6 1552 (int)PACKET_remaining(&prime), NULL)) == NULL
25c6c10c
MC
1553 || (s->srp_ctx.g =
1554 BN_bin2bn(PACKET_data(&generator),
348240c6 1555 (int)PACKET_remaining(&generator), NULL)) == NULL
25c6c10c
MC
1556 || (s->srp_ctx.s =
1557 BN_bin2bn(PACKET_data(&salt),
348240c6 1558 (int)PACKET_remaining(&salt), NULL)) == NULL
25c6c10c
MC
1559 || (s->srp_ctx.B =
1560 BN_bin2bn(PACKET_data(&server_pub),
348240c6 1561 (int)PACKET_remaining(&server_pub), NULL)) == NULL) {
25c6c10c 1562 *al = SSL_AD_INTERNAL_ERROR;
4fa88861 1563 SSLerr(SSL_F_TLS_PROCESS_SKE_SRP, ERR_R_BN_LIB);
25c6c10c
MC
1564 return 0;
1565 }
1566
1567 if (!srp_verify_server_param(s, al)) {
1568 *al = SSL_AD_DECODE_ERROR;
4fa88861 1569 SSLerr(SSL_F_TLS_PROCESS_SKE_SRP, SSL_R_BAD_SRP_PARAMETERS);
25c6c10c
MC
1570 return 0;
1571 }
1572
1573 /* We must check if there is a certificate */
a230b26e 1574 if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aRSA | SSL_aDSS))
25c6c10c
MC
1575 *pkey = X509_get0_pubkey(s->session->peer);
1576
1577 return 1;
1578#else
4fa88861 1579 SSLerr(SSL_F_TLS_PROCESS_SKE_SRP, ERR_R_INTERNAL_ERROR);
25c6c10c
MC
1580 *al = SSL_AD_INTERNAL_ERROR;
1581 return 0;
1582#endif
1583}
1584
e01a610d
MC
1585static int tls_process_ske_dhe(SSL *s, PACKET *pkt, EVP_PKEY **pkey, int *al)
1586{
1587#ifndef OPENSSL_NO_DH
1588 PACKET prime, generator, pub_key;
1589 EVP_PKEY *peer_tmp = NULL;
1590
1591 DH *dh = NULL;
1592 BIGNUM *p = NULL, *g = NULL, *bnpub_key = NULL;
1593
1594 if (!PACKET_get_length_prefixed_2(pkt, &prime)
1595 || !PACKET_get_length_prefixed_2(pkt, &generator)
1596 || !PACKET_get_length_prefixed_2(pkt, &pub_key)) {
1597 *al = SSL_AD_DECODE_ERROR;
4fa88861 1598 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, SSL_R_LENGTH_MISMATCH);
e01a610d
MC
1599 return 0;
1600 }
1601
1602 peer_tmp = EVP_PKEY_new();
1603 dh = DH_new();
1604
1605 if (peer_tmp == NULL || dh == NULL) {
1606 *al = SSL_AD_INTERNAL_ERROR;
4fa88861 1607 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, ERR_R_MALLOC_FAILURE);
e01a610d
MC
1608 goto err;
1609 }
1610
348240c6
MC
1611 /* TODO(size_t): Convert these calls */
1612 p = BN_bin2bn(PACKET_data(&prime), (int)PACKET_remaining(&prime), NULL);
1613 g = BN_bin2bn(PACKET_data(&generator), (int)PACKET_remaining(&generator),
1614 NULL);
1615 bnpub_key = BN_bin2bn(PACKET_data(&pub_key),
1616 (int)PACKET_remaining(&pub_key), NULL);
e01a610d
MC
1617 if (p == NULL || g == NULL || bnpub_key == NULL) {
1618 *al = SSL_AD_INTERNAL_ERROR;
4fa88861 1619 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, ERR_R_BN_LIB);
e01a610d
MC
1620 goto err;
1621 }
1622
1623 if (BN_is_zero(p) || BN_is_zero(g) || BN_is_zero(bnpub_key)) {
1624 *al = SSL_AD_DECODE_ERROR;
4fa88861 1625 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, SSL_R_BAD_DH_VALUE);
e01a610d
MC
1626 goto err;
1627 }
1628
1629 if (!DH_set0_pqg(dh, p, NULL, g)) {
1630 *al = SSL_AD_INTERNAL_ERROR;
4fa88861 1631 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, ERR_R_BN_LIB);
e01a610d
MC
1632 goto err;
1633 }
1634 p = g = NULL;
1635
1636 if (!DH_set0_key(dh, bnpub_key, NULL)) {
1637 *al = SSL_AD_INTERNAL_ERROR;
4fa88861 1638 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, ERR_R_BN_LIB);
e01a610d
MC
1639 goto err;
1640 }
1641 bnpub_key = NULL;
1642
1643 if (!ssl_security(s, SSL_SECOP_TMP_DH, DH_security_bits(dh), 0, dh)) {
1644 *al = SSL_AD_HANDSHAKE_FAILURE;
4fa88861 1645 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, SSL_R_DH_KEY_TOO_SMALL);
e01a610d
MC
1646 goto err;
1647 }
1648
1649 if (EVP_PKEY_assign_DH(peer_tmp, dh) == 0) {
1650 *al = SSL_AD_INTERNAL_ERROR;
4fa88861 1651 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, ERR_R_EVP_LIB);
e01a610d
MC
1652 goto err;
1653 }
1654
1655 s->s3->peer_tmp = peer_tmp;
1656
1657 /*
1658 * FIXME: This makes assumptions about which ciphersuites come with
1659 * public keys. We should have a less ad-hoc way of doing this
1660 */
a230b26e 1661 if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aRSA | SSL_aDSS))
e01a610d
MC
1662 *pkey = X509_get0_pubkey(s->session->peer);
1663 /* else anonymous DH, so no certificate or pkey. */
1664
1665 return 1;
1666
1667 err:
1668 BN_free(p);
1669 BN_free(g);
1670 BN_free(bnpub_key);
1671 DH_free(dh);
1672 EVP_PKEY_free(peer_tmp);
1673
1674 return 0;
1675#else
4fa88861 1676 SSLerr(SSL_F_TLS_PROCESS_SKE_DHE, ERR_R_INTERNAL_ERROR);
e01a610d
MC
1677 *al = SSL_AD_INTERNAL_ERROR;
1678 return 0;
1679#endif
1680}
1681
ff74aeb1
MC
1682static int tls_process_ske_ecdhe(SSL *s, PACKET *pkt, EVP_PKEY **pkey, int *al)
1683{
1684#ifndef OPENSSL_NO_EC
1685 PACKET encoded_pt;
1686 const unsigned char *ecparams;
1687 int curve_nid;
ec24630a 1688 unsigned int curve_flags;
ff74aeb1
MC
1689 EVP_PKEY_CTX *pctx = NULL;
1690
1691 /*
1692 * Extract elliptic curve parameters and the server's ephemeral ECDH
1693 * public key. For now we only support named (not generic) curves and
1694 * ECParameters in this case is just three bytes.
1695 */
1696 if (!PACKET_get_bytes(pkt, &ecparams, 3)) {
1697 *al = SSL_AD_DECODE_ERROR;
4fa88861 1698 SSLerr(SSL_F_TLS_PROCESS_SKE_ECDHE, SSL_R_LENGTH_TOO_SHORT);
ff74aeb1
MC
1699 return 0;
1700 }
1701 /*
1702 * Check curve is one of our preferences, if not server has sent an
1703 * invalid curve. ECParameters is 3 bytes.
1704 */
1705 if (!tls1_check_curve(s, ecparams, 3)) {
1706 *al = SSL_AD_DECODE_ERROR;
4fa88861 1707 SSLerr(SSL_F_TLS_PROCESS_SKE_ECDHE, SSL_R_WRONG_CURVE);
ff74aeb1
MC
1708 return 0;
1709 }
1710
ec24630a
DSH
1711 curve_nid = tls1_ec_curve_id2nid(*(ecparams + 2), &curve_flags);
1712
a230b26e 1713 if (curve_nid == 0) {
ff74aeb1 1714 *al = SSL_AD_INTERNAL_ERROR;
4fa88861 1715 SSLerr(SSL_F_TLS_PROCESS_SKE_ECDHE,
ff74aeb1
MC
1716 SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS);
1717 return 0;
1718 }
1719
ec24630a
DSH
1720 if ((curve_flags & TLS_CURVE_TYPE) == TLS_CURVE_CUSTOM) {
1721 EVP_PKEY *key = EVP_PKEY_new();
1722
1723 if (key == NULL || !EVP_PKEY_set_type(key, curve_nid)) {
1724 *al = SSL_AD_INTERNAL_ERROR;
1725 SSLerr(SSL_F_TLS_PROCESS_SKE_ECDHE, ERR_R_EVP_LIB);
1726 EVP_PKEY_free(key);
1727 return 0;
1728 }
1729 s->s3->peer_tmp = key;
1730 } else {
1731 /* Set up EVP_PKEY with named curve as parameters */
1732 pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
1733 if (pctx == NULL
1734 || EVP_PKEY_paramgen_init(pctx) <= 0
1735 || EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, curve_nid) <= 0
1736 || EVP_PKEY_paramgen(pctx, &s->s3->peer_tmp) <= 0) {
1737 *al = SSL_AD_INTERNAL_ERROR;
1738 SSLerr(SSL_F_TLS_PROCESS_SKE_ECDHE, ERR_R_EVP_LIB);
1739 EVP_PKEY_CTX_free(pctx);
1740 return 0;
1741 }
ff74aeb1 1742 EVP_PKEY_CTX_free(pctx);
ec24630a 1743 pctx = NULL;
ff74aeb1 1744 }
ff74aeb1
MC
1745
1746 if (!PACKET_get_length_prefixed_1(pkt, &encoded_pt)) {
1747 *al = SSL_AD_DECODE_ERROR;
4fa88861 1748 SSLerr(SSL_F_TLS_PROCESS_SKE_ECDHE, SSL_R_LENGTH_MISMATCH);
ff74aeb1
MC
1749 return 0;
1750 }
1751
ec24630a
DSH
1752 if (!EVP_PKEY_set1_tls_encodedpoint(s->s3->peer_tmp,
1753 PACKET_data(&encoded_pt),
1754 PACKET_remaining(&encoded_pt))) {
ff74aeb1 1755 *al = SSL_AD_DECODE_ERROR;
4fa88861 1756 SSLerr(SSL_F_TLS_PROCESS_SKE_ECDHE, SSL_R_BAD_ECPOINT);
ff74aeb1
MC
1757 return 0;
1758 }
1759
1760 /*
1761 * The ECC/TLS specification does not mention the use of DSA to sign
1762 * ECParameters in the server key exchange message. We do support RSA
1763 * and ECDSA.
1764 */
1765 if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aECDSA)
1766 *pkey = X509_get0_pubkey(s->session->peer);
1767 else if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aRSA)
1768 *pkey = X509_get0_pubkey(s->session->peer);
1769 /* else anonymous ECDH, so no certificate or pkey. */
1770
1771 return 1;
1772#else
4fa88861 1773 SSLerr(SSL_F_TLS_PROCESS_SKE_ECDHE, ERR_R_INTERNAL_ERROR);
ff74aeb1
MC
1774 *al = SSL_AD_INTERNAL_ERROR;
1775 return 0;
1776#endif
1777}
1778
be3583fa 1779MSG_PROCESS_RETURN tls_process_key_exchange(SSL *s, PACKET *pkt)
b9908bf9 1780{
7dc1c647 1781 int al = -1;
e1e588ac 1782 long alg_k;
b9908bf9 1783 EVP_PKEY *pkey = NULL;
73999b62 1784 PACKET save_param_start, signature;
b9908bf9 1785
b9908bf9
MC
1786 alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
1787
73999b62 1788 save_param_start = *pkt;
8d92c1f8 1789
3260adf1 1790#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
61dd9f7a
DSH
1791 EVP_PKEY_free(s->s3->peer_tmp);
1792 s->s3->peer_tmp = NULL;
3260adf1 1793#endif
d02b48c6 1794
7689082b 1795 if (alg_k & SSL_PSK) {
7dc1c647
MC
1796 if (!tls_process_ske_psk_preamble(s, pkt, &al))
1797 goto err;
7689082b
DSH
1798 }
1799
1800 /* Nothing else to do for plain PSK or RSAPSK */
1801 if (alg_k & (SSL_kPSK | SSL_kRSAPSK)) {
25c6c10c
MC
1802 } else if (alg_k & SSL_kSRP) {
1803 if (!tls_process_ske_srp(s, pkt, &pkey, &al))
0f113f3e 1804 goto err;
e01a610d
MC
1805 } else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
1806 if (!tls_process_ske_dhe(s, pkt, &pkey, &al))
1807 goto err;
ff74aeb1
MC
1808 } else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
1809 if (!tls_process_ske_ecdhe(s, pkt, &pkey, &al))
1810 goto err;
0f113f3e
MC
1811 } else if (alg_k) {
1812 al = SSL_AD_UNEXPECTED_MESSAGE;
b9908bf9 1813 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_UNEXPECTED_MESSAGE);
e1e588ac 1814 goto err;
0f113f3e 1815 }
0f113f3e 1816
0f113f3e
MC
1817 /* if it was signed, check the signature */
1818 if (pkey != NULL) {
32942870 1819 PACKET params;
be8dba2c
MC
1820 int maxsig;
1821 const EVP_MD *md = NULL;
e1e588ac
MC
1822 EVP_MD_CTX *md_ctx;
1823
32942870
EK
1824 /*
1825 * |pkt| now points to the beginning of the signature, so the difference
1826 * equals the length of the parameters.
1827 */
1828 if (!PACKET_get_sub_packet(&save_param_start, &params,
1829 PACKET_remaining(&save_param_start) -
73999b62 1830 PACKET_remaining(pkt))) {
32942870 1831 al = SSL_AD_INTERNAL_ERROR;
f0659bdb 1832 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
e1e588ac 1833 goto err;
32942870
EK
1834 }
1835
0f113f3e 1836 if (SSL_USE_SIGALGS(s)) {
b6981744 1837 const unsigned char *sigalgs;
0f113f3e 1838 int rv;
73999b62 1839 if (!PACKET_get_bytes(pkt, &sigalgs, 2)) {
e1e588ac 1840 al = SSL_AD_DECODE_ERROR;
f0659bdb 1841 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT);
e1e588ac 1842 goto err;
0f113f3e 1843 }
32942870 1844 rv = tls12_check_peer_sigalg(&md, s, sigalgs, pkey);
e1e588ac
MC
1845 if (rv == -1) {
1846 al = SSL_AD_INTERNAL_ERROR;
1847 goto err;
1848 } else if (rv == 0) {
1849 al = SSL_AD_DECODE_ERROR;
0f113f3e 1850 goto err;
0f113f3e 1851 }
a2f9200f 1852#ifdef SSL_DEBUG
0f113f3e
MC
1853 fprintf(stderr, "USING TLSv1.2 HASH %s\n", EVP_MD_name(md));
1854#endif
3aeb9348 1855 } else if (EVP_PKEY_id(pkey) == EVP_PKEY_RSA) {
192e4bbb 1856 md = EVP_md5_sha1();
32942870 1857 } else {
0f113f3e 1858 md = EVP_sha1();
32942870 1859 }
0f113f3e 1860
73999b62
MC
1861 if (!PACKET_get_length_prefixed_2(pkt, &signature)
1862 || PACKET_remaining(pkt) != 0) {
e1e588ac 1863 al = SSL_AD_DECODE_ERROR;
f0659bdb 1864 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_MISMATCH);
e1e588ac 1865 goto err;
0f113f3e 1866 }
be8dba2c
MC
1867 maxsig = EVP_PKEY_size(pkey);
1868 if (maxsig < 0) {
e1e588ac 1869 al = SSL_AD_INTERNAL_ERROR;
b9908bf9 1870 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
e1e588ac 1871 goto err;
8098fc56 1872 }
0f113f3e
MC
1873
1874 /*
8098fc56 1875 * Check signature length
0f113f3e 1876 */
be8dba2c 1877 if (PACKET_remaining(&signature) > (size_t)maxsig) {
0f113f3e 1878 /* wrong packet length */
e1e588ac 1879 al = SSL_AD_DECODE_ERROR;
a230b26e
EK
1880 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE,
1881 SSL_R_WRONG_SIGNATURE_LENGTH);
e1e588ac
MC
1882 goto err;
1883 }
1884
1885 md_ctx = EVP_MD_CTX_new();
1886 if (md_ctx == NULL) {
1887 al = SSL_AD_INTERNAL_ERROR;
1888 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE);
1889 goto err;
0f113f3e 1890 }
e1e588ac 1891
6e59a892 1892 if (EVP_VerifyInit_ex(md_ctx, md, NULL) <= 0
a230b26e
EK
1893 || EVP_VerifyUpdate(md_ctx, &(s->s3->client_random[0]),
1894 SSL3_RANDOM_SIZE) <= 0
1895 || EVP_VerifyUpdate(md_ctx, &(s->s3->server_random[0]),
1896 SSL3_RANDOM_SIZE) <= 0
1897 || EVP_VerifyUpdate(md_ctx, PACKET_data(&params),
1898 PACKET_remaining(&params)) <= 0) {
e1e588ac 1899 EVP_MD_CTX_free(md_ctx);
192e4bbb
DSH
1900 al = SSL_AD_INTERNAL_ERROR;
1901 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_EVP_LIB);
e1e588ac 1902 goto err;
192e4bbb 1903 }
348240c6 1904 /* TODO(size_t): Convert this call */
6e59a892 1905 if (EVP_VerifyFinal(md_ctx, PACKET_data(&signature),
348240c6
MC
1906 (unsigned int)PACKET_remaining(&signature),
1907 pkey) <= 0) {
192e4bbb 1908 /* bad signature */
e1e588ac 1909 EVP_MD_CTX_free(md_ctx);
192e4bbb
DSH
1910 al = SSL_AD_DECRYPT_ERROR;
1911 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_BAD_SIGNATURE);
e1e588ac 1912 goto err;
0f113f3e 1913 }
e1e588ac 1914 EVP_MD_CTX_free(md_ctx);
0f113f3e 1915 } else {
7689082b 1916 /* aNULL, aSRP or PSK do not need public keys */
e1e588ac 1917 if (!(s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
a230b26e 1918 && !(alg_k & SSL_PSK)) {
0f113f3e 1919 /* Might be wrong key type, check it */
e1e588ac 1920 if (ssl3_check_cert_and_algorithm(s)) {
0f113f3e 1921 /* Otherwise this shouldn't happen */
e1e588ac 1922 al = SSL_AD_INTERNAL_ERROR;
b9908bf9 1923 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
e1e588ac
MC
1924 } else {
1925 al = SSL_AD_DECODE_ERROR;
1926 }
0f113f3e
MC
1927 goto err;
1928 }
1929 /* still data left over */
73999b62 1930 if (PACKET_remaining(pkt) != 0) {
e1e588ac 1931 al = SSL_AD_DECODE_ERROR;
b9908bf9 1932 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_EXTRA_DATA_IN_MESSAGE);
e1e588ac 1933 goto err;
0f113f3e
MC
1934 }
1935 }
e1e588ac 1936
b9908bf9 1937 return MSG_PROCESS_CONTINUE_READING;
0f113f3e 1938 err:
7dc1c647
MC
1939 if (al != -1)
1940 ssl3_send_alert(s, SSL3_AL_FATAL, al);
fe3a3291 1941 ossl_statem_set_error(s);
b9908bf9 1942 return MSG_PROCESS_ERROR;
0f113f3e 1943}
d02b48c6 1944
be3583fa 1945MSG_PROCESS_RETURN tls_process_certificate_request(SSL *s, PACKET *pkt)
b9908bf9
MC
1946{
1947 int ret = MSG_PROCESS_ERROR;
1948 unsigned int list_len, ctype_num, i, name_len;
1949 X509_NAME *xn = NULL;
b6981744
EK
1950 const unsigned char *data;
1951 const unsigned char *namestart, *namebytes;
b9908bf9 1952 STACK_OF(X509_NAME) *ca_sk = NULL;
0f113f3e
MC
1953
1954 if ((ca_sk = sk_X509_NAME_new(ca_dn_cmp)) == NULL) {
b9908bf9 1955 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
0f113f3e
MC
1956 goto err;
1957 }
1958
1959 /* get the certificate types */
73999b62 1960 if (!PACKET_get_1(pkt, &ctype_num)
a230b26e 1961 || !PACKET_get_bytes(pkt, &data, ctype_num)) {
ac112332 1962 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
b9908bf9 1963 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, SSL_R_LENGTH_MISMATCH);
ac112332
MC
1964 goto err;
1965 }
b548a1f1
RS
1966 OPENSSL_free(s->cert->ctypes);
1967 s->cert->ctypes = NULL;
0f113f3e
MC
1968 if (ctype_num > SSL3_CT_NUMBER) {
1969 /* If we exceed static buffer copy all to cert structure */
1970 s->cert->ctypes = OPENSSL_malloc(ctype_num);
1971 if (s->cert->ctypes == NULL) {
b9908bf9 1972 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
0f113f3e
MC
1973 goto err;
1974 }
ac112332 1975 memcpy(s->cert->ctypes, data, ctype_num);
d736bc1a 1976 s->cert->ctype_num = ctype_num;
0f113f3e
MC
1977 ctype_num = SSL3_CT_NUMBER;
1978 }
1979 for (i = 0; i < ctype_num; i++)
ac112332
MC
1980 s->s3->tmp.ctype[i] = data[i];
1981
0f113f3e 1982 if (SSL_USE_SIGALGS(s)) {
73999b62 1983 if (!PACKET_get_net_2(pkt, &list_len)
a230b26e 1984 || !PACKET_get_bytes(pkt, &data, list_len)) {
0f113f3e 1985 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
b9908bf9
MC
1986 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
1987 SSL_R_LENGTH_MISMATCH);
0f113f3e
MC
1988 goto err;
1989 }
ac112332 1990
0f113f3e
MC
1991 /* Clear certificate digests and validity flags */
1992 for (i = 0; i < SSL_PKEY_NUM; i++) {
d376e57d 1993 s->s3->tmp.md[i] = NULL;
6383d316 1994 s->s3->tmp.valid_flags[i] = 0;
0f113f3e 1995 }
ac112332 1996 if ((list_len & 1) || !tls1_save_sigalgs(s, data, list_len)) {
0f113f3e 1997 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
b9908bf9 1998 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
0f113f3e
MC
1999 SSL_R_SIGNATURE_ALGORITHMS_ERROR);
2000 goto err;
2001 }
2002 if (!tls1_process_sigalgs(s)) {
2003 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
b9908bf9 2004 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
0f113f3e
MC
2005 goto err;
2006 }
a0f63828
DSH
2007 } else {
2008 ssl_set_default_md(s);
0f113f3e
MC
2009 }
2010
2011 /* get the CA RDNs */
73999b62 2012 if (!PACKET_get_net_2(pkt, &list_len)
a230b26e 2013 || PACKET_remaining(pkt) != list_len) {
0f113f3e 2014 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
b9908bf9 2015 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, SSL_R_LENGTH_MISMATCH);
0f113f3e
MC
2016 goto err;
2017 }
2018
73999b62
MC
2019 while (PACKET_remaining(pkt)) {
2020 if (!PACKET_get_net_2(pkt, &name_len)
a230b26e 2021 || !PACKET_get_bytes(pkt, &namebytes, name_len)) {
0f113f3e 2022 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
b9908bf9
MC
2023 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2024 SSL_R_LENGTH_MISMATCH);
0f113f3e
MC
2025 goto err;
2026 }
2027
ac112332 2028 namestart = namebytes;
0f113f3e 2029
ac112332
MC
2030 if ((xn = d2i_X509_NAME(NULL, (const unsigned char **)&namebytes,
2031 name_len)) == NULL) {
3c33c6f6 2032 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
b9908bf9 2033 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_ASN1_LIB);
3c33c6f6 2034 goto err;
0f113f3e
MC
2035 }
2036
ac112332 2037 if (namebytes != (namestart + name_len)) {
0f113f3e 2038 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
b9908bf9 2039 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
0f113f3e
MC
2040 SSL_R_CA_DN_LENGTH_MISMATCH);
2041 goto err;
2042 }
2043 if (!sk_X509_NAME_push(ca_sk, xn)) {
b9908bf9 2044 SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
0f113f3e
MC
2045 goto err;
2046 }
6afef8b1 2047 xn = NULL;
0f113f3e
MC
2048 }
2049
0f113f3e
MC
2050 /* we should setup a certificate to return.... */
2051 s->s3->tmp.cert_req = 1;
2052 s->s3->tmp.ctype_num = ctype_num;
222561fe 2053 sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free);
0f113f3e
MC
2054 s->s3->tmp.ca_names = ca_sk;
2055 ca_sk = NULL;
2056
05c4f1d5 2057 ret = MSG_PROCESS_CONTINUE_PROCESSING;
cc273a93 2058 goto done;
0f113f3e 2059 err:
fe3a3291 2060 ossl_statem_set_error(s);
cc273a93 2061 done:
6afef8b1 2062 X509_NAME_free(xn);
222561fe 2063 sk_X509_NAME_pop_free(ca_sk, X509_NAME_free);
b9908bf9 2064 return ret;
0f113f3e
MC
2065}
2066
2067static int ca_dn_cmp(const X509_NAME *const *a, const X509_NAME *const *b)
dfeab068 2068{
0f113f3e 2069 return (X509_NAME_cmp(*a, *b));
dfeab068 2070}
dfeab068 2071
be3583fa 2072MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL *s, PACKET *pkt)
b9908bf9
MC
2073{
2074 int al;
2075 unsigned int ticklen;
2076 unsigned long ticket_lifetime_hint;
ec60ccc1 2077 unsigned int sess_len;
b9908bf9 2078
73999b62 2079 if (!PACKET_get_net_4(pkt, &ticket_lifetime_hint)
a230b26e
EK
2080 || !PACKET_get_net_2(pkt, &ticklen)
2081 || PACKET_remaining(pkt) != ticklen) {
e711da71 2082 al = SSL_AD_DECODE_ERROR;
f0659bdb 2083 SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, SSL_R_LENGTH_MISMATCH);
e711da71
EK
2084 goto f_err;
2085 }
2086
2087 /* Server is allowed to change its mind and send an empty ticket. */
2088 if (ticklen == 0)
c9de4a20 2089 return MSG_PROCESS_CONTINUE_READING;
e711da71 2090
98ece4ee
MC
2091 if (s->session->session_id_length > 0) {
2092 int i = s->session_ctx->session_cache_mode;
2093 SSL_SESSION *new_sess;
2094 /*
2095 * We reused an existing session, so we need to replace it with a new
2096 * one
2097 */
2098 if (i & SSL_SESS_CACHE_CLIENT) {
2099 /*
e4612d02 2100 * Remove the old session from the cache. We carry on if this fails
98ece4ee 2101 */
e4612d02 2102 SSL_CTX_remove_session(s->session_ctx, s->session);
98ece4ee
MC
2103 }
2104
2105 if ((new_sess = ssl_session_dup(s->session, 0)) == 0) {
2106 al = SSL_AD_INTERNAL_ERROR;
b9908bf9 2107 SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE);
98ece4ee
MC
2108 goto f_err;
2109 }
2110
2111 SSL_SESSION_free(s->session);
2112 s->session = new_sess;
2113 }
2114
b548a1f1
RS
2115 OPENSSL_free(s->session->tlsext_tick);
2116 s->session->tlsext_ticklen = 0;
e711da71 2117
0f113f3e 2118 s->session->tlsext_tick = OPENSSL_malloc(ticklen);
a71edf3b 2119 if (s->session->tlsext_tick == NULL) {
b9908bf9 2120 SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE);
0f113f3e
MC
2121 goto err;
2122 }
73999b62 2123 if (!PACKET_copy_bytes(pkt, s->session->tlsext_tick, ticklen)) {
561e12bb 2124 al = SSL_AD_DECODE_ERROR;
b9908bf9 2125 SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, SSL_R_LENGTH_MISMATCH);
561e12bb
MC
2126 goto f_err;
2127 }
e711da71
EK
2128
2129 s->session->tlsext_tick_lifetime_hint = ticket_lifetime_hint;
0f113f3e
MC
2130 s->session->tlsext_ticklen = ticklen;
2131 /*
2132 * There are two ways to detect a resumed ticket session. One is to set
2133 * an appropriate session ID and then the server must return a match in
2134 * ServerHello. This allows the normal client session ID matching to work
2135 * and we know much earlier that the ticket has been accepted. The
2136 * other way is to set zero length session ID when the ticket is
2137 * presented and rely on the handshake to determine session resumption.
2138 * We choose the former approach because this fits in with assumptions
2139 * elsewhere in OpenSSL. The session ID is set to the SHA256 (or SHA1 is
2140 * SHA256 is disabled) hash of the ticket.
2141 */
ec60ccc1
MC
2142 /*
2143 * TODO(size_t): we use sess_len here because EVP_Digest expects an int
2144 * but s->session->session_id_length is a size_t
2145 */
d166ed8c 2146 if (!EVP_Digest(s->session->tlsext_tick, ticklen,
ec60ccc1 2147 s->session->session_id, &sess_len,
d166ed8c
DSH
2148 EVP_sha256(), NULL)) {
2149 SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, ERR_R_EVP_LIB);
2150 goto err;
2151 }
ec60ccc1 2152 s->session->session_id_length = sess_len;
b9908bf9 2153 return MSG_PROCESS_CONTINUE_READING;
0f113f3e
MC
2154 f_err:
2155 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2156 err:
fe3a3291 2157 ossl_statem_set_error(s);
b9908bf9 2158 return MSG_PROCESS_ERROR;
0f113f3e 2159}
67c8e7f4 2160
be3583fa 2161MSG_PROCESS_RETURN tls_process_cert_status(SSL *s, PACKET *pkt)
b9908bf9
MC
2162{
2163 int al;
8b0e934a 2164 size_t resplen;
b9908bf9 2165 unsigned int type;
b9908bf9 2166
73999b62 2167 if (!PACKET_get_1(pkt, &type)
a230b26e 2168 || type != TLSEXT_STATUSTYPE_ocsp) {
0f113f3e 2169 al = SSL_AD_DECODE_ERROR;
b9908bf9 2170 SSLerr(SSL_F_TLS_PROCESS_CERT_STATUS, SSL_R_UNSUPPORTED_STATUS_TYPE);
0f113f3e
MC
2171 goto f_err;
2172 }
56a26ce3
MC
2173 if (!PACKET_get_net_3_len(pkt, &resplen)
2174 || PACKET_remaining(pkt) != resplen) {
0f113f3e 2175 al = SSL_AD_DECODE_ERROR;
b9908bf9 2176 SSLerr(SSL_F_TLS_PROCESS_CERT_STATUS, SSL_R_LENGTH_MISMATCH);
0f113f3e
MC
2177 goto f_err;
2178 }
ac63710a 2179 s->tlsext_ocsp_resp = OPENSSL_malloc(resplen);
a71edf3b 2180 if (s->tlsext_ocsp_resp == NULL) {
0f113f3e 2181 al = SSL_AD_INTERNAL_ERROR;
b9908bf9 2182 SSLerr(SSL_F_TLS_PROCESS_CERT_STATUS, ERR_R_MALLOC_FAILURE);
0f113f3e
MC
2183 goto f_err;
2184 }
73999b62 2185 if (!PACKET_copy_bytes(pkt, s->tlsext_ocsp_resp, resplen)) {
ac63710a 2186 al = SSL_AD_DECODE_ERROR;
b9908bf9 2187 SSLerr(SSL_F_TLS_PROCESS_CERT_STATUS, SSL_R_LENGTH_MISMATCH);
ac63710a
MC
2188 goto f_err;
2189 }
0f113f3e 2190 s->tlsext_ocsp_resplen = resplen;
b9908bf9 2191 return MSG_PROCESS_CONTINUE_READING;
0f113f3e
MC
2192 f_err:
2193 ssl3_send_alert(s, SSL3_AL_FATAL, al);
fe3a3291 2194 ossl_statem_set_error(s);
b9908bf9 2195 return MSG_PROCESS_ERROR;
0f113f3e 2196}
d02b48c6 2197
7776a36c
MC
2198/*
2199 * Perform miscellaneous checks and processing after we have received the
2200 * server's initial flight. In TLS1.3 this is after the Server Finished message.
6530c490
MC
2201 * In <=TLS1.2 this is after the ServerDone message. Returns 1 on success or 0
2202 * on failure.
7776a36c
MC
2203 */
2204int tls_process_initial_server_flight(SSL *s, int *al)
b9908bf9 2205{
a455d0f6
MC
2206 /*
2207 * at this point we check that we have the required stuff from
2208 * the server
2209 */
2210 if (!ssl3_check_cert_and_algorithm(s)) {
7776a36c
MC
2211 *al = SSL_AD_HANDSHAKE_FAILURE;
2212 return 0;
a455d0f6
MC
2213 }
2214
bb1aaab4
MC
2215 /*
2216 * Call the ocsp status callback if needed. The |tlsext_ocsp_resp| and
2217 * |tlsext_ocsp_resplen| values will be set if we actually received a status
2218 * message, or NULL and -1 otherwise
2219 */
b1931d43 2220 if (s->tlsext_status_type != -1 && s->ctx->tlsext_status_cb != NULL) {
bb1aaab4
MC
2221 int ret;
2222 ret = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
2223 if (ret == 0) {
7776a36c
MC
2224 *al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
2225 SSLerr(SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT,
bb1aaab4 2226 SSL_R_INVALID_STATUS_RESPONSE);
7776a36c 2227 return 0;
bb1aaab4
MC
2228 }
2229 if (ret < 0) {
7776a36c
MC
2230 *al = SSL_AD_INTERNAL_ERROR;
2231 SSLerr(SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT,
2232 ERR_R_MALLOC_FAILURE);
2233 return 0;
bb1aaab4
MC
2234 }
2235 }
ed29e82a
RP
2236#ifndef OPENSSL_NO_CT
2237 if (s->ct_validation_callback != NULL) {
43341433
VD
2238 /* Note we validate the SCTs whether or not we abort on error */
2239 if (!ssl_validate_ct(s) && (s->verify_mode & SSL_VERIFY_PEER)) {
7776a36c
MC
2240 *al = SSL_AD_HANDSHAKE_FAILURE;
2241 return 0;
ed29e82a
RP
2242 }
2243 }
2244#endif
2245
7776a36c
MC
2246 return 1;
2247}
2248
2249MSG_PROCESS_RETURN tls_process_server_done(SSL *s, PACKET *pkt)
2250{
2251 int al = SSL_AD_INTERNAL_ERROR;
2252
2253 if (PACKET_remaining(pkt) > 0) {
2254 /* should contain no data */
2255 al = SSL_AD_DECODE_ERROR;
2256 SSLerr(SSL_F_TLS_PROCESS_SERVER_DONE, SSL_R_LENGTH_MISMATCH);
2257 goto err;
2258 }
2259#ifndef OPENSSL_NO_SRP
2260 if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) {
2261 if (SRP_Calc_A_param(s) <= 0) {
2262 SSLerr(SSL_F_TLS_PROCESS_SERVER_DONE, SSL_R_SRP_A_CALC);
2263 goto err;
2264 }
2265 }
2266#endif
2267
2268 /*
2269 * Error queue messages are generated directly by this function
2270 */
2271 if (!tls_process_initial_server_flight(s, &al))
2272 goto err;
2273
473483d4
MC
2274#ifndef OPENSSL_NO_SCTP
2275 /* Only applies to renegotiation */
2276 if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s))
a230b26e 2277 && s->renegotiate != 0)
473483d4
MC
2278 return MSG_PROCESS_CONTINUE_PROCESSING;
2279 else
2280#endif
2281 return MSG_PROCESS_FINISHED_READING;
7776a36c
MC
2282
2283 err:
2284 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2285 ossl_statem_set_error(s);
2286 return MSG_PROCESS_ERROR;
0f113f3e 2287}
176f31dd 2288
f1ec23c0 2289static int tls_construct_cke_psk_preamble(SSL *s, WPACKET *pkt, int *al)
0f113f3e 2290{
7689082b 2291#ifndef OPENSSL_NO_PSK
13c0ec4a
MC
2292 int ret = 0;
2293 /*
2294 * The callback needs PSK_MAX_IDENTITY_LEN + 1 bytes to return a
2295 * \0-terminated identity. The last byte is for us for simulating
2296 * strnlen.
2297 */
2298 char identity[PSK_MAX_IDENTITY_LEN + 1];
2299 size_t identitylen = 0;
2300 unsigned char psk[PSK_MAX_PSK_LEN];
2301 unsigned char *tmppsk = NULL;
2302 char *tmpidentity = NULL;
2303 size_t psklen = 0;
2304
2305 if (s->psk_client_callback == NULL) {
05ec6a25 2306 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, SSL_R_PSK_NO_CLIENT_CB);
13c0ec4a
MC
2307 *al = SSL_AD_INTERNAL_ERROR;
2308 goto err;
2309 }
d02b48c6 2310
13c0ec4a 2311 memset(identity, 0, sizeof(identity));
d02b48c6 2312
13c0ec4a
MC
2313 psklen = s->psk_client_callback(s, s->session->psk_identity_hint,
2314 identity, sizeof(identity) - 1,
2315 psk, sizeof(psk));
7689082b 2316
13c0ec4a 2317 if (psklen > PSK_MAX_PSK_LEN) {
05ec6a25 2318 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
13c0ec4a
MC
2319 *al = SSL_AD_HANDSHAKE_FAILURE;
2320 goto err;
2321 } else if (psklen == 0) {
05ec6a25 2322 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE,
13c0ec4a
MC
2323 SSL_R_PSK_IDENTITY_NOT_FOUND);
2324 *al = SSL_AD_HANDSHAKE_FAILURE;
2325 goto err;
2326 }
7689082b 2327
13c0ec4a
MC
2328 identitylen = strlen(identity);
2329 if (identitylen > PSK_MAX_IDENTITY_LEN) {
05ec6a25 2330 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
13c0ec4a
MC
2331 *al = SSL_AD_HANDSHAKE_FAILURE;
2332 goto err;
2333 }
7689082b 2334
13c0ec4a
MC
2335 tmppsk = OPENSSL_memdup(psk, psklen);
2336 tmpidentity = OPENSSL_strdup(identity);
2337 if (tmppsk == NULL || tmpidentity == NULL) {
05ec6a25 2338 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, ERR_R_MALLOC_FAILURE);
13c0ec4a
MC
2339 *al = SSL_AD_INTERNAL_ERROR;
2340 goto err;
2341 }
7689082b 2342
13c0ec4a
MC
2343 OPENSSL_free(s->s3->tmp.psk);
2344 s->s3->tmp.psk = tmppsk;
2345 s->s3->tmp.psklen = psklen;
2346 tmppsk = NULL;
2347 OPENSSL_free(s->session->psk_identity);
2348 s->session->psk_identity = tmpidentity;
2349 tmpidentity = NULL;
f1ec23c0 2350
b2b3024e 2351 if (!WPACKET_sub_memcpy_u16(pkt, identity, identitylen)) {
f1ec23c0
MC
2352 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
2353 *al = SSL_AD_INTERNAL_ERROR;
2354 goto err;
2355 }
7689082b 2356
13c0ec4a 2357 ret = 1;
0bce0b02 2358
13c0ec4a
MC
2359 err:
2360 OPENSSL_cleanse(psk, psklen);
2361 OPENSSL_cleanse(identity, sizeof(identity));
2362 OPENSSL_clear_free(tmppsk, psklen);
2363 OPENSSL_clear_free(tmpidentity, identitylen);
d02b48c6 2364
13c0ec4a
MC
2365 return ret;
2366#else
05ec6a25 2367 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
13c0ec4a
MC
2368 *al = SSL_AD_INTERNAL_ERROR;
2369 return 0;
b9908bf9 2370#endif
13c0ec4a 2371}
b9908bf9 2372
f1ec23c0 2373static int tls_construct_cke_rsa(SSL *s, WPACKET *pkt, int *al)
13c0ec4a 2374{
bc36ee62 2375#ifndef OPENSSL_NO_RSA
f1ec23c0 2376 unsigned char *encdata = NULL;
13c0ec4a
MC
2377 EVP_PKEY *pkey = NULL;
2378 EVP_PKEY_CTX *pctx = NULL;
2379 size_t enclen;
2380 unsigned char *pms = NULL;
2381 size_t pmslen = 0;
b9908bf9 2382
13c0ec4a
MC
2383 if (s->session->peer == NULL) {
2384 /*
2385 * We should always have a server certificate with SSL_kRSA.
2386 */
05ec6a25 2387 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_RSA, ERR_R_INTERNAL_ERROR);
13c0ec4a
MC
2388 return 0;
2389 }
0f113f3e 2390
13c0ec4a
MC
2391 pkey = X509_get0_pubkey(s->session->peer);
2392 if (EVP_PKEY_get0_RSA(pkey) == NULL) {
05ec6a25 2393 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_RSA, ERR_R_INTERNAL_ERROR);
13c0ec4a
MC
2394 return 0;
2395 }
0f113f3e 2396
13c0ec4a
MC
2397 pmslen = SSL_MAX_MASTER_KEY_LENGTH;
2398 pms = OPENSSL_malloc(pmslen);
2399 if (pms == NULL) {
05ec6a25 2400 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_RSA, ERR_R_MALLOC_FAILURE);
13c0ec4a
MC
2401 *al = SSL_AD_INTERNAL_ERROR;
2402 return 0;
2403 }
0bce0b02 2404
13c0ec4a
MC
2405 pms[0] = s->client_version >> 8;
2406 pms[1] = s->client_version & 0xff;
348240c6
MC
2407 /* TODO(size_t): Convert this function */
2408 if (RAND_bytes(pms + 2, (int)(pmslen - 2)) <= 0) {
13c0ec4a
MC
2409 goto err;
2410 }
0f113f3e 2411
13c0ec4a 2412 /* Fix buf for TLS and beyond */
f1ec23c0
MC
2413 if (s->version > SSL3_VERSION && !WPACKET_start_sub_packet_u16(pkt)) {
2414 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_RSA, ERR_R_INTERNAL_ERROR);
2415 goto err;
2416 }
13c0ec4a
MC
2417 pctx = EVP_PKEY_CTX_new(pkey, NULL);
2418 if (pctx == NULL || EVP_PKEY_encrypt_init(pctx) <= 0
2419 || EVP_PKEY_encrypt(pctx, NULL, &enclen, pms, pmslen) <= 0) {
05ec6a25 2420 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_RSA, ERR_R_EVP_LIB);
13c0ec4a
MC
2421 goto err;
2422 }
f1ec23c0
MC
2423 if (!WPACKET_allocate_bytes(pkt, enclen, &encdata)
2424 || EVP_PKEY_encrypt(pctx, encdata, &enclen, pms, pmslen) <= 0) {
05ec6a25 2425 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_RSA, SSL_R_BAD_RSA_ENCRYPT);
13c0ec4a
MC
2426 goto err;
2427 }
13c0ec4a
MC
2428 EVP_PKEY_CTX_free(pctx);
2429 pctx = NULL;
0f113f3e 2430# ifdef PKCS1_CHECK
13c0ec4a
MC
2431 if (s->options & SSL_OP_PKCS1_CHECK_1)
2432 (*p)[1]++;
2433 if (s->options & SSL_OP_PKCS1_CHECK_2)
2434 tmp_buf[0] = 0x70;
0f113f3e 2435# endif
0f113f3e 2436
13c0ec4a 2437 /* Fix buf for TLS and beyond */
f1ec23c0
MC
2438 if (s->version > SSL3_VERSION && !WPACKET_close(pkt)) {
2439 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_RSA, ERR_R_INTERNAL_ERROR);
2440 goto err;
b9908bf9 2441 }
13c0ec4a
MC
2442
2443 s->s3->tmp.pms = pms;
2444 s->s3->tmp.pmslen = pmslen;
2445
2446 return 1;
2447 err:
2448 OPENSSL_clear_free(pms, pmslen);
2449 EVP_PKEY_CTX_free(pctx);
2450
2451 return 0;
2452#else
05ec6a25 2453 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_RSA, ERR_R_INTERNAL_ERROR);
13c0ec4a
MC
2454 *al = SSL_AD_INTERNAL_ERROR;
2455 return 0;
f9b3bff6 2456#endif
13c0ec4a
MC
2457}
2458
f1ec23c0 2459static int tls_construct_cke_dhe(SSL *s, WPACKET *pkt, int *al)
a8c1c704
MC
2460{
2461#ifndef OPENSSL_NO_DH
2462 DH *dh_clnt = NULL;
2463 const BIGNUM *pub_key;
2464 EVP_PKEY *ckey = NULL, *skey = NULL;
f1ec23c0 2465 unsigned char *keybytes = NULL;
a8c1c704
MC
2466
2467 skey = s->s3->peer_tmp;
f1ec23c0
MC
2468 if (skey == NULL)
2469 goto err;
2470
0a699a07 2471 ckey = ssl_generate_pkey(skey);
b599ce3b
MC
2472 if (ckey == NULL)
2473 goto err;
2474
a8c1c704
MC
2475 dh_clnt = EVP_PKEY_get0_DH(ckey);
2476
0f1e51ea 2477 if (dh_clnt == NULL || ssl_derive(s, ckey, skey, 0) == 0)
f1ec23c0 2478 goto err;
a8c1c704
MC
2479
2480 /* send off the data */
2481 DH_get0_key(dh_clnt, &pub_key, NULL);
b2b3024e 2482 if (!WPACKET_sub_allocate_bytes_u16(pkt, BN_num_bytes(pub_key), &keybytes))
f1ec23c0
MC
2483 goto err;
2484
2485 BN_bn2bin(pub_key, keybytes);
a8c1c704
MC
2486 EVP_PKEY_free(ckey);
2487
2488 return 1;
f1ec23c0
MC
2489 err:
2490 EVP_PKEY_free(ckey);
2491#endif
05ec6a25 2492 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_DHE, ERR_R_INTERNAL_ERROR);
a8c1c704
MC
2493 *al = SSL_AD_INTERNAL_ERROR;
2494 return 0;
a8c1c704
MC
2495}
2496
f1ec23c0 2497static int tls_construct_cke_ecdhe(SSL *s, WPACKET *pkt, int *al)
67ad5aab
MC
2498{
2499#ifndef OPENSSL_NO_EC
2500 unsigned char *encodedPoint = NULL;
348240c6 2501 size_t encoded_pt_len = 0;
67ad5aab 2502 EVP_PKEY *ckey = NULL, *skey = NULL;
f1ec23c0 2503 int ret = 0;
67ad5aab
MC
2504
2505 skey = s->s3->peer_tmp;
ec24630a 2506 if (skey == NULL) {
05ec6a25 2507 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_ECDHE, ERR_R_INTERNAL_ERROR);
67ad5aab
MC
2508 return 0;
2509 }
2510
0a699a07 2511 ckey = ssl_generate_pkey(skey);
b599ce3b
MC
2512 if (ckey == NULL) {
2513 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_ECDHE, ERR_R_MALLOC_FAILURE);
2514 goto err;
2515 }
67ad5aab 2516
0f1e51ea 2517 if (ssl_derive(s, ckey, skey, 0) == 0) {
05ec6a25 2518 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_ECDHE, ERR_R_EVP_LIB);
67ad5aab
MC
2519 goto err;
2520 }
2521
2522 /* Generate encoding of client key */
ec24630a 2523 encoded_pt_len = EVP_PKEY_get1_tls_encodedpoint(ckey, &encodedPoint);
67ad5aab
MC
2524
2525 if (encoded_pt_len == 0) {
05ec6a25 2526 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_ECDHE, ERR_R_EC_LIB);
67ad5aab
MC
2527 goto err;
2528 }
2529
b2b3024e 2530 if (!WPACKET_sub_memcpy_u8(pkt, encodedPoint, encoded_pt_len)) {
f1ec23c0
MC
2531 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_ECDHE, ERR_R_INTERNAL_ERROR);
2532 goto err;
2533 }
67ad5aab 2534
f1ec23c0 2535 ret = 1;
67ad5aab 2536 err:
f1ec23c0 2537 OPENSSL_free(encodedPoint);
67ad5aab 2538 EVP_PKEY_free(ckey);
f1ec23c0 2539 return ret;
67ad5aab 2540#else
05ec6a25 2541 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_ECDHE, ERR_R_INTERNAL_ERROR);
67ad5aab
MC
2542 *al = SSL_AD_INTERNAL_ERROR;
2543 return 0;
2544#endif
2545}
2546
f1ec23c0 2547static int tls_construct_cke_gost(SSL *s, WPACKET *pkt, int *al)
e00e0b3d
MC
2548{
2549#ifndef OPENSSL_NO_GOST
2550 /* GOST key exchange message creation */
2551 EVP_PKEY_CTX *pkey_ctx = NULL;
2552 X509 *peer_cert;
2553 size_t msglen;
2554 unsigned int md_len;
2555 unsigned char shared_ukm[32], tmp[256];
2556 EVP_MD_CTX *ukm_hash = NULL;
2557 int dgst_nid = NID_id_GostR3411_94;
2558 unsigned char *pms = NULL;
2559 size_t pmslen = 0;
2560
2561 if ((s->s3->tmp.new_cipher->algorithm_auth & SSL_aGOST12) != 0)
2562 dgst_nid = NID_id_GostR3411_2012_256;
2563
2564 /*
2565 * Get server sertificate PKEY and create ctx from it
2566 */
2567 peer_cert = s->session->peer;
2568 if (!peer_cert) {
2569 *al = SSL_AD_HANDSHAKE_FAILURE;
05ec6a25 2570 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST,
e00e0b3d
MC
2571 SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER);
2572 return 0;
2573 }
2574
2575 pkey_ctx = EVP_PKEY_CTX_new(X509_get0_pubkey(peer_cert), NULL);
2576 if (pkey_ctx == NULL) {
2577 *al = SSL_AD_INTERNAL_ERROR;
05ec6a25 2578 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST, ERR_R_MALLOC_FAILURE);
e00e0b3d
MC
2579 return 0;
2580 }
2581 /*
2582 * If we have send a certificate, and certificate key
2583 * parameters match those of server certificate, use
2584 * certificate key for key exchange
2585 */
2586
2587 /* Otherwise, generate ephemeral key pair */
2588 pmslen = 32;
2589 pms = OPENSSL_malloc(pmslen);
2590 if (pms == NULL) {
2591 *al = SSL_AD_INTERNAL_ERROR;
05ec6a25 2592 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST, ERR_R_MALLOC_FAILURE);
2f3930bc 2593 goto err;
e00e0b3d
MC
2594 }
2595
2596 if (EVP_PKEY_encrypt_init(pkey_ctx) <= 0
348240c6
MC
2597 /* Generate session key
2598 * TODO(size_t): Convert this function
2599 */
2600 || RAND_bytes(pms, (int)pmslen) <= 0) {
e00e0b3d 2601 *al = SSL_AD_INTERNAL_ERROR;
05ec6a25 2602 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST, ERR_R_INTERNAL_ERROR);
e00e0b3d
MC
2603 goto err;
2604 };
e00e0b3d
MC
2605 /*
2606 * Compute shared IV and store it in algorithm-specific context
2607 * data
2608 */
2609 ukm_hash = EVP_MD_CTX_new();
2610 if (ukm_hash == NULL
a230b26e
EK
2611 || EVP_DigestInit(ukm_hash, EVP_get_digestbynid(dgst_nid)) <= 0
2612 || EVP_DigestUpdate(ukm_hash, s->s3->client_random,
2613 SSL3_RANDOM_SIZE) <= 0
2614 || EVP_DigestUpdate(ukm_hash, s->s3->server_random,
2615 SSL3_RANDOM_SIZE) <= 0
2616 || EVP_DigestFinal_ex(ukm_hash, shared_ukm, &md_len) <= 0) {
e00e0b3d 2617 *al = SSL_AD_INTERNAL_ERROR;
05ec6a25 2618 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST, ERR_R_INTERNAL_ERROR);
e00e0b3d
MC
2619 goto err;
2620 }
2621 EVP_MD_CTX_free(ukm_hash);
2622 ukm_hash = NULL;
2623 if (EVP_PKEY_CTX_ctrl(pkey_ctx, -1, EVP_PKEY_OP_ENCRYPT,
2624 EVP_PKEY_CTRL_SET_IV, 8, shared_ukm) < 0) {
2625 *al = SSL_AD_INTERNAL_ERROR;
05ec6a25 2626 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST, SSL_R_LIBRARY_BUG);
e00e0b3d
MC
2627 goto err;
2628 }
2629 /* Make GOST keytransport blob message */
2630 /*
2631 * Encapsulate it into sequence
2632 */
e00e0b3d
MC
2633 msglen = 255;
2634 if (EVP_PKEY_encrypt(pkey_ctx, tmp, &msglen, pms, pmslen) <= 0) {
2635 *al = SSL_AD_INTERNAL_ERROR;
05ec6a25 2636 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST, SSL_R_LIBRARY_BUG);
e00e0b3d
MC
2637 goto err;
2638 }
f1ec23c0 2639
08029dfa
MC
2640 if (!WPACKET_put_bytes_u8(pkt, V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED)
2641 || (msglen >= 0x80 && !WPACKET_put_bytes_u8(pkt, 0x81))
b2b3024e 2642 || !WPACKET_sub_memcpy_u8(pkt, tmp, msglen)) {
f1ec23c0
MC
2643 *al = SSL_AD_INTERNAL_ERROR;
2644 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST, ERR_R_INTERNAL_ERROR);
2645 goto err;
e00e0b3d 2646 }
f1ec23c0 2647
e00e0b3d
MC
2648 EVP_PKEY_CTX_free(pkey_ctx);
2649 s->s3->tmp.pms = pms;
2650 s->s3->tmp.pmslen = pmslen;
2651
2652 return 1;
2653 err:
2654 EVP_PKEY_CTX_free(pkey_ctx);
2655 OPENSSL_clear_free(pms, pmslen);
2656 EVP_MD_CTX_free(ukm_hash);
2657 return 0;
2658#else
05ec6a25 2659 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_GOST, ERR_R_INTERNAL_ERROR);
e00e0b3d
MC
2660 *al = SSL_AD_INTERNAL_ERROR;
2661 return 0;
2662#endif
2663}
2664
f1ec23c0 2665static int tls_construct_cke_srp(SSL *s, WPACKET *pkt, int *al)
840a2bf8 2666{
8b9546c7 2667#ifndef OPENSSL_NO_SRP
f1ec23c0
MC
2668 unsigned char *abytes = NULL;
2669
2670 if (s->srp_ctx.A == NULL
b2b3024e
MC
2671 || !WPACKET_sub_allocate_bytes_u16(pkt, BN_num_bytes(s->srp_ctx.A),
2672 &abytes)) {
05ec6a25 2673 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_SRP, ERR_R_INTERNAL_ERROR);
840a2bf8
MC
2674 return 0;
2675 }
f1ec23c0
MC
2676 BN_bn2bin(s->srp_ctx.A, abytes);
2677
840a2bf8
MC
2678 OPENSSL_free(s->session->srp_username);
2679 s->session->srp_username = OPENSSL_strdup(s->srp_ctx.login);
2680 if (s->session->srp_username == NULL) {
05ec6a25 2681 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_SRP, ERR_R_MALLOC_FAILURE);
840a2bf8
MC
2682 return 0;
2683 }
2684
2685 return 1;
2686#else
05ec6a25 2687 SSLerr(SSL_F_TLS_CONSTRUCT_CKE_SRP, ERR_R_INTERNAL_ERROR);
840a2bf8
MC
2688 *al = SSL_AD_INTERNAL_ERROR;
2689 return 0;
2690#endif
2691}
2692
7cea05dc 2693int tls_construct_client_key_exchange(SSL *s, WPACKET *pkt)
13c0ec4a 2694{
13c0ec4a
MC
2695 unsigned long alg_k;
2696 int al = -1;
2697
f1ec23c0 2698 alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
13c0ec4a 2699
13c0ec4a 2700 if ((alg_k & SSL_PSK)
7cea05dc 2701 && !tls_construct_cke_psk_preamble(s, pkt, &al))
13c0ec4a
MC
2702 goto err;
2703
f1ec23c0 2704 if (alg_k & (SSL_kRSA | SSL_kRSAPSK)) {
7cea05dc 2705 if (!tls_construct_cke_rsa(s, pkt, &al))
13c0ec4a 2706 goto err;
a8c1c704 2707 } else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
7cea05dc 2708 if (!tls_construct_cke_dhe(s, pkt, &al))
b9908bf9 2709 goto err;
67ad5aab 2710 } else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
7cea05dc 2711 if (!tls_construct_cke_ecdhe(s, pkt, &al))
ce0c1f2b 2712 goto err;
e00e0b3d 2713 } else if (alg_k & SSL_kGOST) {
7cea05dc 2714 if (!tls_construct_cke_gost(s, pkt, &al))
a71edf3b 2715 goto err;
840a2bf8 2716 } else if (alg_k & SSL_kSRP) {
7cea05dc 2717 if (!tls_construct_cke_srp(s, pkt, &al))
69f68237 2718 goto err;
4a424545 2719 } else if (!(alg_k & SSL_kPSK)) {
b9908bf9
MC
2720 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
2721 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
2722 goto err;
2723 }
2724
b9908bf9 2725 return 1;
0f113f3e 2726 err:
13c0ec4a
MC
2727 if (al != -1)
2728 ssl3_send_alert(s, SSL3_AL_FATAL, al);
0bce0b02 2729 OPENSSL_clear_free(s->s3->tmp.pms, s->s3->tmp.pmslen);
76106e60 2730 s->s3->tmp.pms = NULL;
7689082b
DSH
2731#ifndef OPENSSL_NO_PSK
2732 OPENSSL_clear_free(s->s3->tmp.psk, s->s3->tmp.psklen);
2733 s->s3->tmp.psk = NULL;
0f113f3e 2734#endif
b9908bf9
MC
2735 return 0;
2736}
2737
2738int tls_client_key_exchange_post_work(SSL *s)
2739{
2740 unsigned char *pms = NULL;
2741 size_t pmslen = 0;
2742
6f137370
MC
2743 pms = s->s3->tmp.pms;
2744 pmslen = s->s3->tmp.pmslen;
2745
b9908bf9
MC
2746#ifndef OPENSSL_NO_SRP
2747 /* Check for SRP */
2748 if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) {
2749 if (!srp_generate_client_master_secret(s)) {
2750 SSLerr(SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK,
2751 ERR_R_INTERNAL_ERROR);
2752 goto err;
2753 }
2754 return 1;
2755 }
2756#endif
b9908bf9
MC
2757
2758 if (pms == NULL && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
2759 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2760 SSLerr(SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK, ERR_R_MALLOC_FAILURE);
2761 goto err;
2762 }
2763 if (!ssl_generate_master_secret(s, pms, pmslen, 1)) {
2764 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2765 SSLerr(SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK, ERR_R_INTERNAL_ERROR);
6f137370
MC
2766 /* ssl_generate_master_secret frees the pms even on error */
2767 pms = NULL;
2768 pmslen = 0;
b9908bf9
MC
2769 goto err;
2770 }
6f137370
MC
2771 pms = NULL;
2772 pmslen = 0;
473483d4
MC
2773
2774#ifndef OPENSSL_NO_SCTP
2775 if (SSL_IS_DTLS(s)) {
2776 unsigned char sctpauthkey[64];
2777 char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
2778
2779 /*
2780 * Add new shared key for SCTP-Auth, will be ignored if no SCTP
2781 * used.
2782 */
141eb8c6
MC
2783 memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
2784 sizeof(DTLS1_SCTP_AUTH_LABEL));
473483d4
MC
2785
2786 if (SSL_export_keying_material(s, sctpauthkey,
a230b26e
EK
2787 sizeof(sctpauthkey), labelbuffer,
2788 sizeof(labelbuffer), NULL, 0, 0) <= 0)
473483d4
MC
2789 goto err;
2790
2791 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
2792 sizeof(sctpauthkey), sctpauthkey);
2793 }
2794#endif
2795
b9908bf9
MC
2796 return 1;
2797 err:
2798 OPENSSL_clear_free(pms, pmslen);
2799 s->s3->tmp.pms = NULL;
2800 return 0;
0f113f3e 2801}
d02b48c6 2802
7cea05dc 2803int tls_construct_client_verify(SSL *s, WPACKET *pkt)
0f113f3e 2804{
0f113f3e 2805 EVP_PKEY *pkey;
a0f63828 2806 const EVP_MD *md = s->s3->tmp.md[s->cert->key - s->cert->pkeys];
5a008ff6 2807 EVP_MD_CTX *mctx = NULL;
0f113f3e 2808 unsigned u = 0;
a0f63828
DSH
2809 long hdatalen = 0;
2810 void *hdata;
6400f338 2811 unsigned char *sig = NULL;
6400f338 2812
bfb0641f 2813 mctx = EVP_MD_CTX_new();
6e59a892
RL
2814 if (mctx == NULL) {
2815 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_MALLOC_FAILURE);
2816 goto err;
2817 }
b9908bf9 2818 pkey = s->cert->key->privatekey;
a0f63828
DSH
2819
2820 hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata);
2821 if (hdatalen <= 0) {
5f3d93e4
MC
2822 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR);
2823 goto err;
2824 }
0f1e51ea 2825
7cea05dc 2826 if (SSL_USE_SIGALGS(s)&& !tls12_get_sigandhash(pkt, pkey, md)) {
6400f338
MC
2827 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR);
2828 goto err;
a0f63828 2829 }
855a54a9 2830#ifdef SSL_DEBUG
a0f63828 2831 fprintf(stderr, "Using client alg %s\n", EVP_MD_name(md));
b9908bf9 2832#endif
6400f338
MC
2833 sig = OPENSSL_malloc(EVP_PKEY_size(pkey));
2834 if (sig == NULL) {
2835 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_MALLOC_FAILURE);
2836 goto err;
2837 }
6e59a892
RL
2838 if (!EVP_SignInit_ex(mctx, md, NULL)
2839 || !EVP_SignUpdate(mctx, hdata, hdatalen)
a0f63828 2840 || (s->version == SSL3_VERSION
6e59a892 2841 && !EVP_MD_CTX_ctrl(mctx, EVP_CTRL_SSL3_MASTER_SECRET,
348240c6 2842 (int)s->session->master_key_length,
a0f63828 2843 s->session->master_key))
6400f338 2844 || !EVP_SignFinal(mctx, sig, &u, pkey)) {
a0f63828
DSH
2845 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_EVP_LIB);
2846 goto err;
2847 }
2a9b9654 2848#ifndef OPENSSL_NO_GOST
3aeb9348
DSH
2849 {
2850 int pktype = EVP_PKEY_id(pkey);
2851 if (pktype == NID_id_GostR3410_2001
2852 || pktype == NID_id_GostR3410_2012_256
2853 || pktype == NID_id_GostR3410_2012_512)
6400f338 2854 BUF_reverse(sig, NULL, u);
b9908bf9 2855 }
2a9b9654 2856#endif
a0f63828 2857
7cea05dc 2858 if (!WPACKET_sub_memcpy_u16(pkt, sig, u)) {
6400f338
MC
2859 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR);
2860 goto err;
2861 }
2862
a0f63828
DSH
2863 /* Digest cached records and discard handshake buffer */
2864 if (!ssl3_digest_cached_records(s, 0))
2865 goto err;
6400f338 2866
6400f338 2867 OPENSSL_free(sig);
bfb0641f 2868 EVP_MD_CTX_free(mctx);
b9908bf9 2869 return 1;
0f113f3e 2870 err:
6400f338 2871 OPENSSL_free(sig);
bfb0641f 2872 EVP_MD_CTX_free(mctx);
6400f338 2873 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
b9908bf9 2874 return 0;
0f113f3e
MC
2875}
2876
2877/*
2878 * Check a certificate can be used for client authentication. Currently check
2879 * cert exists, if we have a suitable digest for TLS 1.2 if static DH client
2880 * certificates can be used and optionally checks suitability for Suite B.
0d609395
DSH
2881 */
2882static int ssl3_check_client_certificate(SSL *s)
0f113f3e 2883{
0f113f3e
MC
2884 if (!s->cert || !s->cert->key->x509 || !s->cert->key->privatekey)
2885 return 0;
2886 /* If no suitable signature algorithm can't use certificate */
d376e57d 2887 if (SSL_USE_SIGALGS(s) && !s->s3->tmp.md[s->cert->key - s->cert->pkeys])
0f113f3e
MC
2888 return 0;
2889 /*
2890 * If strict mode check suitability of chain before using it. This also
2891 * adjusts suite B digest if necessary.
2892 */
2893 if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT &&
2894 !tls1_check_chain(s, NULL, NULL, NULL, -2))
2895 return 0;
0f113f3e
MC
2896 return 1;
2897}
0d609395 2898
be3583fa 2899WORK_STATE tls_prepare_client_certificate(SSL *s, WORK_STATE wst)
0f113f3e
MC
2900{
2901 X509 *x509 = NULL;
2902 EVP_PKEY *pkey = NULL;
2903 int i;
2904
b9908bf9 2905 if (wst == WORK_MORE_A) {
0f113f3e
MC
2906 /* Let cert callback update client certificates if required */
2907 if (s->cert->cert_cb) {
2908 i = s->cert->cert_cb(s, s->cert->cert_cb_arg);
2909 if (i < 0) {
2910 s->rwstate = SSL_X509_LOOKUP;
b9908bf9 2911 return WORK_MORE_A;
0f113f3e
MC
2912 }
2913 if (i == 0) {
2914 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
fe3a3291 2915 ossl_statem_set_error(s);
0f113f3e
MC
2916 return 0;
2917 }
2918 s->rwstate = SSL_NOTHING;
2919 }
2920 if (ssl3_check_client_certificate(s))
b9908bf9
MC
2921 return WORK_FINISHED_CONTINUE;
2922
2923 /* Fall through to WORK_MORE_B */
2924 wst = WORK_MORE_B;
0f113f3e
MC
2925 }
2926
2927 /* We need to get a client cert */
b9908bf9 2928 if (wst == WORK_MORE_B) {
0f113f3e
MC
2929 /*
2930 * If we get an error, we need to ssl->rwstate=SSL_X509_LOOKUP;
2931 * return(-1); We then get retied later
2932 */
0f113f3e
MC
2933 i = ssl_do_client_cert_cb(s, &x509, &pkey);
2934 if (i < 0) {
2935 s->rwstate = SSL_X509_LOOKUP;
b9908bf9 2936 return WORK_MORE_B;
0f113f3e
MC
2937 }
2938 s->rwstate = SSL_NOTHING;
2939 if ((i == 1) && (pkey != NULL) && (x509 != NULL)) {
0f113f3e
MC
2940 if (!SSL_use_certificate(s, x509) || !SSL_use_PrivateKey(s, pkey))
2941 i = 0;
2942 } else if (i == 1) {
2943 i = 0;
b9908bf9 2944 SSLerr(SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE,
0f113f3e
MC
2945 SSL_R_BAD_DATA_RETURNED_BY_CALLBACK);
2946 }
2947
222561fe 2948 X509_free(x509);
25aaa98a 2949 EVP_PKEY_free(pkey);
0f113f3e
MC
2950 if (i && !ssl3_check_client_certificate(s))
2951 i = 0;
2952 if (i == 0) {
2953 if (s->version == SSL3_VERSION) {
2954 s->s3->tmp.cert_req = 0;
2955 ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_CERTIFICATE);
b9908bf9 2956 return WORK_FINISHED_CONTINUE;
0f113f3e
MC
2957 } else {
2958 s->s3->tmp.cert_req = 2;
124037fd 2959 if (!ssl3_digest_cached_records(s, 0)) {
dab18ab5 2960 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
fe3a3291 2961 ossl_statem_set_error(s);
dab18ab5
DSH
2962 return 0;
2963 }
0f113f3e
MC
2964 }
2965 }
2966
b9908bf9 2967 return WORK_FINISHED_CONTINUE;
0f113f3e
MC
2968 }
2969
b9908bf9
MC
2970 /* Shouldn't ever get here */
2971 return WORK_ERROR;
2972}
2973
7cea05dc 2974int tls_construct_client_certificate(SSL *s, WPACKET *pkt)
b9908bf9 2975{
7cea05dc 2976 if (!ssl3_output_cert_chain(s, pkt,
b90506e9
MC
2977 (s->s3->tmp.cert_req == 2) ? NULL
2978 : s->cert->key)) {
b9908bf9
MC
2979 SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE, ERR_R_INTERNAL_ERROR);
2980 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
b9908bf9 2981 return 0;
0f113f3e 2982 }
b9908bf9
MC
2983
2984 return 1;
0f113f3e
MC
2985}
2986
2987#define has_bits(i,m) (((i)&(m)) == (m))
d02b48c6 2988
36d16f8e 2989int ssl3_check_cert_and_algorithm(SSL *s)
0f113f3e 2990{
60f43e9e
RL
2991 int i;
2992#ifndef OPENSSL_NO_EC
2993 int idx;
2994#endif
0f113f3e
MC
2995 long alg_k, alg_a;
2996 EVP_PKEY *pkey = NULL;
26c79d56 2997 int al = SSL_AD_HANDSHAKE_FAILURE;
d02b48c6 2998
0f113f3e
MC
2999 alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
3000 alg_a = s->s3->tmp.new_cipher->algorithm_auth;
d02b48c6 3001
0f113f3e 3002 /* we don't have a certificate */
55a9a16f 3003 if ((alg_a & SSL_aNULL) || (alg_k & SSL_kPSK))
0f113f3e 3004 return (1);
d02b48c6 3005
0f113f3e 3006 /* This is the passed certificate */
d02b48c6 3007
10bf4fc2 3008#ifndef OPENSSL_NO_EC
60f43e9e 3009 idx = s->session->peer_type;
0f113f3e 3010 if (idx == SSL_PKEY_ECC) {
a273c6ee 3011 if (ssl_check_srvr_ecc_cert_and_alg(s->session->peer, s) == 0) {
0f113f3e
MC
3012 /* check failed */
3013 SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, SSL_R_BAD_ECC_CERT);
3014 goto f_err;
3015 } else {
3016 return 1;
3017 }
3018 } else if (alg_a & SSL_aECDSA) {
3019 SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
3020 SSL_R_MISSING_ECDSA_SIGNING_CERT);
3021 goto f_err;
0f113f3e
MC
3022 }
3023#endif
8382fd3a 3024 pkey = X509_get0_pubkey(s->session->peer);
a273c6ee 3025 i = X509_certificate_type(s->session->peer, pkey);
0f113f3e
MC
3026
3027 /* Check that we have a certificate if we require one */
3028 if ((alg_a & SSL_aRSA) && !has_bits(i, EVP_PK_RSA | EVP_PKT_SIGN)) {
3029 SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
3030 SSL_R_MISSING_RSA_SIGNING_CERT);
3031 goto f_err;
3032 }
bc36ee62 3033#ifndef OPENSSL_NO_DSA
0f113f3e
MC
3034 else if ((alg_a & SSL_aDSS) && !has_bits(i, EVP_PK_DSA | EVP_PKT_SIGN)) {
3035 SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
3036 SSL_R_MISSING_DSA_SIGNING_CERT);
3037 goto f_err;
3038 }
d02b48c6 3039#endif
bc36ee62 3040#ifndef OPENSSL_NO_RSA
361a1191
KR
3041 if (alg_k & (SSL_kRSA | SSL_kRSAPSK) &&
3042 !has_bits(i, EVP_PK_RSA | EVP_PKT_ENC)) {
3043 SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
3044 SSL_R_MISSING_RSA_ENCRYPTING_CERT);
3045 goto f_err;
0f113f3e 3046 }
79df9d62 3047#endif
bc36ee62 3048#ifndef OPENSSL_NO_DH
fb79abe3 3049 if ((alg_k & SSL_kDHE) && (s->s3->peer_tmp == NULL)) {
26c79d56
KR
3050 al = SSL_AD_INTERNAL_ERROR;
3051 SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, ERR_R_INTERNAL_ERROR);
0f113f3e 3052 goto f_err;
0f113f3e 3053 }
d02b48c6
RE
3054#endif
3055
0f113f3e
MC
3056 return (1);
3057 f_err:
26c79d56 3058 ssl3_send_alert(s, SSL3_AL_FATAL, al);
0f113f3e
MC
3059 return (0);
3060}
3061
e481f9b9 3062#ifndef OPENSSL_NO_NEXTPROTONEG
7cea05dc 3063int tls_construct_next_proto(SSL *s, WPACKET *pkt)
b9908bf9 3064{
15e6be6c
MC
3065 size_t len, padding_len;
3066 unsigned char *padding = NULL;
15e6be6c 3067
b9908bf9
MC
3068 len = s->next_proto_negotiated_len;
3069 padding_len = 32 - ((len + 2) % 32);
15e6be6c 3070
7cea05dc
MC
3071 if (!WPACKET_sub_memcpy_u8(pkt, s->next_proto_negotiated, len)
3072 || !WPACKET_sub_allocate_bytes_u8(pkt, padding_len, &padding)) {
15e6be6c
MC
3073 SSLerr(SSL_F_TLS_CONSTRUCT_NEXT_PROTO, ERR_R_INTERNAL_ERROR);
3074 goto err;
3075 }
3076
3077 memset(padding, 0, padding_len);
3078
b9908bf9 3079 return 1;
15e6be6c 3080 err:
15e6be6c
MC
3081 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
3082 return 0;
b9908bf9 3083}
6434abbf 3084#endif
368888bc
DSH
3085
3086int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey)
0f113f3e
MC
3087{
3088 int i = 0;
368888bc 3089#ifndef OPENSSL_NO_ENGINE
0f113f3e
MC
3090 if (s->ctx->client_cert_engine) {
3091 i = ENGINE_load_ssl_client_cert(s->ctx->client_cert_engine, s,
3092 SSL_get_client_CA_list(s),
3093 px509, ppkey, NULL, NULL, NULL);
3094 if (i != 0)
3095 return i;
3096 }
3097#endif
3098 if (s->ctx->client_cert_cb)
3099 i = s->ctx->client_cert_cb(s, px509, ppkey);
3100 return i;
3101}
d45ba43d 3102
ae2f7b37 3103int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk, WPACKET *pkt)
d45ba43d 3104{
2c7b4dbc
MC
3105 int i;
3106 size_t totlen = 0, len, maxlen;
d45ba43d
MC
3107 int empty_reneg_info_scsv = !s->renegotiate;
3108 /* Set disabled masks for this session */
3109 ssl_set_client_disabled(s);
3110
3111 if (sk == NULL)
3112 return (0);
d45ba43d 3113
2c7b4dbc
MC
3114#ifdef OPENSSL_MAX_TLS1_2_CIPHER_LENGTH
3115# if OPENSSL_MAX_TLS1_2_CIPHER_LENGTH < 6
3116# error Max cipher length too short
3117# endif
3118 /*
3119 * Some servers hang if client hello > 256 bytes as hack workaround
3120 * chop number of supported ciphers to keep it well below this if we
3121 * use TLS v1.2
3122 */
3123 if (TLS1_get_version(s) >= TLS1_2_VERSION)
3124 maxlen = OPENSSL_MAX_TLS1_2_CIPHER_LENGTH & ~1;
3125 else
3126#endif
3127 /* Maximum length that can be stored in 2 bytes. Length must be even */
3128 maxlen = 0xfffe;
3129
3130 if (empty_reneg_info_scsv)
3131 maxlen -= 2;
3132 if (s->mode & SSL_MODE_SEND_FALLBACK_SCSV)
3133 maxlen -= 2;
3134
3135 for (i = 0; i < sk_SSL_CIPHER_num(sk) && totlen < maxlen; i++) {
3136 const SSL_CIPHER *c;
3137
d45ba43d
MC
3138 c = sk_SSL_CIPHER_value(sk, i);
3139 /* Skip disabled ciphers */
3140 if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED))
3141 continue;
2c7b4dbc
MC
3142
3143 if (!s->method->put_cipher_by_char(c, pkt, &len)) {
3144 SSLerr(SSL_F_SSL_CIPHER_LIST_TO_BYTES, ERR_R_INTERNAL_ERROR);
3145 return 0;
3146 }
3147
3148 totlen += len;
d45ba43d 3149 }
2c7b4dbc
MC
3150
3151 if (totlen == 0) {
3152 SSLerr(SSL_F_SSL_CIPHER_LIST_TO_BYTES, SSL_R_NO_CIPHERS_AVAILABLE);
3153 return 0;
3154 }
3155
3156 if (totlen != 0) {
d45ba43d
MC
3157 if (empty_reneg_info_scsv) {
3158 static SSL_CIPHER scsv = {
3159 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
3160 };
2c7b4dbc
MC
3161 if (!s->method->put_cipher_by_char(&scsv, pkt, &len)) {
3162 SSLerr(SSL_F_SSL_CIPHER_LIST_TO_BYTES, ERR_R_INTERNAL_ERROR);
3163 return 0;
3164 }
d45ba43d
MC
3165 }
3166 if (s->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
3167 static SSL_CIPHER scsv = {
3168 0, NULL, SSL3_CK_FALLBACK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
3169 };
2c7b4dbc
MC
3170 if (!s->method->put_cipher_by_char(&scsv, pkt, &len)) {
3171 SSLerr(SSL_F_SSL_CIPHER_LIST_TO_BYTES, ERR_R_INTERNAL_ERROR);
3172 return 0;
3173 }
d45ba43d
MC
3174 }
3175 }
3176
2c7b4dbc 3177 return 1;
d45ba43d 3178}