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