46bd5c7be02fd78766b6de151c3fea856b193660
[openssl.git] / ssl / statem / statem_srvr.c
1 /*
2  * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the OpenSSL license (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9
10 /* ====================================================================
11  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
12  *
13  * Portions of the attached software ("Contribution") are developed by
14  * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
15  *
16  * The Contribution is licensed pursuant to the OpenSSL open source
17  * license provided above.
18  *
19  * ECC cipher suite support in OpenSSL originally written by
20  * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
21  *
22  */
23 /* ====================================================================
24  * Copyright 2005 Nokia. All rights reserved.
25  *
26  * The portions of the attached software ("Contribution") is developed by
27  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
28  * license.
29  *
30  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
31  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
32  * support (see RFC 4279) to OpenSSL.
33  *
34  * No patent licenses or other rights except those expressly stated in
35  * the OpenSSL open source license shall be deemed granted or received
36  * expressly, by implication, estoppel, or otherwise.
37  *
38  * No assurances are provided by Nokia that the Contribution does not
39  * infringe the patent or other intellectual property rights of any third
40  * party or that the license provides you with all the necessary rights
41  * to make use of the Contribution.
42  *
43  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
44  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
45  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
46  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
47  * OTHERWISE.
48  */
49
50 #include <stdio.h>
51 #include "../ssl_locl.h"
52 #include "statem_locl.h"
53 #include "internal/constant_time_locl.h"
54 #include <openssl/buffer.h>
55 #include <openssl/rand.h>
56 #include <openssl/objects.h>
57 #include <openssl/evp.h>
58 #include <openssl/hmac.h>
59 #include <openssl/x509.h>
60 #include <openssl/dh.h>
61 #include <openssl/bn.h>
62 #include <openssl/md5.h>
63
64 static STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,
65                                                       PACKET *cipher_suites,
66                                                       STACK_OF(SSL_CIPHER)
67                                                       **skp, int sslv2format,
68                                                       int *al);
69
70 /*
71  * server_read_transition() encapsulates the logic for the allowed handshake
72  * state transitions when the server is reading messages from the client. The
73  * message type that the client has sent is provided in |mt|. The current state
74  * is in |s->statem.hand_state|.
75  *
76  *  Valid return values are:
77  *  1: Success (transition allowed)
78  *  0: Error (transition not allowed)
79  */
80 int ossl_statem_server_read_transition(SSL *s, int mt)
81 {
82     OSSL_STATEM *st = &s->statem;
83
84     switch (st->hand_state) {
85     default:
86         break;
87
88     case TLS_ST_BEFORE:
89     case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
90         if (mt == SSL3_MT_CLIENT_HELLO) {
91             st->hand_state = TLS_ST_SR_CLNT_HELLO;
92             return 1;
93         }
94         break;
95
96     case TLS_ST_SW_SRVR_DONE:
97         /*
98          * If we get a CKE message after a ServerDone then either
99          * 1) We didn't request a Certificate
100          * OR
101          * 2) If we did request one then
102          *      a) We allow no Certificate to be returned
103          *      AND
104          *      b) We are running SSL3 (in TLS1.0+ the client must return a 0
105          *         list if we requested a certificate)
106          */
107         if (mt == SSL3_MT_CLIENT_KEY_EXCHANGE) {
108             if (s->s3->tmp.cert_request) {
109                 if (s->version == SSL3_VERSION) {
110                     if ((s->verify_mode & SSL_VERIFY_PEER)
111                         && (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) {
112                         /*
113                          * This isn't an unexpected message as such - we're just
114                          * not going to accept it because we require a client
115                          * cert.
116                          */
117                         ssl3_send_alert(s, SSL3_AL_FATAL,
118                                         SSL3_AD_HANDSHAKE_FAILURE);
119                         SSLerr(SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION,
120                                SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
121                         return 0;
122                     }
123                     st->hand_state = TLS_ST_SR_KEY_EXCH;
124                     return 1;
125                 }
126             } else {
127                 st->hand_state = TLS_ST_SR_KEY_EXCH;
128                 return 1;
129             }
130         } else if (s->s3->tmp.cert_request) {
131             if (mt == SSL3_MT_CERTIFICATE) {
132                 st->hand_state = TLS_ST_SR_CERT;
133                 return 1;
134             }
135         }
136         break;
137
138     case TLS_ST_SR_CERT:
139         if (mt == SSL3_MT_CLIENT_KEY_EXCHANGE) {
140             st->hand_state = TLS_ST_SR_KEY_EXCH;
141             return 1;
142         }
143         break;
144
145     case TLS_ST_SR_KEY_EXCH:
146         /*
147          * We should only process a CertificateVerify message if we have
148          * received a Certificate from the client. If so then |s->session->peer|
149          * will be non NULL. In some instances a CertificateVerify message is
150          * not required even if the peer has sent a Certificate (e.g. such as in
151          * the case of static DH). In that case |st->no_cert_verify| should be
152          * set.
153          */
154         if (s->session->peer == NULL || st->no_cert_verify) {
155             if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
156                 /*
157                  * For the ECDH ciphersuites when the client sends its ECDH
158                  * pub key in a certificate, the CertificateVerify message is
159                  * not sent. Also for GOST ciphersuites when the client uses
160                  * its key from the certificate for key exchange.
161                  */
162                 st->hand_state = TLS_ST_SR_CHANGE;
163                 return 1;
164             }
165         } else {
166             if (mt == SSL3_MT_CERTIFICATE_VERIFY) {
167                 st->hand_state = TLS_ST_SR_CERT_VRFY;
168                 return 1;
169             }
170         }
171         break;
172
173     case TLS_ST_SR_CERT_VRFY:
174         if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
175             st->hand_state = TLS_ST_SR_CHANGE;
176             return 1;
177         }
178         break;
179
180     case TLS_ST_SR_CHANGE:
181 #ifndef OPENSSL_NO_NEXTPROTONEG
182         if (s->s3->next_proto_neg_seen) {
183             if (mt == SSL3_MT_NEXT_PROTO) {
184                 st->hand_state = TLS_ST_SR_NEXT_PROTO;
185                 return 1;
186             }
187         } else {
188 #endif
189             if (mt == SSL3_MT_FINISHED) {
190                 st->hand_state = TLS_ST_SR_FINISHED;
191                 return 1;
192             }
193 #ifndef OPENSSL_NO_NEXTPROTONEG
194         }
195 #endif
196         break;
197
198 #ifndef OPENSSL_NO_NEXTPROTONEG
199     case TLS_ST_SR_NEXT_PROTO:
200         if (mt == SSL3_MT_FINISHED) {
201             st->hand_state = TLS_ST_SR_FINISHED;
202             return 1;
203         }
204         break;
205 #endif
206
207     case TLS_ST_SW_FINISHED:
208         if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
209             st->hand_state = TLS_ST_SR_CHANGE;
210             return 1;
211         }
212         break;
213     }
214
215     /* No valid transition found */
216     ssl3_send_alert(s, SSL3_AL_FATAL, SSL3_AD_UNEXPECTED_MESSAGE);
217     SSLerr(SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION, SSL_R_UNEXPECTED_MESSAGE);
218     return 0;
219 }
220
221 /*
222  * Should we send a ServerKeyExchange message?
223  *
224  * Valid return values are:
225  *   1: Yes
226  *   0: No
227  */
228 static int send_server_key_exchange(SSL *s)
229 {
230     unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
231
232     /*
233      * only send a ServerKeyExchange if DH or fortezza but we have a
234      * sign only certificate PSK: may send PSK identity hints For
235      * ECC ciphersuites, we send a serverKeyExchange message only if
236      * the cipher suite is either ECDH-anon or ECDHE. In other cases,
237      * the server certificate contains the server's public key for
238      * key exchange.
239      */
240     if (alg_k & (SSL_kDHE | SSL_kECDHE)
241         /*
242          * PSK: send ServerKeyExchange if PSK identity hint if
243          * provided
244          */
245 #ifndef OPENSSL_NO_PSK
246         /* Only send SKE if we have identity hint for plain PSK */
247         || ((alg_k & (SSL_kPSK | SSL_kRSAPSK))
248             && s->cert->psk_identity_hint)
249         /* For other PSK always send SKE */
250         || (alg_k & (SSL_PSK & (SSL_kDHEPSK | SSL_kECDHEPSK)))
251 #endif
252 #ifndef OPENSSL_NO_SRP
253         /* SRP: send ServerKeyExchange */
254         || (alg_k & SSL_kSRP)
255 #endif
256         ) {
257         return 1;
258     }
259
260     return 0;
261 }
262
263 /*
264  * Should we send a CertificateRequest message?
265  *
266  * Valid return values are:
267  *   1: Yes
268  *   0: No
269  */
270 static int send_certificate_request(SSL *s)
271 {
272     if (
273            /* don't request cert unless asked for it: */
274            s->verify_mode & SSL_VERIFY_PEER
275            /*
276             * if SSL_VERIFY_CLIENT_ONCE is set, don't request cert
277             * during re-negotiation:
278             */
279            && ((s->session->peer == NULL) ||
280                !(s->verify_mode & SSL_VERIFY_CLIENT_ONCE))
281            /*
282             * never request cert in anonymous ciphersuites (see
283             * section "Certificate request" in SSL 3 drafts and in
284             * RFC 2246):
285             */
286            && (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)
287                /*
288                 * ... except when the application insists on
289                 * verification (against the specs, but statem_clnt.c accepts
290                 * this for SSL 3)
291                 */
292                || (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))
293            /* don't request certificate for SRP auth */
294            && !(s->s3->tmp.new_cipher->algorithm_auth & SSL_aSRP)
295            /*
296             * With normal PSK Certificates and Certificate Requests
297             * are omitted
298             */
299            && !(s->s3->tmp.new_cipher->algorithm_auth & SSL_aPSK)) {
300         return 1;
301     }
302
303     return 0;
304 }
305
306 /*
307  * server_write_transition() works out what handshake state to move to next
308  * when the server is writing messages to be sent to the client.
309  */
310 WRITE_TRAN ossl_statem_server_write_transition(SSL *s)
311 {
312     OSSL_STATEM *st = &s->statem;
313
314     switch (st->hand_state) {
315     default:
316         /* Shouldn't happen */
317         return WRITE_TRAN_ERROR;
318
319     case TLS_ST_BEFORE:
320         /* Just go straight to trying to read from the client */
321         return WRITE_TRAN_FINISHED;
322
323     case TLS_ST_OK:
324         /* We must be trying to renegotiate */
325         st->hand_state = TLS_ST_SW_HELLO_REQ;
326         return WRITE_TRAN_CONTINUE;
327
328     case TLS_ST_SW_HELLO_REQ:
329         st->hand_state = TLS_ST_OK;
330         ossl_statem_set_in_init(s, 0);
331         return WRITE_TRAN_CONTINUE;
332
333     case TLS_ST_SR_CLNT_HELLO:
334         if (SSL_IS_DTLS(s) && !s->d1->cookie_verified
335             && (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE))
336             st->hand_state = DTLS_ST_SW_HELLO_VERIFY_REQUEST;
337         else
338             st->hand_state = TLS_ST_SW_SRVR_HELLO;
339         return WRITE_TRAN_CONTINUE;
340
341     case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
342         return WRITE_TRAN_FINISHED;
343
344     case TLS_ST_SW_SRVR_HELLO:
345         if (s->hit) {
346             if (s->tlsext_ticket_expected)
347                 st->hand_state = TLS_ST_SW_SESSION_TICKET;
348             else
349                 st->hand_state = TLS_ST_SW_CHANGE;
350         } else {
351             /* Check if it is anon DH or anon ECDH, */
352             /* normal PSK or SRP */
353             if (!(s->s3->tmp.new_cipher->algorithm_auth &
354                   (SSL_aNULL | SSL_aSRP | SSL_aPSK))) {
355                 st->hand_state = TLS_ST_SW_CERT;
356             } else if (send_server_key_exchange(s)) {
357                 st->hand_state = TLS_ST_SW_KEY_EXCH;
358             } else if (send_certificate_request(s)) {
359                 st->hand_state = TLS_ST_SW_CERT_REQ;
360             } else {
361                 st->hand_state = TLS_ST_SW_SRVR_DONE;
362             }
363         }
364         return WRITE_TRAN_CONTINUE;
365
366     case TLS_ST_SW_CERT:
367         if (s->tlsext_status_expected) {
368             st->hand_state = TLS_ST_SW_CERT_STATUS;
369             return WRITE_TRAN_CONTINUE;
370         }
371         /* Fall through */
372
373     case TLS_ST_SW_CERT_STATUS:
374         if (send_server_key_exchange(s)) {
375             st->hand_state = TLS_ST_SW_KEY_EXCH;
376             return WRITE_TRAN_CONTINUE;
377         }
378         /* Fall through */
379
380     case TLS_ST_SW_KEY_EXCH:
381         if (send_certificate_request(s)) {
382             st->hand_state = TLS_ST_SW_CERT_REQ;
383             return WRITE_TRAN_CONTINUE;
384         }
385         /* Fall through */
386
387     case TLS_ST_SW_CERT_REQ:
388         st->hand_state = TLS_ST_SW_SRVR_DONE;
389         return WRITE_TRAN_CONTINUE;
390
391     case TLS_ST_SW_SRVR_DONE:
392         return WRITE_TRAN_FINISHED;
393
394     case TLS_ST_SR_FINISHED:
395         if (s->hit) {
396             st->hand_state = TLS_ST_OK;
397             ossl_statem_set_in_init(s, 0);
398             return WRITE_TRAN_CONTINUE;
399         } else if (s->tlsext_ticket_expected) {
400             st->hand_state = TLS_ST_SW_SESSION_TICKET;
401         } else {
402             st->hand_state = TLS_ST_SW_CHANGE;
403         }
404         return WRITE_TRAN_CONTINUE;
405
406     case TLS_ST_SW_SESSION_TICKET:
407         st->hand_state = TLS_ST_SW_CHANGE;
408         return WRITE_TRAN_CONTINUE;
409
410     case TLS_ST_SW_CHANGE:
411         st->hand_state = TLS_ST_SW_FINISHED;
412         return WRITE_TRAN_CONTINUE;
413
414     case TLS_ST_SW_FINISHED:
415         if (s->hit) {
416             return WRITE_TRAN_FINISHED;
417         }
418         st->hand_state = TLS_ST_OK;
419         ossl_statem_set_in_init(s, 0);
420         return WRITE_TRAN_CONTINUE;
421     }
422 }
423
424 /*
425  * Perform any pre work that needs to be done prior to sending a message from
426  * the server to the client.
427  */
428 WORK_STATE ossl_statem_server_pre_work(SSL *s, WORK_STATE wst)
429 {
430     OSSL_STATEM *st = &s->statem;
431
432     switch (st->hand_state) {
433     default:
434         /* No pre work to be done */
435         break;
436
437     case TLS_ST_SW_HELLO_REQ:
438         s->shutdown = 0;
439         if (SSL_IS_DTLS(s))
440             dtls1_clear_sent_buffer(s);
441         break;
442
443     case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
444         s->shutdown = 0;
445         if (SSL_IS_DTLS(s)) {
446             dtls1_clear_sent_buffer(s);
447             /* We don't buffer this message so don't use the timer */
448             st->use_timer = 0;
449         }
450         break;
451
452     case TLS_ST_SW_SRVR_HELLO:
453         if (SSL_IS_DTLS(s)) {
454             /*
455              * Messages we write from now on should be bufferred and
456              * retransmitted if necessary, so we need to use the timer now
457              */
458             st->use_timer = 1;
459         }
460         break;
461
462     case TLS_ST_SW_SRVR_DONE:
463 #ifndef OPENSSL_NO_SCTP
464         if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s)))
465             return dtls_wait_for_dry(s);
466 #endif
467         return WORK_FINISHED_CONTINUE;
468
469     case TLS_ST_SW_SESSION_TICKET:
470         if (SSL_IS_DTLS(s)) {
471             /*
472              * We're into the last flight. We don't retransmit the last flight
473              * unless we need to, so we don't use the timer
474              */
475             st->use_timer = 0;
476         }
477         break;
478
479     case TLS_ST_SW_CHANGE:
480         s->session->cipher = s->s3->tmp.new_cipher;
481         if (!s->method->ssl3_enc->setup_key_block(s)) {
482             ossl_statem_set_error(s);
483             return WORK_ERROR;
484         }
485         if (SSL_IS_DTLS(s)) {
486             /*
487              * We're into the last flight. We don't retransmit the last flight
488              * unless we need to, so we don't use the timer. This might have
489              * already been set to 0 if we sent a NewSessionTicket message,
490              * but we'll set it again here in case we didn't.
491              */
492             st->use_timer = 0;
493         }
494         return WORK_FINISHED_CONTINUE;
495
496     case TLS_ST_OK:
497         return tls_finish_handshake(s, wst);
498     }
499
500     return WORK_FINISHED_CONTINUE;
501 }
502
503 /*
504  * Perform any work that needs to be done after sending a message from the
505  * server to the client.
506  */
507 WORK_STATE ossl_statem_server_post_work(SSL *s, WORK_STATE wst)
508 {
509     OSSL_STATEM *st = &s->statem;
510
511     s->init_num = 0;
512
513     switch (st->hand_state) {
514     default:
515         /* No post work to be done */
516         break;
517
518     case TLS_ST_SW_HELLO_REQ:
519         if (statem_flush(s) != 1)
520             return WORK_MORE_A;
521         if (!ssl3_init_finished_mac(s)) {
522             ossl_statem_set_error(s);
523             return WORK_ERROR;
524         }
525         break;
526
527     case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
528         if (statem_flush(s) != 1)
529             return WORK_MORE_A;
530         /* HelloVerifyRequest resets Finished MAC */
531         if (s->version != DTLS1_BAD_VER && !ssl3_init_finished_mac(s)) {
532             ossl_statem_set_error(s);
533             return WORK_ERROR;
534         }
535         /*
536          * The next message should be another ClientHello which we need to
537          * treat like it was the first packet
538          */
539         s->first_packet = 1;
540         break;
541
542     case TLS_ST_SW_SRVR_HELLO:
543 #ifndef OPENSSL_NO_SCTP
544         if (SSL_IS_DTLS(s) && s->hit) {
545             unsigned char sctpauthkey[64];
546             char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
547
548             /*
549              * Add new shared key for SCTP-Auth, will be ignored if no
550              * SCTP used.
551              */
552             memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
553                    sizeof(DTLS1_SCTP_AUTH_LABEL));
554
555             if (SSL_export_keying_material(s, sctpauthkey,
556                                            sizeof(sctpauthkey), labelbuffer,
557                                            sizeof(labelbuffer), NULL, 0,
558                                            0) <= 0) {
559                 ossl_statem_set_error(s);
560                 return WORK_ERROR;
561             }
562
563             BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
564                      sizeof(sctpauthkey), sctpauthkey);
565         }
566 #endif
567         break;
568
569     case TLS_ST_SW_CHANGE:
570 #ifndef OPENSSL_NO_SCTP
571         if (SSL_IS_DTLS(s) && !s->hit) {
572             /*
573              * Change to new shared key of SCTP-Auth, will be ignored if
574              * no SCTP used.
575              */
576             BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
577                      0, NULL);
578         }
579 #endif
580         if (!s->method->ssl3_enc->change_cipher_state(s,
581                                                       SSL3_CHANGE_CIPHER_SERVER_WRITE))
582         {
583             ossl_statem_set_error(s);
584             return WORK_ERROR;
585         }
586
587         if (SSL_IS_DTLS(s))
588             dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
589         break;
590
591     case TLS_ST_SW_SRVR_DONE:
592         if (statem_flush(s) != 1)
593             return WORK_MORE_A;
594         break;
595
596     case TLS_ST_SW_FINISHED:
597         if (statem_flush(s) != 1)
598             return WORK_MORE_A;
599 #ifndef OPENSSL_NO_SCTP
600         if (SSL_IS_DTLS(s) && s->hit) {
601             /*
602              * Change to new shared key of SCTP-Auth, will be ignored if
603              * no SCTP used.
604              */
605             BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
606                      0, NULL);
607         }
608 #endif
609         break;
610     }
611
612     return WORK_FINISHED_CONTINUE;
613 }
614
615 /*
616  * Construct a message to be sent from the server to the client.
617  *
618  * Valid return values are:
619  *   1: Success
620  *   0: Error
621  */
622 int ossl_statem_server_construct_message(SSL *s, WPACKET *pkt)
623 {
624     OSSL_STATEM *st = &s->statem;
625     int (*confunc) (SSL *s, WPACKET *pkt) = NULL;
626     int ret = 1, mt;
627
628     if (st->hand_state == TLS_ST_SW_CHANGE) {
629         /* Special case becase it is a different content type */
630         if (SSL_IS_DTLS(s))
631             return dtls_construct_change_cipher_spec(s, pkt);
632
633         return tls_construct_change_cipher_spec(s, pkt);
634     } else if (st->hand_state == DTLS_ST_SW_HELLO_VERIFY_REQUEST) {
635         /* Special case because we don't call ssl_close_construct_packet() */
636         return dtls_construct_hello_verify_request(s, pkt);
637     } else {
638         switch (st->hand_state) {
639         default:
640             /* Shouldn't happen */
641             return 0;
642
643         case TLS_ST_SW_HELLO_REQ:
644             /* No construction function needed */
645             mt = SSL3_MT_HELLO_REQUEST;
646             break;
647
648         case TLS_ST_SW_SRVR_HELLO:
649             confunc = tls_construct_server_hello;
650             mt = SSL3_MT_SERVER_HELLO;
651             break;
652
653         case TLS_ST_SW_CERT:
654             confunc = tls_construct_server_certificate;
655             mt = SSL3_MT_CERTIFICATE;
656             break;
657
658         case TLS_ST_SW_KEY_EXCH:
659             confunc = tls_construct_server_key_exchange;
660             mt = SSL3_MT_SERVER_KEY_EXCHANGE;
661             break;
662
663         case TLS_ST_SW_CERT_REQ:
664             confunc = tls_construct_certificate_request;
665             mt = SSL3_MT_CERTIFICATE_REQUEST;
666             break;
667
668         case TLS_ST_SW_SRVR_DONE:
669             confunc = tls_construct_server_done;
670             mt = SSL3_MT_SERVER_DONE;
671             break;
672
673         case TLS_ST_SW_SESSION_TICKET:
674             confunc = tls_construct_new_session_ticket;
675             mt = SSL3_MT_NEWSESSION_TICKET;
676             break;
677
678         case TLS_ST_SW_CERT_STATUS:
679             confunc = tls_construct_cert_status;
680             mt = SSL3_MT_CERTIFICATE_STATUS;
681             break;
682
683         case TLS_ST_SW_FINISHED:
684             mt = SSL3_MT_FINISHED;
685             break;
686         }
687
688         if (!ssl_set_handshake_header(s, pkt, mt)) {
689             SSLerr(SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE,
690                    ERR_R_INTERNAL_ERROR);
691             return 0;
692         }
693
694         if (st->hand_state == TLS_ST_SW_FINISHED)
695             ret = tls_construct_finished(s, pkt,
696                                          s->method->
697                                          ssl3_enc->server_finished_label,
698                                          s->method->
699                                          ssl3_enc->server_finished_label_len);
700         else if (confunc != NULL)
701             ret = confunc(s, pkt);
702
703         if (!ret || !ssl_close_construct_packet(s, pkt)) {
704             SSLerr(SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE,
705                    ERR_R_INTERNAL_ERROR);
706             return 0;
707         }
708     }
709     return 1;
710 }
711
712 /*
713  * Maximum size (excluding the Handshake header) of a ClientHello message,
714  * calculated as follows:
715  *
716  *  2 + # client_version
717  *  32 + # only valid length for random
718  *  1 + # length of session_id
719  *  32 + # maximum size for session_id
720  *  2 + # length of cipher suites
721  *  2^16-2 + # maximum length of cipher suites array
722  *  1 + # length of compression_methods
723  *  2^8-1 + # maximum length of compression methods
724  *  2 + # length of extensions
725  *  2^16-1 # maximum length of extensions
726  */
727 #define CLIENT_HELLO_MAX_LENGTH         131396
728
729 #define CLIENT_KEY_EXCH_MAX_LENGTH      2048
730 #define NEXT_PROTO_MAX_LENGTH           514
731
732 /*
733  * Returns the maximum allowed length for the current message that we are
734  * reading. Excludes the message header.
735  */
736 unsigned long ossl_statem_server_max_message_size(SSL *s)
737 {
738     OSSL_STATEM *st = &s->statem;
739
740     switch (st->hand_state) {
741     default:
742         /* Shouldn't happen */
743         return 0;
744
745     case TLS_ST_SR_CLNT_HELLO:
746         return CLIENT_HELLO_MAX_LENGTH;
747
748     case TLS_ST_SR_CERT:
749         return s->max_cert_list;
750
751     case TLS_ST_SR_KEY_EXCH:
752         return CLIENT_KEY_EXCH_MAX_LENGTH;
753
754     case TLS_ST_SR_CERT_VRFY:
755         return SSL3_RT_MAX_PLAIN_LENGTH;
756
757 #ifndef OPENSSL_NO_NEXTPROTONEG
758     case TLS_ST_SR_NEXT_PROTO:
759         return NEXT_PROTO_MAX_LENGTH;
760 #endif
761
762     case TLS_ST_SR_CHANGE:
763         return CCS_MAX_LENGTH;
764
765     case TLS_ST_SR_FINISHED:
766         return FINISHED_MAX_LENGTH;
767     }
768 }
769
770 /*
771  * Process a message that the server has received from the client.
772  */
773 MSG_PROCESS_RETURN ossl_statem_server_process_message(SSL *s, PACKET *pkt)
774 {
775     OSSL_STATEM *st = &s->statem;
776
777     switch (st->hand_state) {
778     default:
779         /* Shouldn't happen */
780         return MSG_PROCESS_ERROR;
781
782     case TLS_ST_SR_CLNT_HELLO:
783         return tls_process_client_hello(s, pkt);
784
785     case TLS_ST_SR_CERT:
786         return tls_process_client_certificate(s, pkt);
787
788     case TLS_ST_SR_KEY_EXCH:
789         return tls_process_client_key_exchange(s, pkt);
790
791     case TLS_ST_SR_CERT_VRFY:
792         return tls_process_cert_verify(s, pkt);
793
794 #ifndef OPENSSL_NO_NEXTPROTONEG
795     case TLS_ST_SR_NEXT_PROTO:
796         return tls_process_next_proto(s, pkt);
797 #endif
798
799     case TLS_ST_SR_CHANGE:
800         return tls_process_change_cipher_spec(s, pkt);
801
802     case TLS_ST_SR_FINISHED:
803         return tls_process_finished(s, pkt);
804     }
805 }
806
807 /*
808  * Perform any further processing required following the receipt of a message
809  * from the client
810  */
811 WORK_STATE ossl_statem_server_post_process_message(SSL *s, WORK_STATE wst)
812 {
813     OSSL_STATEM *st = &s->statem;
814
815     switch (st->hand_state) {
816     default:
817         /* Shouldn't happen */
818         return WORK_ERROR;
819
820     case TLS_ST_SR_CLNT_HELLO:
821         return tls_post_process_client_hello(s, wst);
822
823     case TLS_ST_SR_KEY_EXCH:
824         return tls_post_process_client_key_exchange(s, wst);
825
826     case TLS_ST_SR_CERT_VRFY:
827 #ifndef OPENSSL_NO_SCTP
828         if (                    /* Is this SCTP? */
829                BIO_dgram_is_sctp(SSL_get_wbio(s))
830                /* Are we renegotiating? */
831                && s->renegotiate && BIO_dgram_sctp_msg_waiting(SSL_get_rbio(s))) {
832             s->s3->in_read_app_data = 2;
833             s->rwstate = SSL_READING;
834             BIO_clear_retry_flags(SSL_get_rbio(s));
835             BIO_set_retry_read(SSL_get_rbio(s));
836             ossl_statem_set_sctp_read_sock(s, 1);
837             return WORK_MORE_A;
838         } else {
839             ossl_statem_set_sctp_read_sock(s, 0);
840         }
841 #endif
842         return WORK_FINISHED_CONTINUE;
843     }
844
845 }
846
847 #ifndef OPENSSL_NO_SRP
848 static int ssl_check_srp_ext_ClientHello(SSL *s, int *al)
849 {
850     int ret = SSL_ERROR_NONE;
851
852     *al = SSL_AD_UNRECOGNIZED_NAME;
853
854     if ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) &&
855         (s->srp_ctx.TLS_ext_srp_username_callback != NULL)) {
856         if (s->srp_ctx.login == NULL) {
857             /*
858              * RFC 5054 says SHOULD reject, we do so if There is no srp
859              * login name
860              */
861             ret = SSL3_AL_FATAL;
862             *al = SSL_AD_UNKNOWN_PSK_IDENTITY;
863         } else {
864             ret = SSL_srp_server_param_with_username(s, al);
865         }
866     }
867     return ret;
868 }
869 #endif
870
871 int dtls_raw_hello_verify_request(WPACKET *pkt, unsigned char *cookie,
872                                   unsigned char cookie_len)
873 {
874     /* Always use DTLS 1.0 version: see RFC 6347 */
875     if (!WPACKET_put_bytes_u16(pkt, DTLS1_VERSION)
876             || !WPACKET_sub_memcpy_u8(pkt, cookie, cookie_len))
877         return 0;
878
879     return 1;
880 }
881
882 int dtls_construct_hello_verify_request(SSL *s, WPACKET *pkt)
883 {
884     size_t msglen;
885
886     if (s->ctx->app_gen_cookie_cb == NULL ||
887         s->ctx->app_gen_cookie_cb(s, s->d1->cookie,
888                                   &(s->d1->cookie_len)) == 0 ||
889         s->d1->cookie_len > 255) {
890         SSLerr(SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST,
891                SSL_R_COOKIE_GEN_CALLBACK_FAILURE);
892         return 0;
893     }
894
895     if (!ssl_set_handshake_header(s, pkt,
896                                          DTLS1_MT_HELLO_VERIFY_REQUEST)
897             || !dtls_raw_hello_verify_request(pkt, s->d1->cookie,
898                                               s->d1->cookie_len)
899                /*
900                 * We don't call close_construct_packet() because we don't want
901                 * to buffer this message
902                 */
903             || !WPACKET_close(pkt)
904             || !WPACKET_get_length(pkt, &msglen)
905             || !WPACKET_finish(pkt)) {
906         SSLerr(SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST, ERR_R_INTERNAL_ERROR);
907         return 0;
908     }
909
910     /* number of bytes to write */
911     s->d1->w_msg_hdr.msg_len = msglen - DTLS1_HM_HEADER_LENGTH;
912     s->d1->w_msg_hdr.frag_len = msglen - DTLS1_HM_HEADER_LENGTH;
913     s->init_num = (int)msglen;
914     s->init_off = 0;
915
916     return 1;
917 }
918
919 MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, PACKET *pkt)
920 {
921     int i, al = SSL_AD_INTERNAL_ERROR;
922     unsigned int j, complen = 0;
923     unsigned long id;
924     const SSL_CIPHER *c;
925 #ifndef OPENSSL_NO_COMP
926     SSL_COMP *comp = NULL;
927 #endif
928     STACK_OF(SSL_CIPHER) *ciphers = NULL;
929     int protverr;
930     /* |cookie| will only be initialized for DTLS. */
931     PACKET session_id, cipher_suites, compression, extensions, cookie;
932     int is_v2_record;
933     static const unsigned char null_compression = 0;
934
935     is_v2_record = RECORD_LAYER_is_sslv2_record(&s->rlayer);
936
937     PACKET_null_init(&cookie);
938     /* First lets get s->client_version set correctly */
939     if (is_v2_record) {
940         unsigned int version;
941         unsigned int mt;
942         /*-
943          * An SSLv3/TLSv1 backwards-compatible CLIENT-HELLO in an SSLv2
944          * header is sent directly on the wire, not wrapped as a TLS
945          * record. Our record layer just processes the message length and passes
946          * the rest right through. Its format is:
947          * Byte  Content
948          * 0-1   msg_length - decoded by the record layer
949          * 2     msg_type - s->init_msg points here
950          * 3-4   version
951          * 5-6   cipher_spec_length
952          * 7-8   session_id_length
953          * 9-10  challenge_length
954          * ...   ...
955          */
956
957         if (!PACKET_get_1(pkt, &mt)
958             || mt != SSL2_MT_CLIENT_HELLO) {
959             /*
960              * Should never happen. We should have tested this in the record
961              * layer in order to have determined that this is a SSLv2 record
962              * in the first place
963              */
964             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
965             goto err;
966         }
967
968         if (!PACKET_get_net_2(pkt, &version)) {
969             /* No protocol version supplied! */
970             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_UNKNOWN_PROTOCOL);
971             goto err;
972         }
973         if (version == 0x0002) {
974             /* This is real SSLv2. We don't support it. */
975             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_UNKNOWN_PROTOCOL);
976             goto err;
977         } else if ((version & 0xff00) == (SSL3_VERSION_MAJOR << 8)) {
978             /* SSLv3/TLS */
979             s->client_version = version;
980         } else {
981             /* No idea what protocol this is */
982             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_UNKNOWN_PROTOCOL);
983             goto err;
984         }
985     } else {
986         /*
987          * use version from inside client hello, not from record header (may
988          * differ: see RFC 2246, Appendix E, second paragraph)
989          */
990         if (!PACKET_get_net_2(pkt, (unsigned int *)&s->client_version)) {
991             al = SSL_AD_DECODE_ERROR;
992             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_TOO_SHORT);
993             goto f_err;
994         }
995     }
996
997     /*
998      * Do SSL/TLS version negotiation if applicable. For DTLS we just check
999      * versions are potentially compatible. Version negotiation comes later.
1000      */
1001     if (!SSL_IS_DTLS(s)) {
1002         protverr = ssl_choose_server_version(s);
1003     } else if (s->method->version != DTLS_ANY_VERSION &&
1004                DTLS_VERSION_LT(s->client_version, s->version)) {
1005         protverr = SSL_R_VERSION_TOO_LOW;
1006     } else {
1007         protverr = 0;
1008     }
1009
1010     if (protverr) {
1011         SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, protverr);
1012         if ((!s->enc_write_ctx && !s->write_hash)) {
1013             /*
1014              * similar to ssl3_get_record, send alert using remote version
1015              * number
1016              */
1017             s->version = s->client_version;
1018         }
1019         al = SSL_AD_PROTOCOL_VERSION;
1020         goto f_err;
1021     }
1022
1023     /* Parse the message and load client random. */
1024     if (is_v2_record) {
1025         /*
1026          * Handle an SSLv2 backwards compatible ClientHello
1027          * Note, this is only for SSLv3+ using the backward compatible format.
1028          * Real SSLv2 is not supported, and is rejected above.
1029          */
1030         unsigned int cipher_len, session_id_len, challenge_len;
1031         PACKET challenge;
1032
1033         if (!PACKET_get_net_2(pkt, &cipher_len)
1034             || !PACKET_get_net_2(pkt, &session_id_len)
1035             || !PACKET_get_net_2(pkt, &challenge_len)) {
1036             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1037                    SSL_R_RECORD_LENGTH_MISMATCH);
1038             al = SSL_AD_DECODE_ERROR;
1039             goto f_err;
1040         }
1041
1042         if (session_id_len > SSL_MAX_SSL_SESSION_ID_LENGTH) {
1043             al = SSL_AD_DECODE_ERROR;
1044             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1045             goto f_err;
1046         }
1047
1048         if (!PACKET_get_sub_packet(pkt, &cipher_suites, cipher_len)
1049             || !PACKET_get_sub_packet(pkt, &session_id, session_id_len)
1050             || !PACKET_get_sub_packet(pkt, &challenge, challenge_len)
1051             /* No extensions. */
1052             || PACKET_remaining(pkt) != 0) {
1053             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1054                    SSL_R_RECORD_LENGTH_MISMATCH);
1055             al = SSL_AD_DECODE_ERROR;
1056             goto f_err;
1057         }
1058
1059         /* Load the client random and compression list. */
1060         challenge_len = challenge_len > SSL3_RANDOM_SIZE ? SSL3_RANDOM_SIZE :
1061             challenge_len;
1062         memset(s->s3->client_random, 0, SSL3_RANDOM_SIZE);
1063         if (!PACKET_copy_bytes(&challenge,
1064                                s->s3->client_random + SSL3_RANDOM_SIZE -
1065                                challenge_len, challenge_len)
1066             /* Advertise only null compression. */
1067             || !PACKET_buf_init(&compression, &null_compression, 1)) {
1068             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
1069             al = SSL_AD_INTERNAL_ERROR;
1070             goto f_err;
1071         }
1072
1073         PACKET_null_init(&extensions);
1074     } else {
1075         /* Regular ClientHello. */
1076         if (!PACKET_copy_bytes(pkt, s->s3->client_random, SSL3_RANDOM_SIZE)
1077             || !PACKET_get_length_prefixed_1(pkt, &session_id)) {
1078             al = SSL_AD_DECODE_ERROR;
1079             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1080             goto f_err;
1081         }
1082
1083         if (PACKET_remaining(&session_id) > SSL_MAX_SSL_SESSION_ID_LENGTH) {
1084             al = SSL_AD_DECODE_ERROR;
1085             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1086             goto f_err;
1087         }
1088
1089         if (SSL_IS_DTLS(s)) {
1090             if (!PACKET_get_length_prefixed_1(pkt, &cookie)) {
1091                 al = SSL_AD_DECODE_ERROR;
1092                 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1093                 goto f_err;
1094             }
1095             /*
1096              * If we require cookies and this ClientHello doesn't contain one,
1097              * just return since we do not want to allocate any memory yet.
1098              * So check cookie length...
1099              */
1100             if (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE) {
1101                 if (PACKET_remaining(&cookie) == 0)
1102                     return 1;
1103             }
1104         }
1105
1106         if (!PACKET_get_length_prefixed_2(pkt, &cipher_suites)
1107             || !PACKET_get_length_prefixed_1(pkt, &compression)) {
1108             al = SSL_AD_DECODE_ERROR;
1109             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
1110             goto f_err;
1111         }
1112         /* Could be empty. */
1113         extensions = *pkt;
1114     }
1115
1116     if (SSL_IS_DTLS(s)) {
1117         /* Empty cookie was already handled above by returning early. */
1118         if (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE) {
1119             if (s->ctx->app_verify_cookie_cb != NULL) {
1120                 if (s->ctx->app_verify_cookie_cb(s, PACKET_data(&cookie),
1121                                                  PACKET_remaining(&cookie)) ==
1122                     0) {
1123                     al = SSL_AD_HANDSHAKE_FAILURE;
1124                     SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1125                            SSL_R_COOKIE_MISMATCH);
1126                     goto f_err;
1127                     /* else cookie verification succeeded */
1128                 }
1129                 /* default verification */
1130             } else if (!PACKET_equal(&cookie, s->d1->cookie, s->d1->cookie_len)) {
1131                 al = SSL_AD_HANDSHAKE_FAILURE;
1132                 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_COOKIE_MISMATCH);
1133                 goto f_err;
1134             }
1135             s->d1->cookie_verified = 1;
1136         }
1137         if (s->method->version == DTLS_ANY_VERSION) {
1138             protverr = ssl_choose_server_version(s);
1139             if (protverr != 0) {
1140                 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, protverr);
1141                 s->version = s->client_version;
1142                 al = SSL_AD_PROTOCOL_VERSION;
1143                 goto f_err;
1144             }
1145         }
1146     }
1147
1148     s->hit = 0;
1149
1150     /*
1151      * We don't allow resumption in a backwards compatible ClientHello.
1152      * TODO(openssl-team): in TLS1.1+, session_id MUST be empty.
1153      *
1154      * Versions before 0.9.7 always allow clients to resume sessions in
1155      * renegotiation. 0.9.7 and later allow this by default, but optionally
1156      * ignore resumption requests with flag
1157      * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION (it's a new flag rather
1158      * than a change to default behavior so that applications relying on
1159      * this for security won't even compile against older library versions).
1160      * 1.0.1 and later also have a function SSL_renegotiate_abbreviated() to
1161      * request renegotiation but not a new session (s->new_session remains
1162      * unset): for servers, this essentially just means that the
1163      * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION setting will be
1164      * ignored.
1165      */
1166     if (is_v2_record ||
1167         (s->new_session &&
1168          (s->options & SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION))) {
1169         if (!ssl_get_new_session(s, 1))
1170             goto err;
1171     } else {
1172         i = ssl_get_prev_session(s, &extensions, &session_id);
1173         /*
1174          * Only resume if the session's version matches the negotiated
1175          * version.
1176          * RFC 5246 does not provide much useful advice on resumption
1177          * with a different protocol version. It doesn't forbid it but
1178          * the sanity of such behaviour would be questionable.
1179          * In practice, clients do not accept a version mismatch and
1180          * will abort the handshake with an error.
1181          */
1182         if (i == 1 && s->version == s->session->ssl_version) {
1183             /* previous session */
1184             s->hit = 1;
1185         } else if (i == -1) {
1186             goto err;
1187         } else {
1188             /* i == 0 */
1189             if (!ssl_get_new_session(s, 1))
1190                 goto err;
1191         }
1192     }
1193
1194     if (ssl_bytes_to_cipher_list(s, &cipher_suites, &(ciphers),
1195                                  is_v2_record, &al) == NULL) {
1196         goto f_err;
1197     }
1198
1199     /* If it is a hit, check that the cipher is in the list */
1200     if (s->hit) {
1201         j = 0;
1202         id = s->session->cipher->id;
1203
1204 #ifdef CIPHER_DEBUG
1205         fprintf(stderr, "client sent %d ciphers\n", sk_SSL_CIPHER_num(ciphers));
1206 #endif
1207         for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
1208             c = sk_SSL_CIPHER_value(ciphers, i);
1209 #ifdef CIPHER_DEBUG
1210             fprintf(stderr, "client [%2d of %2d]:%s\n",
1211                     i, sk_SSL_CIPHER_num(ciphers), SSL_CIPHER_get_name(c));
1212 #endif
1213             if (c->id == id) {
1214                 j = 1;
1215                 break;
1216             }
1217         }
1218         if (j == 0) {
1219             /*
1220              * we need to have the cipher in the cipher list if we are asked
1221              * to reuse it
1222              */
1223             al = SSL_AD_ILLEGAL_PARAMETER;
1224             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1225                    SSL_R_REQUIRED_CIPHER_MISSING);
1226             goto f_err;
1227         }
1228     }
1229
1230     complen = PACKET_remaining(&compression);
1231     for (j = 0; j < complen; j++) {
1232         if (PACKET_data(&compression)[j] == 0)
1233             break;
1234     }
1235
1236     if (j >= complen) {
1237         /* no compress */
1238         al = SSL_AD_DECODE_ERROR;
1239         SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_NO_COMPRESSION_SPECIFIED);
1240         goto f_err;
1241     }
1242
1243     /* TLS extensions */
1244     if (s->version >= SSL3_VERSION) {
1245         if (!ssl_parse_clienthello_tlsext(s, &extensions)) {
1246             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_PARSE_TLSEXT);
1247             goto err;
1248         }
1249     }
1250
1251     /*
1252      * Check if we want to use external pre-shared secret for this handshake
1253      * for not reused session only. We need to generate server_random before
1254      * calling tls_session_secret_cb in order to allow SessionTicket
1255      * processing to use it in key derivation.
1256      */
1257     {
1258         unsigned char *pos;
1259         pos = s->s3->server_random;
1260         if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE) <= 0) {
1261             goto f_err;
1262         }
1263     }
1264
1265     if (!s->hit && s->version >= TLS1_VERSION && s->tls_session_secret_cb) {
1266         const SSL_CIPHER *pref_cipher = NULL;
1267
1268         s->session->master_key_length = sizeof(s->session->master_key);
1269         if (s->tls_session_secret_cb(s, s->session->master_key,
1270                                      &s->session->master_key_length, ciphers,
1271                                      &pref_cipher,
1272                                      s->tls_session_secret_cb_arg)) {
1273             s->hit = 1;
1274             s->session->ciphers = ciphers;
1275             s->session->verify_result = X509_V_OK;
1276
1277             ciphers = NULL;
1278
1279             /* check if some cipher was preferred by call back */
1280             pref_cipher =
1281                 pref_cipher ? pref_cipher : ssl3_choose_cipher(s,
1282                                                                s->
1283                                                                session->ciphers,
1284                                                                SSL_get_ciphers
1285                                                                (s));
1286             if (pref_cipher == NULL) {
1287                 al = SSL_AD_HANDSHAKE_FAILURE;
1288                 SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_NO_SHARED_CIPHER);
1289                 goto f_err;
1290             }
1291
1292             s->session->cipher = pref_cipher;
1293             sk_SSL_CIPHER_free(s->cipher_list);
1294             s->cipher_list = sk_SSL_CIPHER_dup(s->session->ciphers);
1295             sk_SSL_CIPHER_free(s->cipher_list_by_id);
1296             s->cipher_list_by_id = sk_SSL_CIPHER_dup(s->session->ciphers);
1297         }
1298     }
1299
1300     /*
1301      * Worst case, we will use the NULL compression, but if we have other
1302      * options, we will now look for them.  We have complen-1 compression
1303      * algorithms from the client, starting at q.
1304      */
1305     s->s3->tmp.new_compression = NULL;
1306 #ifndef OPENSSL_NO_COMP
1307     /* This only happens if we have a cache hit */
1308     if (s->session->compress_meth != 0) {
1309         int m, comp_id = s->session->compress_meth;
1310         unsigned int k;
1311         /* Perform sanity checks on resumed compression algorithm */
1312         /* Can't disable compression */
1313         if (!ssl_allow_compression(s)) {
1314             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1315                    SSL_R_INCONSISTENT_COMPRESSION);
1316             goto f_err;
1317         }
1318         /* Look for resumed compression method */
1319         for (m = 0; m < sk_SSL_COMP_num(s->ctx->comp_methods); m++) {
1320             comp = sk_SSL_COMP_value(s->ctx->comp_methods, m);
1321             if (comp_id == comp->id) {
1322                 s->s3->tmp.new_compression = comp;
1323                 break;
1324             }
1325         }
1326         if (s->s3->tmp.new_compression == NULL) {
1327             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1328                    SSL_R_INVALID_COMPRESSION_ALGORITHM);
1329             goto f_err;
1330         }
1331         /* Look for resumed method in compression list */
1332         for (k = 0; k < complen; k++) {
1333             if (PACKET_data(&compression)[k] == comp_id)
1334                 break;
1335         }
1336         if (k >= complen) {
1337             al = SSL_AD_ILLEGAL_PARAMETER;
1338             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO,
1339                    SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING);
1340             goto f_err;
1341         }
1342     } else if (s->hit)
1343         comp = NULL;
1344     else if (ssl_allow_compression(s) && s->ctx->comp_methods) {
1345         /* See if we have a match */
1346         int m, nn, v, done = 0;
1347         unsigned int o;
1348
1349         nn = sk_SSL_COMP_num(s->ctx->comp_methods);
1350         for (m = 0; m < nn; m++) {
1351             comp = sk_SSL_COMP_value(s->ctx->comp_methods, m);
1352             v = comp->id;
1353             for (o = 0; o < complen; o++) {
1354                 if (v == PACKET_data(&compression)[o]) {
1355                     done = 1;
1356                     break;
1357                 }
1358             }
1359             if (done)
1360                 break;
1361         }
1362         if (done)
1363             s->s3->tmp.new_compression = comp;
1364         else
1365             comp = NULL;
1366     }
1367 #else
1368     /*
1369      * If compression is disabled we'd better not try to resume a session
1370      * using compression.
1371      */
1372     if (s->session->compress_meth != 0) {
1373         SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_INCONSISTENT_COMPRESSION);
1374         goto f_err;
1375     }
1376 #endif
1377
1378     /*
1379      * Given s->session->ciphers and SSL_get_ciphers, we must pick a cipher
1380      */
1381
1382     if (!s->hit) {
1383 #ifdef OPENSSL_NO_COMP
1384         s->session->compress_meth = 0;
1385 #else
1386         s->session->compress_meth = (comp == NULL) ? 0 : comp->id;
1387 #endif
1388         sk_SSL_CIPHER_free(s->session->ciphers);
1389         s->session->ciphers = ciphers;
1390         if (ciphers == NULL) {
1391             al = SSL_AD_INTERNAL_ERROR;
1392             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
1393             goto f_err;
1394         }
1395         ciphers = NULL;
1396         if (!tls1_set_server_sigalgs(s)) {
1397             SSLerr(SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
1398             goto err;
1399         }
1400     }
1401
1402     sk_SSL_CIPHER_free(ciphers);
1403     return MSG_PROCESS_CONTINUE_PROCESSING;
1404  f_err:
1405     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1406  err:
1407     ossl_statem_set_error(s);
1408
1409     sk_SSL_CIPHER_free(ciphers);
1410     return MSG_PROCESS_ERROR;
1411
1412 }
1413
1414 WORK_STATE tls_post_process_client_hello(SSL *s, WORK_STATE wst)
1415 {
1416     int al = SSL_AD_HANDSHAKE_FAILURE;
1417     const SSL_CIPHER *cipher;
1418
1419     if (wst == WORK_MORE_A) {
1420         if (!s->hit) {
1421             /* Let cert callback update server certificates if required */
1422             if (s->cert->cert_cb) {
1423                 int rv = s->cert->cert_cb(s, s->cert->cert_cb_arg);
1424                 if (rv == 0) {
1425                     al = SSL_AD_INTERNAL_ERROR;
1426                     SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
1427                            SSL_R_CERT_CB_ERROR);
1428                     goto f_err;
1429                 }
1430                 if (rv < 0) {
1431                     s->rwstate = SSL_X509_LOOKUP;
1432                     return WORK_MORE_A;
1433                 }
1434                 s->rwstate = SSL_NOTHING;
1435             }
1436             cipher =
1437                 ssl3_choose_cipher(s, s->session->ciphers, SSL_get_ciphers(s));
1438
1439             if (cipher == NULL) {
1440                 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
1441                        SSL_R_NO_SHARED_CIPHER);
1442                 goto f_err;
1443             }
1444             s->s3->tmp.new_cipher = cipher;
1445             /* check whether we should disable session resumption */
1446             if (s->not_resumable_session_cb != NULL)
1447                 s->session->not_resumable = s->not_resumable_session_cb(s,
1448                                                                         ((cipher->algorithm_mkey & (SSL_kDHE | SSL_kECDHE)) != 0));
1449             if (s->session->not_resumable)
1450                 /* do not send a session ticket */
1451                 s->tlsext_ticket_expected = 0;
1452         } else {
1453             /* Session-id reuse */
1454             s->s3->tmp.new_cipher = s->session->cipher;
1455         }
1456
1457         if (!(s->verify_mode & SSL_VERIFY_PEER)) {
1458             if (!ssl3_digest_cached_records(s, 0)) {
1459                 al = SSL_AD_INTERNAL_ERROR;
1460                 goto f_err;
1461             }
1462         }
1463
1464         /*-
1465          * we now have the following setup.
1466          * client_random
1467          * cipher_list          - our preferred list of ciphers
1468          * ciphers              - the clients preferred list of ciphers
1469          * compression          - basically ignored right now
1470          * ssl version is set   - sslv3
1471          * s->session           - The ssl session has been setup.
1472          * s->hit               - session reuse flag
1473          * s->s3->tmp.new_cipher- the new cipher to use.
1474          */
1475
1476         /* Handles TLS extensions that we couldn't check earlier */
1477         if (s->version >= SSL3_VERSION) {
1478             if (!ssl_check_clienthello_tlsext_late(s, &al)) {
1479                 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
1480                        SSL_R_CLIENTHELLO_TLSEXT);
1481                 goto f_err;
1482             }
1483         }
1484
1485         wst = WORK_MORE_B;
1486     }
1487 #ifndef OPENSSL_NO_SRP
1488     if (wst == WORK_MORE_B) {
1489         int ret;
1490         if ((ret = ssl_check_srp_ext_ClientHello(s, &al)) < 0) {
1491             /*
1492              * callback indicates further work to be done
1493              */
1494             s->rwstate = SSL_X509_LOOKUP;
1495             return WORK_MORE_B;
1496         }
1497         if (ret != SSL_ERROR_NONE) {
1498             /*
1499              * This is not really an error but the only means to for
1500              * a client to detect whether srp is supported.
1501              */
1502             if (al != TLS1_AD_UNKNOWN_PSK_IDENTITY)
1503                 SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
1504                        SSL_R_CLIENTHELLO_TLSEXT);
1505             goto f_err;
1506         }
1507     }
1508 #endif
1509     s->renegotiate = 2;
1510
1511     return WORK_FINISHED_STOP;
1512  f_err:
1513     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1514     ossl_statem_set_error(s);
1515     return WORK_ERROR;
1516 }
1517
1518 int tls_construct_server_hello(SSL *s, WPACKET *pkt)
1519 {
1520     int sl, compm, al = SSL_AD_INTERNAL_ERROR;
1521     size_t len;
1522
1523     if (!WPACKET_put_bytes_u16(pkt, s->version)
1524                /*
1525                 * Random stuff. Filling of the server_random takes place in
1526                 * tls_process_client_hello()
1527                 */
1528             || !WPACKET_memcpy(pkt, s->s3->server_random, SSL3_RANDOM_SIZE)) {
1529         SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
1530         goto err;
1531     }
1532
1533     /*-
1534      * There are several cases for the session ID to send
1535      * back in the server hello:
1536      * - For session reuse from the session cache,
1537      *   we send back the old session ID.
1538      * - If stateless session reuse (using a session ticket)
1539      *   is successful, we send back the client's "session ID"
1540      *   (which doesn't actually identify the session).
1541      * - If it is a new session, we send back the new
1542      *   session ID.
1543      * - However, if we want the new session to be single-use,
1544      *   we send back a 0-length session ID.
1545      * s->hit is non-zero in either case of session reuse,
1546      * so the following won't overwrite an ID that we're supposed
1547      * to send back.
1548      */
1549     if (s->session->not_resumable ||
1550         (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER)
1551          && !s->hit))
1552         s->session->session_id_length = 0;
1553
1554     sl = s->session->session_id_length;
1555     if (sl > (int)sizeof(s->session->session_id)) {
1556         SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
1557         goto err;
1558     }
1559
1560     /* set up the compression method */
1561 #ifdef OPENSSL_NO_COMP
1562     compm = 0;
1563 #else
1564     if (s->s3->tmp.new_compression == NULL)
1565         compm = 0;
1566     else
1567         compm = s->s3->tmp.new_compression->id;
1568 #endif
1569
1570     if (!WPACKET_sub_memcpy_u8(pkt, s->session->session_id, sl)
1571             || !s->method->put_cipher_by_char(s->s3->tmp.new_cipher, pkt, &len)
1572             || !WPACKET_put_bytes_u8(pkt, compm)
1573             || !ssl_prepare_serverhello_tlsext(s)
1574             || !ssl_add_serverhello_tlsext(s, pkt, &al)) {
1575         SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
1576         goto err;
1577     }
1578
1579     return 1;
1580  err:
1581     ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1582     return 0;
1583 }
1584
1585 int tls_construct_server_done(SSL *s, WPACKET *pkt)
1586 {
1587     if (!s->s3->tmp.cert_request) {
1588         if (!ssl3_digest_cached_records(s, 0)) {
1589             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1590             return 0;
1591         }
1592     }
1593     return 1;
1594 }
1595
1596 int tls_construct_server_key_exchange(SSL *s, WPACKET *pkt)
1597 {
1598 #ifndef OPENSSL_NO_DH
1599     EVP_PKEY *pkdh = NULL;
1600 #endif
1601 #ifndef OPENSSL_NO_EC
1602     unsigned char *encodedPoint = NULL;
1603     int encodedlen = 0;
1604     int curve_id = 0;
1605 #endif
1606     EVP_PKEY *pkey;
1607     const EVP_MD *md = NULL;
1608     int al = SSL_AD_INTERNAL_ERROR, i;
1609     unsigned long type;
1610     const BIGNUM *r[4];
1611     EVP_MD_CTX *md_ctx = EVP_MD_CTX_new();
1612     size_t paramlen, paramoffset;
1613
1614     if (!WPACKET_get_total_written(pkt, &paramoffset)) {
1615         SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
1616         goto f_err;
1617     }
1618
1619     if (md_ctx == NULL) {
1620         SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE);
1621         goto f_err;
1622     }
1623
1624     type = s->s3->tmp.new_cipher->algorithm_mkey;
1625
1626     r[0] = r[1] = r[2] = r[3] = NULL;
1627 #ifndef OPENSSL_NO_PSK
1628     /* Plain PSK or RSAPSK nothing to do */
1629     if (type & (SSL_kPSK | SSL_kRSAPSK)) {
1630     } else
1631 #endif                          /* !OPENSSL_NO_PSK */
1632 #ifndef OPENSSL_NO_DH
1633     if (type & (SSL_kDHE | SSL_kDHEPSK)) {
1634         CERT *cert = s->cert;
1635
1636         EVP_PKEY *pkdhp = NULL;
1637         DH *dh;
1638
1639         if (s->cert->dh_tmp_auto) {
1640             DH *dhp = ssl_get_auto_dh(s);
1641             pkdh = EVP_PKEY_new();
1642             if (pkdh == NULL || dhp == NULL) {
1643                 DH_free(dhp);
1644                 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1645                        ERR_R_INTERNAL_ERROR);
1646                 goto f_err;
1647             }
1648             EVP_PKEY_assign_DH(pkdh, dhp);
1649             pkdhp = pkdh;
1650         } else {
1651             pkdhp = cert->dh_tmp;
1652         }
1653         if ((pkdhp == NULL) && (s->cert->dh_tmp_cb != NULL)) {
1654             DH *dhp = s->cert->dh_tmp_cb(s, 0, 1024);
1655             pkdh = ssl_dh_to_pkey(dhp);
1656             if (pkdh == NULL) {
1657                 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1658                        ERR_R_INTERNAL_ERROR);
1659                 goto f_err;
1660             }
1661             pkdhp = pkdh;
1662         }
1663         if (pkdhp == NULL) {
1664             al = SSL_AD_HANDSHAKE_FAILURE;
1665             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1666                    SSL_R_MISSING_TMP_DH_KEY);
1667             goto f_err;
1668         }
1669         if (!ssl_security(s, SSL_SECOP_TMP_DH,
1670                           EVP_PKEY_security_bits(pkdhp), 0, pkdhp)) {
1671             al = SSL_AD_HANDSHAKE_FAILURE;
1672             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1673                    SSL_R_DH_KEY_TOO_SMALL);
1674             goto f_err;
1675         }
1676         if (s->s3->tmp.pkey != NULL) {
1677             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1678                    ERR_R_INTERNAL_ERROR);
1679             goto err;
1680         }
1681
1682         s->s3->tmp.pkey = ssl_generate_pkey(pkdhp);
1683
1684         if (s->s3->tmp.pkey == NULL) {
1685             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_EVP_LIB);
1686             goto err;
1687         }
1688
1689         dh = EVP_PKEY_get0_DH(s->s3->tmp.pkey);
1690
1691         EVP_PKEY_free(pkdh);
1692         pkdh = NULL;
1693
1694         DH_get0_pqg(dh, &r[0], NULL, &r[1]);
1695         DH_get0_key(dh, &r[2], NULL);
1696     } else
1697 #endif
1698 #ifndef OPENSSL_NO_EC
1699     if (type & (SSL_kECDHE | SSL_kECDHEPSK)) {
1700         int nid;
1701
1702         if (s->s3->tmp.pkey != NULL) {
1703             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1704                    ERR_R_INTERNAL_ERROR);
1705             goto err;
1706         }
1707
1708         /* Get NID of appropriate shared curve */
1709         nid = tls1_shared_curve(s, -2);
1710         curve_id = tls1_ec_nid2curve_id(nid);
1711         if (curve_id == 0) {
1712             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1713                    SSL_R_UNSUPPORTED_ELLIPTIC_CURVE);
1714             goto err;
1715         }
1716         s->s3->tmp.pkey = ssl_generate_pkey_curve(curve_id);
1717         /* Generate a new key for this curve */
1718         if (s->s3->tmp.pkey == NULL) {
1719             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_EVP_LIB);
1720             goto f_err;
1721         }
1722
1723         /* Encode the public key. */
1724         encodedlen = EVP_PKEY_get1_tls_encodedpoint(s->s3->tmp.pkey,
1725                                                     &encodedPoint);
1726         if (encodedlen == 0) {
1727             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_EC_LIB);
1728             goto err;
1729         }
1730
1731         /*
1732          * We'll generate the serverKeyExchange message explicitly so we
1733          * can set these to NULLs
1734          */
1735         r[0] = NULL;
1736         r[1] = NULL;
1737         r[2] = NULL;
1738         r[3] = NULL;
1739     } else
1740 #endif                          /* !OPENSSL_NO_EC */
1741 #ifndef OPENSSL_NO_SRP
1742     if (type & SSL_kSRP) {
1743         if ((s->srp_ctx.N == NULL) ||
1744             (s->srp_ctx.g == NULL) ||
1745             (s->srp_ctx.s == NULL) || (s->srp_ctx.B == NULL)) {
1746             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1747                    SSL_R_MISSING_SRP_PARAM);
1748             goto err;
1749         }
1750         r[0] = s->srp_ctx.N;
1751         r[1] = s->srp_ctx.g;
1752         r[2] = s->srp_ctx.s;
1753         r[3] = s->srp_ctx.B;
1754     } else
1755 #endif
1756     {
1757         al = SSL_AD_HANDSHAKE_FAILURE;
1758         SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1759                SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
1760         goto f_err;
1761     }
1762
1763     if (!(s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
1764         && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_PSK)) {
1765         if ((pkey = ssl_get_sign_pkey(s, s->s3->tmp.new_cipher, &md))
1766             == NULL) {
1767             al = SSL_AD_DECODE_ERROR;
1768             goto f_err;
1769         }
1770     } else {
1771         pkey = NULL;
1772     }
1773
1774 #ifndef OPENSSL_NO_PSK
1775     if (type & SSL_PSK) {
1776         size_t len = (s->cert->psk_identity_hint == NULL)
1777                         ? 0 : strlen(s->cert->psk_identity_hint);
1778
1779         /*
1780          * It should not happen that len > PSK_MAX_IDENTITY_LEN - we already
1781          * checked this when we set the identity hint - but just in case
1782          */
1783         if (len > PSK_MAX_IDENTITY_LEN
1784                 || !WPACKET_sub_memcpy_u16(pkt, s->cert->psk_identity_hint,
1785                                            len)) {
1786             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1787                    ERR_R_INTERNAL_ERROR);
1788             goto f_err;
1789         }
1790     }
1791 #endif
1792
1793     for (i = 0; i < 4 && r[i] != NULL; i++) {
1794         unsigned char *binval;
1795         int res;
1796
1797 #ifndef OPENSSL_NO_SRP
1798         if ((i == 2) && (type & SSL_kSRP)) {
1799             res = WPACKET_start_sub_packet_u8(pkt);
1800         } else
1801 #endif
1802             res = WPACKET_start_sub_packet_u16(pkt);
1803
1804         if (!res) {
1805             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1806                    ERR_R_INTERNAL_ERROR);
1807             goto f_err;
1808         }
1809
1810 #ifndef OPENSSL_NO_DH
1811         /*-
1812          * for interoperability with some versions of the Microsoft TLS
1813          * stack, we need to zero pad the DHE pub key to the same length
1814          * as the prime
1815          */
1816         if ((i == 2) && (type & (SSL_kDHE | SSL_kDHEPSK))) {
1817             size_t len = BN_num_bytes(r[0]) - BN_num_bytes(r[2]);
1818
1819             if (len > 0) {
1820                 if (!WPACKET_allocate_bytes(pkt, len, &binval)) {
1821                     SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1822                            ERR_R_INTERNAL_ERROR);
1823                     goto f_err;
1824                 }
1825                 memset(binval, 0, len);
1826             }
1827         }
1828 #endif
1829         if (!WPACKET_allocate_bytes(pkt, BN_num_bytes(r[i]), &binval)
1830                 || !WPACKET_close(pkt)) {
1831             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1832                    ERR_R_INTERNAL_ERROR);
1833             goto f_err;
1834         }
1835
1836         BN_bn2bin(r[i], binval);
1837     }
1838
1839 #ifndef OPENSSL_NO_EC
1840     if (type & (SSL_kECDHE | SSL_kECDHEPSK)) {
1841         /*
1842          * We only support named (not generic) curves. In this situation, the
1843          * ServerKeyExchange message has: [1 byte CurveType], [2 byte CurveName]
1844          * [1 byte length of encoded point], followed by the actual encoded
1845          * point itself
1846          */
1847         if (!WPACKET_put_bytes_u8(pkt, NAMED_CURVE_TYPE)
1848                 || !WPACKET_put_bytes_u8(pkt, 0)
1849                 || !WPACKET_put_bytes_u8(pkt, curve_id)
1850                 || !WPACKET_sub_memcpy_u8(pkt, encodedPoint, encodedlen)) {
1851             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1852                    ERR_R_INTERNAL_ERROR);
1853             goto f_err;
1854         }
1855         OPENSSL_free(encodedPoint);
1856         encodedPoint = NULL;
1857     }
1858 #endif
1859
1860     /* not anonymous */
1861     if (pkey != NULL) {
1862         /*
1863          * n is the length of the params, they start at &(d[4]) and p
1864          * points to the space at the end.
1865          */
1866         if (md) {
1867             unsigned char *sigbytes1, *sigbytes2;
1868             unsigned int siglen;
1869
1870             /* Get length of the parameters we have written above */
1871             if (!WPACKET_get_length(pkt, &paramlen)) {
1872                 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1873                        ERR_R_INTERNAL_ERROR);
1874                 goto f_err;
1875             }
1876             /* send signature algorithm */
1877             if (SSL_USE_SIGALGS(s)) {
1878                 if (!tls12_get_sigandhash(pkt, pkey, md)) {
1879                     /* Should never happen */
1880                     SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1881                            ERR_R_INTERNAL_ERROR);
1882                     goto f_err;
1883                 }
1884             }
1885 #ifdef SSL_DEBUG
1886             fprintf(stderr, "Using hash %s\n", EVP_MD_name(md));
1887 #endif
1888             /*
1889              * Create the signature. We don't know the actual length of the sig
1890              * until after we've created it, so we reserve enough bytes for it
1891              * up front, and then properly allocate them in the WPACKET
1892              * afterwards.
1893              */
1894             if (!WPACKET_sub_reserve_bytes_u16(pkt, EVP_PKEY_size(pkey),
1895                                                &sigbytes1)
1896                     || EVP_SignInit_ex(md_ctx, md, NULL) <= 0
1897                     || EVP_SignUpdate(md_ctx, &(s->s3->client_random[0]),
1898                                       SSL3_RANDOM_SIZE) <= 0
1899                     || EVP_SignUpdate(md_ctx, &(s->s3->server_random[0]),
1900                                       SSL3_RANDOM_SIZE) <= 0
1901                     || EVP_SignUpdate(md_ctx, s->init_buf->data + paramoffset,
1902                                       paramlen) <= 0
1903                     || EVP_SignFinal(md_ctx, sigbytes1, &siglen, pkey) <= 0
1904                     || !WPACKET_sub_allocate_bytes_u16(pkt, siglen, &sigbytes2)
1905                     || sigbytes1 != sigbytes2) {
1906                 SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1907                        ERR_R_INTERNAL_ERROR);
1908                 goto f_err;
1909             }
1910         } else {
1911             /* Is this error check actually needed? */
1912             al = SSL_AD_HANDSHAKE_FAILURE;
1913             SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
1914                    SSL_R_UNKNOWN_PKEY_TYPE);
1915             goto f_err;
1916         }
1917     }
1918
1919     EVP_MD_CTX_free(md_ctx);
1920     return 1;
1921  f_err:
1922     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1923  err:
1924 #ifndef OPENSSL_NO_DH
1925     EVP_PKEY_free(pkdh);
1926 #endif
1927 #ifndef OPENSSL_NO_EC
1928     OPENSSL_free(encodedPoint);
1929 #endif
1930     EVP_MD_CTX_free(md_ctx);
1931     return 0;
1932 }
1933
1934 int tls_construct_certificate_request(SSL *s, WPACKET *pkt)
1935 {
1936     int i, nl;
1937     STACK_OF(X509_NAME) *sk = NULL;
1938
1939     /* get the list of acceptable cert types */
1940     if (!WPACKET_start_sub_packet_u8(pkt)
1941             || !ssl3_get_req_cert_type(s, pkt)
1942             || !WPACKET_close(pkt)) {
1943         SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, ERR_R_INTERNAL_ERROR);
1944         goto err;
1945     }
1946
1947     if (SSL_USE_SIGALGS(s)) {
1948         const unsigned char *psigs;
1949         nl = tls12_get_psigalgs(s, &psigs);
1950         if (!WPACKET_start_sub_packet_u16(pkt)
1951                 || !tls12_copy_sigalgs(s, pkt, psigs, nl)
1952                 || !WPACKET_close(pkt)) {
1953             SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST,
1954                    ERR_R_INTERNAL_ERROR);
1955             goto err;
1956         }
1957     }
1958
1959     /* Start sub-packet for client CA list */
1960     if (!WPACKET_start_sub_packet_u16(pkt)) {
1961         SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, ERR_R_INTERNAL_ERROR);
1962         goto err;
1963     }
1964
1965     sk = SSL_get_client_CA_list(s);
1966     if (sk != NULL) {
1967         for (i = 0; i < sk_X509_NAME_num(sk); i++) {
1968             unsigned char *namebytes;
1969             X509_NAME *name = sk_X509_NAME_value(sk, i);
1970             int namelen;
1971
1972             if (name == NULL
1973                     || (namelen = i2d_X509_NAME(name, NULL)) < 0
1974                     || !WPACKET_sub_allocate_bytes_u16(pkt, namelen,
1975                                                        &namebytes)
1976                     || i2d_X509_NAME(name, &namebytes) != namelen) {
1977                 SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST,
1978                        ERR_R_INTERNAL_ERROR);
1979                 goto err;
1980             }
1981         }
1982     }
1983     /* else no CA names */
1984
1985     if (!WPACKET_close(pkt)) {
1986         SSLerr(SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, ERR_R_INTERNAL_ERROR);
1987         goto err;
1988     }
1989
1990     s->s3->tmp.cert_request = 1;
1991
1992     return 1;
1993  err:
1994     ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1995     return 0;
1996 }
1997
1998 static int tls_process_cke_psk_preamble(SSL *s, PACKET *pkt, int *al)
1999 {
2000 #ifndef OPENSSL_NO_PSK
2001     unsigned char psk[PSK_MAX_PSK_LEN];
2002     size_t psklen;
2003     PACKET psk_identity;
2004
2005     if (!PACKET_get_length_prefixed_2(pkt, &psk_identity)) {
2006         *al = SSL_AD_DECODE_ERROR;
2007         SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, SSL_R_LENGTH_MISMATCH);
2008         return 0;
2009     }
2010     if (PACKET_remaining(&psk_identity) > PSK_MAX_IDENTITY_LEN) {
2011         *al = SSL_AD_DECODE_ERROR;
2012         SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, SSL_R_DATA_LENGTH_TOO_LONG);
2013         return 0;
2014     }
2015     if (s->psk_server_callback == NULL) {
2016         *al = SSL_AD_INTERNAL_ERROR;
2017         SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, SSL_R_PSK_NO_SERVER_CB);
2018         return 0;
2019     }
2020
2021     if (!PACKET_strndup(&psk_identity, &s->session->psk_identity)) {
2022         *al = SSL_AD_INTERNAL_ERROR;
2023         SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
2024         return 0;
2025     }
2026
2027     psklen = s->psk_server_callback(s, s->session->psk_identity,
2028                                     psk, sizeof(psk));
2029
2030     if (psklen > PSK_MAX_PSK_LEN) {
2031         *al = SSL_AD_INTERNAL_ERROR;
2032         SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
2033         return 0;
2034     } else if (psklen == 0) {
2035         /*
2036          * PSK related to the given identity not found
2037          */
2038         *al = SSL_AD_UNKNOWN_PSK_IDENTITY;
2039         SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
2040                SSL_R_PSK_IDENTITY_NOT_FOUND);
2041         return 0;
2042     }
2043
2044     OPENSSL_free(s->s3->tmp.psk);
2045     s->s3->tmp.psk = OPENSSL_memdup(psk, psklen);
2046     OPENSSL_cleanse(psk, psklen);
2047
2048     if (s->s3->tmp.psk == NULL) {
2049         *al = SSL_AD_INTERNAL_ERROR;
2050         SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_MALLOC_FAILURE);
2051         return 0;
2052     }
2053
2054     s->s3->tmp.psklen = psklen;
2055
2056     return 1;
2057 #else
2058     /* Should never happen */
2059     *al = SSL_AD_INTERNAL_ERROR;
2060     SSLerr(SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR);
2061     return 0;
2062 #endif
2063 }
2064
2065 static int tls_process_cke_rsa(SSL *s, PACKET *pkt, int *al)
2066 {
2067 #ifndef OPENSSL_NO_RSA
2068     unsigned char rand_premaster_secret[SSL_MAX_MASTER_KEY_LENGTH];
2069     int decrypt_len;
2070     unsigned char decrypt_good, version_good;
2071     size_t j, padding_len;
2072     PACKET enc_premaster;
2073     RSA *rsa = NULL;
2074     unsigned char *rsa_decrypt = NULL;
2075     int ret = 0;
2076
2077     rsa = EVP_PKEY_get0_RSA(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey);
2078     if (rsa == NULL) {
2079         *al = SSL_AD_HANDSHAKE_FAILURE;
2080         SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, SSL_R_MISSING_RSA_CERTIFICATE);
2081         return 0;
2082     }
2083
2084     /* SSLv3 and pre-standard DTLS omit the length bytes. */
2085     if (s->version == SSL3_VERSION || s->version == DTLS1_BAD_VER) {
2086         enc_premaster = *pkt;
2087     } else {
2088         if (!PACKET_get_length_prefixed_2(pkt, &enc_premaster)
2089             || PACKET_remaining(pkt) != 0) {
2090             *al = SSL_AD_DECODE_ERROR;
2091             SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, SSL_R_LENGTH_MISMATCH);
2092             return 0;
2093         }
2094     }
2095
2096     /*
2097      * We want to be sure that the plaintext buffer size makes it safe to
2098      * iterate over the entire size of a premaster secret
2099      * (SSL_MAX_MASTER_KEY_LENGTH). Reject overly short RSA keys because
2100      * their ciphertext cannot accommodate a premaster secret anyway.
2101      */
2102     if (RSA_size(rsa) < SSL_MAX_MASTER_KEY_LENGTH) {
2103         *al = SSL_AD_INTERNAL_ERROR;
2104         SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, RSA_R_KEY_SIZE_TOO_SMALL);
2105         return 0;
2106     }
2107
2108     rsa_decrypt = OPENSSL_malloc(RSA_size(rsa));
2109     if (rsa_decrypt == NULL) {
2110         *al = SSL_AD_INTERNAL_ERROR;
2111         SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, ERR_R_MALLOC_FAILURE);
2112         return 0;
2113     }
2114
2115     /*
2116      * We must not leak whether a decryption failure occurs because of
2117      * Bleichenbacher's attack on PKCS #1 v1.5 RSA padding (see RFC 2246,
2118      * section 7.4.7.1). The code follows that advice of the TLS RFC and
2119      * generates a random premaster secret for the case that the decrypt
2120      * fails. See https://tools.ietf.org/html/rfc5246#section-7.4.7.1
2121      */
2122
2123     if (RAND_bytes(rand_premaster_secret, sizeof(rand_premaster_secret)) <= 0)
2124         goto err;
2125
2126     /*
2127      * Decrypt with no padding. PKCS#1 padding will be removed as part of
2128      * the timing-sensitive code below.
2129      */
2130     decrypt_len = RSA_private_decrypt(PACKET_remaining(&enc_premaster),
2131                                       PACKET_data(&enc_premaster),
2132                                       rsa_decrypt, rsa, RSA_NO_PADDING);
2133     if (decrypt_len < 0)
2134         goto err;
2135
2136     /* Check the padding. See RFC 3447, section 7.2.2. */
2137
2138     /*
2139      * The smallest padded premaster is 11 bytes of overhead. Small keys
2140      * are publicly invalid, so this may return immediately. This ensures
2141      * PS is at least 8 bytes.
2142      */
2143     if (decrypt_len < 11 + SSL_MAX_MASTER_KEY_LENGTH) {
2144         *al = SSL_AD_DECRYPT_ERROR;
2145         SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, SSL_R_DECRYPTION_FAILED);
2146         goto err;
2147     }
2148
2149     padding_len = decrypt_len - SSL_MAX_MASTER_KEY_LENGTH;
2150     decrypt_good = constant_time_eq_int_8(rsa_decrypt[0], 0) &
2151         constant_time_eq_int_8(rsa_decrypt[1], 2);
2152     for (j = 2; j < padding_len - 1; j++) {
2153         decrypt_good &= ~constant_time_is_zero_8(rsa_decrypt[j]);
2154     }
2155     decrypt_good &= constant_time_is_zero_8(rsa_decrypt[padding_len - 1]);
2156
2157     /*
2158      * If the version in the decrypted pre-master secret is correct then
2159      * version_good will be 0xff, otherwise it'll be zero. The
2160      * Klima-Pokorny-Rosa extension of Bleichenbacher's attack
2161      * (http://eprint.iacr.org/2003/052/) exploits the version number
2162      * check as a "bad version oracle". Thus version checks are done in
2163      * constant time and are treated like any other decryption error.
2164      */
2165     version_good =
2166         constant_time_eq_8(rsa_decrypt[padding_len],
2167                            (unsigned)(s->client_version >> 8));
2168     version_good &=
2169         constant_time_eq_8(rsa_decrypt[padding_len + 1],
2170                            (unsigned)(s->client_version & 0xff));
2171
2172     /*
2173      * The premaster secret must contain the same version number as the
2174      * ClientHello to detect version rollback attacks (strangely, the
2175      * protocol does not offer such protection for DH ciphersuites).
2176      * However, buggy clients exist that send the negotiated protocol
2177      * version instead if the server does not support the requested
2178      * protocol version. If SSL_OP_TLS_ROLLBACK_BUG is set, tolerate such
2179      * clients.
2180      */
2181     if (s->options & SSL_OP_TLS_ROLLBACK_BUG) {
2182         unsigned char workaround_good;
2183         workaround_good = constant_time_eq_8(rsa_decrypt[padding_len],
2184                                              (unsigned)(s->version >> 8));
2185         workaround_good &=
2186             constant_time_eq_8(rsa_decrypt[padding_len + 1],
2187                                (unsigned)(s->version & 0xff));
2188         version_good |= workaround_good;
2189     }
2190
2191     /*
2192      * Both decryption and version must be good for decrypt_good to
2193      * remain non-zero (0xff).
2194      */
2195     decrypt_good &= version_good;
2196
2197     /*
2198      * Now copy rand_premaster_secret over from p using
2199      * decrypt_good_mask. If decryption failed, then p does not
2200      * contain valid plaintext, however, a check above guarantees
2201      * it is still sufficiently large to read from.
2202      */
2203     for (j = 0; j < sizeof(rand_premaster_secret); j++) {
2204         rsa_decrypt[padding_len + j] =
2205             constant_time_select_8(decrypt_good,
2206                                    rsa_decrypt[padding_len + j],
2207                                    rand_premaster_secret[j]);
2208     }
2209
2210     if (!ssl_generate_master_secret(s, rsa_decrypt + padding_len,
2211                                     sizeof(rand_premaster_secret), 0)) {
2212         *al = SSL_AD_INTERNAL_ERROR;
2213         SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, ERR_R_INTERNAL_ERROR);
2214         goto err;
2215     }
2216
2217     ret = 1;
2218  err:
2219     OPENSSL_free(rsa_decrypt);
2220     return ret;
2221 #else
2222     /* Should never happen */
2223     *al = SSL_AD_INTERNAL_ERROR;
2224     SSLerr(SSL_F_TLS_PROCESS_CKE_RSA, ERR_R_INTERNAL_ERROR);
2225     return 0;
2226 #endif
2227 }
2228
2229 static int tls_process_cke_dhe(SSL *s, PACKET *pkt, int *al)
2230 {
2231 #ifndef OPENSSL_NO_DH
2232     EVP_PKEY *skey = NULL;
2233     DH *cdh;
2234     unsigned int i;
2235     BIGNUM *pub_key;
2236     const unsigned char *data;
2237     EVP_PKEY *ckey = NULL;
2238     int ret = 0;
2239
2240     if (!PACKET_get_net_2(pkt, &i) || PACKET_remaining(pkt) != i) {
2241         *al = SSL_AD_HANDSHAKE_FAILURE;
2242         SSLerr(SSL_F_TLS_PROCESS_CKE_DHE,
2243                SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG);
2244         goto err;
2245     }
2246     skey = s->s3->tmp.pkey;
2247     if (skey == NULL) {
2248         *al = SSL_AD_HANDSHAKE_FAILURE;
2249         SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, SSL_R_MISSING_TMP_DH_KEY);
2250         goto err;
2251     }
2252
2253     if (PACKET_remaining(pkt) == 0L) {
2254         *al = SSL_AD_HANDSHAKE_FAILURE;
2255         SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, SSL_R_MISSING_TMP_DH_KEY);
2256         goto err;
2257     }
2258     if (!PACKET_get_bytes(pkt, &data, i)) {
2259         /* We already checked we have enough data */
2260         *al = SSL_AD_INTERNAL_ERROR;
2261         SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, ERR_R_INTERNAL_ERROR);
2262         goto err;
2263     }
2264     ckey = EVP_PKEY_new();
2265     if (ckey == NULL || EVP_PKEY_copy_parameters(ckey, skey) == 0) {
2266         SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, SSL_R_BN_LIB);
2267         goto err;
2268     }
2269     cdh = EVP_PKEY_get0_DH(ckey);
2270     pub_key = BN_bin2bn(data, i, NULL);
2271
2272     if (pub_key == NULL || !DH_set0_key(cdh, pub_key, NULL)) {
2273         SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, ERR_R_INTERNAL_ERROR);
2274         if (pub_key != NULL)
2275             BN_free(pub_key);
2276         goto err;
2277     }
2278
2279     if (ssl_derive(s, skey, ckey) == 0) {
2280         *al = SSL_AD_INTERNAL_ERROR;
2281         SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, ERR_R_INTERNAL_ERROR);
2282         goto err;
2283     }
2284
2285     ret = 1;
2286     EVP_PKEY_free(s->s3->tmp.pkey);
2287     s->s3->tmp.pkey = NULL;
2288  err:
2289     EVP_PKEY_free(ckey);
2290     return ret;
2291 #else
2292     /* Should never happen */
2293     *al = SSL_AD_INTERNAL_ERROR;
2294     SSLerr(SSL_F_TLS_PROCESS_CKE_DHE, ERR_R_INTERNAL_ERROR);
2295     return 0;
2296 #endif
2297 }
2298
2299 static int tls_process_cke_ecdhe(SSL *s, PACKET *pkt, int *al)
2300 {
2301 #ifndef OPENSSL_NO_EC
2302     EVP_PKEY *skey = s->s3->tmp.pkey;
2303     EVP_PKEY *ckey = NULL;
2304     int ret = 0;
2305
2306     if (PACKET_remaining(pkt) == 0L) {
2307         /* We don't support ECDH client auth */
2308         *al = SSL_AD_HANDSHAKE_FAILURE;
2309         SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, SSL_R_MISSING_TMP_ECDH_KEY);
2310         goto err;
2311     } else {
2312         unsigned int i;
2313         const unsigned char *data;
2314
2315         /*
2316          * Get client's public key from encoded point in the
2317          * ClientKeyExchange message.
2318          */
2319
2320         /* Get encoded point length */
2321         if (!PACKET_get_1(pkt, &i) || !PACKET_get_bytes(pkt, &data, i)
2322             || PACKET_remaining(pkt) != 0) {
2323             *al = SSL_AD_DECODE_ERROR;
2324             SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, SSL_R_LENGTH_MISMATCH);
2325             goto err;
2326         }
2327         ckey = EVP_PKEY_new();
2328         if (ckey == NULL || EVP_PKEY_copy_parameters(ckey, skey) <= 0) {
2329             SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, ERR_R_EVP_LIB);
2330             goto err;
2331         }
2332         if (EVP_PKEY_set1_tls_encodedpoint(ckey, data, i) == 0) {
2333             *al = SSL_AD_HANDSHAKE_FAILURE;
2334             SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, ERR_R_EC_LIB);
2335             goto err;
2336         }
2337     }
2338
2339     if (ssl_derive(s, skey, ckey) == 0) {
2340         *al = SSL_AD_INTERNAL_ERROR;
2341         SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, ERR_R_INTERNAL_ERROR);
2342         goto err;
2343     }
2344
2345     ret = 1;
2346     EVP_PKEY_free(s->s3->tmp.pkey);
2347     s->s3->tmp.pkey = NULL;
2348  err:
2349     EVP_PKEY_free(ckey);
2350
2351     return ret;
2352 #else
2353     /* Should never happen */
2354     *al = SSL_AD_INTERNAL_ERROR;
2355     SSLerr(SSL_F_TLS_PROCESS_CKE_ECDHE, ERR_R_INTERNAL_ERROR);
2356     return 0;
2357 #endif
2358 }
2359
2360 static int tls_process_cke_srp(SSL *s, PACKET *pkt, int *al)
2361 {
2362 #ifndef OPENSSL_NO_SRP
2363     unsigned int i;
2364     const unsigned char *data;
2365
2366     if (!PACKET_get_net_2(pkt, &i)
2367         || !PACKET_get_bytes(pkt, &data, i)) {
2368         *al = SSL_AD_DECODE_ERROR;
2369         SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, SSL_R_BAD_SRP_A_LENGTH);
2370         return 0;
2371     }
2372     if ((s->srp_ctx.A = BN_bin2bn(data, i, NULL)) == NULL) {
2373         SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, ERR_R_BN_LIB);
2374         return 0;
2375     }
2376     if (BN_ucmp(s->srp_ctx.A, s->srp_ctx.N) >= 0 || BN_is_zero(s->srp_ctx.A)) {
2377         *al = SSL_AD_ILLEGAL_PARAMETER;
2378         SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, SSL_R_BAD_SRP_PARAMETERS);
2379         return 0;
2380     }
2381     OPENSSL_free(s->session->srp_username);
2382     s->session->srp_username = OPENSSL_strdup(s->srp_ctx.login);
2383     if (s->session->srp_username == NULL) {
2384         SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, ERR_R_MALLOC_FAILURE);
2385         return 0;
2386     }
2387
2388     if (!srp_generate_server_master_secret(s)) {
2389         SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, ERR_R_INTERNAL_ERROR);
2390         return 0;
2391     }
2392
2393     return 1;
2394 #else
2395     /* Should never happen */
2396     *al = SSL_AD_INTERNAL_ERROR;
2397     SSLerr(SSL_F_TLS_PROCESS_CKE_SRP, ERR_R_INTERNAL_ERROR);
2398     return 0;
2399 #endif
2400 }
2401
2402 static int tls_process_cke_gost(SSL *s, PACKET *pkt, int *al)
2403 {
2404 #ifndef OPENSSL_NO_GOST
2405     EVP_PKEY_CTX *pkey_ctx;
2406     EVP_PKEY *client_pub_pkey = NULL, *pk = NULL;
2407     unsigned char premaster_secret[32];
2408     const unsigned char *start;
2409     size_t outlen = 32, inlen;
2410     unsigned long alg_a;
2411     int Ttag, Tclass;
2412     long Tlen;
2413     long sess_key_len;
2414     const unsigned char *data;
2415     int ret = 0;
2416
2417     /* Get our certificate private key */
2418     alg_a = s->s3->tmp.new_cipher->algorithm_auth;
2419     if (alg_a & SSL_aGOST12) {
2420         /*
2421          * New GOST ciphersuites have SSL_aGOST01 bit too
2422          */
2423         pk = s->cert->pkeys[SSL_PKEY_GOST12_512].privatekey;
2424         if (pk == NULL) {
2425             pk = s->cert->pkeys[SSL_PKEY_GOST12_256].privatekey;
2426         }
2427         if (pk == NULL) {
2428             pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey;
2429         }
2430     } else if (alg_a & SSL_aGOST01) {
2431         pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey;
2432     }
2433
2434     pkey_ctx = EVP_PKEY_CTX_new(pk, NULL);
2435     if (pkey_ctx == NULL) {
2436         *al = SSL_AD_INTERNAL_ERROR;
2437         SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_MALLOC_FAILURE);
2438         return 0;
2439     }
2440     if (EVP_PKEY_decrypt_init(pkey_ctx) <= 0) {
2441         *al = SSL_AD_INTERNAL_ERROR;
2442         SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_INTERNAL_ERROR);
2443         return 0;
2444     }
2445     /*
2446      * If client certificate is present and is of the same type, maybe
2447      * use it for key exchange.  Don't mind errors from
2448      * EVP_PKEY_derive_set_peer, because it is completely valid to use a
2449      * client certificate for authorization only.
2450      */
2451     client_pub_pkey = X509_get0_pubkey(s->session->peer);
2452     if (client_pub_pkey) {
2453         if (EVP_PKEY_derive_set_peer(pkey_ctx, client_pub_pkey) <= 0)
2454             ERR_clear_error();
2455     }
2456     /* Decrypt session key */
2457     sess_key_len = PACKET_remaining(pkt);
2458     if (!PACKET_get_bytes(pkt, &data, sess_key_len)) {
2459         *al = SSL_AD_INTERNAL_ERROR;
2460         SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_INTERNAL_ERROR);
2461         goto err;
2462     }
2463     if (ASN1_get_object((const unsigned char **)&data, &Tlen, &Ttag,
2464                         &Tclass, sess_key_len) != V_ASN1_CONSTRUCTED
2465         || Ttag != V_ASN1_SEQUENCE || Tclass != V_ASN1_UNIVERSAL) {
2466         *al = SSL_AD_DECODE_ERROR;
2467         SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, SSL_R_DECRYPTION_FAILED);
2468         goto err;
2469     }
2470     start = data;
2471     inlen = Tlen;
2472     if (EVP_PKEY_decrypt
2473         (pkey_ctx, premaster_secret, &outlen, start, inlen) <= 0) {
2474         *al = SSL_AD_DECODE_ERROR;
2475         SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, SSL_R_DECRYPTION_FAILED);
2476         goto err;
2477     }
2478     /* Generate master secret */
2479     if (!ssl_generate_master_secret(s, premaster_secret,
2480                                     sizeof(premaster_secret), 0)) {
2481         *al = SSL_AD_INTERNAL_ERROR;
2482         SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_INTERNAL_ERROR);
2483         goto err;
2484     }
2485     /* Check if pubkey from client certificate was used */
2486     if (EVP_PKEY_CTX_ctrl
2487         (pkey_ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 2, NULL) > 0)
2488         s->statem.no_cert_verify = 1;
2489
2490     ret = 1;
2491  err:
2492     EVP_PKEY_CTX_free(pkey_ctx);
2493     return ret;
2494 #else
2495     /* Should never happen */
2496     *al = SSL_AD_INTERNAL_ERROR;
2497     SSLerr(SSL_F_TLS_PROCESS_CKE_GOST, ERR_R_INTERNAL_ERROR);
2498     return 0;
2499 #endif
2500 }
2501
2502 MSG_PROCESS_RETURN tls_process_client_key_exchange(SSL *s, PACKET *pkt)
2503 {
2504     int al = -1;
2505     unsigned long alg_k;
2506
2507     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2508
2509     /* For PSK parse and retrieve identity, obtain PSK key */
2510     if ((alg_k & SSL_PSK) && !tls_process_cke_psk_preamble(s, pkt, &al))
2511         goto err;
2512
2513     if (alg_k & SSL_kPSK) {
2514         /* Identity extracted earlier: should be nothing left */
2515         if (PACKET_remaining(pkt) != 0) {
2516             al = SSL_AD_HANDSHAKE_FAILURE;
2517             SSLerr(SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE,
2518                    SSL_R_LENGTH_MISMATCH);
2519             goto err;
2520         }
2521         /* PSK handled by ssl_generate_master_secret */
2522         if (!ssl_generate_master_secret(s, NULL, 0, 0)) {
2523             al = SSL_AD_INTERNAL_ERROR;
2524             SSLerr(SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
2525             goto err;
2526         }
2527     } else if (alg_k & (SSL_kRSA | SSL_kRSAPSK)) {
2528         if (!tls_process_cke_rsa(s, pkt, &al))
2529             goto err;
2530     } else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
2531         if (!tls_process_cke_dhe(s, pkt, &al))
2532             goto err;
2533     } else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
2534         if (!tls_process_cke_ecdhe(s, pkt, &al))
2535             goto err;
2536     } else if (alg_k & SSL_kSRP) {
2537         if (!tls_process_cke_srp(s, pkt, &al))
2538             goto err;
2539     } else if (alg_k & SSL_kGOST) {
2540         if (!tls_process_cke_gost(s, pkt, &al))
2541             goto err;
2542     } else {
2543         al = SSL_AD_HANDSHAKE_FAILURE;
2544         SSLerr(SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE,
2545                SSL_R_UNKNOWN_CIPHER_TYPE);
2546         goto err;
2547     }
2548
2549     return MSG_PROCESS_CONTINUE_PROCESSING;
2550  err:
2551     if (al != -1)
2552         ssl3_send_alert(s, SSL3_AL_FATAL, al);
2553 #ifndef OPENSSL_NO_PSK
2554     OPENSSL_clear_free(s->s3->tmp.psk, s->s3->tmp.psklen);
2555     s->s3->tmp.psk = NULL;
2556 #endif
2557     ossl_statem_set_error(s);
2558     return MSG_PROCESS_ERROR;
2559 }
2560
2561 WORK_STATE tls_post_process_client_key_exchange(SSL *s, WORK_STATE wst)
2562 {
2563 #ifndef OPENSSL_NO_SCTP
2564     if (wst == WORK_MORE_A) {
2565         if (SSL_IS_DTLS(s)) {
2566             unsigned char sctpauthkey[64];
2567             char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
2568             /*
2569              * Add new shared key for SCTP-Auth, will be ignored if no SCTP
2570              * used.
2571              */
2572             memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
2573                    sizeof(DTLS1_SCTP_AUTH_LABEL));
2574
2575             if (SSL_export_keying_material(s, sctpauthkey,
2576                                            sizeof(sctpauthkey), labelbuffer,
2577                                            sizeof(labelbuffer), NULL, 0,
2578                                            0) <= 0) {
2579                 ossl_statem_set_error(s);
2580                 return WORK_ERROR;;
2581             }
2582
2583             BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
2584                      sizeof(sctpauthkey), sctpauthkey);
2585         }
2586         wst = WORK_MORE_B;
2587     }
2588
2589     if ((wst == WORK_MORE_B)
2590         /* Is this SCTP? */
2591         && BIO_dgram_is_sctp(SSL_get_wbio(s))
2592         /* Are we renegotiating? */
2593         && s->renegotiate
2594         /* Are we going to skip the CertificateVerify? */
2595         && (s->session->peer == NULL || s->statem.no_cert_verify)
2596         && BIO_dgram_sctp_msg_waiting(SSL_get_rbio(s))) {
2597         s->s3->in_read_app_data = 2;
2598         s->rwstate = SSL_READING;
2599         BIO_clear_retry_flags(SSL_get_rbio(s));
2600         BIO_set_retry_read(SSL_get_rbio(s));
2601         ossl_statem_set_sctp_read_sock(s, 1);
2602         return WORK_MORE_B;
2603     } else {
2604         ossl_statem_set_sctp_read_sock(s, 0);
2605     }
2606 #endif
2607
2608     if (s->statem.no_cert_verify || !s->session->peer) {
2609         /*
2610          * No certificate verify or no peer certificate so we no longer need
2611          * the handshake_buffer
2612          */
2613         if (!ssl3_digest_cached_records(s, 0)) {
2614             ossl_statem_set_error(s);
2615             return WORK_ERROR;
2616         }
2617         return WORK_FINISHED_CONTINUE;
2618     } else {
2619         if (!s->s3->handshake_buffer) {
2620             SSLerr(SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE,
2621                    ERR_R_INTERNAL_ERROR);
2622             ossl_statem_set_error(s);
2623             return WORK_ERROR;
2624         }
2625         /*
2626          * For sigalgs freeze the handshake buffer. If we support
2627          * extms we've done this already so this is a no-op
2628          */
2629         if (!ssl3_digest_cached_records(s, 1)) {
2630             ossl_statem_set_error(s);
2631             return WORK_ERROR;
2632         }
2633     }
2634
2635     return WORK_FINISHED_CONTINUE;
2636 }
2637
2638 MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
2639 {
2640     EVP_PKEY *pkey = NULL;
2641     const unsigned char *sig, *data;
2642 #ifndef OPENSSL_NO_GOST
2643     unsigned char *gost_data = NULL;
2644 #endif
2645     int al, ret = MSG_PROCESS_ERROR;
2646     int type = 0, j;
2647     unsigned int len;
2648     X509 *peer;
2649     const EVP_MD *md = NULL;
2650     long hdatalen = 0;
2651     void *hdata;
2652
2653     EVP_MD_CTX *mctx = EVP_MD_CTX_new();
2654
2655     if (mctx == NULL) {
2656         SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_MALLOC_FAILURE);
2657         al = SSL_AD_INTERNAL_ERROR;
2658         goto f_err;
2659     }
2660
2661     peer = s->session->peer;
2662     pkey = X509_get0_pubkey(peer);
2663     type = X509_certificate_type(peer, pkey);
2664
2665     if (!(type & EVP_PKT_SIGN)) {
2666         SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY,
2667                SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE);
2668         al = SSL_AD_ILLEGAL_PARAMETER;
2669         goto f_err;
2670     }
2671
2672     /* Check for broken implementations of GOST ciphersuites */
2673     /*
2674      * If key is GOST and n is exactly 64, it is bare signature without
2675      * length field (CryptoPro implementations at least till CSP 4.0)
2676      */
2677 #ifndef OPENSSL_NO_GOST
2678     if (PACKET_remaining(pkt) == 64
2679         && EVP_PKEY_id(pkey) == NID_id_GostR3410_2001) {
2680         len = 64;
2681     } else
2682 #endif
2683     {
2684         if (SSL_USE_SIGALGS(s)) {
2685             int rv;
2686
2687             if (!PACKET_get_bytes(pkt, &sig, 2)) {
2688                 al = SSL_AD_DECODE_ERROR;
2689                 goto f_err;
2690             }
2691             rv = tls12_check_peer_sigalg(&md, s, sig, pkey);
2692             if (rv == -1) {
2693                 al = SSL_AD_INTERNAL_ERROR;
2694                 goto f_err;
2695             } else if (rv == 0) {
2696                 al = SSL_AD_DECODE_ERROR;
2697                 goto f_err;
2698             }
2699 #ifdef SSL_DEBUG
2700             fprintf(stderr, "USING TLSv1.2 HASH %s\n", EVP_MD_name(md));
2701 #endif
2702         } else {
2703             /* Use default digest for this key type */
2704             int idx = ssl_cert_type(NULL, pkey);
2705             if (idx >= 0)
2706                 md = s->s3->tmp.md[idx];
2707             if (md == NULL) {
2708                 al = SSL_AD_INTERNAL_ERROR;
2709                 goto f_err;
2710             }
2711         }
2712
2713         if (!PACKET_get_net_2(pkt, &len)) {
2714             SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, SSL_R_LENGTH_MISMATCH);
2715             al = SSL_AD_DECODE_ERROR;
2716             goto f_err;
2717         }
2718     }
2719     j = EVP_PKEY_size(pkey);
2720     if (((int)len > j) || ((int)PACKET_remaining(pkt) > j)
2721         || (PACKET_remaining(pkt) == 0)) {
2722         SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, SSL_R_WRONG_SIGNATURE_SIZE);
2723         al = SSL_AD_DECODE_ERROR;
2724         goto f_err;
2725     }
2726     if (!PACKET_get_bytes(pkt, &data, len)) {
2727         SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, SSL_R_LENGTH_MISMATCH);
2728         al = SSL_AD_DECODE_ERROR;
2729         goto f_err;
2730     }
2731
2732     hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata);
2733     if (hdatalen <= 0) {
2734         SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_INTERNAL_ERROR);
2735         al = SSL_AD_INTERNAL_ERROR;
2736         goto f_err;
2737     }
2738 #ifdef SSL_DEBUG
2739     fprintf(stderr, "Using client verify alg %s\n", EVP_MD_name(md));
2740 #endif
2741     if (!EVP_VerifyInit_ex(mctx, md, NULL)
2742         || !EVP_VerifyUpdate(mctx, hdata, hdatalen)) {
2743         SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_EVP_LIB);
2744         al = SSL_AD_INTERNAL_ERROR;
2745         goto f_err;
2746     }
2747 #ifndef OPENSSL_NO_GOST
2748     {
2749         int pktype = EVP_PKEY_id(pkey);
2750         if (pktype == NID_id_GostR3410_2001
2751             || pktype == NID_id_GostR3410_2012_256
2752             || pktype == NID_id_GostR3410_2012_512) {
2753             if ((gost_data = OPENSSL_malloc(len)) == NULL) {
2754                 SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_MALLOC_FAILURE);
2755                 al = SSL_AD_INTERNAL_ERROR;
2756                 goto f_err;
2757             }
2758             BUF_reverse(gost_data, data, len);
2759             data = gost_data;
2760         }
2761     }
2762 #endif
2763
2764     if (s->version == SSL3_VERSION
2765         && !EVP_MD_CTX_ctrl(mctx, EVP_CTRL_SSL3_MASTER_SECRET,
2766                             s->session->master_key_length,
2767                             s->session->master_key)) {
2768         SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_EVP_LIB);
2769         al = SSL_AD_INTERNAL_ERROR;
2770         goto f_err;
2771     }
2772
2773     if (EVP_VerifyFinal(mctx, data, len, pkey) <= 0) {
2774         al = SSL_AD_DECRYPT_ERROR;
2775         SSLerr(SSL_F_TLS_PROCESS_CERT_VERIFY, SSL_R_BAD_SIGNATURE);
2776         goto f_err;
2777     }
2778
2779     ret = MSG_PROCESS_CONTINUE_PROCESSING;
2780     if (0) {
2781  f_err:
2782         ssl3_send_alert(s, SSL3_AL_FATAL, al);
2783         ossl_statem_set_error(s);
2784     }
2785     BIO_free(s->s3->handshake_buffer);
2786     s->s3->handshake_buffer = NULL;
2787     EVP_MD_CTX_free(mctx);
2788 #ifndef OPENSSL_NO_GOST
2789     OPENSSL_free(gost_data);
2790 #endif
2791     return ret;
2792 }
2793
2794 MSG_PROCESS_RETURN tls_process_client_certificate(SSL *s, PACKET *pkt)
2795 {
2796     int i, al = SSL_AD_INTERNAL_ERROR, ret = MSG_PROCESS_ERROR;
2797     X509 *x = NULL;
2798     unsigned long l, llen;
2799     const unsigned char *certstart, *certbytes;
2800     STACK_OF(X509) *sk = NULL;
2801     PACKET spkt;
2802
2803     if ((sk = sk_X509_new_null()) == NULL) {
2804         SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, ERR_R_MALLOC_FAILURE);
2805         goto f_err;
2806     }
2807
2808     if (!PACKET_get_net_3(pkt, &llen)
2809         || !PACKET_get_sub_packet(pkt, &spkt, llen)
2810         || PACKET_remaining(pkt) != 0) {
2811         al = SSL_AD_DECODE_ERROR;
2812         SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, SSL_R_LENGTH_MISMATCH);
2813         goto f_err;
2814     }
2815
2816     while (PACKET_remaining(&spkt) > 0) {
2817         if (!PACKET_get_net_3(&spkt, &l)
2818             || !PACKET_get_bytes(&spkt, &certbytes, l)) {
2819             al = SSL_AD_DECODE_ERROR;
2820             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
2821                    SSL_R_CERT_LENGTH_MISMATCH);
2822             goto f_err;
2823         }
2824
2825         certstart = certbytes;
2826         x = d2i_X509(NULL, (const unsigned char **)&certbytes, l);
2827         if (x == NULL) {
2828             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, ERR_R_ASN1_LIB);
2829             goto f_err;
2830         }
2831         if (certbytes != (certstart + l)) {
2832             al = SSL_AD_DECODE_ERROR;
2833             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
2834                    SSL_R_CERT_LENGTH_MISMATCH);
2835             goto f_err;
2836         }
2837         if (!sk_X509_push(sk, x)) {
2838             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, ERR_R_MALLOC_FAILURE);
2839             goto f_err;
2840         }
2841         x = NULL;
2842     }
2843
2844     if (sk_X509_num(sk) <= 0) {
2845         /* TLS does not mind 0 certs returned */
2846         if (s->version == SSL3_VERSION) {
2847             al = SSL_AD_HANDSHAKE_FAILURE;
2848             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
2849                    SSL_R_NO_CERTIFICATES_RETURNED);
2850             goto f_err;
2851         }
2852         /* Fail for TLS only if we required a certificate */
2853         else if ((s->verify_mode & SSL_VERIFY_PEER) &&
2854                  (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) {
2855             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
2856                    SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
2857             al = SSL_AD_HANDSHAKE_FAILURE;
2858             goto f_err;
2859         }
2860         /* No client certificate so digest cached records */
2861         if (s->s3->handshake_buffer && !ssl3_digest_cached_records(s, 0)) {
2862             goto f_err;
2863         }
2864     } else {
2865         EVP_PKEY *pkey;
2866         i = ssl_verify_cert_chain(s, sk);
2867         if (i <= 0) {
2868             al = ssl_verify_alarm_type(s->verify_result);
2869             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
2870                    SSL_R_CERTIFICATE_VERIFY_FAILED);
2871             goto f_err;
2872         }
2873         if (i > 1) {
2874             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, i);
2875             al = SSL_AD_HANDSHAKE_FAILURE;
2876             goto f_err;
2877         }
2878         pkey = X509_get0_pubkey(sk_X509_value(sk, 0));
2879         if (pkey == NULL) {
2880             al = SSL3_AD_HANDSHAKE_FAILURE;
2881             SSLerr(SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
2882                    SSL_R_UNKNOWN_CERTIFICATE_TYPE);
2883             goto f_err;
2884         }
2885     }
2886
2887     X509_free(s->session->peer);
2888     s->session->peer = sk_X509_shift(sk);
2889     s->session->verify_result = s->verify_result;
2890
2891     sk_X509_pop_free(s->session->peer_chain, X509_free);
2892     s->session->peer_chain = sk;
2893     /*
2894      * Inconsistency alert: cert_chain does *not* include the peer's own
2895      * certificate, while we do include it in statem_clnt.c
2896      */
2897     sk = NULL;
2898     ret = MSG_PROCESS_CONTINUE_READING;
2899     goto done;
2900
2901  f_err:
2902     ssl3_send_alert(s, SSL3_AL_FATAL, al);
2903     ossl_statem_set_error(s);
2904  done:
2905     X509_free(x);
2906     sk_X509_pop_free(sk, X509_free);
2907     return ret;
2908 }
2909
2910 int tls_construct_server_certificate(SSL *s, WPACKET *pkt)
2911 {
2912     CERT_PKEY *cpk;
2913
2914     cpk = ssl_get_server_send_pkey(s);
2915     if (cpk == NULL) {
2916         SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
2917         return 0;
2918     }
2919
2920     if (!ssl3_output_cert_chain(s, pkt, cpk)) {
2921         SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
2922         return 0;
2923     }
2924
2925     return 1;
2926 }
2927
2928 int tls_construct_new_session_ticket(SSL *s, WPACKET *pkt)
2929 {
2930     unsigned char *senc = NULL;
2931     EVP_CIPHER_CTX *ctx = NULL;
2932     HMAC_CTX *hctx = NULL;
2933     unsigned char *p, *encdata1, *encdata2, *macdata1, *macdata2;
2934     const unsigned char *const_p;
2935     int len, slen_full, slen, lenfinal;
2936     SSL_SESSION *sess;
2937     unsigned int hlen;
2938     SSL_CTX *tctx = s->initial_ctx;
2939     unsigned char iv[EVP_MAX_IV_LENGTH];
2940     unsigned char key_name[TLSEXT_KEYNAME_LENGTH];
2941     int iv_len;
2942     size_t macoffset, macendoffset;
2943
2944     /* get session encoding length */
2945     slen_full = i2d_SSL_SESSION(s->session, NULL);
2946     /*
2947      * Some length values are 16 bits, so forget it if session is too
2948      * long
2949      */
2950     if (slen_full == 0 || slen_full > 0xFF00) {
2951         ossl_statem_set_error(s);
2952         return 0;
2953     }
2954     senc = OPENSSL_malloc(slen_full);
2955     if (senc == NULL) {
2956         ossl_statem_set_error(s);
2957         return 0;
2958     }
2959
2960     ctx = EVP_CIPHER_CTX_new();
2961     hctx = HMAC_CTX_new();
2962     if (ctx == NULL || hctx == NULL) {
2963         SSLerr(SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE);
2964         goto err;
2965     }
2966
2967     p = senc;
2968     if (!i2d_SSL_SESSION(s->session, &p))
2969         goto err;
2970
2971     /*
2972      * create a fresh copy (not shared with other threads) to clean up
2973      */
2974     const_p = senc;
2975     sess = d2i_SSL_SESSION(NULL, &const_p, slen_full);
2976     if (sess == NULL)
2977         goto err;
2978     sess->session_id_length = 0; /* ID is irrelevant for the ticket */
2979
2980     slen = i2d_SSL_SESSION(sess, NULL);
2981     if (slen == 0 || slen > slen_full) { /* shouldn't ever happen */
2982         SSL_SESSION_free(sess);
2983         goto err;
2984     }
2985     p = senc;
2986     if (!i2d_SSL_SESSION(sess, &p)) {
2987         SSL_SESSION_free(sess);
2988         goto err;
2989     }
2990     SSL_SESSION_free(sess);
2991
2992     /*
2993      * Initialize HMAC and cipher contexts. If callback present it does
2994      * all the work otherwise use generated values from parent ctx.
2995      */
2996     if (tctx->tlsext_ticket_key_cb) {
2997         /* if 0 is returned, write an empty ticket */
2998         int ret = tctx->tlsext_ticket_key_cb(s, key_name, iv, ctx,
2999                                              hctx, 1);
3000
3001         if (ret == 0) {
3002
3003             /* Put timeout and length */
3004             if (!WPACKET_put_bytes_u32(pkt, 0)
3005                     || !WPACKET_put_bytes_u16(pkt, 0)
3006                     || !ssl_close_construct_packet(s, pkt)) {
3007                 SSLerr(SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET,
3008                        ERR_R_INTERNAL_ERROR);
3009                 goto err;
3010             }
3011             OPENSSL_free(senc);
3012             EVP_CIPHER_CTX_free(ctx);
3013             HMAC_CTX_free(hctx);
3014             return 1;
3015         }
3016         if (ret < 0)
3017             goto err;
3018         iv_len = EVP_CIPHER_CTX_iv_length(ctx);
3019     } else {
3020         const EVP_CIPHER *cipher = EVP_aes_256_cbc();
3021
3022         iv_len = EVP_CIPHER_iv_length(cipher);
3023         if (RAND_bytes(iv, iv_len) <= 0)
3024             goto err;
3025         if (!EVP_EncryptInit_ex(ctx, cipher, NULL,
3026                                 tctx->tlsext_tick_aes_key, iv))
3027             goto err;
3028         if (!HMAC_Init_ex(hctx, tctx->tlsext_tick_hmac_key,
3029                           sizeof(tctx->tlsext_tick_hmac_key),
3030                           EVP_sha256(), NULL))
3031             goto err;
3032         memcpy(key_name, tctx->tlsext_tick_key_name,
3033                sizeof(tctx->tlsext_tick_key_name));
3034     }
3035
3036     /*
3037      * Ticket lifetime hint (advisory only): We leave this unspecified
3038      * for resumed session (for simplicity), and guess that tickets for
3039      * new sessions will live as long as their sessions.
3040      */
3041     if (!WPACKET_put_bytes_u32(pkt, s->hit ? 0 : s->session->timeout)
3042                /* Now the actual ticket data */
3043             || !WPACKET_start_sub_packet_u16(pkt)
3044             || !WPACKET_get_total_written(pkt, &macoffset)
3045                /* Output key name */
3046             || !WPACKET_memcpy(pkt, key_name, sizeof(key_name))
3047                /* output IV */
3048             || !WPACKET_memcpy(pkt, iv, iv_len)
3049             || !WPACKET_reserve_bytes(pkt, slen + EVP_MAX_BLOCK_LENGTH,
3050                                       &encdata1)
3051                /* Encrypt session data */
3052             || !EVP_EncryptUpdate(ctx, encdata1, &len, senc, slen)
3053             || !WPACKET_allocate_bytes(pkt, len, &encdata2)
3054             || encdata1 != encdata2
3055             || !EVP_EncryptFinal(ctx, encdata1 + len, &lenfinal)
3056             || !WPACKET_allocate_bytes(pkt, lenfinal, &encdata2)
3057             || encdata1 + len != encdata2
3058             || len + lenfinal > slen + EVP_MAX_BLOCK_LENGTH
3059             || !WPACKET_get_total_written(pkt, &macendoffset)
3060             || !HMAC_Update(hctx,
3061                             (unsigned char *)s->init_buf->data + macoffset,
3062                             macendoffset - macoffset)
3063             || !WPACKET_reserve_bytes(pkt, EVP_MAX_MD_SIZE, &macdata1)
3064             || !HMAC_Final(hctx, macdata1, &hlen)
3065             || hlen > EVP_MAX_MD_SIZE
3066             || !WPACKET_allocate_bytes(pkt, hlen, &macdata2)
3067             || macdata1 != macdata2
3068             || !WPACKET_close(pkt)) {
3069         SSLerr(SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET, ERR_R_INTERNAL_ERROR);
3070         goto err;
3071     }
3072     EVP_CIPHER_CTX_free(ctx);
3073     HMAC_CTX_free(hctx);
3074     OPENSSL_free(senc);
3075
3076     return 1;
3077  err:
3078     OPENSSL_free(senc);
3079     EVP_CIPHER_CTX_free(ctx);
3080     HMAC_CTX_free(hctx);
3081     ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
3082     return 0;
3083 }
3084
3085 int tls_construct_cert_status(SSL *s, WPACKET *pkt)
3086 {
3087     if (!WPACKET_put_bytes_u8(pkt, s->tlsext_status_type)
3088             || !WPACKET_sub_memcpy_u24(pkt, s->tlsext_ocsp_resp,
3089                                        s->tlsext_ocsp_resplen)) {
3090         SSLerr(SSL_F_TLS_CONSTRUCT_CERT_STATUS, ERR_R_INTERNAL_ERROR);
3091         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
3092         return 0;
3093     }
3094
3095     return 1;
3096 }
3097
3098 #ifndef OPENSSL_NO_NEXTPROTONEG
3099 /*
3100  * tls_process_next_proto reads a Next Protocol Negotiation handshake message.
3101  * It sets the next_proto member in s if found
3102  */
3103 MSG_PROCESS_RETURN tls_process_next_proto(SSL *s, PACKET *pkt)
3104 {
3105     PACKET next_proto, padding;
3106     size_t next_proto_len;
3107
3108     /*-
3109      * The payload looks like:
3110      *   uint8 proto_len;
3111      *   uint8 proto[proto_len];
3112      *   uint8 padding_len;
3113      *   uint8 padding[padding_len];
3114      */
3115     if (!PACKET_get_length_prefixed_1(pkt, &next_proto)
3116         || !PACKET_get_length_prefixed_1(pkt, &padding)
3117         || PACKET_remaining(pkt) > 0) {
3118         SSLerr(SSL_F_TLS_PROCESS_NEXT_PROTO, SSL_R_LENGTH_MISMATCH);
3119         goto err;
3120     }
3121
3122     if (!PACKET_memdup(&next_proto, &s->next_proto_negotiated, &next_proto_len)) {
3123         s->next_proto_negotiated_len = 0;
3124         goto err;
3125     }
3126
3127     s->next_proto_negotiated_len = (unsigned char)next_proto_len;
3128
3129     return MSG_PROCESS_CONTINUE_READING;
3130  err:
3131     ossl_statem_set_error(s);
3132     return MSG_PROCESS_ERROR;
3133 }
3134 #endif
3135
3136 #define SSLV2_CIPHER_LEN    3
3137
3138 STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,
3139                                                PACKET *cipher_suites,
3140                                                STACK_OF(SSL_CIPHER) **skp,
3141                                                int sslv2format, int *al)
3142 {
3143     const SSL_CIPHER *c;
3144     STACK_OF(SSL_CIPHER) *sk;
3145     int n;
3146     /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
3147     unsigned char cipher[SSLV2_CIPHER_LEN];
3148
3149     s->s3->send_connection_binding = 0;
3150
3151     n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
3152
3153     if (PACKET_remaining(cipher_suites) == 0) {
3154         SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, SSL_R_NO_CIPHERS_SPECIFIED);
3155         *al = SSL_AD_ILLEGAL_PARAMETER;
3156         return NULL;
3157     }
3158
3159     if (PACKET_remaining(cipher_suites) % n != 0) {
3160         SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
3161                SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
3162         *al = SSL_AD_DECODE_ERROR;
3163         return NULL;
3164     }
3165
3166     if ((skp == NULL) || (*skp == NULL)) {
3167         sk = sk_SSL_CIPHER_new_null(); /* change perhaps later */
3168         if (sk == NULL) {
3169             SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
3170             *al = SSL_AD_INTERNAL_ERROR;
3171             return NULL;
3172         }
3173     } else {
3174         sk = *skp;
3175         sk_SSL_CIPHER_zero(sk);
3176     }
3177
3178     if (!PACKET_memdup(cipher_suites, &s->s3->tmp.ciphers_raw,
3179                        &s->s3->tmp.ciphers_rawlen)) {
3180         *al = SSL_AD_INTERNAL_ERROR;
3181         goto err;
3182     }
3183
3184     while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
3185         /*
3186          * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
3187          * first byte set to zero, while true SSLv2 ciphers have a non-zero
3188          * first byte. We don't support any true SSLv2 ciphers, so skip them.
3189          */
3190         if (sslv2format && cipher[0] != '\0')
3191             continue;
3192
3193         /* Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */
3194         if ((cipher[n - 2] == ((SSL3_CK_SCSV >> 8) & 0xff)) &&
3195             (cipher[n - 1] == (SSL3_CK_SCSV & 0xff))) {
3196             /* SCSV fatal if renegotiating */
3197             if (s->renegotiate) {
3198                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
3199                        SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
3200                 *al = SSL_AD_HANDSHAKE_FAILURE;
3201                 goto err;
3202             }
3203             s->s3->send_connection_binding = 1;
3204             continue;
3205         }
3206
3207         /* Check for TLS_FALLBACK_SCSV */
3208         if ((cipher[n - 2] == ((SSL3_CK_FALLBACK_SCSV >> 8) & 0xff)) &&
3209             (cipher[n - 1] == (SSL3_CK_FALLBACK_SCSV & 0xff))) {
3210             /*
3211              * The SCSV indicates that the client previously tried a higher
3212              * version. Fail if the current version is an unexpected
3213              * downgrade.
3214              */
3215             if (!ssl_check_version_downgrade(s)) {
3216                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
3217                        SSL_R_INAPPROPRIATE_FALLBACK);
3218                 *al = SSL_AD_INAPPROPRIATE_FALLBACK;
3219                 goto err;
3220             }
3221             continue;
3222         }
3223
3224         /* For SSLv2-compat, ignore leading 0-byte. */
3225         c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher);
3226         if (c != NULL) {
3227             if (!sk_SSL_CIPHER_push(sk, c)) {
3228                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
3229                 *al = SSL_AD_INTERNAL_ERROR;
3230                 goto err;
3231             }
3232         }
3233     }
3234     if (PACKET_remaining(cipher_suites) > 0) {
3235         *al = SSL_AD_INTERNAL_ERROR;
3236         SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_INTERNAL_ERROR);
3237         goto err;
3238     }
3239
3240     if (skp != NULL)
3241         *skp = sk;
3242     return (sk);
3243  err:
3244     if ((skp == NULL) || (*skp == NULL))
3245         sk_SSL_CIPHER_free(sk);
3246     return NULL;
3247 }