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