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