Copyright consolidation 01/10
[openssl.git] / ssl / statem / statem_clnt.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 <openssl/buffer.h>
54 #include <openssl/rand.h>
55 #include <openssl/objects.h>
56 #include <openssl/evp.h>
57 #include <openssl/md5.h>
58 #include <openssl/dh.h>
59 #include <openssl/bn.h>
60 #include <openssl/engine.h>
61
62 static ossl_inline int cert_req_allowed(SSL *s);
63 static int key_exchange_expected(SSL *s);
64 static int ca_dn_cmp(const X509_NAME *const *a, const X509_NAME *const *b);
65 static int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
66                                     unsigned char *p);
67
68
69 /*
70  * Is a CertificateRequest message allowed at the moment or not?
71  *
72  *  Return values are:
73  *  1: Yes
74  *  0: No
75  */
76 static ossl_inline int cert_req_allowed(SSL *s)
77 {
78     /* TLS does not like anon-DH with client cert */
79     if ((s->version > SSL3_VERSION
80                 && (s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL))
81             || (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aSRP | SSL_aPSK)))
82         return 0;
83
84     return 1;
85 }
86
87 /*
88  * Should we expect the ServerKeyExchange message or not?
89  *
90  *  Return values are:
91  *  1: Yes
92  *  0: No
93  * -1: Error
94  */
95 static int key_exchange_expected(SSL *s)
96 {
97     long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
98
99     /*
100      * Can't skip server key exchange if this is an ephemeral
101      * ciphersuite or for SRP
102      */
103     if (alg_k & (SSL_kDHE | SSL_kECDHE | SSL_kDHEPSK | SSL_kECDHEPSK
104                  | SSL_kSRP)) {
105         return 1;
106     }
107
108     return 0;
109 }
110
111 /*
112  * ossl_statem_client_read_transition() encapsulates the logic for the allowed
113  * handshake state transitions when the client is reading messages from the
114  * server. The message type that the server has sent is provided in |mt|. The
115  * current state is in |s->statem.hand_state|.
116  *
117  *  Return values are:
118  *  1: Success (transition allowed)
119  *  0: Error (transition not allowed)
120  */
121 int ossl_statem_client_read_transition(SSL *s, int mt)
122 {
123     OSSL_STATEM *st = &s->statem;
124     int ske_expected;
125
126     switch(st->hand_state) {
127     case TLS_ST_CW_CLNT_HELLO:
128         if (mt == SSL3_MT_SERVER_HELLO) {
129             st->hand_state = TLS_ST_CR_SRVR_HELLO;
130             return 1;
131         }
132
133         if (SSL_IS_DTLS(s)) {
134             if (mt == DTLS1_MT_HELLO_VERIFY_REQUEST) {
135                 st->hand_state = DTLS_ST_CR_HELLO_VERIFY_REQUEST;
136                 return 1;
137             }
138         }
139         break;
140
141     case TLS_ST_CR_SRVR_HELLO:
142         if (s->hit) {
143             if (s->tlsext_ticket_expected) {
144                 if (mt == SSL3_MT_NEWSESSION_TICKET) {
145                     st->hand_state = TLS_ST_CR_SESSION_TICKET;
146                     return 1;
147                 }
148             } else if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
149                 st->hand_state = TLS_ST_CR_CHANGE;
150                 return 1;
151             }
152         } else {
153             if (SSL_IS_DTLS(s) && mt == DTLS1_MT_HELLO_VERIFY_REQUEST) {
154                 st->hand_state = DTLS_ST_CR_HELLO_VERIFY_REQUEST;
155                 return 1;
156             } else if (s->version >= TLS1_VERSION
157                     && s->tls_session_secret_cb != NULL
158                     && s->session->tlsext_tick != NULL
159                     && mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
160                 /*
161                  * Normally, we can tell if the server is resuming the session
162                  * from the session ID. EAP-FAST (RFC 4851), however, relies on
163                  * the next server message after the ServerHello to determine if
164                  * the server is resuming.
165                  */
166                 s->hit = 1;
167                 st->hand_state = TLS_ST_CR_CHANGE;
168                 return 1;
169             } else if (!(s->s3->tmp.new_cipher->algorithm_auth
170                         & (SSL_aNULL | SSL_aSRP | SSL_aPSK))) {
171                 if (mt == SSL3_MT_CERTIFICATE) {
172                     st->hand_state = TLS_ST_CR_CERT;
173                     return 1;
174                 }
175             } else {
176                 ske_expected = key_exchange_expected(s);
177                 if (ske_expected < 0)
178                     return 0;
179                 /* SKE is optional for some PSK ciphersuites */
180                 if (ske_expected
181                         || ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_PSK)
182                             && mt == SSL3_MT_SERVER_KEY_EXCHANGE)) {
183                     if (mt == SSL3_MT_SERVER_KEY_EXCHANGE) {
184                         st->hand_state = TLS_ST_CR_KEY_EXCH;
185                         return 1;
186                     }
187                 } else if (mt == SSL3_MT_CERTIFICATE_REQUEST
188                             && cert_req_allowed(s)) {
189                         st->hand_state = TLS_ST_CR_CERT_REQ;
190                         return 1;
191                 } else if (mt == SSL3_MT_SERVER_DONE) {
192                         st->hand_state = TLS_ST_CR_SRVR_DONE;
193                         return 1;
194                 }
195             }
196         }
197         break;
198
199     case TLS_ST_CR_CERT:
200         /*
201          * The CertificateStatus message is optional even if
202          * |tlsext_status_expected| is set
203          */
204         if (s->tlsext_status_expected && mt == SSL3_MT_CERTIFICATE_STATUS) {
205             st->hand_state = TLS_ST_CR_CERT_STATUS;
206             return 1;
207         }
208         /* Fall through */
209
210     case TLS_ST_CR_CERT_STATUS:
211         ske_expected = key_exchange_expected(s);
212         if (ske_expected < 0)
213             return 0;
214         /* SKE is optional for some PSK ciphersuites */
215         if (ske_expected
216                 || ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_PSK)
217                     && mt == SSL3_MT_SERVER_KEY_EXCHANGE)) {
218             if (mt == SSL3_MT_SERVER_KEY_EXCHANGE) {
219                 st->hand_state = TLS_ST_CR_KEY_EXCH;
220                 return 1;
221             }
222             return 0;
223         }
224         /* Fall through */
225
226     case TLS_ST_CR_KEY_EXCH:
227         if (mt == SSL3_MT_CERTIFICATE_REQUEST) {
228             if (cert_req_allowed(s)) {
229                 st->hand_state = TLS_ST_CR_CERT_REQ;
230                 return 1;
231             }
232             return 0;
233         }
234         /* Fall through */
235
236     case TLS_ST_CR_CERT_REQ:
237         if (mt == SSL3_MT_SERVER_DONE) {
238             st->hand_state = TLS_ST_CR_SRVR_DONE;
239             return 1;
240         }
241         break;
242
243     case TLS_ST_CW_FINISHED:
244         if (s->tlsext_ticket_expected) {
245             if (mt == SSL3_MT_NEWSESSION_TICKET) {
246                 st->hand_state = TLS_ST_CR_SESSION_TICKET;
247                 return 1;
248             }
249         } else if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
250             st->hand_state = TLS_ST_CR_CHANGE;
251             return 1;
252         }
253         break;
254
255     case TLS_ST_CR_SESSION_TICKET:
256         if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
257             st->hand_state = TLS_ST_CR_CHANGE;
258             return 1;
259         }
260         break;
261
262     case TLS_ST_CR_CHANGE:
263         if (mt == SSL3_MT_FINISHED) {
264             st->hand_state = TLS_ST_CR_FINISHED;
265             return 1;
266         }
267         break;
268
269     default:
270         break;
271     }
272
273     /* No valid transition found */
274     return 0;
275 }
276
277 /*
278  * client_write_transition() works out what handshake state to move to next
279  * when the client is writing messages to be sent to the server.
280  */
281 WRITE_TRAN ossl_statem_client_write_transition(SSL *s)
282 {
283     OSSL_STATEM *st = &s->statem;
284
285     switch(st->hand_state) {
286         case TLS_ST_OK:
287             /* Renegotiation - fall through */
288         case TLS_ST_BEFORE:
289             st->hand_state = TLS_ST_CW_CLNT_HELLO;
290             return WRITE_TRAN_CONTINUE;
291
292         case TLS_ST_CW_CLNT_HELLO:
293             /*
294              * No transition at the end of writing because we don't know what
295              * we will be sent
296              */
297             return WRITE_TRAN_FINISHED;
298
299         case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
300             st->hand_state = TLS_ST_CW_CLNT_HELLO;
301             return WRITE_TRAN_CONTINUE;
302
303         case TLS_ST_CR_SRVR_DONE:
304             if (s->s3->tmp.cert_req)
305                 st->hand_state = TLS_ST_CW_CERT;
306             else
307                 st->hand_state = TLS_ST_CW_KEY_EXCH;
308             return WRITE_TRAN_CONTINUE;
309
310         case TLS_ST_CW_CERT:
311             st->hand_state = TLS_ST_CW_KEY_EXCH;
312             return WRITE_TRAN_CONTINUE;
313
314         case TLS_ST_CW_KEY_EXCH:
315             /*
316              * For TLS, cert_req is set to 2, so a cert chain of nothing is
317              * sent, but no verify packet is sent
318              */
319             /*
320              * XXX: For now, we do not support client authentication in ECDH
321              * cipher suites with ECDH (rather than ECDSA) certificates. We
322              * need to skip the certificate verify message when client's
323              * ECDH public key is sent inside the client certificate.
324              */
325             if (s->s3->tmp.cert_req == 1) {
326                 st->hand_state = TLS_ST_CW_CERT_VRFY;
327             } else {
328                 st->hand_state = TLS_ST_CW_CHANGE;
329             }
330             if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) {
331                 st->hand_state = TLS_ST_CW_CHANGE;
332             }
333             return WRITE_TRAN_CONTINUE;
334
335         case TLS_ST_CW_CERT_VRFY:
336             st->hand_state = TLS_ST_CW_CHANGE;
337             return WRITE_TRAN_CONTINUE;
338
339         case TLS_ST_CW_CHANGE:
340 #if defined(OPENSSL_NO_NEXTPROTONEG)
341             st->hand_state = TLS_ST_CW_FINISHED;
342 #else
343             if (!SSL_IS_DTLS(s) && s->s3->next_proto_neg_seen)
344                 st->hand_state = TLS_ST_CW_NEXT_PROTO;
345             else
346                 st->hand_state = TLS_ST_CW_FINISHED;
347 #endif
348             return WRITE_TRAN_CONTINUE;
349
350 #if !defined(OPENSSL_NO_NEXTPROTONEG)
351         case TLS_ST_CW_NEXT_PROTO:
352             st->hand_state = TLS_ST_CW_FINISHED;
353             return WRITE_TRAN_CONTINUE;
354 #endif
355
356         case TLS_ST_CW_FINISHED:
357             if (s->hit) {
358                 st->hand_state = TLS_ST_OK;
359                 ossl_statem_set_in_init(s, 0);
360                 return WRITE_TRAN_CONTINUE;
361             } else {
362                 return WRITE_TRAN_FINISHED;
363             }
364
365         case TLS_ST_CR_FINISHED:
366             if (s->hit) {
367                 st->hand_state = TLS_ST_CW_CHANGE;
368                 return WRITE_TRAN_CONTINUE;
369             } else {
370                 st->hand_state = TLS_ST_OK;
371                 ossl_statem_set_in_init(s, 0);
372                 return WRITE_TRAN_CONTINUE;
373             }
374
375         default:
376             /* Shouldn't happen */
377             return WRITE_TRAN_ERROR;
378     }
379 }
380
381 /*
382  * Perform any pre work that needs to be done prior to sending a message from
383  * the client to the server.
384  */
385 WORK_STATE ossl_statem_client_pre_work(SSL *s, WORK_STATE wst)
386 {
387     OSSL_STATEM *st = &s->statem;
388
389     switch(st->hand_state) {
390     case TLS_ST_CW_CLNT_HELLO:
391         s->shutdown = 0;
392         if (SSL_IS_DTLS(s)) {
393             /* every DTLS ClientHello resets Finished MAC */
394             ssl3_init_finished_mac(s);
395         }
396         break;
397
398     case TLS_ST_CW_CERT:
399         return tls_prepare_client_certificate(s, wst);
400
401     case TLS_ST_CW_CHANGE:
402         if (SSL_IS_DTLS(s)) {
403             if (s->hit) {
404                 /*
405                  * We're into the last flight so we don't retransmit these
406                  * messages unless we need to.
407                  */
408                 st->use_timer = 0;
409             }
410 #ifndef OPENSSL_NO_SCTP
411             if (BIO_dgram_is_sctp(SSL_get_wbio(s)))
412                 return dtls_wait_for_dry(s);
413 #endif
414         }
415         return WORK_FINISHED_CONTINUE;
416
417     case TLS_ST_OK:
418         return tls_finish_handshake(s, wst);
419
420     default:
421         /* No pre work to be done */
422         break;
423     }
424
425     return WORK_FINISHED_CONTINUE;
426 }
427
428 /*
429  * Perform any work that needs to be done after sending a message from the
430  * client to the server.
431  */
432 WORK_STATE ossl_statem_client_post_work(SSL *s, WORK_STATE wst)
433 {
434     OSSL_STATEM *st = &s->statem;
435
436     s->init_num = 0;
437
438     switch(st->hand_state) {
439     case TLS_ST_CW_CLNT_HELLO:
440         if (SSL_IS_DTLS(s) && s->d1->cookie_len > 0 && statem_flush(s) != 1)
441             return WORK_MORE_A;
442 #ifndef OPENSSL_NO_SCTP
443         /* Disable buffering for SCTP */
444         if (!SSL_IS_DTLS(s) || !BIO_dgram_is_sctp(SSL_get_wbio(s))) {
445 #endif
446             /*
447              * turn on buffering for the next lot of output
448              */
449             if (s->bbio != s->wbio)
450                 s->wbio = BIO_push(s->bbio, s->wbio);
451 #ifndef OPENSSL_NO_SCTP
452             }
453 #endif
454         if (SSL_IS_DTLS(s)) {
455             /* Treat the next message as the first packet */
456             s->first_packet = 1;
457         }
458         break;
459
460     case TLS_ST_CW_KEY_EXCH:
461         if (tls_client_key_exchange_post_work(s) == 0)
462             return WORK_ERROR;
463         break;
464
465     case TLS_ST_CW_CHANGE:
466         s->session->cipher = s->s3->tmp.new_cipher;
467 #ifdef OPENSSL_NO_COMP
468         s->session->compress_meth = 0;
469 #else
470         if (s->s3->tmp.new_compression == NULL)
471             s->session->compress_meth = 0;
472         else
473             s->session->compress_meth = s->s3->tmp.new_compression->id;
474 #endif
475         if (!s->method->ssl3_enc->setup_key_block(s))
476             return WORK_ERROR;
477
478         if (!s->method->ssl3_enc->change_cipher_state(s,
479                                                       SSL3_CHANGE_CIPHER_CLIENT_WRITE))
480             return WORK_ERROR;
481
482         if (SSL_IS_DTLS(s)) {
483 #ifndef OPENSSL_NO_SCTP
484             if (s->hit) {
485                 /*
486                  * Change to new shared key of SCTP-Auth, will be ignored if
487                  * no SCTP used.
488                  */
489                 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
490                          0, NULL);
491             }
492 #endif
493
494             dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
495         }
496         break;
497
498     case TLS_ST_CW_FINISHED:
499 #ifndef OPENSSL_NO_SCTP
500         if (wst == WORK_MORE_A && SSL_IS_DTLS(s) && s->hit == 0) {
501             /*
502              * Change to new shared key of SCTP-Auth, will be ignored if
503              * no SCTP used.
504              */
505             BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
506                      0, NULL);
507         }
508 #endif
509         if (statem_flush(s) != 1)
510             return WORK_MORE_B;
511         break;
512
513     default:
514         /* No post work to be done */
515         break;
516     }
517
518     return WORK_FINISHED_CONTINUE;
519 }
520
521 /*
522  * Construct a message to be sent from the client to the server.
523  *
524  * Valid return values are:
525  *   1: Success
526  *   0: Error
527  */
528 int ossl_statem_client_construct_message(SSL *s)
529 {
530     OSSL_STATEM *st = &s->statem;
531
532     switch(st->hand_state) {
533     case TLS_ST_CW_CLNT_HELLO:
534         return tls_construct_client_hello(s);
535
536     case TLS_ST_CW_CERT:
537         return tls_construct_client_certificate(s);
538
539     case TLS_ST_CW_KEY_EXCH:
540         return tls_construct_client_key_exchange(s);
541
542     case TLS_ST_CW_CERT_VRFY:
543         return tls_construct_client_verify(s);
544
545     case TLS_ST_CW_CHANGE:
546         if (SSL_IS_DTLS(s))
547             return dtls_construct_change_cipher_spec(s);
548         else
549             return tls_construct_change_cipher_spec(s);
550
551 #if !defined(OPENSSL_NO_NEXTPROTONEG)
552     case TLS_ST_CW_NEXT_PROTO:
553         return tls_construct_next_proto(s);
554 #endif
555     case TLS_ST_CW_FINISHED:
556         return tls_construct_finished(s,
557                                       s->method->
558                                       ssl3_enc->client_finished_label,
559                                       s->method->
560                                       ssl3_enc->client_finished_label_len);
561
562     default:
563         /* Shouldn't happen */
564         break;
565     }
566
567     return 0;
568 }
569
570 /*
571  * Returns the maximum allowed length for the current message that we are
572  * reading. Excludes the message header.
573  */
574 unsigned long ossl_statem_client_max_message_size(SSL *s)
575 {
576     OSSL_STATEM *st = &s->statem;
577
578     switch(st->hand_state) {
579         case TLS_ST_CR_SRVR_HELLO:
580             return SERVER_HELLO_MAX_LENGTH;
581
582         case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
583             return HELLO_VERIFY_REQUEST_MAX_LENGTH;
584
585         case TLS_ST_CR_CERT:
586             return s->max_cert_list;
587
588         case TLS_ST_CR_CERT_STATUS:
589             return SSL3_RT_MAX_PLAIN_LENGTH;
590
591         case TLS_ST_CR_KEY_EXCH:
592             return SERVER_KEY_EXCH_MAX_LENGTH;
593
594         case TLS_ST_CR_CERT_REQ:
595             /* Set to s->max_cert_list for compatibility with previous releases.
596              * In practice these messages can get quite long if servers are
597              * configured to provide a long list of acceptable CAs
598              */
599             return s->max_cert_list;
600
601         case TLS_ST_CR_SRVR_DONE:
602             return SERVER_HELLO_DONE_MAX_LENGTH;
603
604         case TLS_ST_CR_CHANGE:
605             return CCS_MAX_LENGTH;
606
607         case TLS_ST_CR_SESSION_TICKET:
608             return SSL3_RT_MAX_PLAIN_LENGTH;
609
610         case TLS_ST_CR_FINISHED:
611             return FINISHED_MAX_LENGTH;
612
613         default:
614             /* Shouldn't happen */
615             break;
616     }
617
618     return 0;
619 }
620
621 /*
622  * Process a message that the client has been received from the server.
623  */
624 MSG_PROCESS_RETURN ossl_statem_client_process_message(SSL *s, PACKET *pkt)
625 {
626     OSSL_STATEM *st = &s->statem;
627
628     switch(st->hand_state) {
629         case TLS_ST_CR_SRVR_HELLO:
630             return tls_process_server_hello(s, pkt);
631
632         case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
633             return dtls_process_hello_verify(s, pkt);
634
635         case TLS_ST_CR_CERT:
636             return tls_process_server_certificate(s, pkt);
637
638         case TLS_ST_CR_CERT_STATUS:
639             return tls_process_cert_status(s, pkt);
640
641         case TLS_ST_CR_KEY_EXCH:
642             return tls_process_key_exchange(s, pkt);
643
644         case TLS_ST_CR_CERT_REQ:
645             return tls_process_certificate_request(s, pkt);
646
647         case TLS_ST_CR_SRVR_DONE:
648             return tls_process_server_done(s, pkt);
649
650         case TLS_ST_CR_CHANGE:
651             return tls_process_change_cipher_spec(s, pkt);
652
653         case TLS_ST_CR_SESSION_TICKET:
654             return tls_process_new_session_ticket(s, pkt);
655
656         case TLS_ST_CR_FINISHED:
657             return tls_process_finished(s, pkt);
658
659         default:
660             /* Shouldn't happen */
661             break;
662     }
663
664     return MSG_PROCESS_ERROR;
665 }
666
667 /*
668  * Perform any further processing required following the receipt of a message
669  * from the server
670  */
671 WORK_STATE ossl_statem_client_post_process_message(SSL *s, WORK_STATE wst)
672 {
673     OSSL_STATEM *st = &s->statem;
674
675     switch(st->hand_state) {
676 #ifndef OPENSSL_NO_SCTP
677     case TLS_ST_CR_SRVR_DONE:
678         /* We only get here if we are using SCTP and we are renegotiating */
679         if (BIO_dgram_sctp_msg_waiting(SSL_get_rbio(s))) {
680             s->s3->in_read_app_data = 2;
681             s->rwstate = SSL_READING;
682             BIO_clear_retry_flags(SSL_get_rbio(s));
683             BIO_set_retry_read(SSL_get_rbio(s));
684             ossl_statem_set_sctp_read_sock(s, 1);
685             return WORK_MORE_A;
686         }
687         ossl_statem_set_sctp_read_sock(s, 0);
688         return WORK_FINISHED_STOP;
689 #endif
690
691     default:
692         break;
693     }
694
695     /* Shouldn't happen */
696     return WORK_ERROR;
697 }
698
699 int tls_construct_client_hello(SSL *s)
700 {
701     unsigned char *buf;
702     unsigned char *p, *d;
703     int i;
704     int protverr;
705     unsigned long l;
706     int al = 0;
707 #ifndef OPENSSL_NO_COMP
708     int j;
709     SSL_COMP *comp;
710 #endif
711     SSL_SESSION *sess = s->session;
712
713     buf = (unsigned char *)s->init_buf->data;
714
715     /* Work out what SSL/TLS/DTLS version to use */
716     protverr = ssl_set_client_hello_version(s);
717     if (protverr != 0) {
718         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, protverr);
719         goto err;
720     }
721
722     if ((sess == NULL) ||
723         !ssl_version_supported(s, sess->ssl_version) ||
724         /*
725          * In the case of EAP-FAST, we can have a pre-shared
726          * "ticket" without a session ID.
727          */
728         (!sess->session_id_length && !sess->tlsext_tick) ||
729         (sess->not_resumable)) {
730         if (!ssl_get_new_session(s, 0))
731             goto err;
732     }
733     /* else use the pre-loaded session */
734
735     p = s->s3->client_random;
736
737     /*
738      * for DTLS if client_random is initialized, reuse it, we are
739      * required to use same upon reply to HelloVerify
740      */
741     if (SSL_IS_DTLS(s)) {
742         size_t idx;
743         i = 1;
744         for (idx = 0; idx < sizeof(s->s3->client_random); idx++) {
745             if (p[idx]) {
746                 i = 0;
747                 break;
748             }
749         }
750     } else
751         i = 1;
752
753     if (i && ssl_fill_hello_random(s, 0, p,
754                                    sizeof(s->s3->client_random)) <= 0)
755         goto err;
756
757     /* Do the message type and length last */
758     d = p = ssl_handshake_start(s);
759
760     /*-
761      * version indicates the negotiated version: for example from
762      * an SSLv2/v3 compatible client hello). The client_version
763      * field is the maximum version we permit and it is also
764      * used in RSA encrypted premaster secrets. Some servers can
765      * choke if we initially report a higher version then
766      * renegotiate to a lower one in the premaster secret. This
767      * didn't happen with TLS 1.0 as most servers supported it
768      * but it can with TLS 1.1 or later if the server only supports
769      * 1.0.
770      *
771      * Possible scenario with previous logic:
772      *      1. Client hello indicates TLS 1.2
773      *      2. Server hello says TLS 1.0
774      *      3. RSA encrypted premaster secret uses 1.2.
775      *      4. Handshake proceeds using TLS 1.0.
776      *      5. Server sends hello request to renegotiate.
777      *      6. Client hello indicates TLS v1.0 as we now
778      *         know that is maximum server supports.
779      *      7. Server chokes on RSA encrypted premaster secret
780      *         containing version 1.0.
781      *
782      * For interoperability it should be OK to always use the
783      * maximum version we support in client hello and then rely
784      * on the checking of version to ensure the servers isn't
785      * being inconsistent: for example initially negotiating with
786      * TLS 1.0 and renegotiating with TLS 1.2. We do this by using
787      * client_version in client hello and not resetting it to
788      * the negotiated version.
789      */
790     *(p++) = s->client_version >> 8;
791     *(p++) = s->client_version & 0xff;
792
793     /* Random stuff */
794     memcpy(p, s->s3->client_random, SSL3_RANDOM_SIZE);
795     p += SSL3_RANDOM_SIZE;
796
797     /* Session ID */
798     if (s->new_session)
799         i = 0;
800     else
801         i = s->session->session_id_length;
802     *(p++) = i;
803     if (i != 0) {
804         if (i > (int)sizeof(s->session->session_id)) {
805             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
806             goto err;
807         }
808         memcpy(p, s->session->session_id, i);
809         p += i;
810     }
811
812     /* cookie stuff for DTLS */
813     if (SSL_IS_DTLS(s)) {
814         if (s->d1->cookie_len > sizeof(s->d1->cookie)) {
815             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
816             goto err;
817         }
818         *(p++) = s->d1->cookie_len;
819         memcpy(p, s->d1->cookie, s->d1->cookie_len);
820         p += s->d1->cookie_len;
821     }
822
823     /* Ciphers supported */
824     i = ssl_cipher_list_to_bytes(s, SSL_get_ciphers(s), &(p[2]));
825     if (i == 0) {
826         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, SSL_R_NO_CIPHERS_AVAILABLE);
827         goto err;
828     }
829 #ifdef OPENSSL_MAX_TLS1_2_CIPHER_LENGTH
830     /*
831      * Some servers hang if client hello > 256 bytes as hack workaround
832      * chop number of supported ciphers to keep it well below this if we
833      * use TLS v1.2
834      */
835     if (TLS1_get_version(s) >= TLS1_2_VERSION
836         && i > OPENSSL_MAX_TLS1_2_CIPHER_LENGTH)
837         i = OPENSSL_MAX_TLS1_2_CIPHER_LENGTH & ~1;
838 #endif
839     s2n(i, p);
840     p += i;
841
842     /* COMPRESSION */
843 #ifdef OPENSSL_NO_COMP
844     *(p++) = 1;
845 #else
846
847     if (!ssl_allow_compression(s) || !s->ctx->comp_methods)
848         j = 0;
849     else
850         j = sk_SSL_COMP_num(s->ctx->comp_methods);
851     *(p++) = 1 + j;
852     for (i = 0; i < j; i++) {
853         comp = sk_SSL_COMP_value(s->ctx->comp_methods, i);
854         *(p++) = comp->id;
855     }
856 #endif
857     *(p++) = 0;             /* Add the NULL method */
858
859     /* TLS extensions */
860     if (ssl_prepare_clienthello_tlsext(s) <= 0) {
861         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
862         goto err;
863     }
864     if ((p =
865          ssl_add_clienthello_tlsext(s, p, buf + SSL3_RT_MAX_PLAIN_LENGTH,
866                                     &al)) == NULL) {
867         ssl3_send_alert(s, SSL3_AL_FATAL, al);
868         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
869         goto err;
870     }
871
872     l = p - d;
873     if (!ssl_set_handshake_header(s, SSL3_MT_CLIENT_HELLO, l)) {
874         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
875         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
876         goto err;
877     }
878
879     return 1;
880  err:
881     ossl_statem_set_error(s);
882     return 0;
883 }
884
885 MSG_PROCESS_RETURN dtls_process_hello_verify(SSL *s, PACKET *pkt)
886 {
887     int al;
888     unsigned int cookie_len;
889     PACKET cookiepkt;
890
891     if (!PACKET_forward(pkt, 2)
892             || !PACKET_get_length_prefixed_1(pkt, &cookiepkt)) {
893         al = SSL_AD_DECODE_ERROR;
894         SSLerr(SSL_F_DTLS_PROCESS_HELLO_VERIFY, SSL_R_LENGTH_MISMATCH);
895         goto f_err;
896     }
897
898     cookie_len = PACKET_remaining(&cookiepkt);
899     if (cookie_len > sizeof(s->d1->cookie)) {
900         al = SSL_AD_ILLEGAL_PARAMETER;
901         SSLerr(SSL_F_DTLS_PROCESS_HELLO_VERIFY, SSL_R_LENGTH_TOO_LONG);
902         goto f_err;
903     }
904
905     if (!PACKET_copy_bytes(&cookiepkt, s->d1->cookie, cookie_len)) {
906         al = SSL_AD_DECODE_ERROR;
907         SSLerr(SSL_F_DTLS_PROCESS_HELLO_VERIFY, SSL_R_LENGTH_MISMATCH);
908         goto f_err;
909     }
910     s->d1->cookie_len = cookie_len;
911
912     return MSG_PROCESS_FINISHED_READING;
913  f_err:
914     ssl3_send_alert(s, SSL3_AL_FATAL, al);
915     ossl_statem_set_error(s);
916     return MSG_PROCESS_ERROR;
917 }
918
919 MSG_PROCESS_RETURN tls_process_server_hello(SSL *s, PACKET *pkt)
920 {
921     STACK_OF(SSL_CIPHER) *sk;
922     const SSL_CIPHER *c;
923     PACKET session_id;
924     size_t session_id_len;
925     const unsigned char *cipherchars;
926     int i, al = SSL_AD_INTERNAL_ERROR;
927     unsigned int compression;
928     unsigned int sversion;
929     int protverr;
930 #ifndef OPENSSL_NO_COMP
931     SSL_COMP *comp;
932 #endif
933
934     if (!PACKET_get_net_2(pkt, &sversion)) {
935         al = SSL_AD_DECODE_ERROR;
936         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
937         goto f_err;
938     }
939
940     protverr = ssl_choose_client_version(s, sversion);
941     if (protverr != 0) {
942         al = SSL_AD_PROTOCOL_VERSION;
943         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, protverr);
944         goto f_err;
945     }
946
947     /* load the server hello data */
948     /* load the server random */
949     if (!PACKET_copy_bytes(pkt, s->s3->server_random, SSL3_RANDOM_SIZE)) {
950         al = SSL_AD_DECODE_ERROR;
951         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
952         goto f_err;
953     }
954
955     s->hit = 0;
956
957     /* Get the session-id. */
958     if (!PACKET_get_length_prefixed_1(pkt, &session_id)) {
959         al = SSL_AD_DECODE_ERROR;
960         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
961         goto f_err;
962     }
963     session_id_len = PACKET_remaining(&session_id);
964     if (session_id_len > sizeof s->session->session_id
965         || session_id_len > SSL3_SESSION_ID_SIZE) {
966         al = SSL_AD_ILLEGAL_PARAMETER;
967         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_SSL3_SESSION_ID_TOO_LONG);
968         goto f_err;
969     }
970
971     if (!PACKET_get_bytes(pkt, &cipherchars, TLS_CIPHER_LEN)) {
972         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
973         al = SSL_AD_DECODE_ERROR;
974         goto f_err;
975     }
976
977     /*
978      * Check if we can resume the session based on external pre-shared secret.
979      * EAP-FAST (RFC 4851) supports two types of session resumption.
980      * Resumption based on server-side state works with session IDs.
981      * Resumption based on pre-shared Protected Access Credentials (PACs)
982      * works by overriding the SessionTicket extension at the application
983      * layer, and does not send a session ID. (We do not know whether EAP-FAST
984      * servers would honour the session ID.) Therefore, the session ID alone
985      * is not a reliable indicator of session resumption, so we first check if
986      * we can resume, and later peek at the next handshake message to see if the
987      * server wants to resume.
988      */
989     if (s->version >= TLS1_VERSION && s->tls_session_secret_cb &&
990         s->session->tlsext_tick) {
991         const SSL_CIPHER *pref_cipher = NULL;
992         s->session->master_key_length = sizeof(s->session->master_key);
993         if (s->tls_session_secret_cb(s, s->session->master_key,
994                                      &s->session->master_key_length,
995                                      NULL, &pref_cipher,
996                                      s->tls_session_secret_cb_arg)) {
997             s->session->cipher = pref_cipher ?
998                 pref_cipher : ssl_get_cipher_by_char(s, cipherchars);
999         } else {
1000             SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
1001             al = SSL_AD_INTERNAL_ERROR;
1002             goto f_err;
1003         }
1004     }
1005
1006     if (session_id_len != 0 && session_id_len == s->session->session_id_length
1007         && memcmp(PACKET_data(&session_id), s->session->session_id,
1008                   session_id_len) == 0) {
1009         if (s->sid_ctx_length != s->session->sid_ctx_length
1010             || memcmp(s->session->sid_ctx, s->sid_ctx, s->sid_ctx_length)) {
1011             /* actually a client application bug */
1012             al = SSL_AD_ILLEGAL_PARAMETER;
1013             SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
1014                    SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
1015             goto f_err;
1016         }
1017         s->hit = 1;
1018     } else {
1019         /*
1020          * If we were trying for session-id reuse but the server
1021          * didn't echo the ID, make a new SSL_SESSION.
1022          * In the case of EAP-FAST and PAC, we do not send a session ID,
1023          * so the PAC-based session secret is always preserved. It'll be
1024          * overwritten if the server refuses resumption.
1025          */
1026         if (s->session->session_id_length > 0) {
1027             if (!ssl_get_new_session(s, 0)) {
1028                 goto f_err;
1029             }
1030         }
1031
1032         s->session->ssl_version = s->version;
1033         s->session->session_id_length = session_id_len;
1034         /* session_id_len could be 0 */
1035         memcpy(s->session->session_id, PACKET_data(&session_id),
1036                session_id_len);
1037     }
1038
1039     /* Session version and negotiated protocol version should match */
1040     if (s->version != s->session->ssl_version) {
1041         al = SSL_AD_PROTOCOL_VERSION;
1042
1043         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
1044                SSL_R_SSL_SESSION_VERSION_MISMATCH);
1045         goto f_err;
1046     }
1047
1048     c = ssl_get_cipher_by_char(s, cipherchars);
1049     if (c == NULL) {
1050         /* unknown cipher */
1051         al = SSL_AD_ILLEGAL_PARAMETER;
1052         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_UNKNOWN_CIPHER_RETURNED);
1053         goto f_err;
1054     }
1055     /*
1056      * Now that we know the version, update the check to see if it's an allowed
1057      * version.
1058      */
1059     s->s3->tmp.min_ver = s->version;
1060     s->s3->tmp.max_ver = s->version;
1061     /*
1062      * If it is a disabled cipher we either didn't send it in client hello,
1063      * or it's not allowed for the selected protocol. So we return an error.
1064      */
1065     if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_CHECK)) {
1066         al = SSL_AD_ILLEGAL_PARAMETER;
1067         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_WRONG_CIPHER_RETURNED);
1068         goto f_err;
1069     }
1070
1071     sk = ssl_get_ciphers_by_id(s);
1072     i = sk_SSL_CIPHER_find(sk, c);
1073     if (i < 0) {
1074         /* we did not say we would use this cipher */
1075         al = SSL_AD_ILLEGAL_PARAMETER;
1076         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_WRONG_CIPHER_RETURNED);
1077         goto f_err;
1078     }
1079
1080     /*
1081      * Depending on the session caching (internal/external), the cipher
1082      * and/or cipher_id values may not be set. Make sure that cipher_id is
1083      * set and use it for comparison.
1084      */
1085     if (s->session->cipher)
1086         s->session->cipher_id = s->session->cipher->id;
1087     if (s->hit && (s->session->cipher_id != c->id)) {
1088         al = SSL_AD_ILLEGAL_PARAMETER;
1089         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
1090                SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED);
1091         goto f_err;
1092     }
1093     s->s3->tmp.new_cipher = c;
1094     /* lets get the compression algorithm */
1095     /* COMPRESSION */
1096     if (!PACKET_get_1(pkt, &compression)) {
1097         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_LENGTH_MISMATCH);
1098         al = SSL_AD_DECODE_ERROR;
1099         goto f_err;
1100     }
1101 #ifdef OPENSSL_NO_COMP
1102     if (compression != 0) {
1103         al = SSL_AD_ILLEGAL_PARAMETER;
1104         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
1105                SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
1106         goto f_err;
1107     }
1108     /*
1109      * If compression is disabled we'd better not try to resume a session
1110      * using compression.
1111      */
1112     if (s->session->compress_meth != 0) {
1113         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_INCONSISTENT_COMPRESSION);
1114         goto f_err;
1115     }
1116 #else
1117     if (s->hit && compression != s->session->compress_meth) {
1118         al = SSL_AD_ILLEGAL_PARAMETER;
1119         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
1120                SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED);
1121         goto f_err;
1122     }
1123     if (compression == 0)
1124         comp = NULL;
1125     else if (!ssl_allow_compression(s)) {
1126         al = SSL_AD_ILLEGAL_PARAMETER;
1127         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_COMPRESSION_DISABLED);
1128         goto f_err;
1129     } else {
1130         comp = ssl3_comp_find(s->ctx->comp_methods, compression);
1131     }
1132
1133     if (compression != 0 && comp == NULL) {
1134         al = SSL_AD_ILLEGAL_PARAMETER;
1135         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO,
1136                SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
1137         goto f_err;
1138     } else {
1139         s->s3->tmp.new_compression = comp;
1140     }
1141 #endif
1142
1143     /* TLS extensions */
1144     if (!ssl_parse_serverhello_tlsext(s, pkt)) {
1145         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_PARSE_TLSEXT);
1146         goto err;
1147     }
1148
1149     if (PACKET_remaining(pkt) != 0) {
1150         /* wrong packet length */
1151         al = SSL_AD_DECODE_ERROR;
1152         SSLerr(SSL_F_TLS_PROCESS_SERVER_HELLO, SSL_R_BAD_PACKET_LENGTH);
1153         goto f_err;
1154     }
1155
1156 #ifndef OPENSSL_NO_SCTP
1157     if (SSL_IS_DTLS(s) && s->hit) {
1158         unsigned char sctpauthkey[64];
1159         char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
1160
1161         /*
1162          * Add new shared key for SCTP-Auth, will be ignored if
1163          * no SCTP used.
1164          */
1165         memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
1166                sizeof(DTLS1_SCTP_AUTH_LABEL));
1167
1168         if (SSL_export_keying_material(s, sctpauthkey,
1169                                    sizeof(sctpauthkey),
1170                                    labelbuffer,
1171                                    sizeof(labelbuffer), NULL, 0,
1172                                    0) <= 0)
1173             goto err;
1174
1175         BIO_ctrl(SSL_get_wbio(s),
1176                  BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
1177                  sizeof(sctpauthkey), sctpauthkey);
1178     }
1179 #endif
1180
1181     return MSG_PROCESS_CONTINUE_READING;
1182  f_err:
1183     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1184  err:
1185     ossl_statem_set_error(s);
1186     return MSG_PROCESS_ERROR;
1187 }
1188
1189 MSG_PROCESS_RETURN tls_process_server_certificate(SSL *s, PACKET *pkt)
1190 {
1191     int al, i, ret = MSG_PROCESS_ERROR, exp_idx;
1192     unsigned long cert_list_len, cert_len;
1193     X509 *x = NULL;
1194     const unsigned char *certstart, *certbytes;
1195     STACK_OF(X509) *sk = NULL;
1196     EVP_PKEY *pkey = NULL;
1197
1198     if ((sk = sk_X509_new_null()) == NULL) {
1199         SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, ERR_R_MALLOC_FAILURE);
1200         goto err;
1201     }
1202
1203     if (!PACKET_get_net_3(pkt, &cert_list_len)
1204             || PACKET_remaining(pkt) != cert_list_len) {
1205         al = SSL_AD_DECODE_ERROR;
1206         SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, SSL_R_LENGTH_MISMATCH);
1207         goto f_err;
1208     }
1209     while (PACKET_remaining(pkt)) {
1210         if (!PACKET_get_net_3(pkt, &cert_len)
1211                 || !PACKET_get_bytes(pkt, &certbytes, cert_len)) {
1212             al = SSL_AD_DECODE_ERROR;
1213             SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1214                    SSL_R_CERT_LENGTH_MISMATCH);
1215             goto f_err;
1216         }
1217
1218         certstart = certbytes;
1219         x = d2i_X509(NULL, (const unsigned char **)&certbytes, cert_len);
1220         if (x == NULL) {
1221             al = SSL_AD_BAD_CERTIFICATE;
1222             SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, ERR_R_ASN1_LIB);
1223             goto f_err;
1224         }
1225         if (certbytes != (certstart + cert_len)) {
1226             al = SSL_AD_DECODE_ERROR;
1227             SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1228                    SSL_R_CERT_LENGTH_MISMATCH);
1229             goto f_err;
1230         }
1231         if (!sk_X509_push(sk, x)) {
1232             SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, ERR_R_MALLOC_FAILURE);
1233             goto err;
1234         }
1235         x = NULL;
1236     }
1237
1238     i = ssl_verify_cert_chain(s, sk);
1239     if ((s->verify_mode & SSL_VERIFY_PEER) && i <= 0) {
1240         al = ssl_verify_alarm_type(s->verify_result);
1241         SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1242                SSL_R_CERTIFICATE_VERIFY_FAILED);
1243         goto f_err;
1244     }
1245     ERR_clear_error();          /* but we keep s->verify_result */
1246     if (i > 1) {
1247         SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, i);
1248         al = SSL_AD_HANDSHAKE_FAILURE;
1249         goto f_err;
1250     }
1251
1252     s->session->peer_chain = sk;
1253     /*
1254      * Inconsistency alert: cert_chain does include the peer's certificate,
1255      * which we don't include in statem_srvr.c
1256      */
1257     x = sk_X509_value(sk, 0);
1258     sk = NULL;
1259     /*
1260      * VRS 19990621: possible memory leak; sk=null ==> !sk_pop_free() @end
1261      */
1262
1263     pkey = X509_get0_pubkey(x);
1264
1265     if (pkey == NULL || EVP_PKEY_missing_parameters(pkey)) {
1266         x = NULL;
1267         al = SSL3_AL_FATAL;
1268         SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1269                SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS);
1270         goto f_err;
1271     }
1272
1273     i = ssl_cert_type(x, pkey);
1274     if (i < 0) {
1275         x = NULL;
1276         al = SSL3_AL_FATAL;
1277         SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1278                SSL_R_UNKNOWN_CERTIFICATE_TYPE);
1279         goto f_err;
1280     }
1281
1282     exp_idx = ssl_cipher_get_cert_index(s->s3->tmp.new_cipher);
1283     if (exp_idx >= 0 && i != exp_idx
1284             && (exp_idx != SSL_PKEY_GOST_EC ||
1285                 (i != SSL_PKEY_GOST12_512 && i != SSL_PKEY_GOST12_256
1286                  && i != SSL_PKEY_GOST01))) {
1287         x = NULL;
1288         al = SSL_AD_ILLEGAL_PARAMETER;
1289         SSLerr(SSL_F_TLS_PROCESS_SERVER_CERTIFICATE,
1290                SSL_R_WRONG_CERTIFICATE_TYPE);
1291         goto f_err;
1292     }
1293     s->session->peer_type = i;
1294
1295     X509_free(s->session->peer);
1296     X509_up_ref(x);
1297     s->session->peer = x;
1298     s->session->verify_result = s->verify_result;
1299
1300     x = NULL;
1301     ret = MSG_PROCESS_CONTINUE_READING;
1302     goto done;
1303
1304  f_err:
1305     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1306  err:
1307     ossl_statem_set_error(s);
1308  done:
1309     X509_free(x);
1310     sk_X509_pop_free(sk, X509_free);
1311     return ret;
1312 }
1313
1314 MSG_PROCESS_RETURN tls_process_key_exchange(SSL *s, PACKET *pkt)
1315 {
1316     EVP_MD_CTX *md_ctx;
1317     int al, j;
1318     long alg_k, alg_a;
1319     EVP_PKEY *pkey = NULL;
1320     const EVP_MD *md = NULL;
1321 #ifndef OPENSSL_NO_RSA
1322     RSA *rsa = NULL;
1323 #endif
1324 #ifndef OPENSSL_NO_EC
1325     EVP_PKEY_CTX *pctx = NULL;
1326 #endif
1327     PACKET save_param_start, signature;
1328
1329     md_ctx = EVP_MD_CTX_new();
1330     if (md_ctx == NULL) {
1331         al = SSL_AD_INTERNAL_ERROR;
1332         SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE);
1333         goto f_err;
1334     }
1335
1336     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
1337
1338     save_param_start = *pkt;
1339
1340 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
1341     EVP_PKEY_free(s->s3->peer_tmp);
1342     s->s3->peer_tmp = NULL;
1343 #endif
1344
1345     alg_a = s->s3->tmp.new_cipher->algorithm_auth;
1346
1347     al = SSL_AD_DECODE_ERROR;
1348
1349 #ifndef OPENSSL_NO_PSK
1350     /* PSK ciphersuites are preceded by an identity hint */
1351     if (alg_k & SSL_PSK) {
1352         PACKET psk_identity_hint;
1353         if (!PACKET_get_length_prefixed_2(pkt, &psk_identity_hint)) {
1354             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_MISMATCH);
1355             goto f_err;
1356         }
1357
1358         /*
1359          * Store PSK identity hint for later use, hint is used in
1360          * ssl3_send_client_key_exchange.  Assume that the maximum length of
1361          * a PSK identity hint can be as long as the maximum length of a PSK
1362          * identity.
1363          */
1364         if (PACKET_remaining(&psk_identity_hint) > PSK_MAX_IDENTITY_LEN) {
1365             al = SSL_AD_HANDSHAKE_FAILURE;
1366             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_DATA_LENGTH_TOO_LONG);
1367             goto f_err;
1368         }
1369
1370         if (PACKET_remaining(&psk_identity_hint) == 0) {
1371             OPENSSL_free(s->session->psk_identity_hint);
1372             s->session->psk_identity_hint = NULL;
1373         } else if (!PACKET_strndup(&psk_identity_hint,
1374                             &s->session->psk_identity_hint)) {
1375             al = SSL_AD_INTERNAL_ERROR;
1376             goto f_err;
1377         }
1378     }
1379
1380     /* Nothing else to do for plain PSK or RSAPSK */
1381     if (alg_k & (SSL_kPSK | SSL_kRSAPSK)) {
1382     } else
1383 #endif                          /* !OPENSSL_NO_PSK */
1384     /*
1385      * Dummy "if" to ensure sane C code in the event of various OPENSSL_NO_*
1386      * options
1387      */
1388     if (0) {
1389     }
1390 #ifndef OPENSSL_NO_SRP
1391     else if (alg_k & SSL_kSRP) {
1392         PACKET prime, generator, salt, server_pub;
1393         if (!PACKET_get_length_prefixed_2(pkt, &prime)
1394             || !PACKET_get_length_prefixed_2(pkt, &generator)
1395             || !PACKET_get_length_prefixed_1(pkt, &salt)
1396             || !PACKET_get_length_prefixed_2(pkt, &server_pub)) {
1397             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_MISMATCH);
1398             goto f_err;
1399         }
1400
1401         if ((s->srp_ctx.N =
1402              BN_bin2bn(PACKET_data(&prime),
1403                        PACKET_remaining(&prime), NULL)) == NULL
1404             || (s->srp_ctx.g =
1405                 BN_bin2bn(PACKET_data(&generator),
1406                           PACKET_remaining(&generator), NULL)) == NULL
1407             || (s->srp_ctx.s =
1408                 BN_bin2bn(PACKET_data(&salt),
1409                           PACKET_remaining(&salt), NULL)) == NULL
1410             || (s->srp_ctx.B =
1411                 BN_bin2bn(PACKET_data(&server_pub),
1412                           PACKET_remaining(&server_pub), NULL)) == NULL) {
1413             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_BN_LIB);
1414             goto err;
1415         }
1416
1417         if (!srp_verify_server_param(s, &al)) {
1418             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_BAD_SRP_PARAMETERS);
1419             goto f_err;
1420         }
1421
1422 /* We must check if there is a certificate */
1423         if (alg_a & (SSL_aRSA|SSL_aDSS))
1424             pkey = X509_get0_pubkey(s->session->peer);
1425     }
1426 #endif                          /* !OPENSSL_NO_SRP */
1427 #ifndef OPENSSL_NO_DH
1428     else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
1429         PACKET prime, generator, pub_key;
1430         EVP_PKEY *peer_tmp = NULL;
1431
1432         DH *dh = NULL;
1433         BIGNUM *p = NULL, *g = NULL, *bnpub_key = NULL;
1434
1435         if (!PACKET_get_length_prefixed_2(pkt, &prime)
1436             || !PACKET_get_length_prefixed_2(pkt, &generator)
1437             || !PACKET_get_length_prefixed_2(pkt, &pub_key)) {
1438             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_MISMATCH);
1439             goto f_err;
1440         }
1441
1442         peer_tmp = EVP_PKEY_new();
1443         dh = DH_new();
1444
1445         if (peer_tmp == NULL || dh == NULL) {
1446             al = SSL_AD_INTERNAL_ERROR;
1447             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE);
1448             goto dherr;
1449         }
1450
1451         p = BN_bin2bn(PACKET_data(&prime), PACKET_remaining(&prime), NULL);
1452         g = BN_bin2bn(PACKET_data(&generator), PACKET_remaining(&generator),
1453                       NULL);
1454         bnpub_key = BN_bin2bn(PACKET_data(&pub_key), PACKET_remaining(&pub_key),
1455                               NULL);
1456         if (p == NULL || g == NULL || bnpub_key == NULL) {
1457             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_BN_LIB);
1458             goto dherr;
1459         }
1460
1461         if (BN_is_zero(p) || BN_is_zero(g) || BN_is_zero(bnpub_key)) {
1462             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_BAD_DH_VALUE);
1463             goto dherr;
1464         }
1465
1466         if (!DH_set0_pqg(dh, p, NULL, g)) {
1467             al = SSL_AD_INTERNAL_ERROR;
1468             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_BN_LIB);
1469             goto dherr;
1470         }
1471
1472         if (!DH_set0_key(dh, bnpub_key, NULL)) {
1473             al = SSL_AD_INTERNAL_ERROR;
1474             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_BN_LIB);
1475             goto dherr;
1476         }
1477
1478         if (!ssl_security(s, SSL_SECOP_TMP_DH, DH_security_bits(dh), 0, dh)) {
1479             al = SSL_AD_HANDSHAKE_FAILURE;
1480             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_DH_KEY_TOO_SMALL);
1481             goto dherr;
1482         }
1483
1484         if (EVP_PKEY_assign_DH(peer_tmp, dh) == 0) {
1485             al = SSL_AD_INTERNAL_ERROR;
1486             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_EVP_LIB);
1487             goto dherr;
1488         }
1489
1490         s->s3->peer_tmp = peer_tmp;
1491
1492         goto dhend;
1493  dherr:
1494         BN_free(p);
1495         BN_free(g);
1496         BN_free(bnpub_key);
1497         DH_free(dh);
1498         EVP_PKEY_free(peer_tmp);
1499         goto f_err;
1500  dhend:
1501         /*
1502          * FIXME: This makes assumptions about which ciphersuites come with
1503          * public keys. We should have a less ad-hoc way of doing this
1504          */
1505         if (alg_a & (SSL_aRSA|SSL_aDSS))
1506             pkey = X509_get0_pubkey(s->session->peer);
1507         /* else anonymous DH, so no certificate or pkey. */
1508     }
1509 #endif                          /* !OPENSSL_NO_DH */
1510
1511 #ifndef OPENSSL_NO_EC
1512     else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
1513         PACKET encoded_pt;
1514         const unsigned char *ecparams;
1515         int curve_nid;
1516
1517         /*
1518          * Extract elliptic curve parameters and the server's ephemeral ECDH
1519          * public key. For now we only support named (not generic) curves and
1520          * ECParameters in this case is just three bytes.
1521          */
1522         if (!PACKET_get_bytes(pkt, &ecparams, 3)) {
1523             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT);
1524             goto f_err;
1525         }
1526         /*
1527          * Check curve is one of our preferences, if not server has sent an
1528          * invalid curve. ECParameters is 3 bytes.
1529          */
1530         if (!tls1_check_curve(s, ecparams, 3)) {
1531             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_WRONG_CURVE);
1532             goto f_err;
1533         }
1534
1535         curve_nid = tls1_ec_curve_id2nid(*(ecparams + 2));
1536         if (curve_nid  == 0) {
1537             al = SSL_AD_INTERNAL_ERROR;
1538             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE,
1539                    SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS);
1540             goto f_err;
1541         }
1542
1543         /* Set up EVP_PKEY with named curve as parameters */
1544         pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
1545         if (pctx == NULL
1546             || EVP_PKEY_paramgen_init(pctx) <= 0
1547             || EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, curve_nid) <= 0
1548             || EVP_PKEY_paramgen(pctx, &s->s3->peer_tmp) <= 0) {
1549             al = SSL_AD_INTERNAL_ERROR;
1550             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_EVP_LIB);
1551             goto f_err;
1552         }
1553         EVP_PKEY_CTX_free(pctx);
1554         pctx = NULL;
1555
1556         if (!PACKET_get_length_prefixed_1(pkt, &encoded_pt)) {
1557             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_MISMATCH);
1558             goto f_err;
1559         }
1560
1561         if (EC_KEY_oct2key(EVP_PKEY_get0_EC_KEY(s->s3->peer_tmp),
1562                            PACKET_data(&encoded_pt),
1563                            PACKET_remaining(&encoded_pt), NULL) == 0) {
1564             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_BAD_ECPOINT);
1565             goto f_err;
1566         }
1567
1568         /*
1569          * The ECC/TLS specification does not mention the use of DSA to sign
1570          * ECParameters in the server key exchange message. We do support RSA
1571          * and ECDSA.
1572          */
1573         if (0) ;
1574 # ifndef OPENSSL_NO_RSA
1575         else if (alg_a & SSL_aRSA)
1576             pkey = X509_get0_pubkey(s->session->peer);
1577 # endif
1578 # ifndef OPENSSL_NO_EC
1579         else if (alg_a & SSL_aECDSA)
1580             pkey = X509_get0_pubkey(s->session->peer);
1581 # endif
1582         /* else anonymous ECDH, so no certificate or pkey. */
1583     } else if (alg_k) {
1584         al = SSL_AD_UNEXPECTED_MESSAGE;
1585         SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_UNEXPECTED_MESSAGE);
1586         goto f_err;
1587     }
1588 #endif                          /* !OPENSSL_NO_EC */
1589
1590     /* if it was signed, check the signature */
1591     if (pkey != NULL) {
1592         PACKET params;
1593         /*
1594          * |pkt| now points to the beginning of the signature, so the difference
1595          * equals the length of the parameters.
1596          */
1597         if (!PACKET_get_sub_packet(&save_param_start, &params,
1598                                    PACKET_remaining(&save_param_start) -
1599                                    PACKET_remaining(pkt))) {
1600             al = SSL_AD_INTERNAL_ERROR;
1601             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
1602             goto f_err;
1603         }
1604
1605         if (SSL_USE_SIGALGS(s)) {
1606             const unsigned char *sigalgs;
1607             int rv;
1608             if (!PACKET_get_bytes(pkt, &sigalgs, 2)) {
1609                 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT);
1610                 goto f_err;
1611             }
1612             rv = tls12_check_peer_sigalg(&md, s, sigalgs, pkey);
1613             if (rv == -1)
1614                 goto err;
1615             else if (rv == 0) {
1616                 goto f_err;
1617             }
1618 #ifdef SSL_DEBUG
1619             fprintf(stderr, "USING TLSv1.2 HASH %s\n", EVP_MD_name(md));
1620 #endif
1621         } else if (EVP_PKEY_id(pkey) == EVP_PKEY_RSA) {
1622             md = EVP_md5_sha1();
1623         } else {
1624             md = EVP_sha1();
1625         }
1626
1627         if (!PACKET_get_length_prefixed_2(pkt, &signature)
1628             || PACKET_remaining(pkt) != 0) {
1629             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_LENGTH_MISMATCH);
1630             goto f_err;
1631         }
1632         j = EVP_PKEY_size(pkey);
1633         if (j < 0) {
1634             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
1635             goto f_err;
1636         }
1637
1638         /*
1639          * Check signature length
1640          */
1641         if (PACKET_remaining(&signature) > (size_t)j) {
1642             /* wrong packet length */
1643             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_WRONG_SIGNATURE_LENGTH);
1644             goto f_err;
1645         }
1646         if (EVP_VerifyInit_ex(md_ctx, md, NULL) <= 0
1647                 || EVP_VerifyUpdate(md_ctx, &(s->s3->client_random[0]),
1648                                     SSL3_RANDOM_SIZE) <= 0
1649                 || EVP_VerifyUpdate(md_ctx, &(s->s3->server_random[0]),
1650                                     SSL3_RANDOM_SIZE) <= 0
1651                 || EVP_VerifyUpdate(md_ctx, PACKET_data(&params),
1652                                     PACKET_remaining(&params)) <= 0) {
1653             al = SSL_AD_INTERNAL_ERROR;
1654             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_EVP_LIB);
1655             goto f_err;
1656         }
1657         if (EVP_VerifyFinal(md_ctx, PACKET_data(&signature),
1658                             PACKET_remaining(&signature), pkey) <= 0) {
1659             /* bad signature */
1660             al = SSL_AD_DECRYPT_ERROR;
1661             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_BAD_SIGNATURE);
1662             goto f_err;
1663         }
1664     } else {
1665         /* aNULL, aSRP or PSK do not need public keys */
1666         if (!(alg_a & (SSL_aNULL | SSL_aSRP)) && !(alg_k & SSL_PSK)) {
1667             /* Might be wrong key type, check it */
1668             if (ssl3_check_cert_and_algorithm(s))
1669                 /* Otherwise this shouldn't happen */
1670                 SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
1671             goto err;
1672         }
1673         /* still data left over */
1674         if (PACKET_remaining(pkt) != 0) {
1675             SSLerr(SSL_F_TLS_PROCESS_KEY_EXCHANGE, SSL_R_EXTRA_DATA_IN_MESSAGE);
1676             goto f_err;
1677         }
1678     }
1679     EVP_MD_CTX_free(md_ctx);
1680     return MSG_PROCESS_CONTINUE_READING;
1681  f_err:
1682     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1683  err:
1684 #ifndef OPENSSL_NO_RSA
1685     RSA_free(rsa);
1686 #endif
1687 #ifndef OPENSSL_NO_EC
1688     EVP_PKEY_CTX_free(pctx);
1689 #endif
1690     EVP_MD_CTX_free(md_ctx);
1691     ossl_statem_set_error(s);
1692     return MSG_PROCESS_ERROR;
1693 }
1694
1695 MSG_PROCESS_RETURN tls_process_certificate_request(SSL *s, PACKET *pkt)
1696 {
1697     int ret = MSG_PROCESS_ERROR;
1698     unsigned int list_len, ctype_num, i, name_len;
1699     X509_NAME *xn = NULL;
1700     const unsigned char *data;
1701     const unsigned char *namestart, *namebytes;
1702     STACK_OF(X509_NAME) *ca_sk = NULL;
1703
1704     if ((ca_sk = sk_X509_NAME_new(ca_dn_cmp)) == NULL) {
1705         SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
1706         goto err;
1707     }
1708
1709     /* get the certificate types */
1710     if (!PACKET_get_1(pkt, &ctype_num)
1711             || !PACKET_get_bytes(pkt, &data, ctype_num)) {
1712         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1713         SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, SSL_R_LENGTH_MISMATCH);
1714         goto err;
1715     }
1716     OPENSSL_free(s->cert->ctypes);
1717     s->cert->ctypes = NULL;
1718     if (ctype_num > SSL3_CT_NUMBER) {
1719         /* If we exceed static buffer copy all to cert structure */
1720         s->cert->ctypes = OPENSSL_malloc(ctype_num);
1721         if (s->cert->ctypes == NULL) {
1722             SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
1723             goto err;
1724         }
1725         memcpy(s->cert->ctypes, data, ctype_num);
1726         s->cert->ctype_num = (size_t)ctype_num;
1727         ctype_num = SSL3_CT_NUMBER;
1728     }
1729     for (i = 0; i < ctype_num; i++)
1730         s->s3->tmp.ctype[i] = data[i];
1731
1732     if (SSL_USE_SIGALGS(s)) {
1733         if (!PACKET_get_net_2(pkt, &list_len)
1734                 || !PACKET_get_bytes(pkt, &data, list_len)) {
1735             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1736             SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
1737                    SSL_R_LENGTH_MISMATCH);
1738             goto err;
1739         }
1740
1741         /* Clear certificate digests and validity flags */
1742         for (i = 0; i < SSL_PKEY_NUM; i++) {
1743             s->s3->tmp.md[i] = NULL;
1744             s->s3->tmp.valid_flags[i] = 0;
1745         }
1746         if ((list_len & 1) || !tls1_save_sigalgs(s, data, list_len)) {
1747             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1748             SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
1749                    SSL_R_SIGNATURE_ALGORITHMS_ERROR);
1750             goto err;
1751         }
1752         if (!tls1_process_sigalgs(s)) {
1753             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1754             SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
1755             goto err;
1756         }
1757     } else {
1758         ssl_set_default_md(s);
1759     }
1760
1761     /* get the CA RDNs */
1762     if (!PACKET_get_net_2(pkt, &list_len)
1763             || PACKET_remaining(pkt) != list_len) {
1764         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1765         SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, SSL_R_LENGTH_MISMATCH);
1766         goto err;
1767     }
1768
1769     while (PACKET_remaining(pkt)) {
1770         if (!PACKET_get_net_2(pkt, &name_len)
1771                 || !PACKET_get_bytes(pkt, &namebytes, name_len)) {
1772             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1773             SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
1774                    SSL_R_LENGTH_MISMATCH);
1775             goto err;
1776         }
1777
1778         namestart = namebytes;
1779
1780         if ((xn = d2i_X509_NAME(NULL, (const unsigned char **)&namebytes,
1781                                 name_len)) == NULL) {
1782             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1783             SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_ASN1_LIB);
1784             goto err;
1785         }
1786
1787         if (namebytes != (namestart + name_len)) {
1788             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1789             SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST,
1790                    SSL_R_CA_DN_LENGTH_MISMATCH);
1791             goto err;
1792         }
1793         if (!sk_X509_NAME_push(ca_sk, xn)) {
1794             SSLerr(SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
1795             goto err;
1796         }
1797         xn = NULL;
1798     }
1799
1800     /* we should setup a certificate to return.... */
1801     s->s3->tmp.cert_req = 1;
1802     s->s3->tmp.ctype_num = ctype_num;
1803     sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free);
1804     s->s3->tmp.ca_names = ca_sk;
1805     ca_sk = NULL;
1806
1807     ret = MSG_PROCESS_CONTINUE_READING;
1808     goto done;
1809  err:
1810     ossl_statem_set_error(s);
1811  done:
1812     X509_NAME_free(xn);
1813     sk_X509_NAME_pop_free(ca_sk, X509_NAME_free);
1814     return ret;
1815 }
1816
1817 static int ca_dn_cmp(const X509_NAME *const *a, const X509_NAME *const *b)
1818 {
1819     return (X509_NAME_cmp(*a, *b));
1820 }
1821
1822 MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL *s, PACKET *pkt)
1823 {
1824     int al;
1825     unsigned int ticklen;
1826     unsigned long ticket_lifetime_hint;
1827
1828     if (!PACKET_get_net_4(pkt, &ticket_lifetime_hint)
1829             || !PACKET_get_net_2(pkt, &ticklen)
1830             || PACKET_remaining(pkt) != ticklen) {
1831         al = SSL_AD_DECODE_ERROR;
1832         SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, SSL_R_LENGTH_MISMATCH);
1833         goto f_err;
1834     }
1835
1836     /* Server is allowed to change its mind and send an empty ticket. */
1837     if (ticklen == 0)
1838         return MSG_PROCESS_CONTINUE_READING;
1839
1840     if (s->session->session_id_length > 0) {
1841         int i = s->session_ctx->session_cache_mode;
1842         SSL_SESSION *new_sess;
1843         /*
1844          * We reused an existing session, so we need to replace it with a new
1845          * one
1846          */
1847         if (i & SSL_SESS_CACHE_CLIENT) {
1848             /*
1849              * Remove the old session from the cache
1850              */
1851             if (i & SSL_SESS_CACHE_NO_INTERNAL_STORE) {
1852                 if (s->session_ctx->remove_session_cb != NULL)
1853                     s->session_ctx->remove_session_cb(s->session_ctx,
1854                                                       s->session);
1855             } else {
1856                 /* We carry on if this fails */
1857                 SSL_CTX_remove_session(s->session_ctx, s->session);
1858             }
1859         }
1860
1861         if ((new_sess = ssl_session_dup(s->session, 0)) == 0) {
1862             al = SSL_AD_INTERNAL_ERROR;
1863             SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE);
1864             goto f_err;
1865         }
1866
1867         SSL_SESSION_free(s->session);
1868         s->session = new_sess;
1869     }
1870
1871     OPENSSL_free(s->session->tlsext_tick);
1872     s->session->tlsext_ticklen = 0;
1873
1874     s->session->tlsext_tick = OPENSSL_malloc(ticklen);
1875     if (s->session->tlsext_tick == NULL) {
1876         SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE);
1877         goto err;
1878     }
1879     if (!PACKET_copy_bytes(pkt, s->session->tlsext_tick, ticklen)) {
1880         al = SSL_AD_DECODE_ERROR;
1881         SSLerr(SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, SSL_R_LENGTH_MISMATCH);
1882         goto f_err;
1883     }
1884
1885     s->session->tlsext_tick_lifetime_hint = ticket_lifetime_hint;
1886     s->session->tlsext_ticklen = ticklen;
1887     /*
1888      * There are two ways to detect a resumed ticket session. One is to set
1889      * an appropriate session ID and then the server must return a match in
1890      * ServerHello. This allows the normal client session ID matching to work
1891      * and we know much earlier that the ticket has been accepted. The
1892      * other way is to set zero length session ID when the ticket is
1893      * presented and rely on the handshake to determine session resumption.
1894      * We choose the former approach because this fits in with assumptions
1895      * elsewhere in OpenSSL. The session ID is set to the SHA256 (or SHA1 is
1896      * SHA256 is disabled) hash of the ticket.
1897      */
1898     EVP_Digest(s->session->tlsext_tick, ticklen,
1899                s->session->session_id, &s->session->session_id_length,
1900                EVP_sha256(), NULL);
1901     return MSG_PROCESS_CONTINUE_READING;
1902  f_err:
1903     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1904  err:
1905     ossl_statem_set_error(s);
1906     return MSG_PROCESS_ERROR;
1907 }
1908
1909 MSG_PROCESS_RETURN tls_process_cert_status(SSL *s, PACKET *pkt)
1910 {
1911     int al;
1912     unsigned long resplen;
1913     unsigned int type;
1914
1915     if (!PACKET_get_1(pkt, &type)
1916             || type != TLSEXT_STATUSTYPE_ocsp) {
1917         al = SSL_AD_DECODE_ERROR;
1918         SSLerr(SSL_F_TLS_PROCESS_CERT_STATUS, SSL_R_UNSUPPORTED_STATUS_TYPE);
1919         goto f_err;
1920     }
1921     if (!PACKET_get_net_3(pkt, &resplen)
1922             || PACKET_remaining(pkt) != resplen) {
1923         al = SSL_AD_DECODE_ERROR;
1924         SSLerr(SSL_F_TLS_PROCESS_CERT_STATUS, SSL_R_LENGTH_MISMATCH);
1925         goto f_err;
1926     }
1927     s->tlsext_ocsp_resp = OPENSSL_malloc(resplen);
1928     if (s->tlsext_ocsp_resp == NULL) {
1929         al = SSL_AD_INTERNAL_ERROR;
1930         SSLerr(SSL_F_TLS_PROCESS_CERT_STATUS, ERR_R_MALLOC_FAILURE);
1931         goto f_err;
1932     }
1933     if (!PACKET_copy_bytes(pkt, s->tlsext_ocsp_resp, resplen)) {
1934         al = SSL_AD_DECODE_ERROR;
1935         SSLerr(SSL_F_TLS_PROCESS_CERT_STATUS, SSL_R_LENGTH_MISMATCH);
1936         goto f_err;
1937     }
1938     s->tlsext_ocsp_resplen = resplen;
1939     return MSG_PROCESS_CONTINUE_READING;
1940  f_err:
1941     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1942     ossl_statem_set_error(s);
1943     return MSG_PROCESS_ERROR;
1944 }
1945
1946 MSG_PROCESS_RETURN tls_process_server_done(SSL *s, PACKET *pkt)
1947 {
1948     if (PACKET_remaining(pkt) > 0) {
1949         /* should contain no data */
1950         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1951         SSLerr(SSL_F_TLS_PROCESS_SERVER_DONE, SSL_R_LENGTH_MISMATCH);
1952         ossl_statem_set_error(s);
1953         return MSG_PROCESS_ERROR;
1954     }
1955
1956 #ifndef OPENSSL_NO_SRP
1957     if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) {
1958         if (SRP_Calc_A_param(s) <= 0) {
1959             SSLerr(SSL_F_TLS_PROCESS_SERVER_DONE, SSL_R_SRP_A_CALC);
1960             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1961             ossl_statem_set_error(s);
1962             return MSG_PROCESS_ERROR;
1963         }
1964     }
1965 #endif
1966
1967     /*
1968      * at this point we check that we have the required stuff from
1969      * the server
1970      */
1971     if (!ssl3_check_cert_and_algorithm(s)) {
1972         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1973         ossl_statem_set_error(s);
1974         return MSG_PROCESS_ERROR;
1975     }
1976
1977     /*
1978      * Call the ocsp status callback if needed. The |tlsext_ocsp_resp| and
1979      * |tlsext_ocsp_resplen| values will be set if we actually received a status
1980      * message, or NULL and -1 otherwise
1981      */
1982     if (s->tlsext_status_type != -1 && s->ctx->tlsext_status_cb != NULL) {
1983         int ret;
1984         ret = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
1985         if (ret == 0) {
1986             ssl3_send_alert(s, SSL3_AL_FATAL,
1987                             SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE);
1988             SSLerr(SSL_F_TLS_PROCESS_SERVER_DONE,
1989                    SSL_R_INVALID_STATUS_RESPONSE);
1990             return MSG_PROCESS_ERROR;
1991         }
1992         if (ret < 0) {
1993             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1994             SSLerr(SSL_F_TLS_PROCESS_SERVER_DONE, ERR_R_MALLOC_FAILURE);
1995             return MSG_PROCESS_ERROR;
1996         }
1997     }
1998
1999 #ifndef OPENSSL_NO_CT
2000     if (s->ct_validation_callback != NULL) {
2001         /* Note we validate the SCTs whether or not we abort on error */
2002         if (!ssl_validate_ct(s) && (s->verify_mode & SSL_VERIFY_PEER)) {
2003             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
2004             return MSG_PROCESS_ERROR;
2005         }
2006     }
2007 #endif
2008
2009 #ifndef OPENSSL_NO_SCTP
2010     /* Only applies to renegotiation */
2011     if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s))
2012             && s->renegotiate != 0)
2013         return MSG_PROCESS_CONTINUE_PROCESSING;
2014     else
2015 #endif
2016         return MSG_PROCESS_FINISHED_READING;
2017 }
2018
2019 int tls_construct_client_key_exchange(SSL *s)
2020 {
2021     unsigned char *p;
2022     int n;
2023 #ifndef OPENSSL_NO_PSK
2024     size_t pskhdrlen = 0;
2025 #endif
2026     unsigned long alg_k;
2027 #ifndef OPENSSL_NO_RSA
2028     unsigned char *q;
2029     EVP_PKEY *pkey = NULL;
2030     EVP_PKEY_CTX *pctx = NULL;
2031 #endif
2032 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
2033     EVP_PKEY *ckey = NULL, *skey = NULL;
2034 #endif
2035 #ifndef OPENSSL_NO_EC
2036     unsigned char *encodedPoint = NULL;
2037     int encoded_pt_len = 0;
2038 #endif
2039     unsigned char *pms = NULL;
2040     size_t pmslen = 0;
2041     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2042
2043     p = ssl_handshake_start(s);
2044
2045
2046 #ifndef OPENSSL_NO_PSK
2047     if (alg_k & SSL_PSK) {
2048         int psk_err = 1;
2049         /*
2050          * The callback needs PSK_MAX_IDENTITY_LEN + 1 bytes to return a
2051          * \0-terminated identity. The last byte is for us for simulating
2052          * strnlen.
2053          */
2054         char identity[PSK_MAX_IDENTITY_LEN + 1];
2055         size_t identitylen;
2056         unsigned char psk[PSK_MAX_PSK_LEN];
2057         size_t psklen;
2058
2059         if (s->psk_client_callback == NULL) {
2060             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2061                    SSL_R_PSK_NO_CLIENT_CB);
2062             goto err;
2063         }
2064
2065         memset(identity, 0, sizeof(identity));
2066
2067         psklen = s->psk_client_callback(s, s->session->psk_identity_hint,
2068                                         identity, sizeof(identity) - 1,
2069                                         psk, sizeof(psk));
2070
2071         if (psklen > PSK_MAX_PSK_LEN) {
2072             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2073                    ERR_R_INTERNAL_ERROR);
2074             goto psk_err;
2075         } else if (psklen == 0) {
2076             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2077                    SSL_R_PSK_IDENTITY_NOT_FOUND);
2078             goto psk_err;
2079         }
2080         OPENSSL_free(s->s3->tmp.psk);
2081         s->s3->tmp.psk = OPENSSL_memdup(psk, psklen);
2082         OPENSSL_cleanse(psk, psklen);
2083
2084         if (s->s3->tmp.psk == NULL) {
2085             OPENSSL_cleanse(identity, sizeof(identity));
2086             goto memerr;
2087         }
2088
2089         s->s3->tmp.psklen = psklen;
2090         identitylen = strlen(identity);
2091         if (identitylen > PSK_MAX_IDENTITY_LEN) {
2092             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2093                    ERR_R_INTERNAL_ERROR);
2094             goto psk_err;
2095         }
2096         OPENSSL_free(s->session->psk_identity);
2097         s->session->psk_identity = OPENSSL_strdup(identity);
2098         if (s->session->psk_identity == NULL) {
2099             OPENSSL_cleanse(identity, sizeof(identity));
2100             goto memerr;
2101         }
2102
2103         s2n(identitylen, p);
2104         memcpy(p, identity, identitylen);
2105         pskhdrlen = 2 + identitylen;
2106         p += identitylen;
2107         psk_err = 0;
2108 psk_err:
2109         OPENSSL_cleanse(identity, sizeof(identity));
2110         if (psk_err != 0) {
2111             ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
2112             goto err;
2113         }
2114     }
2115     if (alg_k & SSL_kPSK) {
2116         n = 0;
2117     } else
2118 #endif
2119
2120     /* Fool emacs indentation */
2121     if (0) {
2122     }
2123 #ifndef OPENSSL_NO_RSA
2124     else if (alg_k & (SSL_kRSA | SSL_kRSAPSK)) {
2125         size_t enclen;
2126         pmslen = SSL_MAX_MASTER_KEY_LENGTH;
2127         pms = OPENSSL_malloc(pmslen);
2128         if (pms == NULL)
2129             goto memerr;
2130
2131         if (s->session->peer == NULL) {
2132             /*
2133              * We should always have a server certificate with SSL_kRSA.
2134              */
2135             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2136                    ERR_R_INTERNAL_ERROR);
2137             goto err;
2138         }
2139
2140         pkey = X509_get0_pubkey(s->session->peer);
2141         if (EVP_PKEY_get0_RSA(pkey) == NULL) {
2142             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2143                    ERR_R_INTERNAL_ERROR);
2144             goto err;
2145         }
2146
2147         pms[0] = s->client_version >> 8;
2148         pms[1] = s->client_version & 0xff;
2149         if (RAND_bytes(pms + 2, pmslen - 2) <= 0)
2150             goto err;
2151
2152         q = p;
2153         /* Fix buf for TLS and beyond */
2154         if (s->version > SSL3_VERSION)
2155             p += 2;
2156         pctx = EVP_PKEY_CTX_new(pkey, NULL);
2157         if (pctx == NULL || EVP_PKEY_encrypt_init(pctx) <= 0
2158             || EVP_PKEY_encrypt(pctx, NULL, &enclen, pms, pmslen) <= 0) {
2159             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2160                    ERR_R_EVP_LIB);
2161             goto err;
2162         }
2163         if (EVP_PKEY_encrypt(pctx, p, &enclen, pms, pmslen) <= 0) {
2164             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2165                    SSL_R_BAD_RSA_ENCRYPT);
2166             goto err;
2167         }
2168         n = enclen;
2169         EVP_PKEY_CTX_free(pctx);
2170         pctx = NULL;
2171 # ifdef PKCS1_CHECK
2172         if (s->options & SSL_OP_PKCS1_CHECK_1)
2173             p[1]++;
2174         if (s->options & SSL_OP_PKCS1_CHECK_2)
2175             tmp_buf[0] = 0x70;
2176 # endif
2177
2178         /* Fix buf for TLS and beyond */
2179         if (s->version > SSL3_VERSION) {
2180             s2n(n, q);
2181             n += 2;
2182         }
2183     }
2184 #endif
2185 #ifndef OPENSSL_NO_DH
2186     else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
2187         DH *dh_clnt = NULL;
2188         BIGNUM *pub_key;
2189         skey = s->s3->peer_tmp;
2190         if (skey == NULL) {
2191             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2192                    ERR_R_INTERNAL_ERROR);
2193             goto err;
2194         }
2195         ckey = ssl_generate_pkey(skey, NID_undef);
2196         dh_clnt = EVP_PKEY_get0_DH(ckey);
2197
2198         if (dh_clnt == NULL || ssl_derive(s, ckey, skey) == 0) {
2199             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2200                    ERR_R_INTERNAL_ERROR);
2201             goto err;
2202         }
2203
2204
2205         /* send off the data */
2206         DH_get0_key(dh_clnt, &pub_key, NULL);
2207         n = BN_num_bytes(pub_key);
2208         s2n(n, p);
2209         BN_bn2bin(pub_key, p);
2210         n += 2;
2211         EVP_PKEY_free(ckey);
2212         ckey = NULL;
2213     }
2214 #endif
2215
2216 #ifndef OPENSSL_NO_EC
2217     else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
2218
2219         skey = s->s3->peer_tmp;
2220         if ((skey == NULL) || EVP_PKEY_get0_EC_KEY(skey) == NULL) {
2221             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2222                        ERR_R_INTERNAL_ERROR);
2223             goto err;
2224             }
2225
2226         ckey = ssl_generate_pkey(skey, NID_undef);
2227
2228         if (ssl_derive(s, ckey, skey) == 0) {
2229             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE, ERR_R_EVP_LIB);
2230             goto err;
2231         }
2232
2233         /* Generate encoding of client key */
2234         encoded_pt_len = EC_KEY_key2buf(EVP_PKEY_get0_EC_KEY(ckey),
2235                                         POINT_CONVERSION_UNCOMPRESSED,
2236                                         &encodedPoint, NULL);
2237
2238         if (encoded_pt_len == 0) {
2239             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE, ERR_R_EC_LIB);
2240             goto err;
2241         }
2242
2243         EVP_PKEY_free(ckey);
2244         ckey = NULL;
2245
2246         n = encoded_pt_len;
2247
2248         *p = n;         /* length of encoded point */
2249         /* Encoded point will be copied here */
2250         p += 1;
2251         /* copy the point */
2252         memcpy(p, encodedPoint, n);
2253         /* increment n to account for length field */
2254         n += 1;
2255
2256         /* Free allocated memory */
2257         OPENSSL_free(encodedPoint);
2258     }
2259 #endif                          /* !OPENSSL_NO_EC */
2260 #ifndef OPENSSL_NO_GOST
2261     else if (alg_k & SSL_kGOST) {
2262         /* GOST key exchange message creation */
2263         EVP_PKEY_CTX *pkey_ctx;
2264         X509 *peer_cert;
2265         size_t msglen;
2266         unsigned int md_len;
2267         unsigned char shared_ukm[32], tmp[256];
2268         EVP_MD_CTX *ukm_hash;
2269         int dgst_nid = NID_id_GostR3411_94;
2270         if ((s->s3->tmp.new_cipher->algorithm_auth & SSL_aGOST12) != 0)
2271             dgst_nid = NID_id_GostR3411_2012_256;
2272
2273
2274         pmslen = 32;
2275         pms = OPENSSL_malloc(pmslen);
2276         if (pms == NULL)
2277             goto memerr;
2278
2279         /*
2280          * Get server sertificate PKEY and create ctx from it
2281          */
2282         peer_cert = s->session->peer;
2283         if (!peer_cert) {
2284             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2285                    SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER);
2286             goto err;
2287         }
2288
2289         pkey_ctx = EVP_PKEY_CTX_new(X509_get0_pubkey(peer_cert), NULL);
2290         if (pkey_ctx == NULL) {
2291             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2292                    ERR_R_MALLOC_FAILURE);
2293             goto err;
2294         }
2295         /*
2296          * If we have send a certificate, and certificate key
2297          * parameters match those of server certificate, use
2298          * certificate key for key exchange
2299          */
2300
2301         /* Otherwise, generate ephemeral key pair */
2302
2303         if (pkey_ctx == NULL
2304                 || EVP_PKEY_encrypt_init(pkey_ctx) <= 0
2305                 /* Generate session key */
2306                 || RAND_bytes(pms, pmslen) <= 0) {
2307             EVP_PKEY_CTX_free(pkey_ctx);
2308             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2309                    ERR_R_INTERNAL_ERROR);
2310             goto err;
2311         };
2312         /*
2313          * If we have client certificate, use its secret as peer key
2314          */
2315         if (s->s3->tmp.cert_req && s->cert->key->privatekey) {
2316             if (EVP_PKEY_derive_set_peer
2317                 (pkey_ctx, s->cert->key->privatekey) <= 0) {
2318                 /*
2319                  * If there was an error - just ignore it. Ephemeral key
2320                  * * would be used
2321                  */
2322                 ERR_clear_error();
2323             }
2324         }
2325         /*
2326          * Compute shared IV and store it in algorithm-specific context
2327          * data
2328          */
2329         ukm_hash = EVP_MD_CTX_new();
2330         if (EVP_DigestInit(ukm_hash,
2331                            EVP_get_digestbynid(dgst_nid)) <= 0
2332                 || EVP_DigestUpdate(ukm_hash, s->s3->client_random,
2333                                     SSL3_RANDOM_SIZE) <= 0
2334                 || EVP_DigestUpdate(ukm_hash, s->s3->server_random,
2335                                     SSL3_RANDOM_SIZE) <= 0
2336                 || EVP_DigestFinal_ex(ukm_hash, shared_ukm, &md_len) <= 0) {
2337             EVP_MD_CTX_free(ukm_hash);
2338             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2339                    ERR_R_INTERNAL_ERROR);
2340             goto err;
2341         }
2342         EVP_MD_CTX_free(ukm_hash);
2343         if (EVP_PKEY_CTX_ctrl
2344             (pkey_ctx, -1, EVP_PKEY_OP_ENCRYPT, EVP_PKEY_CTRL_SET_IV, 8,
2345              shared_ukm) < 0) {
2346             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2347                    SSL_R_LIBRARY_BUG);
2348             goto err;
2349         }
2350         /* Make GOST keytransport blob message */
2351         /*
2352          * Encapsulate it into sequence
2353          */
2354         *(p++) = V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED;
2355         msglen = 255;
2356         if (EVP_PKEY_encrypt(pkey_ctx, tmp, &msglen, pms, pmslen) <= 0) {
2357             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2358                    SSL_R_LIBRARY_BUG);
2359             goto err;
2360         }
2361         if (msglen >= 0x80) {
2362             *(p++) = 0x81;
2363             *(p++) = msglen & 0xff;
2364             n = msglen + 3;
2365         } else {
2366             *(p++) = msglen & 0xff;
2367             n = msglen + 2;
2368         }
2369         memcpy(p, tmp, msglen);
2370         /* Check if pubkey from client certificate was used */
2371         if (EVP_PKEY_CTX_ctrl
2372             (pkey_ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 2, NULL) > 0) {
2373             /* Set flag "skip certificate verify" */
2374             s->s3->flags |= TLS1_FLAGS_SKIP_CERT_VERIFY;
2375         }
2376         EVP_PKEY_CTX_free(pkey_ctx);
2377
2378     }
2379 #endif
2380 #ifndef OPENSSL_NO_SRP
2381     else if (alg_k & SSL_kSRP) {
2382         if (s->srp_ctx.A != NULL) {
2383             /* send off the data */
2384             n = BN_num_bytes(s->srp_ctx.A);
2385             s2n(n, p);
2386             BN_bn2bin(s->srp_ctx.A, p);
2387             n += 2;
2388         } else {
2389             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2390                    ERR_R_INTERNAL_ERROR);
2391             goto err;
2392         }
2393         OPENSSL_free(s->session->srp_username);
2394         s->session->srp_username = OPENSSL_strdup(s->srp_ctx.login);
2395         if (s->session->srp_username == NULL) {
2396             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE,
2397                    ERR_R_MALLOC_FAILURE);
2398             goto err;
2399         }
2400     }
2401 #endif
2402     else {
2403         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
2404         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
2405         goto err;
2406     }
2407
2408 #ifndef OPENSSL_NO_PSK
2409     n += pskhdrlen;
2410 #endif
2411
2412     if (!ssl_set_handshake_header(s, SSL3_MT_CLIENT_KEY_EXCHANGE, n)) {
2413         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
2414         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
2415         goto err;
2416     }
2417
2418     if (pms != NULL) {
2419         s->s3->tmp.pms = pms;
2420         s->s3->tmp.pmslen = pmslen;
2421     }
2422
2423     return 1;
2424  memerr:
2425     ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2426     SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE);
2427  err:
2428     OPENSSL_clear_free(pms, pmslen);
2429     s->s3->tmp.pms = NULL;
2430 #ifndef OPENSSL_NO_RSA
2431     EVP_PKEY_CTX_free(pctx);
2432 #endif
2433 #ifndef OPENSSL_NO_EC
2434     OPENSSL_free(encodedPoint);
2435 #endif
2436 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
2437     EVP_PKEY_free(ckey);
2438 #endif
2439 #ifndef OPENSSL_NO_PSK
2440     OPENSSL_clear_free(s->s3->tmp.psk, s->s3->tmp.psklen);
2441     s->s3->tmp.psk = NULL;
2442 #endif
2443     ossl_statem_set_error(s);
2444     return 0;
2445 }
2446
2447 int tls_client_key_exchange_post_work(SSL *s)
2448 {
2449     unsigned char *pms = NULL;
2450     size_t pmslen = 0;
2451
2452     pms = s->s3->tmp.pms;
2453     pmslen = s->s3->tmp.pmslen;
2454
2455 #ifndef OPENSSL_NO_SRP
2456     /* Check for SRP */
2457     if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP) {
2458         if (!srp_generate_client_master_secret(s)) {
2459             SSLerr(SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK,
2460                    ERR_R_INTERNAL_ERROR);
2461             goto err;
2462         }
2463         return 1;
2464     }
2465 #endif
2466
2467     if (pms == NULL && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
2468         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2469         SSLerr(SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK, ERR_R_MALLOC_FAILURE);
2470         goto err;
2471     }
2472     if (!ssl_generate_master_secret(s, pms, pmslen, 1)) {
2473         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2474         SSLerr(SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK, ERR_R_INTERNAL_ERROR);
2475         /* ssl_generate_master_secret frees the pms even on error */
2476         pms = NULL;
2477         pmslen = 0;
2478         goto err;
2479     }
2480     pms = NULL;
2481     pmslen = 0;
2482
2483 #ifndef OPENSSL_NO_SCTP
2484     if (SSL_IS_DTLS(s)) {
2485         unsigned char sctpauthkey[64];
2486         char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
2487
2488         /*
2489          * Add new shared key for SCTP-Auth, will be ignored if no SCTP
2490          * used.
2491          */
2492         memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
2493                sizeof(DTLS1_SCTP_AUTH_LABEL));
2494
2495         if (SSL_export_keying_material(s, sctpauthkey,
2496                                    sizeof(sctpauthkey), labelbuffer,
2497                                    sizeof(labelbuffer), NULL, 0, 0) <= 0)
2498             goto err;
2499
2500         BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
2501                  sizeof(sctpauthkey), sctpauthkey);
2502     }
2503 #endif
2504
2505     return 1;
2506  err:
2507     OPENSSL_clear_free(pms, pmslen);
2508     s->s3->tmp.pms = NULL;
2509     return 0;
2510 }
2511
2512 int tls_construct_client_verify(SSL *s)
2513 {
2514     unsigned char *p;
2515     EVP_PKEY *pkey;
2516     const EVP_MD *md = s->s3->tmp.md[s->cert->key - s->cert->pkeys];
2517     EVP_MD_CTX *mctx;
2518     unsigned u = 0;
2519     unsigned long n = 0;
2520     long hdatalen = 0;
2521     void *hdata;
2522
2523     mctx = EVP_MD_CTX_new();
2524     if (mctx == NULL) {
2525         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_MALLOC_FAILURE);
2526         goto err;
2527     }
2528
2529     p = ssl_handshake_start(s);
2530     pkey = s->cert->key->privatekey;
2531
2532     hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata);
2533     if (hdatalen <= 0) {
2534         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR);
2535         goto err;
2536     }
2537     if (SSL_USE_SIGALGS(s)) {
2538         if (!tls12_get_sigandhash(p, pkey, md)) {
2539             SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR);
2540             goto err;
2541         }
2542         p += 2;
2543         n = 2;
2544     }
2545 #ifdef SSL_DEBUG
2546     fprintf(stderr, "Using client alg %s\n", EVP_MD_name(md));
2547 #endif
2548     if (!EVP_SignInit_ex(mctx, md, NULL)
2549         || !EVP_SignUpdate(mctx, hdata, hdatalen)
2550         || (s->version == SSL3_VERSION
2551             && !EVP_MD_CTX_ctrl(mctx, EVP_CTRL_SSL3_MASTER_SECRET,
2552                                 s->session->master_key_length,
2553                                 s->session->master_key))
2554         || !EVP_SignFinal(mctx, p + 2, &u, pkey)) {
2555         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_EVP_LIB);
2556         goto err;
2557     }
2558 #ifndef OPENSSL_NO_GOST
2559     {
2560         int pktype = EVP_PKEY_id(pkey);
2561         if (pktype == NID_id_GostR3410_2001
2562             || pktype == NID_id_GostR3410_2012_256
2563             || pktype == NID_id_GostR3410_2012_512)
2564             BUF_reverse(p + 2, NULL, u);
2565     }
2566 #endif
2567
2568     s2n(u, p);
2569     n += u + 2;
2570     /* Digest cached records and discard handshake buffer */
2571     if (!ssl3_digest_cached_records(s, 0))
2572         goto err;
2573     if (!ssl_set_handshake_header(s, SSL3_MT_CERTIFICATE_VERIFY, n)) {
2574         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR);
2575         goto err;
2576     }
2577
2578     EVP_MD_CTX_free(mctx);
2579     return 1;
2580  err:
2581     EVP_MD_CTX_free(mctx);
2582     return 0;
2583 }
2584
2585 /*
2586  * Check a certificate can be used for client authentication. Currently check
2587  * cert exists, if we have a suitable digest for TLS 1.2 if static DH client
2588  * certificates can be used and optionally checks suitability for Suite B.
2589  */
2590 static int ssl3_check_client_certificate(SSL *s)
2591 {
2592     if (!s->cert || !s->cert->key->x509 || !s->cert->key->privatekey)
2593         return 0;
2594     /* If no suitable signature algorithm can't use certificate */
2595     if (SSL_USE_SIGALGS(s) && !s->s3->tmp.md[s->cert->key - s->cert->pkeys])
2596         return 0;
2597     /*
2598      * If strict mode check suitability of chain before using it. This also
2599      * adjusts suite B digest if necessary.
2600      */
2601     if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT &&
2602         !tls1_check_chain(s, NULL, NULL, NULL, -2))
2603         return 0;
2604     return 1;
2605 }
2606
2607 WORK_STATE tls_prepare_client_certificate(SSL *s, WORK_STATE wst)
2608 {
2609     X509 *x509 = NULL;
2610     EVP_PKEY *pkey = NULL;
2611     int i;
2612
2613     if (wst == WORK_MORE_A) {
2614         /* Let cert callback update client certificates if required */
2615         if (s->cert->cert_cb) {
2616             i = s->cert->cert_cb(s, s->cert->cert_cb_arg);
2617             if (i < 0) {
2618                 s->rwstate = SSL_X509_LOOKUP;
2619                 return WORK_MORE_A;
2620             }
2621             if (i == 0) {
2622                 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2623                 ossl_statem_set_error(s);
2624                 return 0;
2625             }
2626             s->rwstate = SSL_NOTHING;
2627         }
2628         if (ssl3_check_client_certificate(s))
2629             return WORK_FINISHED_CONTINUE;
2630
2631         /* Fall through to WORK_MORE_B */
2632         wst = WORK_MORE_B;
2633     }
2634
2635     /* We need to get a client cert */
2636     if (wst == WORK_MORE_B) {
2637         /*
2638          * If we get an error, we need to ssl->rwstate=SSL_X509_LOOKUP;
2639          * return(-1); We then get retied later
2640          */
2641         i = ssl_do_client_cert_cb(s, &x509, &pkey);
2642         if (i < 0) {
2643             s->rwstate = SSL_X509_LOOKUP;
2644             return WORK_MORE_B;
2645         }
2646         s->rwstate = SSL_NOTHING;
2647         if ((i == 1) && (pkey != NULL) && (x509 != NULL)) {
2648             if (!SSL_use_certificate(s, x509) || !SSL_use_PrivateKey(s, pkey))
2649                 i = 0;
2650         } else if (i == 1) {
2651             i = 0;
2652             SSLerr(SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE,
2653                    SSL_R_BAD_DATA_RETURNED_BY_CALLBACK);
2654         }
2655
2656         X509_free(x509);
2657         EVP_PKEY_free(pkey);
2658         if (i && !ssl3_check_client_certificate(s))
2659             i = 0;
2660         if (i == 0) {
2661             if (s->version == SSL3_VERSION) {
2662                 s->s3->tmp.cert_req = 0;
2663                 ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_CERTIFICATE);
2664                 return WORK_FINISHED_CONTINUE;
2665             } else {
2666                 s->s3->tmp.cert_req = 2;
2667                 if (!ssl3_digest_cached_records(s, 0)) {
2668                     ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2669                     ossl_statem_set_error(s);
2670                     return 0;
2671                 }
2672             }
2673         }
2674
2675         return WORK_FINISHED_CONTINUE;
2676     }
2677
2678     /* Shouldn't ever get here */
2679     return WORK_ERROR;
2680 }
2681
2682 int tls_construct_client_certificate(SSL *s)
2683 {
2684     if (!ssl3_output_cert_chain(s,
2685                                 (s->s3->tmp.cert_req ==
2686                                  2) ? NULL : s->cert->key)) {
2687         SSLerr(SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE, ERR_R_INTERNAL_ERROR);
2688         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
2689         ossl_statem_set_error(s);
2690         return 0;
2691     }
2692
2693     return 1;
2694 }
2695
2696 #define has_bits(i,m)   (((i)&(m)) == (m))
2697
2698 int ssl3_check_cert_and_algorithm(SSL *s)
2699 {
2700     int i;
2701 #ifndef OPENSSL_NO_EC
2702     int idx;
2703 #endif
2704     long alg_k, alg_a;
2705     EVP_PKEY *pkey = NULL;
2706     int al = SSL_AD_HANDSHAKE_FAILURE;
2707
2708     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2709     alg_a = s->s3->tmp.new_cipher->algorithm_auth;
2710
2711     /* we don't have a certificate */
2712     if ((alg_a & SSL_aNULL) || (alg_k & SSL_kPSK))
2713         return (1);
2714
2715     /* This is the passed certificate */
2716
2717 #ifndef OPENSSL_NO_EC
2718     idx = s->session->peer_type;
2719     if (idx == SSL_PKEY_ECC) {
2720         if (ssl_check_srvr_ecc_cert_and_alg(s->session->peer, s) == 0) {
2721             /* check failed */
2722             SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, SSL_R_BAD_ECC_CERT);
2723             goto f_err;
2724         } else {
2725             return 1;
2726         }
2727     } else if (alg_a & SSL_aECDSA) {
2728         SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
2729                SSL_R_MISSING_ECDSA_SIGNING_CERT);
2730         goto f_err;
2731     }
2732 #endif
2733     pkey = X509_get0_pubkey(s->session->peer);
2734     i = X509_certificate_type(s->session->peer, pkey);
2735
2736     /* Check that we have a certificate if we require one */
2737     if ((alg_a & SSL_aRSA) && !has_bits(i, EVP_PK_RSA | EVP_PKT_SIGN)) {
2738         SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
2739                SSL_R_MISSING_RSA_SIGNING_CERT);
2740         goto f_err;
2741     }
2742 #ifndef OPENSSL_NO_DSA
2743     else if ((alg_a & SSL_aDSS) && !has_bits(i, EVP_PK_DSA | EVP_PKT_SIGN)) {
2744         SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
2745                SSL_R_MISSING_DSA_SIGNING_CERT);
2746         goto f_err;
2747     }
2748 #endif
2749 #ifndef OPENSSL_NO_RSA
2750     if (alg_k & (SSL_kRSA | SSL_kRSAPSK) &&
2751         !has_bits(i, EVP_PK_RSA | EVP_PKT_ENC)) {
2752         SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
2753                SSL_R_MISSING_RSA_ENCRYPTING_CERT);
2754         goto f_err;
2755     }
2756 #endif
2757 #ifndef OPENSSL_NO_DH
2758     if ((alg_k & SSL_kDHE) && (s->s3->peer_tmp == NULL)) {
2759         al = SSL_AD_INTERNAL_ERROR;
2760         SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, ERR_R_INTERNAL_ERROR);
2761         goto f_err;
2762     }
2763 #endif
2764
2765     return (1);
2766  f_err:
2767     ssl3_send_alert(s, SSL3_AL_FATAL, al);
2768     return (0);
2769 }
2770
2771 #ifndef OPENSSL_NO_NEXTPROTONEG
2772 int tls_construct_next_proto(SSL *s)
2773 {
2774     unsigned int len, padding_len;
2775     unsigned char *d;
2776
2777     len = s->next_proto_negotiated_len;
2778     padding_len = 32 - ((len + 2) % 32);
2779     d = (unsigned char *)s->init_buf->data;
2780     d[4] = len;
2781     memcpy(d + 5, s->next_proto_negotiated, len);
2782     d[5 + len] = padding_len;
2783     memset(d + 6 + len, 0, padding_len);
2784     *(d++) = SSL3_MT_NEXT_PROTO;
2785     l2n3(2 + len + padding_len, d);
2786     s->init_num = 4 + 2 + len + padding_len;
2787     s->init_off = 0;
2788
2789     return 1;
2790 }
2791 #endif
2792
2793 int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey)
2794 {
2795     int i = 0;
2796 #ifndef OPENSSL_NO_ENGINE
2797     if (s->ctx->client_cert_engine) {
2798         i = ENGINE_load_ssl_client_cert(s->ctx->client_cert_engine, s,
2799                                         SSL_get_client_CA_list(s),
2800                                         px509, ppkey, NULL, NULL, NULL);
2801         if (i != 0)
2802             return i;
2803     }
2804 #endif
2805     if (s->ctx->client_cert_cb)
2806         i = s->ctx->client_cert_cb(s, px509, ppkey);
2807     return i;
2808 }
2809
2810 int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
2811                              unsigned char *p)
2812 {
2813     int i, j = 0;
2814     const SSL_CIPHER *c;
2815     unsigned char *q;
2816     int empty_reneg_info_scsv = !s->renegotiate;
2817     /* Set disabled masks for this session */
2818     ssl_set_client_disabled(s);
2819
2820     if (sk == NULL)
2821         return (0);
2822     q = p;
2823
2824     for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
2825         c = sk_SSL_CIPHER_value(sk, i);
2826         /* Skip disabled ciphers */
2827         if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED))
2828             continue;
2829         j = s->method->put_cipher_by_char(c, p);
2830         p += j;
2831     }
2832     /*
2833      * If p == q, no ciphers; caller indicates an error. Otherwise, add
2834      * applicable SCSVs.
2835      */
2836     if (p != q) {
2837         if (empty_reneg_info_scsv) {
2838             static SSL_CIPHER scsv = {
2839                 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
2840             };
2841             j = s->method->put_cipher_by_char(&scsv, p);
2842             p += j;
2843         }
2844         if (s->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
2845             static SSL_CIPHER scsv = {
2846                 0, NULL, SSL3_CK_FALLBACK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
2847             };
2848             j = s->method->put_cipher_by_char(&scsv, p);
2849             p += j;
2850         }
2851     }
2852
2853     return (p - q);
2854 }