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