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