Send a CCS from the client in a non-early_data handshake
[openssl.git] / ssl / statem / statem_clnt.c
1 /*
2  * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3  * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
4  * Copyright 2005 Nokia. All rights reserved.
5  *
6  * Licensed under the OpenSSL license (the "License").  You may not use
7  * this file except in compliance with the License.  You can obtain a copy
8  * in the file LICENSE in the source distribution or at
9  * https://www.openssl.org/source/license.html
10  */
11
12 #include <stdio.h>
13 #include <time.h>
14 #include "../ssl_locl.h"
15 #include "statem_locl.h"
16 #include <openssl/buffer.h>
17 #include <openssl/rand.h>
18 #include <openssl/objects.h>
19 #include <openssl/evp.h>
20 #include <openssl/md5.h>
21 #include <openssl/dh.h>
22 #include <openssl/bn.h>
23 #include <openssl/engine.h>
24
25 static MSG_PROCESS_RETURN tls_process_hello_retry_request(SSL *s, PACKET *pkt);
26 static MSG_PROCESS_RETURN tls_process_encrypted_extensions(SSL *s, PACKET *pkt);
27
28 static ossl_inline int cert_req_allowed(SSL *s);
29 static int key_exchange_expected(SSL *s);
30 static int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
31                                     WPACKET *pkt);
32
33 /*
34  * Is a CertificateRequest message allowed at the moment or not?
35  *
36  *  Return values are:
37  *  1: Yes
38  *  0: No
39  */
40 static ossl_inline int cert_req_allowed(SSL *s)
41 {
42     /* TLS does not like anon-DH with client cert */
43     if ((s->version > SSL3_VERSION
44          && (s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL))
45         || (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aSRP | SSL_aPSK)))
46         return 0;
47
48     return 1;
49 }
50
51 /*
52  * Should we expect the ServerKeyExchange message or not?
53  *
54  *  Return values are:
55  *  1: Yes
56  *  0: No
57  */
58 static int key_exchange_expected(SSL *s)
59 {
60     long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
61
62     /*
63      * Can't skip server key exchange if this is an ephemeral
64      * ciphersuite or for SRP
65      */
66     if (alg_k & (SSL_kDHE | SSL_kECDHE | SSL_kDHEPSK | SSL_kECDHEPSK
67                  | SSL_kSRP)) {
68         return 1;
69     }
70
71     return 0;
72 }
73
74 /*
75  * ossl_statem_client_read_transition() encapsulates the logic for the allowed
76  * handshake state transitions when a TLS1.3 client is reading messages from the
77  * server. The message type that the server has sent is provided in |mt|. The
78  * current state is in |s->statem.hand_state|.
79  *
80  * Return values are 1 for success (transition allowed) and  0 on error
81  * (transition not allowed)
82  */
83 static int ossl_statem_client13_read_transition(SSL *s, int mt)
84 {
85     OSSL_STATEM *st = &s->statem;
86
87     /*
88      * Note: There is no case for TLS_ST_CW_CLNT_HELLO, because we haven't
89      * yet negotiated TLSv1.3 at that point so that is handled by
90      * ossl_statem_client_read_transition()
91      */
92
93     switch (st->hand_state) {
94     default:
95         break;
96
97     case TLS_ST_CW_CLNT_HELLO:
98         /*
99          * This must a ClientHello following a HelloRetryRequest, so the only
100          * thing we can get now is a ServerHello.
101          */
102         if (mt == SSL3_MT_SERVER_HELLO) {
103             st->hand_state = TLS_ST_CR_SRVR_HELLO;
104             return 1;
105         }
106         break;
107
108     case TLS_ST_CR_SRVR_HELLO:
109         if (mt == SSL3_MT_ENCRYPTED_EXTENSIONS) {
110             st->hand_state = TLS_ST_CR_ENCRYPTED_EXTENSIONS;
111             return 1;
112         }
113         break;
114
115     case TLS_ST_CR_ENCRYPTED_EXTENSIONS:
116         if (s->hit) {
117             if (mt == SSL3_MT_FINISHED) {
118                 st->hand_state = TLS_ST_CR_FINISHED;
119                 return 1;
120             }
121         } else {
122             if (mt == SSL3_MT_CERTIFICATE_REQUEST) {
123                 st->hand_state = TLS_ST_CR_CERT_REQ;
124                 return 1;
125             }
126             if (mt == SSL3_MT_CERTIFICATE) {
127                 st->hand_state = TLS_ST_CR_CERT;
128                 return 1;
129             }
130         }
131         break;
132
133     case TLS_ST_CR_CERT_REQ:
134         if (mt == SSL3_MT_CERTIFICATE) {
135             st->hand_state = TLS_ST_CR_CERT;
136             return 1;
137         }
138         break;
139
140     case TLS_ST_CR_CERT:
141         if (mt == SSL3_MT_CERTIFICATE_VERIFY) {
142             st->hand_state = TLS_ST_CR_CERT_VRFY;
143             return 1;
144         }
145         break;
146
147     case TLS_ST_CR_CERT_VRFY:
148         if (mt == SSL3_MT_FINISHED) {
149             st->hand_state = TLS_ST_CR_FINISHED;
150             return 1;
151         }
152         break;
153
154     case TLS_ST_OK:
155         if (mt == SSL3_MT_NEWSESSION_TICKET) {
156             st->hand_state = TLS_ST_CR_SESSION_TICKET;
157             return 1;
158         }
159         if (mt == SSL3_MT_KEY_UPDATE) {
160             st->hand_state = TLS_ST_CR_KEY_UPDATE;
161             return 1;
162         }
163         break;
164     }
165
166     /* No valid transition found */
167     return 0;
168 }
169
170 /*
171  * ossl_statem_client_read_transition() encapsulates the logic for the allowed
172  * handshake state transitions when the client is reading messages from the
173  * server. The message type that the server has sent is provided in |mt|. The
174  * current state is in |s->statem.hand_state|.
175  *
176  * Return values are 1 for success (transition allowed) and  0 on error
177  * (transition not allowed)
178  */
179 int ossl_statem_client_read_transition(SSL *s, int mt)
180 {
181     OSSL_STATEM *st = &s->statem;
182     int ske_expected;
183
184     /*
185      * Note that after writing the first ClientHello we don't know what version
186      * we are going to negotiate yet, so we don't take this branch until later.
187      */
188     if (SSL_IS_TLS13(s)) {
189         if (!ossl_statem_client13_read_transition(s, mt))
190             goto err;
191         return 1;
192     }
193
194     switch (st->hand_state) {
195     default:
196         break;
197
198     case TLS_ST_CW_CLNT_HELLO:
199         if (mt == SSL3_MT_SERVER_HELLO) {
200             st->hand_state = TLS_ST_CR_SRVR_HELLO;
201             return 1;
202         }
203
204         if (SSL_IS_DTLS(s)) {
205             if (mt == DTLS1_MT_HELLO_VERIFY_REQUEST) {
206                 st->hand_state = DTLS_ST_CR_HELLO_VERIFY_REQUEST;
207                 return 1;
208             }
209         } else {
210             if (mt == SSL3_MT_HELLO_RETRY_REQUEST) {
211                 st->hand_state = TLS_ST_CR_HELLO_RETRY_REQUEST;
212                 return 1;
213             }
214         }
215         break;
216
217     case TLS_ST_EARLY_DATA:
218         /*
219          * We've not actually selected TLSv1.3 yet, but we have sent early
220          * data. The only thing allowed now is a ServerHello or a
221          * HelloRetryRequest.
222          */
223         if (mt == SSL3_MT_SERVER_HELLO) {
224             st->hand_state = TLS_ST_CR_SRVR_HELLO;
225             return 1;
226         }
227         if (mt == SSL3_MT_HELLO_RETRY_REQUEST) {
228             st->hand_state = TLS_ST_CR_HELLO_RETRY_REQUEST;
229             return 1;
230         }
231         break;
232
233     case TLS_ST_CR_SRVR_HELLO:
234         if (s->hit) {
235             if (s->ext.ticket_expected) {
236                 if (mt == SSL3_MT_NEWSESSION_TICKET) {
237                     st->hand_state = TLS_ST_CR_SESSION_TICKET;
238                     return 1;
239                 }
240             } else if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
241                 st->hand_state = TLS_ST_CR_CHANGE;
242                 return 1;
243             }
244         } else {
245             if (SSL_IS_DTLS(s) && mt == DTLS1_MT_HELLO_VERIFY_REQUEST) {
246                 st->hand_state = DTLS_ST_CR_HELLO_VERIFY_REQUEST;
247                 return 1;
248             } else if (s->version >= TLS1_VERSION
249                        && s->ext.session_secret_cb != NULL
250                        && s->session->ext.tick != NULL
251                        && mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
252                 /*
253                  * Normally, we can tell if the server is resuming the session
254                  * from the session ID. EAP-FAST (RFC 4851), however, relies on
255                  * the next server message after the ServerHello to determine if
256                  * the server is resuming.
257                  */
258                 s->hit = 1;
259                 st->hand_state = TLS_ST_CR_CHANGE;
260                 return 1;
261             } else if (!(s->s3->tmp.new_cipher->algorithm_auth
262                          & (SSL_aNULL | SSL_aSRP | SSL_aPSK))) {
263                 if (mt == SSL3_MT_CERTIFICATE) {
264                     st->hand_state = TLS_ST_CR_CERT;
265                     return 1;
266                 }
267             } else {
268                 ske_expected = key_exchange_expected(s);
269                 /* SKE is optional for some PSK ciphersuites */
270                 if (ske_expected
271                     || ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_PSK)
272                         && mt == SSL3_MT_SERVER_KEY_EXCHANGE)) {
273                     if (mt == SSL3_MT_SERVER_KEY_EXCHANGE) {
274                         st->hand_state = TLS_ST_CR_KEY_EXCH;
275                         return 1;
276                     }
277                 } else if (mt == SSL3_MT_CERTIFICATE_REQUEST
278                            && cert_req_allowed(s)) {
279                     st->hand_state = TLS_ST_CR_CERT_REQ;
280                     return 1;
281                 } else if (mt == SSL3_MT_SERVER_DONE) {
282                     st->hand_state = TLS_ST_CR_SRVR_DONE;
283                     return 1;
284                 }
285             }
286         }
287         break;
288
289     case TLS_ST_CR_CERT:
290         /*
291          * The CertificateStatus message is optional even if
292          * |ext.status_expected| is set
293          */
294         if (s->ext.status_expected && mt == SSL3_MT_CERTIFICATE_STATUS) {
295             st->hand_state = TLS_ST_CR_CERT_STATUS;
296             return 1;
297         }
298         /* Fall through */
299
300     case TLS_ST_CR_CERT_STATUS:
301         ske_expected = key_exchange_expected(s);
302         /* SKE is optional for some PSK ciphersuites */
303         if (ske_expected || ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_PSK)
304                              && mt == SSL3_MT_SERVER_KEY_EXCHANGE)) {
305             if (mt == SSL3_MT_SERVER_KEY_EXCHANGE) {
306                 st->hand_state = TLS_ST_CR_KEY_EXCH;
307                 return 1;
308             }
309             goto err;
310         }
311         /* Fall through */
312
313     case TLS_ST_CR_KEY_EXCH:
314         if (mt == SSL3_MT_CERTIFICATE_REQUEST) {
315             if (cert_req_allowed(s)) {
316                 st->hand_state = TLS_ST_CR_CERT_REQ;
317                 return 1;
318             }
319             goto err;
320         }
321         /* Fall through */
322
323     case TLS_ST_CR_CERT_REQ:
324         if (mt == SSL3_MT_SERVER_DONE) {
325             st->hand_state = TLS_ST_CR_SRVR_DONE;
326             return 1;
327         }
328         break;
329
330     case TLS_ST_CW_FINISHED:
331         if (s->ext.ticket_expected) {
332             if (mt == SSL3_MT_NEWSESSION_TICKET) {
333                 st->hand_state = TLS_ST_CR_SESSION_TICKET;
334                 return 1;
335             }
336         } else if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
337             st->hand_state = TLS_ST_CR_CHANGE;
338             return 1;
339         }
340         break;
341
342     case TLS_ST_CR_SESSION_TICKET:
343         if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
344             st->hand_state = TLS_ST_CR_CHANGE;
345             return 1;
346         }
347         break;
348
349     case TLS_ST_CR_CHANGE:
350         if (mt == SSL3_MT_FINISHED) {
351             st->hand_state = TLS_ST_CR_FINISHED;
352             return 1;
353         }
354         break;
355
356     case TLS_ST_OK:
357         if (mt == SSL3_MT_HELLO_REQUEST) {
358             st->hand_state = TLS_ST_CR_HELLO_REQ;
359             return 1;
360         }
361         break;
362     }
363
364  err:
365     /* No valid transition found */
366     SSLfatal(s, SSL3_AD_UNEXPECTED_MESSAGE,
367              SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION,
368              SSL_R_UNEXPECTED_MESSAGE);
369     return 0;
370 }
371
372 /*
373  * ossl_statem_client13_write_transition() works out what handshake state to
374  * move to next when the TLSv1.3 client is writing messages to be sent to the
375  * server.
376  */
377 static WRITE_TRAN ossl_statem_client13_write_transition(SSL *s)
378 {
379     OSSL_STATEM *st = &s->statem;
380
381     /*
382      * Note: There are no cases for TLS_ST_BEFORE because we haven't negotiated
383      * TLSv1.3 yet at that point. They are handled by
384      * ossl_statem_client_write_transition().
385      */
386     switch (st->hand_state) {
387     default:
388         /* Shouldn't happen */
389         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
390                  SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION,
391                  ERR_R_INTERNAL_ERROR);
392         return WRITE_TRAN_ERROR;
393
394     case TLS_ST_CR_FINISHED:
395         if (s->early_data_state == SSL_EARLY_DATA_WRITE_RETRY
396                 || s->early_data_state == SSL_EARLY_DATA_FINISHED_WRITING)
397             st->hand_state = TLS_ST_PENDING_EARLY_DATA_END;
398         else if ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0
399                     && !s->hello_retry_request)
400             st->hand_state = TLS_ST_CW_CHANGE;
401         else
402             st->hand_state = (s->s3->tmp.cert_req != 0) ? TLS_ST_CW_CERT
403                                                         : TLS_ST_CW_FINISHED;
404         return WRITE_TRAN_CONTINUE;
405
406     case TLS_ST_PENDING_EARLY_DATA_END:
407         if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
408             st->hand_state = TLS_ST_CW_END_OF_EARLY_DATA;
409             return WRITE_TRAN_CONTINUE;
410         }
411         /* Fall through */
412
413     case TLS_ST_CW_END_OF_EARLY_DATA:
414     case TLS_ST_CW_CHANGE:
415         st->hand_state = (s->s3->tmp.cert_req != 0) ? TLS_ST_CW_CERT
416                                                     : TLS_ST_CW_FINISHED;
417         return WRITE_TRAN_CONTINUE;
418
419     case TLS_ST_CW_CERT:
420         /* If a non-empty Certificate we also send CertificateVerify */
421         st->hand_state = (s->s3->tmp.cert_req == 1) ? TLS_ST_CW_CERT_VRFY
422                                                     : TLS_ST_CW_FINISHED;
423         return WRITE_TRAN_CONTINUE;
424
425     case TLS_ST_CW_CERT_VRFY:
426         st->hand_state = TLS_ST_CW_FINISHED;
427         return WRITE_TRAN_CONTINUE;
428
429     case TLS_ST_CR_KEY_UPDATE:
430         if (s->key_update != SSL_KEY_UPDATE_NONE) {
431             st->hand_state = TLS_ST_CW_KEY_UPDATE;
432             return WRITE_TRAN_CONTINUE;
433         }
434         /* Fall through */
435
436     case TLS_ST_CW_KEY_UPDATE:
437     case TLS_ST_CR_SESSION_TICKET:
438     case TLS_ST_CW_FINISHED:
439         st->hand_state = TLS_ST_OK;
440         return WRITE_TRAN_CONTINUE;
441
442     case TLS_ST_OK:
443         if (s->key_update != SSL_KEY_UPDATE_NONE) {
444             st->hand_state = TLS_ST_CW_KEY_UPDATE;
445             return WRITE_TRAN_CONTINUE;
446         }
447
448         /* Try to read from the server instead */
449         return WRITE_TRAN_FINISHED;
450     }
451 }
452
453 /*
454  * ossl_statem_client_write_transition() works out what handshake state to
455  * move to next when the client is writing messages to be sent to the server.
456  */
457 WRITE_TRAN ossl_statem_client_write_transition(SSL *s)
458 {
459     OSSL_STATEM *st = &s->statem;
460
461     /*
462      * Note that immediately before/after a ClientHello we don't know what
463      * version we are going to negotiate yet, so we don't take this branch until
464      * later
465      */
466     if (SSL_IS_TLS13(s))
467         return ossl_statem_client13_write_transition(s);
468
469     switch (st->hand_state) {
470     default:
471         /* Shouldn't happen */
472         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
473                  SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION,
474                  ERR_R_INTERNAL_ERROR);
475         return WRITE_TRAN_ERROR;
476
477     case TLS_ST_OK:
478         if (!s->renegotiate) {
479             /*
480              * We haven't requested a renegotiation ourselves so we must have
481              * received a message from the server. Better read it.
482              */
483             return WRITE_TRAN_FINISHED;
484         }
485         /* Renegotiation */
486         /* fall thru */
487     case TLS_ST_BEFORE:
488         st->hand_state = TLS_ST_CW_CLNT_HELLO;
489         return WRITE_TRAN_CONTINUE;
490
491     case TLS_ST_CW_CLNT_HELLO:
492         if (s->early_data_state == SSL_EARLY_DATA_CONNECTING) {
493             /*
494              * We are assuming this is a TLSv1.3 connection, although we haven't
495              * actually selected a version yet.
496              */
497             st->hand_state = TLS_ST_EARLY_DATA;
498             return WRITE_TRAN_CONTINUE;
499         }
500         /*
501          * No transition at the end of writing because we don't know what
502          * we will be sent
503          */
504         return WRITE_TRAN_FINISHED;
505
506     case TLS_ST_CR_HELLO_RETRY_REQUEST:
507         st->hand_state = TLS_ST_CW_CLNT_HELLO;
508         return WRITE_TRAN_CONTINUE;
509
510     case TLS_ST_EARLY_DATA:
511         return WRITE_TRAN_FINISHED;
512
513     case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
514         st->hand_state = TLS_ST_CW_CLNT_HELLO;
515         return WRITE_TRAN_CONTINUE;
516
517     case TLS_ST_CR_SRVR_DONE:
518         if (s->s3->tmp.cert_req)
519             st->hand_state = TLS_ST_CW_CERT;
520         else
521             st->hand_state = TLS_ST_CW_KEY_EXCH;
522         return WRITE_TRAN_CONTINUE;
523
524     case TLS_ST_CW_CERT:
525         st->hand_state = TLS_ST_CW_KEY_EXCH;
526         return WRITE_TRAN_CONTINUE;
527
528     case TLS_ST_CW_KEY_EXCH:
529         /*
530          * For TLS, cert_req is set to 2, so a cert chain of nothing is
531          * sent, but no verify packet is sent
532          */
533         /*
534          * XXX: For now, we do not support client authentication in ECDH
535          * cipher suites with ECDH (rather than ECDSA) certificates. We
536          * need to skip the certificate verify message when client's
537          * ECDH public key is sent inside the client certificate.
538          */
539         if (s->s3->tmp.cert_req == 1) {
540             st->hand_state = TLS_ST_CW_CERT_VRFY;
541         } else {
542             st->hand_state = TLS_ST_CW_CHANGE;
543         }
544         if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) {
545             st->hand_state = TLS_ST_CW_CHANGE;
546         }
547         return WRITE_TRAN_CONTINUE;
548
549     case TLS_ST_CW_CERT_VRFY:
550         st->hand_state = TLS_ST_CW_CHANGE;
551         return WRITE_TRAN_CONTINUE;
552
553     case TLS_ST_CW_CHANGE:
554 #if defined(OPENSSL_NO_NEXTPROTONEG)
555         st->
556         hand_state = TLS_ST_CW_FINISHED;
557 #else
558         if (!SSL_IS_DTLS(s) && s->s3->npn_seen)
559             st->hand_state = TLS_ST_CW_NEXT_PROTO;
560         else
561             st->hand_state = TLS_ST_CW_FINISHED;
562 #endif
563         return WRITE_TRAN_CONTINUE;
564
565 #if !defined(OPENSSL_NO_NEXTPROTONEG)
566     case TLS_ST_CW_NEXT_PROTO:
567         st->hand_state = TLS_ST_CW_FINISHED;
568         return WRITE_TRAN_CONTINUE;
569 #endif
570
571     case TLS_ST_CW_FINISHED:
572         if (s->hit) {
573             st->hand_state = TLS_ST_OK;
574             return WRITE_TRAN_CONTINUE;
575         } else {
576             return WRITE_TRAN_FINISHED;
577         }
578
579     case TLS_ST_CR_FINISHED:
580         if (s->hit) {
581             st->hand_state = TLS_ST_CW_CHANGE;
582             return WRITE_TRAN_CONTINUE;
583         } else {
584             st->hand_state = TLS_ST_OK;
585             return WRITE_TRAN_CONTINUE;
586         }
587
588     case TLS_ST_CR_HELLO_REQ:
589         /*
590          * If we can renegotiate now then do so, otherwise wait for a more
591          * convenient time.
592          */
593         if (ssl3_renegotiate_check(s, 1)) {
594             if (!tls_setup_handshake(s)) {
595                 /* SSLfatal() already called */
596                 return WRITE_TRAN_ERROR;
597             }
598             st->hand_state = TLS_ST_CW_CLNT_HELLO;
599             return WRITE_TRAN_CONTINUE;
600         }
601         st->hand_state = TLS_ST_OK;
602         return WRITE_TRAN_CONTINUE;
603     }
604 }
605
606 /*
607  * Perform any pre work that needs to be done prior to sending a message from
608  * the client to the server.
609  */
610 WORK_STATE ossl_statem_client_pre_work(SSL *s, WORK_STATE wst)
611 {
612     OSSL_STATEM *st = &s->statem;
613
614     switch (st->hand_state) {
615     default:
616         /* No pre work to be done */
617         break;
618
619     case TLS_ST_CW_CLNT_HELLO:
620         s->shutdown = 0;
621         if (SSL_IS_DTLS(s)) {
622             /* every DTLS ClientHello resets Finished MAC */
623             if (!ssl3_init_finished_mac(s)) {
624                 /* SSLfatal() already called */
625                 return WORK_ERROR;
626             }
627         }
628         break;
629
630     case TLS_ST_CW_CHANGE:
631         if (SSL_IS_DTLS(s)) {
632             if (s->hit) {
633                 /*
634                  * We're into the last flight so we don't retransmit these
635                  * messages unless we need to.
636                  */
637                 st->use_timer = 0;
638             }
639 #ifndef OPENSSL_NO_SCTP
640             if (BIO_dgram_is_sctp(SSL_get_wbio(s))) {
641                 /* Calls SSLfatal() as required */
642                 return dtls_wait_for_dry(s);
643             }
644 #endif
645         }
646         break;
647
648     case TLS_ST_PENDING_EARLY_DATA_END:
649         /*
650          * If we've been called by SSL_do_handshake()/SSL_write(), or we did not
651          * attempt to write early data before calling SSL_read() then we press
652          * on with the handshake. Otherwise we pause here.
653          */
654         if (s->early_data_state == SSL_EARLY_DATA_FINISHED_WRITING
655                 || s->early_data_state == SSL_EARLY_DATA_NONE)
656             return WORK_FINISHED_CONTINUE;
657         /* Fall through */
658
659     case TLS_ST_EARLY_DATA:
660     case TLS_ST_OK:
661         /* Calls SSLfatal() as required */
662         return tls_finish_handshake(s, wst, 1);
663     }
664
665     return WORK_FINISHED_CONTINUE;
666 }
667
668 /*
669  * Perform any work that needs to be done after sending a message from the
670  * client to the server.
671  */
672 WORK_STATE ossl_statem_client_post_work(SSL *s, WORK_STATE wst)
673 {
674     OSSL_STATEM *st = &s->statem;
675
676     s->init_num = 0;
677
678     switch (st->hand_state) {
679     default:
680         /* No post work to be done */
681         break;
682
683     case TLS_ST_CW_CLNT_HELLO:
684         if (wst == WORK_MORE_A && statem_flush(s) != 1)
685             return WORK_MORE_A;
686
687         if (SSL_IS_DTLS(s)) {
688             /* Treat the next message as the first packet */
689             s->first_packet = 1;
690         }
691
692         if (s->early_data_state == SSL_EARLY_DATA_CONNECTING
693                 && s->max_early_data > 0) {
694             /*
695              * We haven't selected TLSv1.3 yet so we don't call the change
696              * cipher state function associated with the SSL_METHOD. Instead
697              * we call tls13_change_cipher_state() directly.
698              */
699             if (!tls13_change_cipher_state(s,
700                         SSL3_CC_EARLY | SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
701                 /* SSLfatal() already called */
702                 return WORK_ERROR;
703             }
704         }
705         break;
706
707     case TLS_ST_CW_END_OF_EARLY_DATA:
708         /*
709          * We set the enc_write_ctx back to NULL because we may end up writing
710          * in cleartext again if we get a HelloRetryRequest from the server.
711          */
712         EVP_CIPHER_CTX_free(s->enc_write_ctx);
713         s->enc_write_ctx = NULL;
714         break;
715
716     case TLS_ST_CW_KEY_EXCH:
717         if (tls_client_key_exchange_post_work(s) == 0) {
718             /* SSLfatal() already called */
719             return WORK_ERROR;
720         }
721         break;
722
723     case TLS_ST_CW_CHANGE:
724         if (SSL_IS_TLS13(s))
725             break;
726         s->session->cipher = s->s3->tmp.new_cipher;
727 #ifdef OPENSSL_NO_COMP
728         s->session->compress_meth = 0;
729 #else
730         if (s->s3->tmp.new_compression == NULL)
731             s->session->compress_meth = 0;
732         else
733             s->session->compress_meth = s->s3->tmp.new_compression->id;
734 #endif
735         if (!s->method->ssl3_enc->setup_key_block(s)) {
736             /* SSLfatal() already called */
737             return WORK_ERROR;
738         }
739
740         if (!s->method->ssl3_enc->change_cipher_state(s,
741                                           SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
742             /* SSLfatal() already called */
743             return WORK_ERROR;
744         }
745
746         if (SSL_IS_DTLS(s)) {
747 #ifndef OPENSSL_NO_SCTP
748             if (s->hit) {
749                 /*
750                  * Change to new shared key of SCTP-Auth, will be ignored if
751                  * no SCTP used.
752                  */
753                 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
754                          0, NULL);
755             }
756 #endif
757
758             dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
759         }
760         break;
761
762     case TLS_ST_CW_FINISHED:
763 #ifndef OPENSSL_NO_SCTP
764         if (wst == WORK_MORE_A && SSL_IS_DTLS(s) && s->hit == 0) {
765             /*
766              * Change to new shared key of SCTP-Auth, will be ignored if
767              * no SCTP used.
768              */
769             BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
770                      0, NULL);
771         }
772 #endif
773         if (statem_flush(s) != 1)
774             return WORK_MORE_B;
775
776         if (SSL_IS_TLS13(s)) {
777             if (!s->method->ssl3_enc->change_cipher_state(s,
778                         SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
779                 /* SSLfatal() already called */
780                 return WORK_ERROR;
781             }
782         }
783         break;
784
785     case TLS_ST_CW_KEY_UPDATE:
786         if (statem_flush(s) != 1)
787             return WORK_MORE_A;
788         if (!tls13_update_key(s, 1)) {
789             /* SSLfatal() already called */
790             return WORK_ERROR;
791         }
792         break;
793     }
794
795     return WORK_FINISHED_CONTINUE;
796 }
797
798 /*
799  * Get the message construction function and message type for sending from the
800  * client
801  *
802  * Valid return values are:
803  *   1: Success
804  *   0: Error
805  */
806 int ossl_statem_client_construct_message(SSL *s, WPACKET *pkt,
807                                          confunc_f *confunc, int *mt)
808 {
809     OSSL_STATEM *st = &s->statem;
810
811     switch (st->hand_state) {
812     default:
813         /* Shouldn't happen */
814         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
815                  SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE,
816                  SSL_R_BAD_HANDSHAKE_STATE);
817         return 0;
818
819     case TLS_ST_CW_CHANGE:
820         if (SSL_IS_DTLS(s))
821             *confunc = dtls_construct_change_cipher_spec;
822         else
823             *confunc = tls_construct_change_cipher_spec;
824         *mt = SSL3_MT_CHANGE_CIPHER_SPEC;
825         break;
826
827     case TLS_ST_CW_CLNT_HELLO:
828         *confunc = tls_construct_client_hello;
829         *mt = SSL3_MT_CLIENT_HELLO;
830         break;
831
832     case TLS_ST_CW_END_OF_EARLY_DATA:
833         *confunc = tls_construct_end_of_early_data;
834         *mt = SSL3_MT_END_OF_EARLY_DATA;
835         break;
836
837     case TLS_ST_PENDING_EARLY_DATA_END:
838         *confunc = NULL;
839         *mt = SSL3_MT_DUMMY;
840         break;
841
842     case TLS_ST_CW_CERT:
843         *confunc = tls_construct_client_certificate;
844         *mt = SSL3_MT_CERTIFICATE;
845         break;
846
847     case TLS_ST_CW_KEY_EXCH:
848         *confunc = tls_construct_client_key_exchange;
849         *mt = SSL3_MT_CLIENT_KEY_EXCHANGE;
850         break;
851
852     case TLS_ST_CW_CERT_VRFY:
853         *confunc = tls_construct_cert_verify;
854         *mt = SSL3_MT_CERTIFICATE_VERIFY;
855         break;
856
857 #if !defined(OPENSSL_NO_NEXTPROTONEG)
858     case TLS_ST_CW_NEXT_PROTO:
859         *confunc = tls_construct_next_proto;
860         *mt = SSL3_MT_NEXT_PROTO;
861         break;
862 #endif
863     case TLS_ST_CW_FINISHED:
864         *confunc = tls_construct_finished;
865         *mt = SSL3_MT_FINISHED;
866         break;
867
868     case TLS_ST_CW_KEY_UPDATE:
869         *confunc = tls_construct_key_update;
870         *mt = SSL3_MT_KEY_UPDATE;
871         break;
872     }
873
874     return 1;
875 }
876
877 /*
878  * Returns the maximum allowed length for the current message that we are
879  * reading. Excludes the message header.
880  */
881 size_t ossl_statem_client_max_message_size(SSL *s)
882 {
883     OSSL_STATEM *st = &s->statem;
884
885     switch (st->hand_state) {
886     default:
887         /* Shouldn't happen */
888         return 0;
889
890     case TLS_ST_CR_SRVR_HELLO:
891         return SERVER_HELLO_MAX_LENGTH;
892
893     case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
894         return HELLO_VERIFY_REQUEST_MAX_LENGTH;
895
896     case TLS_ST_CR_HELLO_RETRY_REQUEST:
897         return HELLO_RETRY_REQUEST_MAX_LENGTH;
898
899     case TLS_ST_CR_CERT:
900         return s->max_cert_list;
901
902     case TLS_ST_CR_CERT_VRFY:
903         return SSL3_RT_MAX_PLAIN_LENGTH;
904
905     case TLS_ST_CR_CERT_STATUS:
906         return SSL3_RT_MAX_PLAIN_LENGTH;
907
908     case TLS_ST_CR_KEY_EXCH:
909         return SERVER_KEY_EXCH_MAX_LENGTH;
910
911     case TLS_ST_CR_CERT_REQ:
912         /*
913          * Set to s->max_cert_list for compatibility with previous releases. In
914          * practice these messages can get quite long if servers are configured
915          * to provide a long list of acceptable CAs
916          */
917         return s->max_cert_list;
918
919     case TLS_ST_CR_SRVR_DONE:
920         return SERVER_HELLO_DONE_MAX_LENGTH;
921
922     case TLS_ST_CR_CHANGE:
923         if (s->version == DTLS1_BAD_VER)
924             return 3;
925         return CCS_MAX_LENGTH;
926
927     case TLS_ST_CR_SESSION_TICKET:
928         return SSL3_RT_MAX_PLAIN_LENGTH;
929
930     case TLS_ST_CR_FINISHED:
931         return FINISHED_MAX_LENGTH;
932
933     case TLS_ST_CR_ENCRYPTED_EXTENSIONS:
934         return ENCRYPTED_EXTENSIONS_MAX_LENGTH;
935
936     case TLS_ST_CR_KEY_UPDATE:
937         return KEY_UPDATE_MAX_LENGTH;
938     }
939 }
940
941 /*
942  * Process a message that the client has been received from the server.
943  */
944 MSG_PROCESS_RETURN ossl_statem_client_process_message(SSL *s, PACKET *pkt)
945 {
946     OSSL_STATEM *st = &s->statem;
947
948     switch (st->hand_state) {
949     default:
950         /* Shouldn't happen */
951         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
952                  SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE,
953                  ERR_R_INTERNAL_ERROR);
954         return MSG_PROCESS_ERROR;
955
956     case TLS_ST_CR_SRVR_HELLO:
957         return tls_process_server_hello(s, pkt);
958
959     case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
960         return dtls_process_hello_verify(s, pkt);
961
962     case TLS_ST_CR_HELLO_RETRY_REQUEST:
963         return tls_process_hello_retry_request(s, pkt);
964
965     case TLS_ST_CR_CERT:
966         return tls_process_server_certificate(s, pkt);
967
968     case TLS_ST_CR_CERT_VRFY:
969         return tls_process_cert_verify(s, pkt);
970
971     case TLS_ST_CR_CERT_STATUS:
972         return tls_process_cert_status(s, pkt);
973
974     case TLS_ST_CR_KEY_EXCH:
975         return tls_process_key_exchange(s, pkt);
976
977     case TLS_ST_CR_CERT_REQ:
978         return tls_process_certificate_request(s, pkt);
979
980     case TLS_ST_CR_SRVR_DONE:
981         return tls_process_server_done(s, pkt);
982
983     case TLS_ST_CR_CHANGE:
984         return tls_process_change_cipher_spec(s, pkt);
985
986     case TLS_ST_CR_SESSION_TICKET:
987         return tls_process_new_session_ticket(s, pkt);
988
989     case TLS_ST_CR_FINISHED:
990         return tls_process_finished(s, pkt);
991
992     case TLS_ST_CR_HELLO_REQ:
993         return tls_process_hello_req(s, pkt);
994
995     case TLS_ST_CR_ENCRYPTED_EXTENSIONS:
996         return tls_process_encrypted_extensions(s, pkt);
997
998     case TLS_ST_CR_KEY_UPDATE:
999         return tls_process_key_update(s, pkt);
1000     }
1001 }
1002
1003 /*
1004  * Perform any further processing required following the receipt of a message
1005  * from the server
1006  */
1007 WORK_STATE ossl_statem_client_post_process_message(SSL *s, WORK_STATE wst)
1008 {
1009     OSSL_STATEM *st = &s->statem;
1010
1011     switch (st->hand_state) {
1012     default:
1013         /* Shouldn't happen */
1014         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1015                  SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE,
1016                  ERR_R_INTERNAL_ERROR);
1017         return WORK_ERROR;
1018
1019     case TLS_ST_CR_CERT_REQ:
1020         return tls_prepare_client_certificate(s, wst);
1021     }
1022 }
1023
1024 int tls_construct_client_hello(SSL *s, WPACKET *pkt)
1025 {
1026     unsigned char *p;
1027     size_t sess_id_len;
1028     int i, protverr;
1029 #ifndef OPENSSL_NO_COMP
1030     SSL_COMP *comp;
1031 #endif
1032     SSL_SESSION *sess = s->session;
1033     unsigned char *session_id;
1034
1035     if (!WPACKET_set_max_size(pkt, SSL3_RT_MAX_PLAIN_LENGTH)) {
1036         /* Should not happen */
1037         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1038                  SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
1039         return 0;
1040     }
1041
1042     /* Work out what SSL/TLS/DTLS version to use */
1043     protverr = ssl_set_client_hello_version(s);
1044     if (protverr != 0) {
1045         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1046                  protverr);
1047         return 0;
1048     }
1049
1050     if (sess == NULL
1051             || !ssl_version_supported(s, sess->ssl_version)
1052             || !SSL_SESSION_is_resumable(sess)) {
1053         if (!s->hello_retry_request && !ssl_get_new_session(s, 0)) {
1054             /* SSLfatal() already called */
1055             return 0;
1056         }
1057     }
1058     /* else use the pre-loaded session */
1059
1060     p = s->s3->client_random;
1061
1062     /*
1063      * for DTLS if client_random is initialized, reuse it, we are
1064      * required to use same upon reply to HelloVerify
1065      */
1066     if (SSL_IS_DTLS(s)) {
1067         size_t idx;
1068         i = 1;
1069         for (idx = 0; idx < sizeof(s->s3->client_random); idx++) {
1070             if (p[idx]) {
1071                 i = 0;
1072                 break;
1073             }
1074         }
1075     } else {
1076         i = s->hello_retry_request == 0;
1077     }
1078
1079     if (i && ssl_fill_hello_random(s, 0, p, sizeof(s->s3->client_random),
1080                                    DOWNGRADE_NONE) <= 0) {
1081         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1082                  ERR_R_INTERNAL_ERROR);
1083         return 0;
1084     }
1085
1086     /*-
1087      * version indicates the negotiated version: for example from
1088      * an SSLv2/v3 compatible client hello). The client_version
1089      * field is the maximum version we permit and it is also
1090      * used in RSA encrypted premaster secrets. Some servers can
1091      * choke if we initially report a higher version then
1092      * renegotiate to a lower one in the premaster secret. This
1093      * didn't happen with TLS 1.0 as most servers supported it
1094      * but it can with TLS 1.1 or later if the server only supports
1095      * 1.0.
1096      *
1097      * Possible scenario with previous logic:
1098      *      1. Client hello indicates TLS 1.2
1099      *      2. Server hello says TLS 1.0
1100      *      3. RSA encrypted premaster secret uses 1.2.
1101      *      4. Handshake proceeds using TLS 1.0.
1102      *      5. Server sends hello request to renegotiate.
1103      *      6. Client hello indicates TLS v1.0 as we now
1104      *         know that is maximum server supports.
1105      *      7. Server chokes on RSA encrypted premaster secret
1106      *         containing version 1.0.
1107      *
1108      * For interoperability it should be OK to always use the
1109      * maximum version we support in client hello and then rely
1110      * on the checking of version to ensure the servers isn't
1111      * being inconsistent: for example initially negotiating with
1112      * TLS 1.0 and renegotiating with TLS 1.2. We do this by using
1113      * client_version in client hello and not resetting it to
1114      * the negotiated version.
1115      *
1116      * For TLS 1.3 we always set the ClientHello version to 1.2 and rely on the
1117      * supported_versions extension for the real supported versions.
1118      */
1119     if (!WPACKET_put_bytes_u16(pkt, s->client_version)
1120             || !WPACKET_memcpy(pkt, s->s3->client_random, SSL3_RANDOM_SIZE)) {
1121         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1122                  ERR_R_INTERNAL_ERROR);
1123         return 0;
1124     }
1125
1126     /* Session ID */
1127     session_id = s->session->session_id;
1128     if (s->new_session || s->session->ssl_version == TLS1_3_VERSION) {
1129         if (s->version == TLS1_3_VERSION
1130                 && (s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0) {
1131             sess_id_len = sizeof(s->tmp_session_id);
1132             s->tmp_session_id_len = sess_id_len;
1133             session_id = s->tmp_session_id;
1134             if (!s->hello_retry_request
1135                     && ssl_randbytes(s, s->tmp_session_id,
1136                                      sess_id_len) <= 0) {
1137                 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1138                          SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1139                          ERR_R_INTERNAL_ERROR);
1140                 return 0;
1141             }
1142         } else {
1143             sess_id_len = 0;
1144         }
1145     } else {
1146         sess_id_len = s->session->session_id_length;
1147         if (s->version == TLS1_3_VERSION) {
1148             s->tmp_session_id_len = sess_id_len;
1149             memcpy(s->tmp_session_id, s->session->session_id, sess_id_len);
1150         }
1151     }
1152     if (sess_id_len > sizeof(s->session->session_id)
1153             || !WPACKET_start_sub_packet_u8(pkt)
1154             || (sess_id_len != 0 && !WPACKET_memcpy(pkt, session_id,
1155                                                     sess_id_len))
1156             || !WPACKET_close(pkt)) {
1157         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1158                  ERR_R_INTERNAL_ERROR);
1159         return 0;
1160     }
1161
1162     /* cookie stuff for DTLS */
1163     if (SSL_IS_DTLS(s)) {
1164         if (s->d1->cookie_len > sizeof(s->d1->cookie)
1165                 || !WPACKET_sub_memcpy_u8(pkt, s->d1->cookie,
1166                                           s->d1->cookie_len)) {
1167             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1168                      ERR_R_INTERNAL_ERROR);
1169             return 0;
1170         }
1171     }
1172
1173     /* Ciphers supported */
1174     if (!WPACKET_start_sub_packet_u16(pkt)) {
1175         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1176                  ERR_R_INTERNAL_ERROR);
1177         return 0;
1178     }
1179
1180     if (!ssl_cipher_list_to_bytes(s, SSL_get_ciphers(s), pkt)) {
1181         /* SSLfatal() already called */
1182         return 0;
1183     }
1184     if (!WPACKET_close(pkt)) {
1185         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1186                  ERR_R_INTERNAL_ERROR);
1187         return 0;
1188     }
1189
1190     /* COMPRESSION */
1191     if (!WPACKET_start_sub_packet_u8(pkt)) {
1192         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1193                  ERR_R_INTERNAL_ERROR);
1194         return 0;
1195     }
1196 #ifndef OPENSSL_NO_COMP
1197     if (ssl_allow_compression(s)
1198             && s->ctx->comp_methods
1199             && (SSL_IS_DTLS(s) || s->s3->tmp.max_ver < TLS1_3_VERSION)) {
1200         int compnum = sk_SSL_COMP_num(s->ctx->comp_methods);
1201         for (i = 0; i < compnum; i++) {
1202             comp = sk_SSL_COMP_value(s->ctx->comp_methods, i);
1203             if (!WPACKET_put_bytes_u8(pkt, comp->id)) {
1204                 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1205                          SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1206                          ERR_R_INTERNAL_ERROR);
1207                 return 0;
1208             }
1209         }
1210     }
1211 #endif
1212     /* Add the NULL method */
1213     if (!WPACKET_put_bytes_u8(pkt, 0) || !WPACKET_close(pkt)) {
1214         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
1215                  ERR_R_INTERNAL_ERROR);
1216         return 0;
1217     }
1218
1219     /* TLS extensions */
1220     if (!tls_construct_extensions(s, pkt, SSL_EXT_CLIENT_HELLO, NULL, 0)) {
1221         /* SSLfatal() already called */
1222         return 0;
1223     }
1224
1225     return 1;
1226 }
1227
1228 MSG_PROCESS_RETURN dtls_process_hello_verify(SSL *s, PACKET *pkt)
1229 {
1230     size_t cookie_len;
1231     PACKET cookiepkt;
1232
1233     if (!PACKET_forward(pkt, 2)
1234         || !PACKET_get_length_prefixed_1(pkt, &cookiepkt)) {
1235         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_DTLS_PROCESS_HELLO_VERIFY,
1236                  SSL_R_LENGTH_MISMATCH);
1237         return MSG_PROCESS_ERROR;
1238     }
1239
1240     cookie_len = PACKET_remaining(&cookiepkt);
1241     if (cookie_len > sizeof(s->d1->cookie)) {
1242         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_DTLS_PROCESS_HELLO_VERIFY,
1243                  SSL_R_LENGTH_TOO_LONG);
1244         return MSG_PROCESS_ERROR;
1245     }
1246
1247     if (!PACKET_copy_bytes(&cookiepkt, s->d1->cookie, cookie_len)) {
1248         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_DTLS_PROCESS_HELLO_VERIFY,
1249                  SSL_R_LENGTH_MISMATCH);
1250         return MSG_PROCESS_ERROR;
1251     }
1252     s->d1->cookie_len = cookie_len;
1253
1254     return MSG_PROCESS_FINISHED_READING;
1255 }
1256
1257 static int set_client_ciphersuite(SSL *s, const unsigned char *cipherchars)
1258 {
1259     STACK_OF(SSL_CIPHER) *sk;
1260     const SSL_CIPHER *c;
1261     int i;
1262
1263     c = ssl_get_cipher_by_char(s, cipherchars, 0);
1264     if (c == NULL) {
1265         /* unknown cipher */
1266         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SET_CLIENT_CIPHERSUITE,
1267                  SSL_R_UNKNOWN_CIPHER_RETURNED);
1268         return 0;
1269     }
1270     /*
1271      * If it is a disabled cipher we either didn't send it in client hello,
1272      * or it's not allowed for the selected protocol. So we return an error.
1273      */
1274     if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_CHECK, 1)) {
1275         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SET_CLIENT_CIPHERSUITE,
1276                  SSL_R_WRONG_CIPHER_RETURNED);
1277         return 0;
1278     }
1279
1280     sk = ssl_get_ciphers_by_id(s);
1281     i = sk_SSL_CIPHER_find(sk, c);
1282     if (i < 0) {
1283         /* we did not say we would use this cipher */
1284         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SET_CLIENT_CIPHERSUITE,
1285                  SSL_R_WRONG_CIPHER_RETURNED);
1286         return 0;
1287     }
1288
1289     if (SSL_IS_TLS13(s) && s->s3->tmp.new_cipher != NULL
1290             && s->s3->tmp.new_cipher->id != c->id) {
1291         /* ServerHello selected a different ciphersuite to that in the HRR */
1292         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SET_CLIENT_CIPHERSUITE,
1293                  SSL_R_WRONG_CIPHER_RETURNED);
1294         return 0;
1295     }
1296
1297     /*
1298      * Depending on the session caching (internal/external), the cipher
1299      * and/or cipher_id values may not be set. Make sure that cipher_id is
1300      * set and use it for comparison.
1301      */
1302     if (s->session->cipher != NULL)
1303         s->session->cipher_id = s->session->cipher->id;
1304     if (s->hit && (s->session->cipher_id != c->id)) {
1305         if (SSL_IS_TLS13(s)) {
1306             /*
1307              * In TLSv1.3 it is valid for the server to select a different
1308              * ciphersuite as long as the hash is the same.
1309              */
1310             if (ssl_md(c->algorithm2)
1311                     != ssl_md(s->session->cipher->algorithm2)) {
1312                 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1313                          SSL_F_SET_CLIENT_CIPHERSUITE,
1314                          SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED);
1315                 return 0;
1316             }
1317         } else {
1318             /*
1319              * Prior to TLSv1.3 resuming a session always meant using the same
1320              * ciphersuite.
1321              */
1322             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SET_CLIENT_CIPHERSUITE,
1323                      SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED);
1324             return 0;
1325         }
1326     }
1327     s->s3->tmp.new_cipher = c;
1328
1329     return 1;
1330 }
1331
1332 MSG_PROCESS_RETURN tls_process_server_hello(SSL *s, PACKET *pkt)
1333 {
1334     PACKET session_id, extpkt;
1335     size_t session_id_len;
1336     const unsigned char *cipherchars;
1337     unsigned int compression;
1338     unsigned int sversion;
1339     unsigned int context;
1340     int discard;
1341     RAW_EXTENSION *extensions = NULL;
1342 #ifndef OPENSSL_NO_COMP
1343     SSL_COMP *comp;
1344 #endif
1345
1346     if (!PACKET_get_net_2(pkt, &sversion)) {
1347         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SERVER_HELLO,
1348                  SSL_R_LENGTH_MISMATCH);
1349         goto err;
1350     }
1351
1352     /* load the server random */
1353     if (!PACKET_copy_bytes(pkt, s->s3->server_random, SSL3_RANDOM_SIZE)) {
1354         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SERVER_HELLO,
1355                  SSL_R_LENGTH_MISMATCH);
1356         goto err;
1357     }
1358
1359     /* Get the session-id. */
1360     if (!PACKET_get_length_prefixed_1(pkt, &session_id)) {
1361         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SERVER_HELLO,
1362                  SSL_R_LENGTH_MISMATCH);
1363         goto err;
1364     }
1365     session_id_len = PACKET_remaining(&session_id);
1366     if (session_id_len > sizeof(s->session->session_id)
1367         || session_id_len > SSL3_SESSION_ID_SIZE) {
1368         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SERVER_HELLO,
1369                  SSL_R_SSL3_SESSION_ID_TOO_LONG);
1370         goto err;
1371     }
1372
1373     if (!PACKET_get_bytes(pkt, &cipherchars, TLS_CIPHER_LEN)) {
1374         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SERVER_HELLO,
1375                  SSL_R_LENGTH_MISMATCH);
1376         goto err;
1377     }
1378
1379     if (!PACKET_get_1(pkt, &compression)) {
1380         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SERVER_HELLO,
1381                  SSL_R_LENGTH_MISMATCH);
1382         goto err;
1383     }
1384
1385     /* TLS extensions */
1386     if (PACKET_remaining(pkt) == 0) {
1387         PACKET_null_init(&extpkt);
1388     } else if (!PACKET_as_length_prefixed_2(pkt, &extpkt)
1389                || PACKET_remaining(pkt) != 0) {
1390         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SERVER_HELLO,
1391                  SSL_R_BAD_LENGTH);
1392         goto err;
1393     }
1394
1395     if (!tls_collect_extensions(s, &extpkt,
1396                                 SSL_EXT_TLS1_2_SERVER_HELLO
1397                                 | SSL_EXT_TLS1_3_SERVER_HELLO,
1398                                 &extensions, NULL, 1)) {
1399         /* SSLfatal() already called */
1400         goto err;
1401     }
1402
1403     if (!ssl_choose_client_version(s, sversion, extensions)) {
1404         /* SSLfatal() already called */
1405         goto err;
1406     }
1407
1408     /*
1409      * Now we have chosen the version we need to check again that the extensions
1410      * are appropriate for this version.
1411      */
1412     context = SSL_IS_TLS13(s) ? SSL_EXT_TLS1_3_SERVER_HELLO
1413                               : SSL_EXT_TLS1_2_SERVER_HELLO;
1414     if (!tls_validate_all_contexts(s, context, extensions)) {
1415         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SERVER_HELLO,
1416                  SSL_R_BAD_EXTENSION);
1417         goto err;
1418     }
1419
1420     s->hit = 0;
1421
1422     if (SSL_IS_TLS13(s)) {
1423         /*
1424          * In TLSv1.3 a ServerHello message signals a key change so the end of
1425          * the message must be on a record boundary.
1426          */
1427         if (RECORD_LAYER_processed_read_pending(&s->rlayer)) {
1428             SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
1429                      SSL_F_TLS_PROCESS_SERVER_HELLO,
1430                      SSL_R_NOT_ON_RECORD_BOUNDARY);
1431             goto err;
1432         }
1433
1434         if (compression != 0) {
1435             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1436                      SSL_F_TLS_PROCESS_SERVER_HELLO,
1437                      SSL_R_INVALID_COMPRESSION_ALGORITHM);
1438             goto err;
1439         }
1440
1441         if (session_id_len != s->tmp_session_id_len
1442                 || memcmp(PACKET_data(&session_id), s->tmp_session_id,
1443                           session_id_len) != 0) {
1444             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1445                      SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_INVALID_SESSION_ID);
1446             goto err;
1447         }
1448
1449         /* This will set s->hit if we are resuming */
1450         if (!tls_parse_extension(s, TLSEXT_IDX_psk,
1451                                  SSL_EXT_TLS1_3_SERVER_HELLO,
1452                                  extensions, NULL, 0)) {
1453             /* SSLfatal() already called */
1454             goto err;
1455         }
1456     } else {
1457         /*
1458          * Check if we can resume the session based on external pre-shared
1459          * secret. EAP-FAST (RFC 4851) supports two types of session resumption.
1460          * Resumption based on server-side state works with session IDs.
1461          * Resumption based on pre-shared Protected Access Credentials (PACs)
1462          * works by overriding the SessionTicket extension at the application
1463          * layer, and does not send a session ID. (We do not know whether
1464          * EAP-FAST servers would honour the session ID.) Therefore, the session
1465          * ID alone is not a reliable indicator of session resumption, so we
1466          * first check if we can resume, and later peek at the next handshake
1467          * message to see if the server wants to resume.
1468          */
1469         if (s->version >= TLS1_VERSION
1470                 && s->ext.session_secret_cb != NULL && s->session->ext.tick) {
1471             const SSL_CIPHER *pref_cipher = NULL;
1472             /*
1473              * s->session->master_key_length is a size_t, but this is an int for
1474              * backwards compat reasons
1475              */
1476             int master_key_length;
1477             master_key_length = sizeof(s->session->master_key);
1478             if (s->ext.session_secret_cb(s, s->session->master_key,
1479                                          &master_key_length,
1480                                          NULL, &pref_cipher,
1481                                          s->ext.session_secret_cb_arg)
1482                      && master_key_length > 0) {
1483                 s->session->master_key_length = master_key_length;
1484                 s->session->cipher = pref_cipher ?
1485                     pref_cipher : ssl_get_cipher_by_char(s, cipherchars, 0);
1486             } else {
1487                 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1488                          SSL_F_TLS_PROCESS_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
1489                 goto err;
1490             }
1491         }
1492
1493         if (session_id_len != 0
1494                 && session_id_len == s->session->session_id_length
1495                 && memcmp(PACKET_data(&session_id), s->session->session_id,
1496                           session_id_len) == 0)
1497             s->hit = 1;
1498     }
1499
1500     if (s->hit) {
1501         if (s->sid_ctx_length != s->session->sid_ctx_length
1502                 || memcmp(s->session->sid_ctx, s->sid_ctx, s->sid_ctx_length)) {
1503             /* actually a client application bug */
1504             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1505                      SSL_F_TLS_PROCESS_SERVER_HELLO,
1506                      SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
1507             goto err;
1508         }
1509     } else {
1510         /*
1511          * If we were trying for session-id reuse but the server
1512          * didn't resume, make a new SSL_SESSION.
1513          * In the case of EAP-FAST and PAC, we do not send a session ID,
1514          * so the PAC-based session secret is always preserved. It'll be
1515          * overwritten if the server refuses resumption.
1516          */
1517         if (s->session->session_id_length > 0
1518                 || (SSL_IS_TLS13(s)
1519                     && s->session->ext.tick_identity
1520                        != TLSEXT_PSK_BAD_IDENTITY)) {
1521             CRYPTO_atomic_add(&s->session_ctx->stats.sess_miss, 1, &discard,
1522                               s->session_ctx->lock);
1523             if (!ssl_get_new_session(s, 0)) {
1524                 /* SSLfatal() already called */
1525                 goto err;
1526             }
1527         }
1528
1529         s->session->ssl_version = s->version;
1530         /*
1531          * In TLSv1.2 and below we save the session id we were sent so we can
1532          * resume it later. In TLSv1.3 the session id we were sent is just an
1533          * echo of what we originally sent in the ClientHello and should not be
1534          * used for resumption.
1535          */
1536         if (!SSL_IS_TLS13(s)) {
1537             s->session->session_id_length = session_id_len;
1538             /* session_id_len could be 0 */
1539             if (session_id_len > 0)
1540                 memcpy(s->session->session_id, PACKET_data(&session_id),
1541                        session_id_len);
1542         }
1543     }
1544
1545     /* Session version and negotiated protocol version should match */
1546     if (s->version != s->session->ssl_version) {
1547         SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_F_TLS_PROCESS_SERVER_HELLO,
1548                  SSL_R_SSL_SESSION_VERSION_MISMATCH);
1549         goto err;
1550     }
1551     /*
1552      * Now that we know the version, update the check to see if it's an allowed
1553      * version.
1554      */
1555     s->s3->tmp.min_ver = s->version;
1556     s->s3->tmp.max_ver = s->version;
1557
1558     if (!set_client_ciphersuite(s, cipherchars)) {
1559         /* SSLfatal() already called */
1560         goto err;
1561     }
1562
1563 #ifdef OPENSSL_NO_COMP
1564     if (compression != 0) {
1565         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SERVER_HELLO,
1566                  SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
1567         goto err;
1568     }
1569     /*
1570      * If compression is disabled we'd better not try to resume a session
1571      * using compression.
1572      */
1573     if (s->session->compress_meth != 0) {
1574         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_PROCESS_SERVER_HELLO,
1575                  SSL_R_INCONSISTENT_COMPRESSION);
1576         goto err;
1577     }
1578 #else
1579     if (s->hit && compression != s->session->compress_meth) {
1580         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SERVER_HELLO,
1581                  SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED);
1582         goto err;
1583     }
1584     if (compression == 0)
1585         comp = NULL;
1586     else if (!ssl_allow_compression(s)) {
1587         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SERVER_HELLO,
1588                  SSL_R_COMPRESSION_DISABLED);
1589         goto err;
1590     } else {
1591         comp = ssl3_comp_find(s->ctx->comp_methods, compression);
1592     }
1593
1594     if (compression != 0 && comp == NULL) {
1595         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SERVER_HELLO,
1596                  SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
1597         goto err;
1598     } else {
1599         s->s3->tmp.new_compression = comp;
1600     }
1601 #endif
1602
1603     if (!tls_parse_all_extensions(s, context, extensions, NULL, 0, 1)) {
1604         /* SSLfatal() already called */
1605         goto err;
1606     }
1607
1608 #ifndef OPENSSL_NO_SCTP
1609     if (SSL_IS_DTLS(s) && s->hit) {
1610         unsigned char sctpauthkey[64];
1611         char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
1612
1613         /*
1614          * Add new shared key for SCTP-Auth, will be ignored if
1615          * no SCTP used.
1616          */
1617         memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
1618                sizeof(DTLS1_SCTP_AUTH_LABEL));
1619
1620         if (SSL_export_keying_material(s, sctpauthkey,
1621                                        sizeof(sctpauthkey),
1622                                        labelbuffer,
1623                                        sizeof(labelbuffer), NULL, 0, 0) <= 0) {
1624             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SERVER_HELLO,
1625                      ERR_R_INTERNAL_ERROR);
1626             goto err;
1627         }
1628
1629         BIO_ctrl(SSL_get_wbio(s),
1630                  BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
1631                  sizeof(sctpauthkey), sctpauthkey);
1632     }
1633 #endif
1634
1635     /*
1636      * In TLSv1.3 we have some post-processing to change cipher state, otherwise
1637      * we're done with this message
1638      */
1639     if (SSL_IS_TLS13(s)
1640             && (!s->method->ssl3_enc->setup_key_block(s)
1641                 || !s->method->ssl3_enc->change_cipher_state(s,
1642                     SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_CLIENT_READ))) {
1643         /* SSLfatal() already called */
1644         goto err;
1645     }
1646
1647     OPENSSL_free(extensions);
1648     return MSG_PROCESS_CONTINUE_READING;
1649  err:
1650     OPENSSL_free(extensions);
1651     return MSG_PROCESS_ERROR;
1652 }
1653
1654 static MSG_PROCESS_RETURN tls_process_hello_retry_request(SSL *s, PACKET *pkt)
1655 {
1656     unsigned int sversion;
1657     const unsigned char *cipherchars;
1658     RAW_EXTENSION *extensions = NULL;
1659     PACKET extpkt;
1660
1661     if (!PACKET_get_net_2(pkt, &sversion)) {
1662         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST,
1663                  SSL_R_LENGTH_MISMATCH);
1664         goto err;
1665     }
1666
1667     /* TODO(TLS1.3): Remove the TLS1_3_VERSION_DRAFT clause before release */
1668     if (sversion != TLS1_3_VERSION && sversion != TLS1_3_VERSION_DRAFT) {
1669         SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
1670                  SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST,
1671                  SSL_R_WRONG_SSL_VERSION);
1672         goto err;
1673     }
1674
1675     s->hello_retry_request = 1;
1676
1677     /*
1678      * If we were sending early_data then the enc_write_ctx is now invalid and
1679      * should not be used.
1680      */
1681     EVP_CIPHER_CTX_free(s->enc_write_ctx);
1682     s->enc_write_ctx = NULL;
1683
1684     if (!PACKET_get_bytes(pkt, &cipherchars, TLS_CIPHER_LEN)) {
1685         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST,
1686                  SSL_R_LENGTH_MISMATCH);
1687         goto err;
1688     }
1689
1690     if (!set_client_ciphersuite(s, cipherchars)) {
1691         /* SSLfatal() already called */
1692         goto err;
1693     }
1694
1695     if (!PACKET_as_length_prefixed_2(pkt, &extpkt)
1696                /* Must have a non-empty extensions block */
1697             || PACKET_remaining(&extpkt) == 0
1698                /* Must be no trailing data after extensions */
1699             || PACKET_remaining(pkt) != 0) {
1700         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST,
1701                  SSL_R_BAD_LENGTH);
1702         goto err;
1703     }
1704
1705     if (!tls_collect_extensions(s, &extpkt, SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST,
1706                                 &extensions, NULL, 1)
1707             || !tls_parse_all_extensions(s, SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST,
1708                                          extensions, NULL, 0, 1)) {
1709         /* SSLfatal() already called */
1710         goto err;
1711     }
1712
1713     OPENSSL_free(extensions);
1714     extensions = NULL;
1715
1716     if (s->ext.tls13_cookie_len == 0
1717 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
1718         && s->s3->tmp.pkey != NULL
1719 #endif
1720         ) {
1721         /*
1722          * We didn't receive a cookie or a new key_share so the next
1723          * ClientHello will not change
1724          */
1725         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1726                  SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST,
1727                   SSL_R_NO_CHANGE_FOLLOWING_HRR);
1728         goto err;
1729     }
1730
1731     /*
1732      * Re-initialise the Transcript Hash. We're going to prepopulate it with
1733      * a synthetic message_hash in place of ClientHello1.
1734      */
1735     if (!create_synthetic_message_hash(s)) {
1736         /* SSLfatal() already called */
1737         goto err;
1738     }
1739
1740     /*
1741      * Add this message to the Transcript Hash. Normally this is done
1742      * automatically prior to the message processing stage. However due to the
1743      * need to create the synthetic message hash, we defer that step until now
1744      * for HRR messages.
1745      */
1746     if (!ssl3_finish_mac(s, (unsigned char *)s->init_buf->data,
1747                                 s->init_num + SSL3_HM_HEADER_LENGTH)) {
1748         /* SSLfatal() already called */
1749         goto err;
1750     }
1751
1752     return MSG_PROCESS_FINISHED_READING;
1753  err:
1754     OPENSSL_free(extensions);
1755     return MSG_PROCESS_ERROR;
1756 }
1757
1758 MSG_PROCESS_RETURN tls_process_server_certificate(SSL *s, PACKET *pkt)
1759 {
1760     int i;
1761     MSG_PROCESS_RETURN ret = MSG_PROCESS_ERROR;
1762     unsigned long cert_list_len, cert_len;
1763     X509 *x = NULL;
1764     const unsigned char *certstart, *certbytes;
1765     STACK_OF(X509) *sk = NULL;
1766     EVP_PKEY *pkey = NULL;
1767     size_t chainidx, certidx;
1768     unsigned int context = 0;
1769     const SSL_CERT_LOOKUP *clu;
1770
1771     if ((sk = sk_X509_new_null()) == NULL) {
1772         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1773                  ERR_R_MALLOC_FAILURE);
1774         goto err;
1775     }
1776
1777     if ((SSL_IS_TLS13(s) && !PACKET_get_1(pkt, &context))
1778             || context != 0
1779             || !PACKET_get_net_3(pkt, &cert_list_len)
1780             || PACKET_remaining(pkt) != cert_list_len
1781             || PACKET_remaining(pkt) == 0) {
1782         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1783                  SSL_R_LENGTH_MISMATCH);
1784         goto err;
1785     }
1786     for (chainidx = 0; PACKET_remaining(pkt); chainidx++) {
1787         if (!PACKET_get_net_3(pkt, &cert_len)
1788             || !PACKET_get_bytes(pkt, &certbytes, cert_len)) {
1789             SSLfatal(s, SSL_AD_DECODE_ERROR,
1790                      SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1791                      SSL_R_CERT_LENGTH_MISMATCH);
1792             goto err;
1793         }
1794
1795         certstart = certbytes;
1796         x = d2i_X509(NULL, (const unsigned char **)&certbytes, cert_len);
1797         if (x == NULL) {
1798             SSLfatal(s, SSL_AD_BAD_CERTIFICATE,
1799                      SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, ERR_R_ASN1_LIB);
1800             goto err;
1801         }
1802         if (certbytes != (certstart + cert_len)) {
1803             SSLfatal(s, SSL_AD_DECODE_ERROR,
1804                      SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1805                      SSL_R_CERT_LENGTH_MISMATCH);
1806             goto err;
1807         }
1808
1809         if (SSL_IS_TLS13(s)) {
1810             RAW_EXTENSION *rawexts = NULL;
1811             PACKET extensions;
1812
1813             if (!PACKET_get_length_prefixed_2(pkt, &extensions)) {
1814                 SSLfatal(s, SSL_AD_DECODE_ERROR,
1815                          SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1816                          SSL_R_BAD_LENGTH);
1817                 goto err;
1818             }
1819             if (!tls_collect_extensions(s, &extensions,
1820                                         SSL_EXT_TLS1_3_CERTIFICATE, &rawexts,
1821                                         NULL, chainidx == 0)
1822                 || !tls_parse_all_extensions(s, SSL_EXT_TLS1_3_CERTIFICATE,
1823                                              rawexts, x, chainidx,
1824                                              PACKET_remaining(pkt) == 0)) {
1825                 OPENSSL_free(rawexts);
1826                 /* SSLfatal already called */
1827                 goto err;
1828             }
1829             OPENSSL_free(rawexts);
1830         }
1831
1832         if (!sk_X509_push(sk, x)) {
1833             SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1834                      SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1835                      ERR_R_MALLOC_FAILURE);
1836             goto err;
1837         }
1838         x = NULL;
1839     }
1840
1841     i = ssl_verify_cert_chain(s, sk);
1842     /*
1843      * The documented interface is that SSL_VERIFY_PEER should be set in order
1844      * for client side verification of the server certificate to take place.
1845      * However, historically the code has only checked that *any* flag is set
1846      * to cause server verification to take place. Use of the other flags makes
1847      * no sense in client mode. An attempt to clean up the semantics was
1848      * reverted because at least one application *only* set
1849      * SSL_VERIFY_FAIL_IF_NO_PEER_CERT. Prior to the clean up this still caused
1850      * server verification to take place, after the clean up it silently did
1851      * nothing. SSL_CTX_set_verify()/SSL_set_verify() cannot validate the flags
1852      * sent to them because they are void functions. Therefore, we now use the
1853      * (less clean) historic behaviour of performing validation if any flag is
1854      * set. The *documented* interface remains the same.
1855      */
1856     if (s->verify_mode != SSL_VERIFY_NONE && i <= 0) {
1857         SSLfatal(s, ssl_verify_alarm_type(s->verify_result),
1858                  SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1859                  SSL_R_CERTIFICATE_VERIFY_FAILED);
1860         goto err;
1861     }
1862     ERR_clear_error();          /* but we keep s->verify_result */
1863     if (i > 1) {
1864         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
1865                  SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, i);
1866         goto err;
1867     }
1868
1869     s->session->peer_chain = sk;
1870     /*
1871      * Inconsistency alert: cert_chain does include the peer's certificate,
1872      * which we don't include in statem_srvr.c
1873      */
1874     x = sk_X509_value(sk, 0);
1875     sk = NULL;
1876
1877     pkey = X509_get0_pubkey(x);
1878
1879     if (pkey == NULL || EVP_PKEY_missing_parameters(pkey)) {
1880         x = NULL;
1881         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1882                  SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS);
1883         goto err;
1884     }
1885
1886     if ((clu = ssl_cert_lookup_by_pkey(pkey, &certidx)) == NULL) {
1887         x = NULL;
1888         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1889                  SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1890                  SSL_R_UNKNOWN_CERTIFICATE_TYPE);
1891         goto err;
1892     }
1893     /*
1894      * Check certificate type is consistent with ciphersuite. For TLS 1.3
1895      * skip check since TLS 1.3 ciphersuites can be used with any certificate
1896      * type.
1897      */
1898     if (!SSL_IS_TLS13(s)) {
1899         if ((clu->amask & s->s3->tmp.new_cipher->algorithm_auth) == 0) {
1900             x = NULL;
1901             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1902                      SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1903                      SSL_R_WRONG_CERTIFICATE_TYPE);
1904             goto err;
1905         }
1906     }
1907     s->session->peer_type = certidx;
1908
1909     X509_free(s->session->peer);
1910     X509_up_ref(x);
1911     s->session->peer = x;
1912     s->session->verify_result = s->verify_result;
1913     x = NULL;
1914
1915     /* Save the current hash state for when we receive the CertificateVerify */
1916     if (SSL_IS_TLS13(s)
1917             && !ssl_handshake_hash(s, s->cert_verify_hash,
1918                                    sizeof(s->cert_verify_hash),
1919                                    &s->cert_verify_hash_len)) {
1920         /* SSLfatal() already called */;
1921         goto err;
1922     }
1923
1924     ret = MSG_PROCESS_CONTINUE_READING;
1925
1926  err:
1927     X509_free(x);
1928     sk_X509_pop_free(sk, X509_free);
1929     return ret;
1930 }
1931
1932 static int tls_process_ske_psk_preamble(SSL *s, PACKET *pkt)
1933 {
1934 #ifndef OPENSSL_NO_PSK
1935     PACKET psk_identity_hint;
1936
1937     /* PSK ciphersuites are preceded by an identity hint */
1938
1939     if (!PACKET_get_length_prefixed_2(pkt, &psk_identity_hint)) {
1940         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE,
1941                  SSL_R_LENGTH_MISMATCH);
1942         return 0;
1943     }
1944
1945     /*
1946      * Store PSK identity hint for later use, hint is used in
1947      * tls_construct_client_key_exchange.  Assume that the maximum length of
1948      * a PSK identity hint can be as long as the maximum length of a PSK
1949      * identity.
1950      */
1951     if (PACKET_remaining(&psk_identity_hint) > PSK_MAX_IDENTITY_LEN) {
1952         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
1953                  SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE,
1954                  SSL_R_DATA_LENGTH_TOO_LONG);
1955         return 0;
1956     }
1957
1958     if (PACKET_remaining(&psk_identity_hint) == 0) {
1959         OPENSSL_free(s->session->psk_identity_hint);
1960         s->session->psk_identity_hint = NULL;
1961     } else if (!PACKET_strndup(&psk_identity_hint,
1962                                &s->session->psk_identity_hint)) {
1963         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE,
1964                  ERR_R_INTERNAL_ERROR);
1965         return 0;
1966     }
1967
1968     return 1;
1969 #else
1970     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE,
1971              ERR_R_INTERNAL_ERROR);
1972     return 0;
1973 #endif
1974 }
1975
1976 static int tls_process_ske_srp(SSL *s, PACKET *pkt, EVP_PKEY **pkey)
1977 {
1978 #ifndef OPENSSL_NO_SRP
1979     PACKET prime, generator, salt, server_pub;
1980
1981     if (!PACKET_get_length_prefixed_2(pkt, &prime)
1982         || !PACKET_get_length_prefixed_2(pkt, &generator)
1983         || !PACKET_get_length_prefixed_1(pkt, &salt)
1984         || !PACKET_get_length_prefixed_2(pkt, &server_pub)) {
1985         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SKE_SRP,
1986                  SSL_R_LENGTH_MISMATCH);
1987         return 0;
1988     }
1989
1990     /* TODO(size_t): Convert BN_bin2bn() calls */
1991     if ((s->srp_ctx.N =
1992          BN_bin2bn(PACKET_data(&prime),
1993                    (int)PACKET_remaining(&prime), NULL)) == NULL
1994         || (s->srp_ctx.g =
1995             BN_bin2bn(PACKET_data(&generator),
1996                       (int)PACKET_remaining(&generator), NULL)) == NULL
1997         || (s->srp_ctx.s =
1998             BN_bin2bn(PACKET_data(&salt),
1999                       (int)PACKET_remaining(&salt), NULL)) == NULL
2000         || (s->srp_ctx.B =
2001             BN_bin2bn(PACKET_data(&server_pub),
2002                       (int)PACKET_remaining(&server_pub), NULL)) == NULL) {
2003         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_SRP,
2004                  ERR_R_BN_LIB);
2005         return 0;
2006     }
2007
2008     if (!srp_verify_server_param(s)) {
2009         /* SSLfatal() already called */
2010         return 0;
2011     }
2012
2013     /* We must check if there is a certificate */
2014     if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aRSA | SSL_aDSS))
2015         *pkey = X509_get0_pubkey(s->session->peer);
2016
2017     return 1;
2018 #else
2019     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_SRP,
2020              ERR_R_INTERNAL_ERROR);
2021     return 0;
2022 #endif
2023 }
2024
2025 static int tls_process_ske_dhe(SSL *s, PACKET *pkt, EVP_PKEY **pkey)
2026 {
2027 #ifndef OPENSSL_NO_DH
2028     PACKET prime, generator, pub_key;
2029     EVP_PKEY *peer_tmp = NULL;
2030
2031     DH *dh = NULL;
2032     BIGNUM *p = NULL, *g = NULL, *bnpub_key = NULL;
2033
2034     int check_bits = 0;
2035
2036     if (!PACKET_get_length_prefixed_2(pkt, &prime)
2037         || !PACKET_get_length_prefixed_2(pkt, &generator)
2038         || !PACKET_get_length_prefixed_2(pkt, &pub_key)) {
2039         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SKE_DHE,
2040                  SSL_R_LENGTH_MISMATCH);
2041         return 0;
2042     }
2043
2044     peer_tmp = EVP_PKEY_new();
2045     dh = DH_new();
2046
2047     if (peer_tmp == NULL || dh == NULL) {
2048         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_DHE,
2049                  ERR_R_MALLOC_FAILURE);
2050         goto err;
2051     }
2052
2053     /* TODO(size_t): Convert these calls */
2054     p = BN_bin2bn(PACKET_data(&prime), (int)PACKET_remaining(&prime), NULL);
2055     g = BN_bin2bn(PACKET_data(&generator), (int)PACKET_remaining(&generator),
2056                   NULL);
2057     bnpub_key = BN_bin2bn(PACKET_data(&pub_key),
2058                           (int)PACKET_remaining(&pub_key), NULL);
2059     if (p == NULL || g == NULL || bnpub_key == NULL) {
2060         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_DHE,
2061                  ERR_R_BN_LIB);
2062         goto err;
2063     }
2064
2065     /* test non-zero pubkey */
2066     if (BN_is_zero(bnpub_key)) {
2067         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SKE_DHE,
2068                  SSL_R_BAD_DH_VALUE);
2069         goto err;
2070     }
2071
2072     if (!DH_set0_pqg(dh, p, NULL, g)) {
2073         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_DHE,
2074                  ERR_R_BN_LIB);
2075         goto err;
2076     }
2077     p = g = NULL;
2078
2079     if (DH_check_params(dh, &check_bits) == 0 || check_bits != 0) {
2080         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SKE_DHE,
2081                  SSL_R_BAD_DH_VALUE);
2082         goto err;
2083     }
2084
2085     if (!DH_set0_key(dh, bnpub_key, NULL)) {
2086         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_DHE,
2087                  ERR_R_BN_LIB);
2088         goto err;
2089     }
2090     bnpub_key = NULL;
2091
2092     if (!ssl_security(s, SSL_SECOP_TMP_DH, DH_security_bits(dh), 0, dh)) {
2093         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_PROCESS_SKE_DHE,
2094                  SSL_R_DH_KEY_TOO_SMALL);
2095         goto err;
2096     }
2097
2098     if (EVP_PKEY_assign_DH(peer_tmp, dh) == 0) {
2099         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_DHE,
2100                  ERR_R_EVP_LIB);
2101         goto err;
2102     }
2103
2104     s->s3->peer_tmp = peer_tmp;
2105
2106     /*
2107      * FIXME: This makes assumptions about which ciphersuites come with
2108      * public keys. We should have a less ad-hoc way of doing this
2109      */
2110     if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aRSA | SSL_aDSS))
2111         *pkey = X509_get0_pubkey(s->session->peer);
2112     /* else anonymous DH, so no certificate or pkey. */
2113
2114     return 1;
2115
2116  err:
2117     BN_free(p);
2118     BN_free(g);
2119     BN_free(bnpub_key);
2120     DH_free(dh);
2121     EVP_PKEY_free(peer_tmp);
2122
2123     return 0;
2124 #else
2125     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_DHE,
2126              ERR_R_INTERNAL_ERROR);
2127     return 0;
2128 #endif
2129 }
2130
2131 static int tls_process_ske_ecdhe(SSL *s, PACKET *pkt, EVP_PKEY **pkey)
2132 {
2133 #ifndef OPENSSL_NO_EC
2134     PACKET encoded_pt;
2135     unsigned int curve_type, curve_id;
2136
2137     /*
2138      * Extract elliptic curve parameters and the server's ephemeral ECDH
2139      * public key. We only support named (not generic) curves and
2140      * ECParameters in this case is just three bytes.
2141      */
2142     if (!PACKET_get_1(pkt, &curve_type) || !PACKET_get_net_2(pkt, &curve_id)) {
2143         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SKE_ECDHE,
2144                  SSL_R_LENGTH_TOO_SHORT);
2145         return 0;
2146     }
2147     /*
2148      * Check curve is named curve type and one of our preferences, if not
2149      * server has sent an invalid curve.
2150      */
2151     if (curve_type != NAMED_CURVE_TYPE || !tls1_check_group_id(s, curve_id)) {
2152         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SKE_ECDHE,
2153                  SSL_R_WRONG_CURVE);
2154         return 0;
2155     }
2156
2157     if ((s->s3->peer_tmp = ssl_generate_param_group(curve_id)) == NULL) {
2158         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_ECDHE,
2159                  SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS);
2160         return 0;
2161     }
2162
2163     if (!PACKET_get_length_prefixed_1(pkt, &encoded_pt)) {
2164         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SKE_ECDHE,
2165                  SSL_R_LENGTH_MISMATCH);
2166         return 0;
2167     }
2168
2169     if (!EVP_PKEY_set1_tls_encodedpoint(s->s3->peer_tmp,
2170                                         PACKET_data(&encoded_pt),
2171                                         PACKET_remaining(&encoded_pt))) {
2172         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_SKE_ECDHE,
2173                  SSL_R_BAD_ECPOINT);
2174         return 0;
2175     }
2176
2177     /*
2178      * The ECC/TLS specification does not mention the use of DSA to sign
2179      * ECParameters in the server key exchange message. We do support RSA
2180      * and ECDSA.
2181      */
2182     if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aECDSA)
2183         *pkey = X509_get0_pubkey(s->session->peer);
2184     else if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aRSA)
2185         *pkey = X509_get0_pubkey(s->session->peer);
2186     /* else anonymous ECDH, so no certificate or pkey. */
2187
2188     return 1;
2189 #else
2190     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_ECDHE,
2191              ERR_R_INTERNAL_ERROR);
2192     return 0;
2193 #endif
2194 }
2195
2196 MSG_PROCESS_RETURN tls_process_key_exchange(SSL *s, PACKET *pkt)
2197 {
2198     long alg_k;
2199     EVP_PKEY *pkey = NULL;
2200     EVP_MD_CTX *md_ctx = NULL;
2201     EVP_PKEY_CTX *pctx = NULL;
2202     PACKET save_param_start, signature;
2203
2204     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2205
2206     save_param_start = *pkt;
2207
2208 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
2209     EVP_PKEY_free(s->s3->peer_tmp);
2210     s->s3->peer_tmp = NULL;
2211 #endif
2212
2213     if (alg_k & SSL_PSK) {
2214         if (!tls_process_ske_psk_preamble(s, pkt)) {
2215             /* SSLfatal() already called */
2216             goto err;
2217         }
2218     }
2219
2220     /* Nothing else to do for plain PSK or RSAPSK */
2221     if (alg_k & (SSL_kPSK | SSL_kRSAPSK)) {
2222     } else if (alg_k & SSL_kSRP) {
2223         if (!tls_process_ske_srp(s, pkt, &pkey)) {
2224             /* SSLfatal() already called */
2225             goto err;
2226         }
2227     } else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
2228         if (!tls_process_ske_dhe(s, pkt, &pkey)) {
2229             /* SSLfatal() already called */
2230             goto err;
2231         }
2232     } else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
2233         if (!tls_process_ske_ecdhe(s, pkt, &pkey)) {
2234             /* SSLfatal() already called */
2235             goto err;
2236         }
2237     } else if (alg_k) {
2238         SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2239                  SSL_R_UNEXPECTED_MESSAGE);
2240         goto err;
2241     }
2242
2243     /* if it was signed, check the signature */
2244     if (pkey != NULL) {
2245         PACKET params;
2246         int maxsig;
2247         const EVP_MD *md = NULL;
2248         unsigned char *tbs;
2249         size_t tbslen;
2250         int rv;
2251
2252         /*
2253          * |pkt| now points to the beginning of the signature, so the difference
2254          * equals the length of the parameters.
2255          */
2256         if (!PACKET_get_sub_packet(&save_param_start, &params,
2257                                    PACKET_remaining(&save_param_start) -
2258                                    PACKET_remaining(pkt))) {
2259             SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2260                      ERR_R_INTERNAL_ERROR);
2261             goto err;
2262         }
2263
2264         if (SSL_USE_SIGALGS(s)) {
2265             unsigned int sigalg;
2266
2267             if (!PACKET_get_net_2(pkt, &sigalg)) {
2268                 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2269                          SSL_R_LENGTH_TOO_SHORT);
2270                 goto err;
2271             }
2272             if (tls12_check_peer_sigalg(s, sigalg, pkey) <=0) {
2273                 /* SSLfatal() already called */
2274                 goto err;
2275             }
2276 #ifdef SSL_DEBUG
2277             fprintf(stderr, "USING TLSv1.2 HASH %s\n", EVP_MD_name(md));
2278 #endif
2279         } else if (!tls1_set_peer_legacy_sigalg(s, pkey)) {
2280             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2281                      ERR_R_INTERNAL_ERROR);
2282             goto err;
2283         }
2284
2285         if (!tls1_lookup_md(s->s3->tmp.peer_sigalg, &md)) {
2286             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2287                      ERR_R_INTERNAL_ERROR);
2288             goto err;
2289         }
2290
2291         if (!PACKET_get_length_prefixed_2(pkt, &signature)
2292             || PACKET_remaining(pkt) != 0) {
2293             SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2294                      SSL_R_LENGTH_MISMATCH);
2295             goto err;
2296         }
2297         maxsig = EVP_PKEY_size(pkey);
2298         if (maxsig < 0) {
2299             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2300                      ERR_R_INTERNAL_ERROR);
2301             goto err;
2302         }
2303
2304         /*
2305          * Check signature length
2306          */
2307         if (PACKET_remaining(&signature) > (size_t)maxsig) {
2308             /* wrong packet length */
2309             SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2310                    SSL_R_WRONG_SIGNATURE_LENGTH);
2311             goto err;
2312         }
2313
2314         md_ctx = EVP_MD_CTX_new();
2315         if (md_ctx == NULL) {
2316             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2317                      ERR_R_MALLOC_FAILURE);
2318             goto err;
2319         }
2320
2321         if (EVP_DigestVerifyInit(md_ctx, &pctx, md, NULL, pkey) <= 0) {
2322             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2323                      ERR_R_EVP_LIB);
2324             goto err;
2325         }
2326         if (SSL_USE_PSS(s)) {
2327             if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0
2328                 || EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx,
2329                                                 RSA_PSS_SALTLEN_DIGEST) <= 0) {
2330                 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2331                          SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_EVP_LIB);
2332                 goto err;
2333             }
2334         }
2335         tbslen = construct_key_exchange_tbs(s, &tbs, PACKET_data(&params),
2336                                             PACKET_remaining(&params));
2337         if (tbslen == 0) {
2338             /* SSLfatal() already called */
2339             goto err;
2340         }
2341
2342         rv = EVP_DigestVerify(md_ctx, PACKET_data(&signature),
2343                               PACKET_remaining(&signature), tbs, tbslen);
2344         OPENSSL_free(tbs);
2345         if (rv <= 0) {
2346             SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2347                      SSL_R_BAD_SIGNATURE);
2348             goto err;
2349         }
2350         EVP_MD_CTX_free(md_ctx);
2351         md_ctx = NULL;
2352     } else {
2353         /* aNULL, aSRP or PSK do not need public keys */
2354         if (!(s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
2355             && !(alg_k & SSL_PSK)) {
2356             /* Might be wrong key type, check it */
2357             if (ssl3_check_cert_and_algorithm(s)) {
2358                 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2359                          SSL_R_BAD_DATA);
2360             }
2361             /* else this shouldn't happen, SSLfatal() already called */
2362             goto err;
2363         }
2364         /* still data left over */
2365         if (PACKET_remaining(pkt) != 0) {
2366             SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_KEY_EXCHANGE,
2367                      SSL_R_EXTRA_DATA_IN_MESSAGE);
2368             goto err;
2369         }
2370     }
2371
2372     return MSG_PROCESS_CONTINUE_READING;
2373  err:
2374     EVP_MD_CTX_free(md_ctx);
2375     return MSG_PROCESS_ERROR;
2376 }
2377
2378 MSG_PROCESS_RETURN tls_process_certificate_request(SSL *s, PACKET *pkt)
2379 {
2380     size_t i;
2381
2382     /* Clear certificate validity flags */
2383     for (i = 0; i < SSL_PKEY_NUM; i++)
2384         s->s3->tmp.valid_flags[i] = 0;
2385
2386     if (SSL_IS_TLS13(s)) {
2387         PACKET reqctx, extensions;
2388         RAW_EXTENSION *rawexts = NULL;
2389
2390         /* Free and zero certificate types: it is not present in TLS 1.3 */
2391         OPENSSL_free(s->s3->tmp.ctype);
2392         s->s3->tmp.ctype = NULL;
2393         s->s3->tmp.ctype_len = 0;
2394
2395         /* TODO(TLS1.3) need to process request context, for now ignore */
2396         if (!PACKET_get_length_prefixed_1(pkt, &reqctx)) {
2397             SSLfatal(s, SSL_AD_DECODE_ERROR,
2398                      SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2399                      SSL_R_LENGTH_MISMATCH);
2400             return MSG_PROCESS_ERROR;
2401         }
2402
2403         if (!PACKET_get_length_prefixed_2(pkt, &extensions)) {
2404             SSLfatal(s, SSL_AD_DECODE_ERROR,
2405                      SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2406                      SSL_R_BAD_LENGTH);
2407             return MSG_PROCESS_ERROR;
2408         }
2409         if (!tls_collect_extensions(s, &extensions,
2410                                     SSL_EXT_TLS1_3_CERTIFICATE_REQUEST,
2411                                     &rawexts, NULL, 1)
2412             || !tls_parse_all_extensions(s, SSL_EXT_TLS1_3_CERTIFICATE_REQUEST,
2413                                          rawexts, NULL, 0, 1)) {
2414             /* SSLfatal() already called */
2415             OPENSSL_free(rawexts);
2416             return MSG_PROCESS_ERROR;
2417         }
2418         OPENSSL_free(rawexts);
2419         if (!tls1_process_sigalgs(s)) {
2420             SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2421                      SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2422                      SSL_R_BAD_LENGTH);
2423             return MSG_PROCESS_ERROR;
2424         }
2425     } else {
2426         PACKET ctypes;
2427
2428         /* get the certificate types */
2429         if (!PACKET_get_length_prefixed_1(pkt, &ctypes)) {
2430             SSLfatal(s, SSL_AD_DECODE_ERROR,
2431                      SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2432                      SSL_R_LENGTH_MISMATCH);
2433             return MSG_PROCESS_ERROR;
2434         }
2435
2436         if (!PACKET_memdup(&ctypes, &s->s3->tmp.ctype, &s->s3->tmp.ctype_len)) {
2437             SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2438                      SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2439                      ERR_R_INTERNAL_ERROR);
2440             return MSG_PROCESS_ERROR;
2441         }
2442
2443         if (SSL_USE_SIGALGS(s)) {
2444             PACKET sigalgs;
2445
2446             if (!PACKET_get_length_prefixed_2(pkt, &sigalgs)) {
2447                 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2448                          SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2449                          SSL_R_LENGTH_MISMATCH);
2450                 return MSG_PROCESS_ERROR;
2451             }
2452
2453             if (!tls1_save_sigalgs(s, &sigalgs)) {
2454                 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2455                          SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2456                          SSL_R_SIGNATURE_ALGORITHMS_ERROR);
2457                 return MSG_PROCESS_ERROR;
2458             }
2459             if (!tls1_process_sigalgs(s)) {
2460                 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2461                          SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2462                          ERR_R_MALLOC_FAILURE);
2463                 return MSG_PROCESS_ERROR;
2464             }
2465         }
2466
2467         /* get the CA RDNs */
2468         if (!parse_ca_names(s, pkt)) {
2469             /* SSLfatal() already called */
2470             return MSG_PROCESS_ERROR;
2471         }
2472     }
2473
2474     if (PACKET_remaining(pkt) != 0) {
2475         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2476                  SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
2477                  SSL_R_LENGTH_MISMATCH);
2478         return MSG_PROCESS_ERROR;
2479     }
2480
2481     /* we should setup a certificate to return.... */
2482     s->s3->tmp.cert_req = 1;
2483
2484     return MSG_PROCESS_CONTINUE_PROCESSING;
2485 }
2486
2487 MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL *s, PACKET *pkt)
2488 {
2489     unsigned int ticklen;
2490     unsigned long ticket_lifetime_hint, age_add = 0;
2491     unsigned int sess_len;
2492     RAW_EXTENSION *exts = NULL;
2493     PACKET nonce;
2494
2495     if (!PACKET_get_net_4(pkt, &ticket_lifetime_hint)
2496         || (SSL_IS_TLS13(s)
2497             && (!PACKET_get_net_4(pkt, &age_add)
2498                 || !PACKET_get_length_prefixed_1(pkt, &nonce)
2499                 || !PACKET_memdup(&nonce, &s->session->ext.tick_nonce,
2500                                   &s->session->ext.tick_nonce_len)))
2501         || !PACKET_get_net_2(pkt, &ticklen)
2502         || (!SSL_IS_TLS13(s) && PACKET_remaining(pkt) != ticklen)
2503         || (SSL_IS_TLS13(s)
2504             && (ticklen == 0 || PACKET_remaining(pkt) < ticklen))) {
2505         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_NEW_SESSION_TICKET,
2506                  SSL_R_LENGTH_MISMATCH);
2507         goto err;
2508     }
2509
2510     /*
2511      * Server is allowed to change its mind (in <=TLSv1.2) and send an empty
2512      * ticket. We already checked this TLSv1.3 case above, so it should never
2513      * be 0 here in that instance
2514      */
2515     if (ticklen == 0)
2516         return MSG_PROCESS_CONTINUE_READING;
2517
2518     /*
2519      * Sessions must be immutable once they go into the session cache. Otherwise
2520      * we can get multi-thread problems. Therefore we don't "update" sessions,
2521      * we replace them with a duplicate. In TLSv1.3 we need to do this every
2522      * time a NewSessionTicket arrives because those messages arrive
2523      * post-handshake and the session may have already gone into the session
2524      * cache.
2525      */
2526     if (SSL_IS_TLS13(s) || s->session->session_id_length > 0) {
2527         int i = s->session_ctx->session_cache_mode;
2528         SSL_SESSION *new_sess;
2529         /*
2530          * We reused an existing session, so we need to replace it with a new
2531          * one
2532          */
2533         if ((new_sess = ssl_session_dup(s->session, 0)) == 0) {
2534             SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2535                      SSL_F_TLS_PROCESS_NEW_SESSION_TICKET,
2536                      ERR_R_MALLOC_FAILURE);
2537             goto err;
2538         }
2539
2540         if (i & SSL_SESS_CACHE_CLIENT) {
2541             /*
2542              * Remove the old session from the cache. We carry on if this fails
2543              */
2544             SSL_CTX_remove_session(s->session_ctx, s->session);
2545         }
2546
2547         SSL_SESSION_free(s->session);
2548         s->session = new_sess;
2549     }
2550
2551     /*
2552      * Technically the cast to long here is not guaranteed by the C standard -
2553      * but we use it elsewhere, so this should be ok.
2554      */
2555     s->session->time = (long)time(NULL);
2556
2557     OPENSSL_free(s->session->ext.tick);
2558     s->session->ext.tick = NULL;
2559     s->session->ext.ticklen = 0;
2560
2561     s->session->ext.tick = OPENSSL_malloc(ticklen);
2562     if (s->session->ext.tick == NULL) {
2563         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_NEW_SESSION_TICKET,
2564                  ERR_R_MALLOC_FAILURE);
2565         goto err;
2566     }
2567     if (!PACKET_copy_bytes(pkt, s->session->ext.tick, ticklen)) {
2568         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_NEW_SESSION_TICKET,
2569                  SSL_R_LENGTH_MISMATCH);
2570         goto err;
2571     }
2572
2573     s->session->ext.tick_lifetime_hint = ticket_lifetime_hint;
2574     s->session->ext.tick_age_add = age_add;
2575     s->session->ext.ticklen = ticklen;
2576
2577     if (SSL_IS_TLS13(s)) {
2578         PACKET extpkt;
2579
2580         if (!PACKET_as_length_prefixed_2(pkt, &extpkt)
2581                 || PACKET_remaining(pkt) != 0
2582                 || !tls_collect_extensions(s, &extpkt,
2583                                            SSL_EXT_TLS1_3_NEW_SESSION_TICKET,
2584                                            &exts, NULL, 1)
2585                 || !tls_parse_all_extensions(s,
2586                                              SSL_EXT_TLS1_3_NEW_SESSION_TICKET,
2587                                              exts, NULL, 0, 1)) {
2588             /* SSLfatal() already called */
2589             goto err;
2590         }
2591     }
2592
2593     /*
2594      * There are two ways to detect a resumed ticket session. One is to set
2595      * an appropriate session ID and then the server must return a match in
2596      * ServerHello. This allows the normal client session ID matching to work
2597      * and we know much earlier that the ticket has been accepted. The
2598      * other way is to set zero length session ID when the ticket is
2599      * presented and rely on the handshake to determine session resumption.
2600      * We choose the former approach because this fits in with assumptions
2601      * elsewhere in OpenSSL. The session ID is set to the SHA256 (or SHA1 is
2602      * SHA256 is disabled) hash of the ticket.
2603      */
2604     /*
2605      * TODO(size_t): we use sess_len here because EVP_Digest expects an int
2606      * but s->session->session_id_length is a size_t
2607      */
2608     if (!EVP_Digest(s->session->ext.tick, ticklen,
2609                     s->session->session_id, &sess_len,
2610                     EVP_sha256(), NULL)) {
2611         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_NEW_SESSION_TICKET,
2612                  ERR_R_EVP_LIB);
2613         goto err;
2614     }
2615     s->session->session_id_length = sess_len;
2616
2617     /* This is a standalone message in TLSv1.3, so there is no more to read */
2618     if (SSL_IS_TLS13(s)) {
2619         OPENSSL_free(exts);
2620         ssl_update_cache(s, SSL_SESS_CACHE_CLIENT);
2621         return MSG_PROCESS_FINISHED_READING;
2622     }
2623
2624     return MSG_PROCESS_CONTINUE_READING;
2625  err:
2626     OPENSSL_free(exts);
2627     return MSG_PROCESS_ERROR;
2628 }
2629
2630 /*
2631  * In TLSv1.3 this is called from the extensions code, otherwise it is used to
2632  * parse a separate message. Returns 1 on success or 0 on failure
2633  */
2634 int tls_process_cert_status_body(SSL *s, PACKET *pkt)
2635 {
2636     size_t resplen;
2637     unsigned int type;
2638
2639     if (!PACKET_get_1(pkt, &type)
2640         || type != TLSEXT_STATUSTYPE_ocsp) {
2641         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_STATUS_BODY,
2642                  SSL_R_UNSUPPORTED_STATUS_TYPE);
2643         return 0;
2644     }
2645     if (!PACKET_get_net_3_len(pkt, &resplen)
2646         || PACKET_remaining(pkt) != resplen) {
2647         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_STATUS_BODY,
2648                  SSL_R_LENGTH_MISMATCH);
2649         return 0;
2650     }
2651     s->ext.ocsp.resp = OPENSSL_malloc(resplen);
2652     if (s->ext.ocsp.resp == NULL) {
2653         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_STATUS_BODY,
2654                  ERR_R_MALLOC_FAILURE);
2655         return 0;
2656     }
2657     if (!PACKET_copy_bytes(pkt, s->ext.ocsp.resp, resplen)) {
2658         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_STATUS_BODY,
2659                  SSL_R_LENGTH_MISMATCH);
2660         return 0;
2661     }
2662     s->ext.ocsp.resp_len = resplen;
2663
2664     return 1;
2665 }
2666
2667
2668 MSG_PROCESS_RETURN tls_process_cert_status(SSL *s, PACKET *pkt)
2669 {
2670     if (!tls_process_cert_status_body(s, pkt)) {
2671         /* SSLfatal() already called */
2672         return MSG_PROCESS_ERROR;
2673     }
2674
2675     return MSG_PROCESS_CONTINUE_READING;
2676 }
2677
2678 /*
2679  * Perform miscellaneous checks and processing after we have received the
2680  * server's initial flight. In TLS1.3 this is after the Server Finished message.
2681  * In <=TLS1.2 this is after the ServerDone message. Returns 1 on success or 0
2682  * on failure.
2683  */
2684 int tls_process_initial_server_flight(SSL *s)
2685 {
2686     /*
2687      * at this point we check that we have the required stuff from
2688      * the server
2689      */
2690     if (!ssl3_check_cert_and_algorithm(s)) {
2691         /* SSLfatal() already called */
2692         return 0;
2693     }
2694
2695     /*
2696      * Call the ocsp status callback if needed. The |ext.ocsp.resp| and
2697      * |ext.ocsp.resp_len| values will be set if we actually received a status
2698      * message, or NULL and -1 otherwise
2699      */
2700     if (s->ext.status_type != TLSEXT_STATUSTYPE_nothing
2701             && s->ctx->ext.status_cb != NULL) {
2702         int ret = s->ctx->ext.status_cb(s, s->ctx->ext.status_arg);
2703
2704         if (ret == 0) {
2705             SSLfatal(s, SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE,
2706                      SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT,
2707                      SSL_R_INVALID_STATUS_RESPONSE);
2708             return 0;
2709         }
2710         if (ret < 0) {
2711             SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2712                      SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT,
2713                      ERR_R_MALLOC_FAILURE);
2714             return 0;
2715         }
2716     }
2717 #ifndef OPENSSL_NO_CT
2718     if (s->ct_validation_callback != NULL) {
2719         /* Note we validate the SCTs whether or not we abort on error */
2720         if (!ssl_validate_ct(s) && (s->verify_mode & SSL_VERIFY_PEER)) {
2721             /* SSLfatal() already called */
2722             return 0;
2723         }
2724     }
2725 #endif
2726
2727     return 1;
2728 }
2729
2730 MSG_PROCESS_RETURN tls_process_server_done(SSL *s, PACKET *pkt)
2731 {
2732     if (PACKET_remaining(pkt) > 0) {
2733         /* should contain no data */
2734         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_SERVER_DONE,
2735                  SSL_R_LENGTH_MISMATCH);
2736         return MSG_PROCESS_ERROR;
2737     }
2738 #ifndef OPENSSL_NO_SRP
2739     if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) {
2740         if (SRP_Calc_A_param(s) <= 0) {
2741             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SERVER_DONE,
2742                      SSL_R_SRP_A_CALC);
2743             return MSG_PROCESS_ERROR;
2744         }
2745     }
2746 #endif
2747
2748     if (!tls_process_initial_server_flight(s)) {
2749         /* SSLfatal() already called */
2750         return MSG_PROCESS_ERROR;
2751     }
2752
2753     return MSG_PROCESS_FINISHED_READING;
2754 }
2755
2756 static int tls_construct_cke_psk_preamble(SSL *s, WPACKET *pkt)
2757 {
2758 #ifndef OPENSSL_NO_PSK
2759     int ret = 0;
2760     /*
2761      * The callback needs PSK_MAX_IDENTITY_LEN + 1 bytes to return a
2762      * \0-terminated identity. The last byte is for us for simulating
2763      * strnlen.
2764      */
2765     char identity[PSK_MAX_IDENTITY_LEN + 1];
2766     size_t identitylen = 0;
2767     unsigned char psk[PSK_MAX_PSK_LEN];
2768     unsigned char *tmppsk = NULL;
2769     char *tmpidentity = NULL;
2770     size_t psklen = 0;
2771
2772     if (s->psk_client_callback == NULL) {
2773         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE,
2774                  SSL_R_PSK_NO_CLIENT_CB);
2775         goto err;
2776     }
2777
2778     memset(identity, 0, sizeof(identity));
2779
2780     psklen = s->psk_client_callback(s, s->session->psk_identity_hint,
2781                                     identity, sizeof(identity) - 1,
2782                                     psk, sizeof(psk));
2783
2784     if (psklen > PSK_MAX_PSK_LEN) {
2785         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
2786                  SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
2787         goto err;
2788     } else if (psklen == 0) {
2789         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
2790                  SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE,
2791                  SSL_R_PSK_IDENTITY_NOT_FOUND);
2792         goto err;
2793     }
2794
2795     identitylen = strlen(identity);
2796     if (identitylen > PSK_MAX_IDENTITY_LEN) {
2797         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE,
2798                  ERR_R_INTERNAL_ERROR);
2799         goto err;
2800     }
2801
2802     tmppsk = OPENSSL_memdup(psk, psklen);
2803     tmpidentity = OPENSSL_strdup(identity);
2804     if (tmppsk == NULL || tmpidentity == NULL) {
2805         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE,
2806                  ERR_R_MALLOC_FAILURE);
2807         goto err;
2808     }
2809
2810     OPENSSL_free(s->s3->tmp.psk);
2811     s->s3->tmp.psk = tmppsk;
2812     s->s3->tmp.psklen = psklen;
2813     tmppsk = NULL;
2814     OPENSSL_free(s->session->psk_identity);
2815     s->session->psk_identity = tmpidentity;
2816     tmpidentity = NULL;
2817
2818     if (!WPACKET_sub_memcpy_u16(pkt, identity, identitylen))  {
2819         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE,
2820                  ERR_R_INTERNAL_ERROR);
2821         goto err;
2822     }
2823
2824     ret = 1;
2825
2826  err:
2827     OPENSSL_cleanse(psk, psklen);
2828     OPENSSL_cleanse(identity, sizeof(identity));
2829     OPENSSL_clear_free(tmppsk, psklen);
2830     OPENSSL_clear_free(tmpidentity, identitylen);
2831
2832     return ret;
2833 #else
2834     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE,
2835              ERR_R_INTERNAL_ERROR);
2836     return 0;
2837 #endif
2838 }
2839
2840 static int tls_construct_cke_rsa(SSL *s, WPACKET *pkt)
2841 {
2842 #ifndef OPENSSL_NO_RSA
2843     unsigned char *encdata = NULL;
2844     EVP_PKEY *pkey = NULL;
2845     EVP_PKEY_CTX *pctx = NULL;
2846     size_t enclen;
2847     unsigned char *pms = NULL;
2848     size_t pmslen = 0;
2849
2850     if (s->session->peer == NULL) {
2851         /*
2852          * We should always have a server certificate with SSL_kRSA.
2853          */
2854         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2855                  ERR_R_INTERNAL_ERROR);
2856         return 0;
2857     }
2858
2859     pkey = X509_get0_pubkey(s->session->peer);
2860     if (EVP_PKEY_get0_RSA(pkey) == NULL) {
2861         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2862                  ERR_R_INTERNAL_ERROR);
2863         return 0;
2864     }
2865
2866     pmslen = SSL_MAX_MASTER_KEY_LENGTH;
2867     pms = OPENSSL_malloc(pmslen);
2868     if (pms == NULL) {
2869         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2870                  ERR_R_MALLOC_FAILURE);
2871         return 0;
2872     }
2873
2874     pms[0] = s->client_version >> 8;
2875     pms[1] = s->client_version & 0xff;
2876     /* TODO(size_t): Convert this function */
2877     if (ssl_randbytes(s, pms + 2, (int)(pmslen - 2)) <= 0) {
2878         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2879                  ERR_R_MALLOC_FAILURE);
2880         goto err;
2881     }
2882
2883     /* Fix buf for TLS and beyond */
2884     if (s->version > SSL3_VERSION && !WPACKET_start_sub_packet_u16(pkt)) {
2885         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2886                  ERR_R_INTERNAL_ERROR);
2887         goto err;
2888     }
2889     pctx = EVP_PKEY_CTX_new(pkey, NULL);
2890     if (pctx == NULL || EVP_PKEY_encrypt_init(pctx) <= 0
2891         || EVP_PKEY_encrypt(pctx, NULL, &enclen, pms, pmslen) <= 0) {
2892         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2893                  ERR_R_EVP_LIB);
2894         goto err;
2895     }
2896     if (!WPACKET_allocate_bytes(pkt, enclen, &encdata)
2897             || EVP_PKEY_encrypt(pctx, encdata, &enclen, pms, pmslen) <= 0) {
2898         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2899                  SSL_R_BAD_RSA_ENCRYPT);
2900         goto err;
2901     }
2902     EVP_PKEY_CTX_free(pctx);
2903     pctx = NULL;
2904
2905     /* Fix buf for TLS and beyond */
2906     if (s->version > SSL3_VERSION && !WPACKET_close(pkt)) {
2907         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2908                  ERR_R_INTERNAL_ERROR);
2909         goto err;
2910     }
2911
2912     /* Log the premaster secret, if logging is enabled. */
2913     if (!ssl_log_rsa_client_key_exchange(s, encdata, enclen, pms, pmslen)) {
2914         /* SSLfatal() already called */
2915         goto err;
2916     }
2917
2918     s->s3->tmp.pms = pms;
2919     s->s3->tmp.pmslen = pmslen;
2920
2921     return 1;
2922  err:
2923     OPENSSL_clear_free(pms, pmslen);
2924     EVP_PKEY_CTX_free(pctx);
2925
2926     return 0;
2927 #else
2928     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_RSA,
2929              ERR_R_INTERNAL_ERROR);
2930     return 0;
2931 #endif
2932 }
2933
2934 static int tls_construct_cke_dhe(SSL *s, WPACKET *pkt)
2935 {
2936 #ifndef OPENSSL_NO_DH
2937     DH *dh_clnt = NULL;
2938     const BIGNUM *pub_key;
2939     EVP_PKEY *ckey = NULL, *skey = NULL;
2940     unsigned char *keybytes = NULL;
2941
2942     skey = s->s3->peer_tmp;
2943     if (skey == NULL) {
2944         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_DHE,
2945                  ERR_R_INTERNAL_ERROR);
2946         goto err;
2947     }
2948
2949     ckey = ssl_generate_pkey(skey);
2950     if (ckey == NULL) {
2951         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_DHE,
2952                  ERR_R_INTERNAL_ERROR);
2953         goto err;
2954     }
2955
2956     dh_clnt = EVP_PKEY_get0_DH(ckey);
2957
2958     if (dh_clnt == NULL) {
2959         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_DHE,
2960                  ERR_R_INTERNAL_ERROR);
2961         goto err;
2962     }
2963
2964     if (ssl_derive(s, ckey, skey, 0) == 0) {
2965         /* SSLfatal() already called */
2966         goto err;
2967     }
2968
2969     /* send off the data */
2970     DH_get0_key(dh_clnt, &pub_key, NULL);
2971     if (!WPACKET_sub_allocate_bytes_u16(pkt, BN_num_bytes(pub_key),
2972                                         &keybytes)) {
2973         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_DHE,
2974                  ERR_R_INTERNAL_ERROR);
2975         goto err;
2976     }
2977
2978     BN_bn2bin(pub_key, keybytes);
2979     EVP_PKEY_free(ckey);
2980
2981     return 1;
2982  err:
2983     EVP_PKEY_free(ckey);
2984     return 0;
2985 #else
2986     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_DHE,
2987              ERR_R_INTERNAL_ERROR);
2988     return 0;
2989 #endif
2990 }
2991
2992 static int tls_construct_cke_ecdhe(SSL *s, WPACKET *pkt)
2993 {
2994 #ifndef OPENSSL_NO_EC
2995     unsigned char *encodedPoint = NULL;
2996     size_t encoded_pt_len = 0;
2997     EVP_PKEY *ckey = NULL, *skey = NULL;
2998     int ret = 0;
2999
3000     skey = s->s3->peer_tmp;
3001     if (skey == NULL) {
3002         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_ECDHE,
3003                  ERR_R_INTERNAL_ERROR);
3004         return 0;
3005     }
3006
3007     ckey = ssl_generate_pkey(skey);
3008     if (ckey == NULL) {
3009         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_ECDHE,
3010                  ERR_R_MALLOC_FAILURE);
3011         goto err;
3012     }
3013
3014     if (ssl_derive(s, ckey, skey, 0) == 0) {
3015         /* SSLfatal() already called */
3016         goto err;
3017     }
3018
3019     /* Generate encoding of client key */
3020     encoded_pt_len = EVP_PKEY_get1_tls_encodedpoint(ckey, &encodedPoint);
3021
3022     if (encoded_pt_len == 0) {
3023         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_ECDHE,
3024                  ERR_R_EC_LIB);
3025         goto err;
3026     }
3027
3028     if (!WPACKET_sub_memcpy_u8(pkt, encodedPoint, encoded_pt_len)) {
3029         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_ECDHE,
3030                  ERR_R_INTERNAL_ERROR);
3031         goto err;
3032     }
3033
3034     ret = 1;
3035  err:
3036     OPENSSL_free(encodedPoint);
3037     EVP_PKEY_free(ckey);
3038     return ret;
3039 #else
3040     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_ECDHE,
3041              ERR_R_INTERNAL_ERROR);
3042     return 0;
3043 #endif
3044 }
3045
3046 static int tls_construct_cke_gost(SSL *s, WPACKET *pkt)
3047 {
3048 #ifndef OPENSSL_NO_GOST
3049     /* GOST key exchange message creation */
3050     EVP_PKEY_CTX *pkey_ctx = NULL;
3051     X509 *peer_cert;
3052     size_t msglen;
3053     unsigned int md_len;
3054     unsigned char shared_ukm[32], tmp[256];
3055     EVP_MD_CTX *ukm_hash = NULL;
3056     int dgst_nid = NID_id_GostR3411_94;
3057     unsigned char *pms = NULL;
3058     size_t pmslen = 0;
3059
3060     if ((s->s3->tmp.new_cipher->algorithm_auth & SSL_aGOST12) != 0)
3061         dgst_nid = NID_id_GostR3411_2012_256;
3062
3063     /*
3064      * Get server certificate PKEY and create ctx from it
3065      */
3066     peer_cert = s->session->peer;
3067     if (!peer_cert) {
3068         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3069                SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER);
3070         return 0;
3071     }
3072
3073     pkey_ctx = EVP_PKEY_CTX_new(X509_get0_pubkey(peer_cert), NULL);
3074     if (pkey_ctx == NULL) {
3075         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3076                  ERR_R_MALLOC_FAILURE);
3077         return 0;
3078     }
3079     /*
3080      * If we have send a certificate, and certificate key
3081      * parameters match those of server certificate, use
3082      * certificate key for key exchange
3083      */
3084
3085     /* Otherwise, generate ephemeral key pair */
3086     pmslen = 32;
3087     pms = OPENSSL_malloc(pmslen);
3088     if (pms == NULL) {
3089         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3090                  ERR_R_MALLOC_FAILURE);
3091         goto err;
3092     }
3093
3094     if (EVP_PKEY_encrypt_init(pkey_ctx) <= 0
3095         /* Generate session key
3096          * TODO(size_t): Convert this function
3097          */
3098         || ssl_randbytes(s, pms, (int)pmslen) <= 0) {
3099         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3100                  ERR_R_INTERNAL_ERROR);
3101         goto err;
3102     };
3103     /*
3104      * Compute shared IV and store it in algorithm-specific context
3105      * data
3106      */
3107     ukm_hash = EVP_MD_CTX_new();
3108     if (ukm_hash == NULL
3109         || EVP_DigestInit(ukm_hash, EVP_get_digestbynid(dgst_nid)) <= 0
3110         || EVP_DigestUpdate(ukm_hash, s->s3->client_random,
3111                             SSL3_RANDOM_SIZE) <= 0
3112         || EVP_DigestUpdate(ukm_hash, s->s3->server_random,
3113                             SSL3_RANDOM_SIZE) <= 0
3114         || EVP_DigestFinal_ex(ukm_hash, shared_ukm, &md_len) <= 0) {
3115         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3116                  ERR_R_INTERNAL_ERROR);
3117         goto err;
3118     }
3119     EVP_MD_CTX_free(ukm_hash);
3120     ukm_hash = NULL;
3121     if (EVP_PKEY_CTX_ctrl(pkey_ctx, -1, EVP_PKEY_OP_ENCRYPT,
3122                           EVP_PKEY_CTRL_SET_IV, 8, shared_ukm) < 0) {
3123         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3124                  SSL_R_LIBRARY_BUG);
3125         goto err;
3126     }
3127     /* Make GOST keytransport blob message */
3128     /*
3129      * Encapsulate it into sequence
3130      */
3131     msglen = 255;
3132     if (EVP_PKEY_encrypt(pkey_ctx, tmp, &msglen, pms, pmslen) <= 0) {
3133         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3134                  SSL_R_LIBRARY_BUG);
3135         goto err;
3136     }
3137
3138     if (!WPACKET_put_bytes_u8(pkt, V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED)
3139             || (msglen >= 0x80 && !WPACKET_put_bytes_u8(pkt, 0x81))
3140             || !WPACKET_sub_memcpy_u8(pkt, tmp, msglen)) {
3141         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3142                  ERR_R_INTERNAL_ERROR);
3143         goto err;
3144     }
3145
3146     EVP_PKEY_CTX_free(pkey_ctx);
3147     s->s3->tmp.pms = pms;
3148     s->s3->tmp.pmslen = pmslen;
3149
3150     return 1;
3151  err:
3152     EVP_PKEY_CTX_free(pkey_ctx);
3153     OPENSSL_clear_free(pms, pmslen);
3154     EVP_MD_CTX_free(ukm_hash);
3155     return 0;
3156 #else
3157     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_GOST,
3158              ERR_R_INTERNAL_ERROR);
3159     return 0;
3160 #endif
3161 }
3162
3163 static int tls_construct_cke_srp(SSL *s, WPACKET *pkt)
3164 {
3165 #ifndef OPENSSL_NO_SRP
3166     unsigned char *abytes = NULL;
3167
3168     if (s->srp_ctx.A == NULL
3169             || !WPACKET_sub_allocate_bytes_u16(pkt, BN_num_bytes(s->srp_ctx.A),
3170                                                &abytes)) {
3171         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_SRP,
3172                  ERR_R_INTERNAL_ERROR);
3173         return 0;
3174     }
3175     BN_bn2bin(s->srp_ctx.A, abytes);
3176
3177     OPENSSL_free(s->session->srp_username);
3178     s->session->srp_username = OPENSSL_strdup(s->srp_ctx.login);
3179     if (s->session->srp_username == NULL) {
3180         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_SRP,
3181                  ERR_R_MALLOC_FAILURE);
3182         return 0;
3183     }
3184
3185     return 1;
3186 #else
3187     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CKE_SRP,
3188              ERR_R_INTERNAL_ERROR);
3189     return 0;
3190 #endif
3191 }
3192
3193 int tls_construct_client_key_exchange(SSL *s, WPACKET *pkt)
3194 {
3195     unsigned long alg_k;
3196
3197     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
3198
3199     /*
3200      * All of the construct functions below call SSLfatal() if necessary so
3201      * no need to do so here.
3202      */
3203     if ((alg_k & SSL_PSK)
3204         && !tls_construct_cke_psk_preamble(s, pkt))
3205         goto err;
3206
3207     if (alg_k & (SSL_kRSA | SSL_kRSAPSK)) {
3208         if (!tls_construct_cke_rsa(s, pkt))
3209             goto err;
3210     } else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
3211         if (!tls_construct_cke_dhe(s, pkt))
3212             goto err;
3213     } else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
3214         if (!tls_construct_cke_ecdhe(s, pkt))
3215             goto err;
3216     } else if (alg_k & SSL_kGOST) {
3217         if (!tls_construct_cke_gost(s, pkt))
3218             goto err;
3219     } else if (alg_k & SSL_kSRP) {
3220         if (!tls_construct_cke_srp(s, pkt))
3221             goto err;
3222     } else if (!(alg_k & SSL_kPSK)) {
3223         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
3224                  SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
3225         goto err;
3226     }
3227
3228     return 1;
3229  err:
3230     OPENSSL_clear_free(s->s3->tmp.pms, s->s3->tmp.pmslen);
3231     s->s3->tmp.pms = NULL;
3232 #ifndef OPENSSL_NO_PSK
3233     OPENSSL_clear_free(s->s3->tmp.psk, s->s3->tmp.psklen);
3234     s->s3->tmp.psk = NULL;
3235 #endif
3236     return 0;
3237 }
3238
3239 int tls_client_key_exchange_post_work(SSL *s)
3240 {
3241     unsigned char *pms = NULL;
3242     size_t pmslen = 0;
3243
3244     pms = s->s3->tmp.pms;
3245     pmslen = s->s3->tmp.pmslen;
3246
3247 #ifndef OPENSSL_NO_SRP
3248     /* Check for SRP */
3249     if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) {
3250         if (!srp_generate_client_master_secret(s)) {
3251             /* SSLfatal() already called */
3252             goto err;
3253         }
3254         return 1;
3255     }
3256 #endif
3257
3258     if (pms == NULL && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
3259         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
3260                  SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK, ERR_R_MALLOC_FAILURE);
3261         goto err;
3262     }
3263     if (!ssl_generate_master_secret(s, pms, pmslen, 1)) {
3264         /* SSLfatal() already called */
3265         /* ssl_generate_master_secret frees the pms even on error */
3266         pms = NULL;
3267         pmslen = 0;
3268         goto err;
3269     }
3270     pms = NULL;
3271     pmslen = 0;
3272
3273 #ifndef OPENSSL_NO_SCTP
3274     if (SSL_IS_DTLS(s)) {
3275         unsigned char sctpauthkey[64];
3276         char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
3277
3278         /*
3279          * Add new shared key for SCTP-Auth, will be ignored if no SCTP
3280          * used.
3281          */
3282         memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
3283                sizeof(DTLS1_SCTP_AUTH_LABEL));
3284
3285         if (SSL_export_keying_material(s, sctpauthkey,
3286                                        sizeof(sctpauthkey), labelbuffer,
3287                                        sizeof(labelbuffer), NULL, 0, 0) <= 0) {
3288             SSLfatal(s, SSL_AD_INTERNAL_ERROR,
3289                      SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK,
3290                      ERR_R_INTERNAL_ERROR);
3291             goto err;
3292         }
3293
3294         BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
3295                  sizeof(sctpauthkey), sctpauthkey);
3296     }
3297 #endif
3298
3299     return 1;
3300  err:
3301     OPENSSL_clear_free(pms, pmslen);
3302     s->s3->tmp.pms = NULL;
3303     return 0;
3304 }
3305
3306 /*
3307  * Check a certificate can be used for client authentication. Currently check
3308  * cert exists, if we have a suitable digest for TLS 1.2 if static DH client
3309  * certificates can be used and optionally checks suitability for Suite B.
3310  */
3311 static int ssl3_check_client_certificate(SSL *s)
3312 {
3313     /* If no suitable signature algorithm can't use certificate */
3314     if (!tls_choose_sigalg(s, 0) || s->s3->tmp.sigalg == NULL)
3315         return 0;
3316     /*
3317      * If strict mode check suitability of chain before using it. This also
3318      * adjusts suite B digest if necessary.
3319      */
3320     if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT &&
3321         !tls1_check_chain(s, NULL, NULL, NULL, -2))
3322         return 0;
3323     return 1;
3324 }
3325
3326 WORK_STATE tls_prepare_client_certificate(SSL *s, WORK_STATE wst)
3327 {
3328     X509 *x509 = NULL;
3329     EVP_PKEY *pkey = NULL;
3330     int i;
3331
3332     if (wst == WORK_MORE_A) {
3333         /* Let cert callback update client certificates if required */
3334         if (s->cert->cert_cb) {
3335             i = s->cert->cert_cb(s, s->cert->cert_cb_arg);
3336             if (i < 0) {
3337                 s->rwstate = SSL_X509_LOOKUP;
3338                 return WORK_MORE_A;
3339             }
3340             if (i == 0) {
3341                 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
3342                          SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE,
3343                          SSL_R_CALLBACK_FAILED);
3344                 return WORK_ERROR;
3345             }
3346             s->rwstate = SSL_NOTHING;
3347         }
3348         if (ssl3_check_client_certificate(s))
3349             return WORK_FINISHED_CONTINUE;
3350
3351         /* Fall through to WORK_MORE_B */
3352         wst = WORK_MORE_B;
3353     }
3354
3355     /* We need to get a client cert */
3356     if (wst == WORK_MORE_B) {
3357         /*
3358          * If we get an error, we need to ssl->rwstate=SSL_X509_LOOKUP;
3359          * return(-1); We then get retied later
3360          */
3361         i = ssl_do_client_cert_cb(s, &x509, &pkey);
3362         if (i < 0) {
3363             s->rwstate = SSL_X509_LOOKUP;
3364             return WORK_MORE_B;
3365         }
3366         s->rwstate = SSL_NOTHING;
3367         if ((i == 1) && (pkey != NULL) && (x509 != NULL)) {
3368             if (!SSL_use_certificate(s, x509) || !SSL_use_PrivateKey(s, pkey))
3369                 i = 0;
3370         } else if (i == 1) {
3371             i = 0;
3372             SSLerr(SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE,
3373                    SSL_R_BAD_DATA_RETURNED_BY_CALLBACK);
3374         }
3375
3376         X509_free(x509);
3377         EVP_PKEY_free(pkey);
3378         if (i && !ssl3_check_client_certificate(s))
3379             i = 0;
3380         if (i == 0) {
3381             if (s->version == SSL3_VERSION) {
3382                 s->s3->tmp.cert_req = 0;
3383                 ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_CERTIFICATE);
3384                 return WORK_FINISHED_CONTINUE;
3385             } else {
3386                 s->s3->tmp.cert_req = 2;
3387                 if (!ssl3_digest_cached_records(s, 0)) {
3388                     /* SSLfatal() already called */
3389                     return WORK_ERROR;
3390                 }
3391             }
3392         }
3393
3394         return WORK_FINISHED_CONTINUE;
3395     }
3396
3397     /* Shouldn't ever get here */
3398     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE,
3399              ERR_R_INTERNAL_ERROR);
3400     return WORK_ERROR;
3401 }
3402
3403 int tls_construct_client_certificate(SSL *s, WPACKET *pkt)
3404 {
3405     /*
3406      * TODO(TLS1.3): For now we must put an empty context. Needs to be filled in
3407      * later
3408      */
3409     if (SSL_IS_TLS13(s) && !WPACKET_put_bytes_u8(pkt, 0)) {
3410         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
3411                  SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE, ERR_R_INTERNAL_ERROR);
3412         return 0;
3413     }
3414     if (!ssl3_output_cert_chain(s, pkt,
3415                                 (s->s3->tmp.cert_req == 2) ? NULL
3416                                                            : s->cert->key)) {
3417         /* SSLfatal() already called */
3418         return 0;
3419     }
3420
3421     if (SSL_IS_TLS13(s)
3422             && SSL_IS_FIRST_HANDSHAKE(s)
3423             && (!s->method->ssl3_enc->change_cipher_state(s,
3424                     SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_CLIENT_WRITE))) {
3425         /*
3426          * This is a fatal error, which leaves enc_write_ctx in an inconsistent
3427          * state and thus ssl3_send_alert may crash.
3428          */
3429         SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE,
3430                  SSL_R_CANNOT_CHANGE_CIPHER);
3431         return 0;
3432     }
3433
3434     return 1;
3435 }
3436
3437 int ssl3_check_cert_and_algorithm(SSL *s)
3438 {
3439     const SSL_CERT_LOOKUP *clu;
3440     size_t idx;
3441     long alg_k, alg_a;
3442
3443     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
3444     alg_a = s->s3->tmp.new_cipher->algorithm_auth;
3445
3446     /* we don't have a certificate */
3447     if (!(alg_a & SSL_aCERT))
3448         return 1;
3449
3450     /* This is the passed certificate */
3451     clu = ssl_cert_lookup_by_pkey(X509_get0_pubkey(s->session->peer), &idx);
3452
3453     /* Check certificate is recognised and suitable for cipher */
3454     if (clu == NULL || (alg_a & clu->amask) == 0) {
3455         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
3456                  SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
3457                  SSL_R_MISSING_SIGNING_CERT);
3458         return 0;
3459     }
3460
3461 #ifndef OPENSSL_NO_EC
3462     if (clu->amask & SSL_aECDSA) {
3463         if (ssl_check_srvr_ecc_cert_and_alg(s->session->peer, s))
3464             return 1;
3465         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
3466                  SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, SSL_R_BAD_ECC_CERT);
3467         return 0;
3468     }
3469 #endif
3470 #ifndef OPENSSL_NO_RSA
3471     if (alg_k & (SSL_kRSA | SSL_kRSAPSK) && idx != SSL_PKEY_RSA) {
3472         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
3473                  SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
3474                  SSL_R_MISSING_RSA_ENCRYPTING_CERT);
3475         return 0;
3476     }
3477 #endif
3478 #ifndef OPENSSL_NO_DH
3479     if ((alg_k & SSL_kDHE) && (s->s3->peer_tmp == NULL)) {
3480         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
3481                  ERR_R_INTERNAL_ERROR);
3482         return 0;
3483     }
3484 #endif
3485
3486     return 1;
3487 }
3488
3489 #ifndef OPENSSL_NO_NEXTPROTONEG
3490 int tls_construct_next_proto(SSL *s, WPACKET *pkt)
3491 {
3492     size_t len, padding_len;
3493     unsigned char *padding = NULL;
3494
3495     len = s->ext.npn_len;
3496     padding_len = 32 - ((len + 2) % 32);
3497
3498     if (!WPACKET_sub_memcpy_u8(pkt, s->ext.npn, len)
3499             || !WPACKET_sub_allocate_bytes_u8(pkt, padding_len, &padding)) {
3500         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_NEXT_PROTO,
3501                  ERR_R_INTERNAL_ERROR);
3502         return 0;
3503     }
3504
3505     memset(padding, 0, padding_len);
3506
3507     return 1;
3508 }
3509 #endif
3510
3511 MSG_PROCESS_RETURN tls_process_hello_req(SSL *s, PACKET *pkt)
3512 {
3513     if (PACKET_remaining(pkt) > 0) {
3514         /* should contain no data */
3515         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_HELLO_REQ,
3516                  SSL_R_LENGTH_MISMATCH);
3517         return MSG_PROCESS_ERROR;
3518     }
3519
3520     if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
3521         ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION);
3522         return MSG_PROCESS_FINISHED_READING;
3523     }
3524
3525     /*
3526      * This is a historical discrepancy (not in the RFC) maintained for
3527      * compatibility reasons. If a TLS client receives a HelloRequest it will
3528      * attempt an abbreviated handshake. However if a DTLS client receives a
3529      * HelloRequest it will do a full handshake. Either behaviour is reasonable
3530      * but doing one for TLS and another for DTLS is odd.
3531      */
3532     if (SSL_IS_DTLS(s))
3533         SSL_renegotiate(s);
3534     else
3535         SSL_renegotiate_abbreviated(s);
3536
3537     return MSG_PROCESS_FINISHED_READING;
3538 }
3539
3540 static MSG_PROCESS_RETURN tls_process_encrypted_extensions(SSL *s, PACKET *pkt)
3541 {
3542     PACKET extensions;
3543     RAW_EXTENSION *rawexts = NULL;
3544
3545     if (!PACKET_as_length_prefixed_2(pkt, &extensions)
3546             || PACKET_remaining(pkt) != 0) {
3547         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS,
3548                  SSL_R_LENGTH_MISMATCH);
3549         goto err;
3550     }
3551
3552     if (!tls_collect_extensions(s, &extensions,
3553                                 SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS, &rawexts,
3554                                 NULL, 1)
3555             || !tls_parse_all_extensions(s, SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
3556                                          rawexts, NULL, 0, 1)) {
3557         /* SSLfatal() already called */
3558         goto err;
3559     }
3560
3561     OPENSSL_free(rawexts);
3562     return MSG_PROCESS_CONTINUE_READING;
3563
3564  err:
3565     OPENSSL_free(rawexts);
3566     return MSG_PROCESS_ERROR;
3567 }
3568
3569 int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey)
3570 {
3571     int i = 0;
3572 #ifndef OPENSSL_NO_ENGINE
3573     if (s->ctx->client_cert_engine) {
3574         i = ENGINE_load_ssl_client_cert(s->ctx->client_cert_engine, s,
3575                                         SSL_get_client_CA_list(s),
3576                                         px509, ppkey, NULL, NULL, NULL);
3577         if (i != 0)
3578             return i;
3579     }
3580 #endif
3581     if (s->ctx->client_cert_cb)
3582         i = s->ctx->client_cert_cb(s, px509, ppkey);
3583     return i;
3584 }
3585
3586 int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk, WPACKET *pkt)
3587 {
3588     int i;
3589     size_t totlen = 0, len, maxlen, maxverok = 0;
3590     int empty_reneg_info_scsv = !s->renegotiate;
3591     /* Set disabled masks for this session */
3592     ssl_set_client_disabled(s);
3593
3594     if (sk == NULL) {
3595         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CIPHER_LIST_TO_BYTES,
3596                  ERR_R_INTERNAL_ERROR);
3597         return 0;
3598     }
3599
3600 #ifdef OPENSSL_MAX_TLS1_2_CIPHER_LENGTH
3601 # if OPENSSL_MAX_TLS1_2_CIPHER_LENGTH < 6