1 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2  * All rights reserved.
3  *
4  * This package is an SSL implementation written
5  * by Eric Young (eay@cryptsoft.com).
6  * The implementation was written so as to conform with Netscapes SSL.
7  *
8  * This library is free for commercial and non-commercial use as long as
9  * the following conditions are aheared to.  The following conditions
10  * apply to all code found in this distribution, be it the RC4, RSA,
11  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
12  * included with this distribution is covered by the same copyright terms
13  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14  *
15  * Copyright remains Eric Young's, and as such any Copyright notices in
16  * the code are not to be removed.
17  * If this package is used in a product, Eric Young should be given attribution
18  * as the author of the parts of the library used.
19  * This can be in the form of a textual message at program startup or
20  * in documentation (online or textual) provided with the package.
21  *
22  * Redistribution and use in source and binary forms, with or without
23  * modification, are permitted provided that the following conditions
24  * are met:
25  * 1. Redistributions of source code must retain the copyright
26  *    notice, this list of conditions and the following disclaimer.
27  * 2. Redistributions in binary form must reproduce the above copyright
28  *    notice, this list of conditions and the following disclaimer in the
29  *    documentation and/or other materials provided with the distribution.
30  * 3. All advertising materials mentioning features or use of this software
31  *    must display the following acknowledgement:
32  *    "This product includes cryptographic software written by
33  *     Eric Young (eay@cryptsoft.com)"
34  *    The word 'cryptographic' can be left out if the rouines from the library
35  *    being used are not cryptographic related :-).
36  * 4. If you include any Windows specific code (or a derivative thereof) from
37  *    the apps directory (application code) you must include an acknowledgement:
38  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39  *
40  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE.
51  *
52  * The licence and distribution terms for any publically available version or
53  * derivative of this code cannot be changed.  i.e. this code cannot simply be
54  * copied and put under another distribution licence
55  * [including the GNU Public Licence.]
56  */
57 /* ====================================================================
58  * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
59  *
60  * Redistribution and use in source and binary forms, with or without
61  * modification, are permitted provided that the following conditions
62  * are met:
63  *
64  * 1. Redistributions of source code must retain the above copyright
65  *    notice, this list of conditions and the following disclaimer.
66  *
67  * 2. Redistributions in binary form must reproduce the above copyright
68  *    notice, this list of conditions and the following disclaimer in
69  *    the documentation and/or other materials provided with the
70  *    distribution.
71  *
72  * 3. All advertising materials mentioning features or use of this
73  *    software must display the following acknowledgment:
74  *    "This product includes software developed by the OpenSSL Project
75  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
76  *
77  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
78  *    endorse or promote products derived from this software without
79  *    prior written permission. For written permission, please contact
80  *    openssl-core@openssl.org.
81  *
82  * 5. Products derived from this software may not be called "OpenSSL"
83  *    nor may "OpenSSL" appear in their names without prior written
84  *    permission of the OpenSSL Project.
85  *
86  * 6. Redistributions of any form whatsoever must retain the following
87  *    acknowledgment:
88  *    "This product includes software developed by the OpenSSL Project
89  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
90  *
91  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
92  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
93  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
94  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
95  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
96  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
97  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
98  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
99  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
100  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
101  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
102  * OF THE POSSIBILITY OF SUCH DAMAGE.
103  * ====================================================================
104  *
105  * This product includes cryptographic software written by Eric Young
106  * (eay@cryptsoft.com).  This product includes software written by Tim
107  * Hudson (tjh@cryptsoft.com).
108  *
109  */
110 /* ====================================================================
111  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
112  *
113  * Portions of the attached software ("Contribution") are developed by
114  * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
115  *
116  * The Contribution is licensed pursuant to the OpenSSL open source
117  * license provided above.
118  *
119  * ECC cipher suite support in OpenSSL originally written by
120  * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
121  *
122  */
123 /* ====================================================================
124  * Copyright 2005 Nokia. All rights reserved.
125  *
126  * The portions of the attached software ("Contribution") is developed by
127  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
128  * license.
129  *
130  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
131  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
132  * support (see RFC 4279) to OpenSSL.
133  *
134  * No patent licenses or other rights except those expressly stated in
135  * the OpenSSL open source license shall be deemed granted or received
136  * expressly, by implication, estoppel, or otherwise.
137  *
138  * No assurances are provided by Nokia that the Contribution does not
139  * infringe the patent or other intellectual property rights of any third
140  * party or that the license provides you with all the necessary rights
141  * to make use of the Contribution.
142  *
143  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
144  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
145  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
146  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
147  * OTHERWISE.
148  */
149 
150 #include <openssl/ssl.h>
151 
152 #include <assert.h>
153 #include <limits.h>
154 #include <string.h>
155 
156 #include <utility>
157 
158 #include <openssl/aead.h>
159 #include <openssl/bn.h>
160 #include <openssl/bytestring.h>
161 #include <openssl/ec_key.h>
162 #include <openssl/ecdsa.h>
163 #include <openssl/err.h>
164 #include <openssl/evp.h>
165 #include <openssl/md5.h>
166 #include <openssl/mem.h>
167 #include <openssl/rand.h>
168 #include <openssl/sha.h>
169 
170 #include "../crypto/internal.h"
171 #include "internal.h"
172 
173 
174 BSSL_NAMESPACE_BEGIN
175 
176 enum ssl_client_hs_state_t {
177   state_start_connect = 0,
178   state_enter_early_data,
179   state_early_reverify_server_certificate,
180   state_read_hello_verify_request,
181   state_read_server_hello,
182   state_tls13,
183   state_read_server_certificate,
184   state_read_certificate_status,
185   state_verify_server_certificate,
186   state_reverify_server_certificate,
187   state_read_server_key_exchange,
188   state_read_certificate_request,
189   state_read_server_hello_done,
190   state_send_client_certificate,
191   state_send_client_key_exchange,
192   state_send_client_certificate_verify,
193   state_send_client_finished,
194   state_finish_flight,
195   state_read_session_ticket,
196   state_process_change_cipher_spec,
197   state_read_server_finished,
198   state_finish_client_handshake,
199   state_done,
200 };
201 
202 // ssl_get_client_disabled sets |*out_mask_a| and |*out_mask_k| to masks of
203 // disabled algorithms.
ssl_get_client_disabled(SSL_HANDSHAKE * hs,uint32_t * out_mask_a,uint32_t * out_mask_k)204 static void ssl_get_client_disabled(SSL_HANDSHAKE *hs, uint32_t *out_mask_a,
205                                     uint32_t *out_mask_k) {
206   *out_mask_a = 0;
207   *out_mask_k = 0;
208 
209   // PSK requires a client callback.
210   if (hs->config->psk_client_callback == NULL) {
211     *out_mask_a |= SSL_aPSK;
212     *out_mask_k |= SSL_kPSK;
213   }
214 }
215 
ssl_write_client_cipher_list(SSL_HANDSHAKE * hs,CBB * out)216 static bool ssl_write_client_cipher_list(SSL_HANDSHAKE *hs, CBB *out) {
217   SSL *const ssl = hs->ssl;
218   uint32_t mask_a, mask_k;
219   ssl_get_client_disabled(hs, &mask_a, &mask_k);
220 
221   CBB child;
222   if (!CBB_add_u16_length_prefixed(out, &child)) {
223     return false;
224   }
225 
226   // Add a fake cipher suite. See draft-davidben-tls-grease-01.
227   if (ssl->ctx->grease_enabled &&
228       !CBB_add_u16(&child, ssl_get_grease_value(hs, ssl_grease_cipher))) {
229     return false;
230   }
231 
232   // Add TLS 1.3 ciphers. Order ChaCha20-Poly1305 relative to AES-GCM based on
233   // hardware support.
234   if (hs->max_version >= TLS1_3_VERSION) {
235     if (!EVP_has_aes_hardware() &&
236         !CBB_add_u16(&child, TLS1_CK_CHACHA20_POLY1305_SHA256 & 0xffff)) {
237       return false;
238     }
239     if (!CBB_add_u16(&child, TLS1_CK_AES_128_GCM_SHA256 & 0xffff) ||
240         !CBB_add_u16(&child, TLS1_CK_AES_256_GCM_SHA384 & 0xffff)) {
241       return false;
242     }
243     if (EVP_has_aes_hardware() &&
244         !CBB_add_u16(&child, TLS1_CK_CHACHA20_POLY1305_SHA256 & 0xffff)) {
245       return false;
246     }
247   }
248 
249   if (hs->min_version < TLS1_3_VERSION) {
250     bool any_enabled = false;
251     for (const SSL_CIPHER *cipher : SSL_get_ciphers(ssl)) {
252       // Skip disabled ciphers
253       if ((cipher->algorithm_mkey & mask_k) ||
254           (cipher->algorithm_auth & mask_a)) {
255         continue;
256       }
257       if (SSL_CIPHER_get_min_version(cipher) > hs->max_version ||
258           SSL_CIPHER_get_max_version(cipher) < hs->min_version) {
259         continue;
260       }
261       any_enabled = true;
262       if (!CBB_add_u16(&child, SSL_CIPHER_get_protocol_id(cipher))) {
263         return false;
264       }
265     }
266 
267     // If all ciphers were disabled, return the error to the caller.
268     if (!any_enabled && hs->max_version < TLS1_3_VERSION) {
269       OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CIPHERS_AVAILABLE);
270       return false;
271     }
272   }
273 
274   if (ssl->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
275     if (!CBB_add_u16(&child, SSL3_CK_FALLBACK_SCSV & 0xffff)) {
276       return false;
277     }
278   }
279 
280   return CBB_flush(out);
281 }
282 
ssl_write_client_hello(SSL_HANDSHAKE * hs)283 bool ssl_write_client_hello(SSL_HANDSHAKE *hs) {
284   SSL *const ssl = hs->ssl;
285   ScopedCBB cbb;
286   CBB body;
287   if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_CLIENT_HELLO)) {
288     return false;
289   }
290 
291   CBB child;
292   if (!CBB_add_u16(&body, hs->client_version) ||
293       !CBB_add_bytes(&body, ssl->s3->client_random, SSL3_RANDOM_SIZE) ||
294       !CBB_add_u8_length_prefixed(&body, &child)) {
295     return false;
296   }
297 
298   // Do not send a session ID on renegotiation.
299   if (!ssl->s3->initial_handshake_complete &&
300       !CBB_add_bytes(&child, hs->session_id, hs->session_id_len)) {
301     return false;
302   }
303 
304   if (SSL_is_dtls(ssl)) {
305     if (!CBB_add_u8_length_prefixed(&body, &child) ||
306         !CBB_add_bytes(&child, ssl->d1->cookie, ssl->d1->cookie_len)) {
307       return false;
308     }
309   }
310 
311   size_t header_len =
312       SSL_is_dtls(ssl) ? DTLS1_HM_HEADER_LENGTH : SSL3_HM_HEADER_LENGTH;
313   if (!ssl_write_client_cipher_list(hs, &body) ||
314       !CBB_add_u8(&body, 1 /* one compression method */) ||
315       !CBB_add_u8(&body, 0 /* null compression */) ||
316       !ssl_add_clienthello_tlsext(hs, &body, header_len + CBB_len(&body))) {
317     return false;
318   }
319 
320   Array<uint8_t> msg;
321   if (!ssl->method->finish_message(ssl, cbb.get(), &msg)) {
322     return false;
323   }
324 
325   // Now that the length prefixes have been computed, fill in the placeholder
326   // PSK binder.
327   if (hs->needs_psk_binder &&
328       !tls13_write_psk_binder(hs, MakeSpan(msg))) {
329     return false;
330   }
331 
332   return ssl->method->add_message(ssl, std::move(msg));
333 }
334 
parse_supported_versions(SSL_HANDSHAKE * hs,uint16_t * version,const CBS * in)335 static bool parse_supported_versions(SSL_HANDSHAKE *hs, uint16_t *version,
336                                      const CBS *in) {
337   // If the outer version is not TLS 1.2, or there is no extensions block, use
338   // the outer version.
339   if (*version != TLS1_2_VERSION || CBS_len(in) == 0) {
340     return true;
341   }
342 
343   SSL *const ssl = hs->ssl;
344   CBS copy = *in, extensions;
345   if (!CBS_get_u16_length_prefixed(&copy, &extensions) ||
346       CBS_len(&copy) != 0) {
347     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
348     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
349     return false;
350   }
351 
352   bool have_supported_versions;
353   CBS supported_versions;
354   const SSL_EXTENSION_TYPE ext_types[] = {
355     {TLSEXT_TYPE_supported_versions, &have_supported_versions,
356      &supported_versions},
357   };
358 
359   uint8_t alert = SSL_AD_DECODE_ERROR;
360   if (!ssl_parse_extensions(&extensions, &alert, ext_types,
361                             /*ignore_unknown=*/true)) {
362     ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
363     return false;
364   }
365 
366   // Override the outer version with the extension, if present.
367   if (have_supported_versions &&
368       (!CBS_get_u16(&supported_versions, version) ||
369        CBS_len(&supported_versions) != 0)) {
370     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
371     return false;
372   }
373 
374   return true;
375 }
376 
do_start_connect(SSL_HANDSHAKE * hs)377 static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) {
378   SSL *const ssl = hs->ssl;
379 
380   ssl_do_info_callback(ssl, SSL_CB_HANDSHAKE_START, 1);
381   // |session_reused| must be reset in case this is a renegotiation.
382   ssl->s3->session_reused = false;
383 
384   // Freeze the version range.
385   if (!ssl_get_version_range(hs, &hs->min_version, &hs->max_version)) {
386     return ssl_hs_error;
387   }
388 
389   // Always advertise the ClientHello version from the original maximum version,
390   // even on renegotiation. The static RSA key exchange uses this field, and
391   // some servers fail when it changes across handshakes.
392   if (SSL_is_dtls(hs->ssl)) {
393     hs->client_version =
394         hs->max_version >= TLS1_2_VERSION ? DTLS1_2_VERSION : DTLS1_VERSION;
395   } else {
396     hs->client_version =
397         hs->max_version >= TLS1_2_VERSION ? TLS1_2_VERSION : hs->max_version;
398   }
399 
400   // If the configured session has expired or was created at a disabled
401   // version, drop it.
402   if (ssl->session != NULL) {
403     if (ssl->session->is_server ||
404         !ssl_supports_version(hs, ssl->session->ssl_version) ||
405         (ssl->session->session_id_length == 0 &&
406          ssl->session->ticket.empty()) ||
407         ssl->session->not_resumable ||
408         !ssl_session_is_time_valid(ssl, ssl->session.get()) ||
409         (ssl->quic_method != nullptr) != ssl->session->is_quic) {
410       ssl_set_session(ssl, NULL);
411     }
412   }
413 
414   if (!RAND_bytes(ssl->s3->client_random, sizeof(ssl->s3->client_random))) {
415     return ssl_hs_error;
416   }
417 
418   // Never send a session ID in QUIC. QUIC uses TLS 1.3 at a minimum and
419   // disables TLS 1.3 middlebox compatibility mode.
420   if (ssl->quic_method == nullptr) {
421     if (ssl->session != nullptr && !ssl->s3->initial_handshake_complete &&
422         ssl->session->session_id_length > 0) {
423       hs->session_id_len = ssl->session->session_id_length;
424       OPENSSL_memcpy(hs->session_id, ssl->session->session_id,
425                      hs->session_id_len);
426     } else if (hs->max_version >= TLS1_3_VERSION) {
427       // Initialize a random session ID.
428       hs->session_id_len = sizeof(hs->session_id);
429       if (!RAND_bytes(hs->session_id, hs->session_id_len)) {
430         return ssl_hs_error;
431       }
432     }
433   }
434 
435   if (!ssl_write_client_hello(hs)) {
436     return ssl_hs_error;
437   }
438 
439   hs->state = state_enter_early_data;
440   return ssl_hs_flush;
441 }
442 
do_enter_early_data(SSL_HANDSHAKE * hs)443 static enum ssl_hs_wait_t do_enter_early_data(SSL_HANDSHAKE *hs) {
444   SSL *const ssl = hs->ssl;
445 
446   if (SSL_is_dtls(ssl)) {
447     hs->state = state_read_hello_verify_request;
448     return ssl_hs_ok;
449   }
450 
451   if (!hs->early_data_offered) {
452     hs->state = state_read_server_hello;
453     return ssl_hs_ok;
454   }
455 
456   ssl->s3->aead_write_ctx->SetVersionIfNullCipher(ssl->session->ssl_version);
457   if (!ssl->method->add_change_cipher_spec(ssl)) {
458     return ssl_hs_error;
459   }
460 
461   if (!tls13_init_early_key_schedule(
462           hs, MakeConstSpan(ssl->session->master_key,
463                             ssl->session->master_key_length)) ||
464       !tls13_derive_early_secret(hs)) {
465     return ssl_hs_error;
466   }
467 
468   // Stash the early data session, so connection properties may be queried out
469   // of it.
470   hs->early_session = UpRef(ssl->session);
471   hs->state = state_early_reverify_server_certificate;
472   return ssl_hs_ok;
473 }
474 
do_early_reverify_server_certificate(SSL_HANDSHAKE * hs)475 static enum ssl_hs_wait_t do_early_reverify_server_certificate(SSL_HANDSHAKE *hs) {
476   if (hs->ssl->ctx->reverify_on_resume) {
477     // Don't send an alert on error. The alert be in early data, which the
478     // server may not accept anyway. It would also be a mismatch between QUIC
479     // and TCP because the QUIC early keys are deferred below.
480     //
481     // TODO(davidben): The client behavior should be to verify the certificate
482     // before deciding whether to offer the session and, if invalid, decline to
483     // send the session.
484     switch (ssl_reverify_peer_cert(hs, /*send_alert=*/false)) {
485       case ssl_verify_ok:
486         break;
487       case ssl_verify_invalid:
488         return ssl_hs_error;
489       case ssl_verify_retry:
490         hs->state = state_early_reverify_server_certificate;
491         return ssl_hs_certificate_verify;
492     }
493   }
494 
495   // Defer releasing the 0-RTT key to after certificate reverification, so the
496   // QUIC implementation does not accidentally write data too early.
497   if (!tls13_set_traffic_key(hs->ssl, ssl_encryption_early_data, evp_aead_seal,
498                              hs->early_session.get(),
499                              hs->early_traffic_secret())) {
500     return ssl_hs_error;
501   }
502 
503   hs->in_early_data = true;
504   hs->can_early_write = true;
505   hs->state = state_read_server_hello;
506   return ssl_hs_early_return;
507 }
508 
do_read_hello_verify_request(SSL_HANDSHAKE * hs)509 static enum ssl_hs_wait_t do_read_hello_verify_request(SSL_HANDSHAKE *hs) {
510   SSL *const ssl = hs->ssl;
511 
512   assert(SSL_is_dtls(ssl));
513 
514   SSLMessage msg;
515   if (!ssl->method->get_message(ssl, &msg)) {
516     return ssl_hs_read_message;
517   }
518 
519   if (msg.type != DTLS1_MT_HELLO_VERIFY_REQUEST) {
520     hs->state = state_read_server_hello;
521     return ssl_hs_ok;
522   }
523 
524   CBS hello_verify_request = msg.body, cookie;
525   uint16_t server_version;
526   if (!CBS_get_u16(&hello_verify_request, &server_version) ||
527       !CBS_get_u8_length_prefixed(&hello_verify_request, &cookie) ||
528       CBS_len(&cookie) > sizeof(ssl->d1->cookie) ||
529       CBS_len(&hello_verify_request) != 0) {
530     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
531     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
532     return ssl_hs_error;
533   }
534 
535   OPENSSL_memcpy(ssl->d1->cookie, CBS_data(&cookie), CBS_len(&cookie));
536   ssl->d1->cookie_len = CBS_len(&cookie);
537 
538   ssl->method->next_message(ssl);
539 
540   // DTLS resets the handshake buffer after HelloVerifyRequest.
541   if (!hs->transcript.Init()) {
542     return ssl_hs_error;
543   }
544 
545   if (!ssl_write_client_hello(hs)) {
546     return ssl_hs_error;
547   }
548 
549   hs->state = state_read_server_hello;
550   return ssl_hs_flush;
551 }
552 
do_read_server_hello(SSL_HANDSHAKE * hs)553 static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
554   SSL *const ssl = hs->ssl;
555   SSLMessage msg;
556   if (!ssl->method->get_message(ssl, &msg)) {
557     return ssl_hs_read_server_hello;
558   }
559 
560   if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
561     return ssl_hs_error;
562   }
563 
564   CBS server_hello = msg.body, server_random, session_id;
565   uint16_t server_version, cipher_suite;
566   uint8_t compression_method;
567   if (!CBS_get_u16(&server_hello, &server_version) ||
568       !CBS_get_bytes(&server_hello, &server_random, SSL3_RANDOM_SIZE) ||
569       !CBS_get_u8_length_prefixed(&server_hello, &session_id) ||
570       CBS_len(&session_id) > SSL3_SESSION_ID_SIZE ||
571       !CBS_get_u16(&server_hello, &cipher_suite) ||
572       !CBS_get_u8(&server_hello, &compression_method)) {
573     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
574     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
575     return ssl_hs_error;
576   }
577 
578   // Use the supported_versions extension if applicable.
579   if (!parse_supported_versions(hs, &server_version, &server_hello)) {
580     return ssl_hs_error;
581   }
582 
583   if (!ssl_supports_version(hs, server_version)) {
584     OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_PROTOCOL);
585     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION);
586     return ssl_hs_error;
587   }
588 
589   assert(ssl->s3->have_version == ssl->s3->initial_handshake_complete);
590   if (!ssl->s3->have_version) {
591     ssl->version = server_version;
592     // At this point, the connection's version is known and ssl->version is
593     // fixed. Begin enforcing the record-layer version.
594     ssl->s3->have_version = true;
595     ssl->s3->aead_write_ctx->SetVersionIfNullCipher(ssl->version);
596   } else if (server_version != ssl->version) {
597     OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_SSL_VERSION);
598     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION);
599     return ssl_hs_error;
600   }
601 
602   if (ssl_protocol_version(ssl) >= TLS1_3_VERSION) {
603     hs->state = state_tls13;
604     return ssl_hs_ok;
605   }
606 
607   // Clear some TLS 1.3 state that no longer needs to be retained.
608   hs->key_shares[0].reset();
609   hs->key_shares[1].reset();
610   hs->key_share_bytes.Reset();
611 
612   // A TLS 1.2 server would not know to skip the early data we offered. Report
613   // an error code sooner. The caller may use this error code to implement the
614   // fallback described in RFC 8446 appendix D.3.
615   if (hs->early_data_offered) {
616     OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_VERSION_ON_EARLY_DATA);
617     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION);
618     return ssl_hs_error;
619   }
620 
621   // Copy over the server random.
622   OPENSSL_memcpy(ssl->s3->server_random, CBS_data(&server_random),
623                  SSL3_RANDOM_SIZE);
624 
625   // Enforce the TLS 1.3 anti-downgrade feature.
626   if (!ssl->s3->initial_handshake_complete &&
627       ssl_supports_version(hs, TLS1_3_VERSION)) {
628     static_assert(
629         sizeof(kTLS12DowngradeRandom) == sizeof(kTLS13DowngradeRandom),
630         "downgrade signals have different size");
631     static_assert(
632         sizeof(kJDK11DowngradeRandom) == sizeof(kTLS13DowngradeRandom),
633         "downgrade signals have different size");
634     auto suffix =
635         MakeConstSpan(ssl->s3->server_random, sizeof(ssl->s3->server_random))
636             .subspan(SSL3_RANDOM_SIZE - sizeof(kTLS13DowngradeRandom));
637     if (suffix == kTLS12DowngradeRandom || suffix == kTLS13DowngradeRandom ||
638         suffix == kJDK11DowngradeRandom) {
639       ssl->s3->tls13_downgrade = true;
640       if (!hs->config->ignore_tls13_downgrade) {
641         OPENSSL_PUT_ERROR(SSL, SSL_R_TLS13_DOWNGRADE);
642         ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
643         return ssl_hs_error;
644       }
645     }
646   }
647 
648   if (!ssl->s3->initial_handshake_complete && ssl->session != nullptr &&
649       ssl->session->session_id_length != 0 &&
650       CBS_mem_equal(&session_id, ssl->session->session_id,
651                     ssl->session->session_id_length)) {
652     ssl->s3->session_reused = true;
653   } else {
654     // The server may also have echoed back the TLS 1.3 compatibility mode
655     // session ID. As we know this is not a session the server knows about, any
656     // server resuming it is in error. Reject the first connection
657     // deterministicly, rather than installing an invalid session into the
658     // session cache. https://crbug.com/796910
659     if (hs->session_id_len != 0 &&
660         CBS_mem_equal(&session_id, hs->session_id, hs->session_id_len)) {
661       OPENSSL_PUT_ERROR(SSL, SSL_R_SERVER_ECHOED_INVALID_SESSION_ID);
662       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
663       return ssl_hs_error;
664     }
665 
666     // The session wasn't resumed. Create a fresh SSL_SESSION to
667     // fill out.
668     ssl_set_session(ssl, NULL);
669     if (!ssl_get_new_session(hs, 0 /* client */)) {
670       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
671       return ssl_hs_error;
672     }
673     // Note: session_id could be empty.
674     hs->new_session->session_id_length = CBS_len(&session_id);
675     OPENSSL_memcpy(hs->new_session->session_id, CBS_data(&session_id),
676                    CBS_len(&session_id));
677   }
678 
679   const SSL_CIPHER *cipher = SSL_get_cipher_by_value(cipher_suite);
680   if (cipher == NULL) {
681     // unknown cipher
682     OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CIPHER_RETURNED);
683     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
684     return ssl_hs_error;
685   }
686 
687   // The cipher must be allowed in the selected version and enabled.
688   uint32_t mask_a, mask_k;
689   ssl_get_client_disabled(hs, &mask_a, &mask_k);
690   if ((cipher->algorithm_mkey & mask_k) || (cipher->algorithm_auth & mask_a) ||
691       SSL_CIPHER_get_min_version(cipher) > ssl_protocol_version(ssl) ||
692       SSL_CIPHER_get_max_version(cipher) < ssl_protocol_version(ssl) ||
693       !sk_SSL_CIPHER_find(SSL_get_ciphers(ssl), NULL, cipher)) {
694     OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
695     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
696     return ssl_hs_error;
697   }
698 
699   if (ssl->session != NULL) {
700     if (ssl->session->ssl_version != ssl->version) {
701       OPENSSL_PUT_ERROR(SSL, SSL_R_OLD_SESSION_VERSION_NOT_RETURNED);
702       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
703       return ssl_hs_error;
704     }
705     if (ssl->session->cipher != cipher) {
706       OPENSSL_PUT_ERROR(SSL, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED);
707       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
708       return ssl_hs_error;
709     }
710     if (!ssl_session_is_context_valid(hs, ssl->session.get())) {
711       // This is actually a client application bug.
712       OPENSSL_PUT_ERROR(SSL,
713                         SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
714       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
715       return ssl_hs_error;
716     }
717   } else {
718     hs->new_session->cipher = cipher;
719   }
720   hs->new_cipher = cipher;
721 
722   // Now that the cipher is known, initialize the handshake hash and hash the
723   // ServerHello.
724   if (!hs->transcript.InitHash(ssl_protocol_version(ssl), hs->new_cipher) ||
725       !ssl_hash_message(hs, msg)) {
726     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
727     return ssl_hs_error;
728   }
729 
730   // If doing a full handshake, the server may request a client certificate
731   // which requires hashing the handshake transcript. Otherwise, the handshake
732   // buffer may be released.
733   if (ssl->session != NULL ||
734       !ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
735     hs->transcript.FreeBuffer();
736   }
737 
738   // Only the NULL compression algorithm is supported.
739   if (compression_method != 0) {
740     OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
741     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
742     return ssl_hs_error;
743   }
744 
745   // TLS extensions
746   if (!ssl_parse_serverhello_tlsext(hs, &server_hello)) {
747     OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
748     return ssl_hs_error;
749   }
750 
751   // There should be nothing left over in the record.
752   if (CBS_len(&server_hello) != 0) {
753     // wrong packet length
754     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
755     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
756     return ssl_hs_error;
757   }
758 
759   if (ssl->session != NULL &&
760       hs->extended_master_secret != ssl->session->extended_master_secret) {
761     if (ssl->session->extended_master_secret) {
762       OPENSSL_PUT_ERROR(SSL, SSL_R_RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION);
763     } else {
764       OPENSSL_PUT_ERROR(SSL, SSL_R_RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION);
765     }
766     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
767     return ssl_hs_error;
768   }
769 
770   if (ssl->s3->token_binding_negotiated &&
771       (!hs->extended_master_secret || !ssl->s3->send_connection_binding)) {
772     OPENSSL_PUT_ERROR(SSL, SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI);
773     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
774     return ssl_hs_error;
775   }
776 
777   ssl->method->next_message(ssl);
778 
779   if (ssl->session != NULL) {
780     if (ssl->ctx->reverify_on_resume &&
781         ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
782       hs->state = state_reverify_server_certificate;
783     } else {
784       hs->state = state_read_session_ticket;
785     }
786     return ssl_hs_ok;
787   }
788 
789   hs->state = state_read_server_certificate;
790   return ssl_hs_ok;
791 }
792 
do_tls13(SSL_HANDSHAKE * hs)793 static enum ssl_hs_wait_t do_tls13(SSL_HANDSHAKE *hs) {
794   enum ssl_hs_wait_t wait = tls13_client_handshake(hs);
795   if (wait == ssl_hs_ok) {
796     hs->state = state_finish_client_handshake;
797     return ssl_hs_ok;
798   }
799 
800   return wait;
801 }
802 
do_read_server_certificate(SSL_HANDSHAKE * hs)803 static enum ssl_hs_wait_t do_read_server_certificate(SSL_HANDSHAKE *hs) {
804   SSL *const ssl = hs->ssl;
805 
806   if (!ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
807     hs->state = state_read_certificate_status;
808     return ssl_hs_ok;
809   }
810 
811   SSLMessage msg;
812   if (!ssl->method->get_message(ssl, &msg)) {
813     return ssl_hs_read_message;
814   }
815 
816   if (!ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE) ||
817       !ssl_hash_message(hs, msg)) {
818     return ssl_hs_error;
819   }
820 
821   CBS body = msg.body;
822   uint8_t alert = SSL_AD_DECODE_ERROR;
823   if (!ssl_parse_cert_chain(&alert, &hs->new_session->certs, &hs->peer_pubkey,
824                             NULL, &body, ssl->ctx->pool)) {
825     ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
826     return ssl_hs_error;
827   }
828 
829   if (sk_CRYPTO_BUFFER_num(hs->new_session->certs.get()) == 0 ||
830       CBS_len(&body) != 0 ||
831       !ssl->ctx->x509_method->session_cache_objects(hs->new_session.get())) {
832     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
833     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
834     return ssl_hs_error;
835   }
836 
837   if (!ssl_check_leaf_certificate(
838           hs, hs->peer_pubkey.get(),
839           sk_CRYPTO_BUFFER_value(hs->new_session->certs.get(), 0))) {
840     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
841     return ssl_hs_error;
842   }
843 
844   ssl->method->next_message(ssl);
845 
846   hs->state = state_read_certificate_status;
847   return ssl_hs_ok;
848 }
849 
do_read_certificate_status(SSL_HANDSHAKE * hs)850 static enum ssl_hs_wait_t do_read_certificate_status(SSL_HANDSHAKE *hs) {
851   SSL *const ssl = hs->ssl;
852 
853   if (!hs->certificate_status_expected) {
854     hs->state = state_verify_server_certificate;
855     return ssl_hs_ok;
856   }
857 
858   SSLMessage msg;
859   if (!ssl->method->get_message(ssl, &msg)) {
860     return ssl_hs_read_message;
861   }
862 
863   if (msg.type != SSL3_MT_CERTIFICATE_STATUS) {
864     // A server may send status_request in ServerHello and then change its mind
865     // about sending CertificateStatus.
866     hs->state = state_verify_server_certificate;
867     return ssl_hs_ok;
868   }
869 
870   if (!ssl_hash_message(hs, msg)) {
871     return ssl_hs_error;
872   }
873 
874   CBS certificate_status = msg.body, ocsp_response;
875   uint8_t status_type;
876   if (!CBS_get_u8(&certificate_status, &status_type) ||
877       status_type != TLSEXT_STATUSTYPE_ocsp ||
878       !CBS_get_u24_length_prefixed(&certificate_status, &ocsp_response) ||
879       CBS_len(&ocsp_response) == 0 ||
880       CBS_len(&certificate_status) != 0) {
881     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
882     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
883     return ssl_hs_error;
884   }
885 
886   hs->new_session->ocsp_response.reset(
887       CRYPTO_BUFFER_new_from_CBS(&ocsp_response, ssl->ctx->pool));
888   if (hs->new_session->ocsp_response == nullptr) {
889     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
890     return ssl_hs_error;
891   }
892 
893   ssl->method->next_message(ssl);
894 
895   hs->state = state_verify_server_certificate;
896   return ssl_hs_ok;
897 }
898 
do_verify_server_certificate(SSL_HANDSHAKE * hs)899 static enum ssl_hs_wait_t do_verify_server_certificate(SSL_HANDSHAKE *hs) {
900   if (!ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
901     hs->state = state_read_server_key_exchange;
902     return ssl_hs_ok;
903   }
904 
905   switch (ssl_verify_peer_cert(hs)) {
906     case ssl_verify_ok:
907       break;
908     case ssl_verify_invalid:
909       return ssl_hs_error;
910     case ssl_verify_retry:
911       hs->state = state_verify_server_certificate;
912       return ssl_hs_certificate_verify;
913   }
914 
915   hs->state = state_read_server_key_exchange;
916   return ssl_hs_ok;
917 }
918 
do_reverify_server_certificate(SSL_HANDSHAKE * hs)919 static enum ssl_hs_wait_t do_reverify_server_certificate(SSL_HANDSHAKE *hs) {
920   assert(hs->ssl->ctx->reverify_on_resume);
921 
922   switch (ssl_reverify_peer_cert(hs, /*send_alert=*/true)) {
923     case ssl_verify_ok:
924       break;
925     case ssl_verify_invalid:
926       return ssl_hs_error;
927     case ssl_verify_retry:
928       hs->state = state_reverify_server_certificate;
929       return ssl_hs_certificate_verify;
930   }
931 
932   hs->state = state_read_session_ticket;
933   return ssl_hs_ok;
934 }
935 
do_read_server_key_exchange(SSL_HANDSHAKE * hs)936 static enum ssl_hs_wait_t do_read_server_key_exchange(SSL_HANDSHAKE *hs) {
937   SSL *const ssl = hs->ssl;
938   SSLMessage msg;
939   if (!ssl->method->get_message(ssl, &msg)) {
940     return ssl_hs_read_message;
941   }
942 
943   if (msg.type != SSL3_MT_SERVER_KEY_EXCHANGE) {
944     // Some ciphers (pure PSK) have an optional ServerKeyExchange message.
945     if (ssl_cipher_requires_server_key_exchange(hs->new_cipher)) {
946       OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
947       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
948       return ssl_hs_error;
949     }
950 
951     hs->state = state_read_certificate_request;
952     return ssl_hs_ok;
953   }
954 
955   if (!ssl_hash_message(hs, msg)) {
956     return ssl_hs_error;
957   }
958 
959   uint32_t alg_k = hs->new_cipher->algorithm_mkey;
960   uint32_t alg_a = hs->new_cipher->algorithm_auth;
961   CBS server_key_exchange = msg.body;
962   if (alg_a & SSL_aPSK) {
963     CBS psk_identity_hint;
964 
965     // Each of the PSK key exchanges begins with a psk_identity_hint.
966     if (!CBS_get_u16_length_prefixed(&server_key_exchange,
967                                      &psk_identity_hint)) {
968       OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
969       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
970       return ssl_hs_error;
971     }
972 
973     // Store the PSK identity hint for the ClientKeyExchange. Assume that the
974     // maximum length of a PSK identity hint can be as long as the maximum
975     // length of a PSK identity. Also do not allow NULL characters; identities
976     // are saved as C strings.
977     //
978     // TODO(davidben): Should invalid hints be ignored? It's a hint rather than
979     // a specific identity.
980     if (CBS_len(&psk_identity_hint) > PSK_MAX_IDENTITY_LEN ||
981         CBS_contains_zero_byte(&psk_identity_hint)) {
982       OPENSSL_PUT_ERROR(SSL, SSL_R_DATA_LENGTH_TOO_LONG);
983       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
984       return ssl_hs_error;
985     }
986 
987     // Save non-empty identity hints as a C string. Empty identity hints we
988     // treat as missing. Plain PSK makes it possible to send either no hint
989     // (omit ServerKeyExchange) or an empty hint, while ECDHE_PSK can only spell
990     // empty hint. Having different capabilities is odd, so we interpret empty
991     // and missing as identical.
992     char *raw = nullptr;
993     if (CBS_len(&psk_identity_hint) != 0 &&
994         !CBS_strdup(&psk_identity_hint, &raw)) {
995       OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
996       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
997       return ssl_hs_error;
998     }
999     hs->peer_psk_identity_hint.reset(raw);
1000   }
1001 
1002   if (alg_k & SSL_kECDHE) {
1003     // Parse the server parameters.
1004     uint8_t group_type;
1005     uint16_t group_id;
1006     CBS point;
1007     if (!CBS_get_u8(&server_key_exchange, &group_type) ||
1008         group_type != NAMED_CURVE_TYPE ||
1009         !CBS_get_u16(&server_key_exchange, &group_id) ||
1010         !CBS_get_u8_length_prefixed(&server_key_exchange, &point)) {
1011       OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1012       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1013       return ssl_hs_error;
1014     }
1015     hs->new_session->group_id = group_id;
1016 
1017     // Ensure the group is consistent with preferences.
1018     if (!tls1_check_group_id(hs, group_id)) {
1019       OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
1020       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
1021       return ssl_hs_error;
1022     }
1023 
1024     // Initialize ECDH and save the peer public key for later.
1025     hs->key_shares[0] = SSLKeyShare::Create(group_id);
1026     if (!hs->key_shares[0] ||
1027         !hs->peer_key.CopyFrom(point)) {
1028       return ssl_hs_error;
1029     }
1030   } else if (!(alg_k & SSL_kPSK)) {
1031     OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
1032     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
1033     return ssl_hs_error;
1034   }
1035 
1036   // At this point, |server_key_exchange| contains the signature, if any, while
1037   // |msg.body| contains the entire message. From that, derive a CBS containing
1038   // just the parameter.
1039   CBS parameter;
1040   CBS_init(&parameter, CBS_data(&msg.body),
1041            CBS_len(&msg.body) - CBS_len(&server_key_exchange));
1042 
1043   // ServerKeyExchange should be signed by the server's public key.
1044   if (ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
1045     uint16_t signature_algorithm = 0;
1046     if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
1047       if (!CBS_get_u16(&server_key_exchange, &signature_algorithm)) {
1048         OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1049         ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1050         return ssl_hs_error;
1051       }
1052       uint8_t alert = SSL_AD_DECODE_ERROR;
1053       if (!tls12_check_peer_sigalg(hs, &alert, signature_algorithm)) {
1054         ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1055         return ssl_hs_error;
1056       }
1057       hs->new_session->peer_signature_algorithm = signature_algorithm;
1058     } else if (!tls1_get_legacy_signature_algorithm(&signature_algorithm,
1059                                                     hs->peer_pubkey.get())) {
1060       OPENSSL_PUT_ERROR(SSL, SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE);
1061       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_CERTIFICATE);
1062       return ssl_hs_error;
1063     }
1064 
1065     // The last field in |server_key_exchange| is the signature.
1066     CBS signature;
1067     if (!CBS_get_u16_length_prefixed(&server_key_exchange, &signature) ||
1068         CBS_len(&server_key_exchange) != 0) {
1069       OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1070       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1071       return ssl_hs_error;
1072     }
1073 
1074     ScopedCBB transcript;
1075     Array<uint8_t> transcript_data;
1076     if (!CBB_init(transcript.get(),
1077                   2 * SSL3_RANDOM_SIZE + CBS_len(&parameter)) ||
1078         !CBB_add_bytes(transcript.get(), ssl->s3->client_random,
1079                        SSL3_RANDOM_SIZE) ||
1080         !CBB_add_bytes(transcript.get(), ssl->s3->server_random,
1081                        SSL3_RANDOM_SIZE) ||
1082         !CBB_add_bytes(transcript.get(), CBS_data(&parameter),
1083                        CBS_len(&parameter)) ||
1084         !CBBFinishArray(transcript.get(), &transcript_data)) {
1085       OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1086       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1087       return ssl_hs_error;
1088     }
1089 
1090     if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
1091                                hs->peer_pubkey.get(), transcript_data)) {
1092       // bad signature
1093       OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
1094       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
1095       return ssl_hs_error;
1096     }
1097   } else {
1098     // PSK ciphers are the only supported certificate-less ciphers.
1099     assert(alg_a == SSL_aPSK);
1100 
1101     if (CBS_len(&server_key_exchange) > 0) {
1102       OPENSSL_PUT_ERROR(SSL, SSL_R_EXTRA_DATA_IN_MESSAGE);
1103       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1104       return ssl_hs_error;
1105     }
1106   }
1107 
1108   ssl->method->next_message(ssl);
1109   hs->state = state_read_certificate_request;
1110   return ssl_hs_ok;
1111 }
1112 
do_read_certificate_request(SSL_HANDSHAKE * hs)1113 static enum ssl_hs_wait_t do_read_certificate_request(SSL_HANDSHAKE *hs) {
1114   SSL *const ssl = hs->ssl;
1115 
1116   if (!ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
1117     hs->state = state_read_server_hello_done;
1118     return ssl_hs_ok;
1119   }
1120 
1121   SSLMessage msg;
1122   if (!ssl->method->get_message(ssl, &msg)) {
1123     return ssl_hs_read_message;
1124   }
1125 
1126   if (msg.type == SSL3_MT_SERVER_HELLO_DONE) {
1127     // If we get here we don't need the handshake buffer as we won't be doing
1128     // client auth.
1129     hs->transcript.FreeBuffer();
1130     hs->state = state_read_server_hello_done;
1131     return ssl_hs_ok;
1132   }
1133 
1134   if (!ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE_REQUEST) ||
1135       !ssl_hash_message(hs, msg)) {
1136     return ssl_hs_error;
1137   }
1138 
1139   // Get the certificate types.
1140   CBS body = msg.body, certificate_types;
1141   if (!CBS_get_u8_length_prefixed(&body, &certificate_types)) {
1142     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1143     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1144     return ssl_hs_error;
1145   }
1146 
1147   if (!hs->certificate_types.CopyFrom(certificate_types)) {
1148     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1149     return ssl_hs_error;
1150   }
1151 
1152   if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
1153     CBS supported_signature_algorithms;
1154     if (!CBS_get_u16_length_prefixed(&body, &supported_signature_algorithms) ||
1155         !tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
1156       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1157       OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1158       return ssl_hs_error;
1159     }
1160   }
1161 
1162   uint8_t alert = SSL_AD_DECODE_ERROR;
1163   UniquePtr<STACK_OF(CRYPTO_BUFFER)> ca_names =
1164       ssl_parse_client_CA_list(ssl, &alert, &body);
1165   if (!ca_names) {
1166     ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1167     return ssl_hs_error;
1168   }
1169 
1170   if (CBS_len(&body) != 0) {
1171     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1172     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1173     return ssl_hs_error;
1174   }
1175 
1176   hs->cert_request = true;
1177   hs->ca_names = std::move(ca_names);
1178   ssl->ctx->x509_method->hs_flush_cached_ca_names(hs);
1179 
1180   ssl->method->next_message(ssl);
1181   hs->state = state_read_server_hello_done;
1182   return ssl_hs_ok;
1183 }
1184 
do_read_server_hello_done(SSL_HANDSHAKE * hs)1185 static enum ssl_hs_wait_t do_read_server_hello_done(SSL_HANDSHAKE *hs) {
1186   SSL *const ssl = hs->ssl;
1187   SSLMessage msg;
1188   if (!ssl->method->get_message(ssl, &msg)) {
1189     return ssl_hs_read_message;
1190   }
1191 
1192   if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO_DONE) ||
1193       !ssl_hash_message(hs, msg)) {
1194     return ssl_hs_error;
1195   }
1196 
1197   // ServerHelloDone is empty.
1198   if (CBS_len(&msg.body) != 0) {
1199     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1200     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1201     return ssl_hs_error;
1202   }
1203 
1204   // ServerHelloDone should be the end of the flight.
1205   if (ssl->method->has_unprocessed_handshake_data(ssl)) {
1206     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
1207     OPENSSL_PUT_ERROR(SSL, SSL_R_EXCESS_HANDSHAKE_DATA);
1208     return ssl_hs_error;
1209   }
1210 
1211   ssl->method->next_message(ssl);
1212   hs->state = state_send_client_certificate;
1213   return ssl_hs_ok;
1214 }
1215 
do_send_client_certificate(SSL_HANDSHAKE * hs)1216 static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) {
1217   SSL *const ssl = hs->ssl;
1218 
1219   // The peer didn't request a certificate.
1220   if (!hs->cert_request) {
1221     hs->state = state_send_client_key_exchange;
1222     return ssl_hs_ok;
1223   }
1224 
1225   // Call cert_cb to update the certificate.
1226   if (hs->config->cert->cert_cb != NULL) {
1227     int rv = hs->config->cert->cert_cb(ssl, hs->config->cert->cert_cb_arg);
1228     if (rv == 0) {
1229       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1230       OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR);
1231       return ssl_hs_error;
1232     }
1233     if (rv < 0) {
1234       hs->state = state_send_client_certificate;
1235       return ssl_hs_x509_lookup;
1236     }
1237   }
1238 
1239   if (!ssl_has_certificate(hs)) {
1240     // Without a client certificate, the handshake buffer may be released.
1241     hs->transcript.FreeBuffer();
1242   }
1243 
1244   if (!ssl_on_certificate_selected(hs) ||
1245       !ssl_output_cert_chain(hs)) {
1246     return ssl_hs_error;
1247   }
1248 
1249 
1250   hs->state = state_send_client_key_exchange;
1251   return ssl_hs_ok;
1252 }
1253 
1254 static_assert(sizeof(size_t) >= sizeof(unsigned),
1255               "size_t is smaller than unsigned");
1256 
do_send_client_key_exchange(SSL_HANDSHAKE * hs)1257 static enum ssl_hs_wait_t do_send_client_key_exchange(SSL_HANDSHAKE *hs) {
1258   SSL *const ssl = hs->ssl;
1259   ScopedCBB cbb;
1260   CBB body;
1261   if (!ssl->method->init_message(ssl, cbb.get(), &body,
1262                                  SSL3_MT_CLIENT_KEY_EXCHANGE)) {
1263     return ssl_hs_error;
1264   }
1265 
1266   Array<uint8_t> pms;
1267   uint32_t alg_k = hs->new_cipher->algorithm_mkey;
1268   uint32_t alg_a = hs->new_cipher->algorithm_auth;
1269   if (ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
1270     const CRYPTO_BUFFER *leaf =
1271         sk_CRYPTO_BUFFER_value(hs->new_session->certs.get(), 0);
1272     CBS leaf_cbs;
1273     CRYPTO_BUFFER_init_CBS(leaf, &leaf_cbs);
1274 
1275     // Check the key usage matches the cipher suite. We do this unconditionally
1276     // for non-RSA certificates. In particular, it's needed to distinguish ECDH
1277     // certificates, which we do not support, from ECDSA certificates.
1278     // Historically, we have not checked RSA key usages, so it is controlled by
1279     // a flag for now. See https://crbug.com/795089.
1280     ssl_key_usage_t intended_use = (alg_k & SSL_kRSA)
1281                                        ? key_usage_encipherment
1282                                        : key_usage_digital_signature;
1283     if (hs->config->enforce_rsa_key_usage ||
1284         EVP_PKEY_id(hs->peer_pubkey.get()) != EVP_PKEY_RSA) {
1285       if (!ssl_cert_check_key_usage(&leaf_cbs, intended_use)) {
1286         return ssl_hs_error;
1287       }
1288     }
1289   }
1290 
1291   // If using a PSK key exchange, prepare the pre-shared key.
1292   unsigned psk_len = 0;
1293   uint8_t psk[PSK_MAX_PSK_LEN];
1294   if (alg_a & SSL_aPSK) {
1295     if (hs->config->psk_client_callback == NULL) {
1296       OPENSSL_PUT_ERROR(SSL, SSL_R_PSK_NO_CLIENT_CB);
1297       return ssl_hs_error;
1298     }
1299 
1300     char identity[PSK_MAX_IDENTITY_LEN + 1];
1301     OPENSSL_memset(identity, 0, sizeof(identity));
1302     psk_len = hs->config->psk_client_callback(
1303         ssl, hs->peer_psk_identity_hint.get(), identity, sizeof(identity), psk,
1304         sizeof(psk));
1305     if (psk_len == 0) {
1306       OPENSSL_PUT_ERROR(SSL, SSL_R_PSK_IDENTITY_NOT_FOUND);
1307       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1308       return ssl_hs_error;
1309     }
1310     assert(psk_len <= PSK_MAX_PSK_LEN);
1311 
1312     hs->new_session->psk_identity.reset(OPENSSL_strdup(identity));
1313     if (hs->new_session->psk_identity == nullptr) {
1314       OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
1315       return ssl_hs_error;
1316     }
1317 
1318     // Write out psk_identity.
1319     CBB child;
1320     if (!CBB_add_u16_length_prefixed(&body, &child) ||
1321         !CBB_add_bytes(&child, (const uint8_t *)identity,
1322                        OPENSSL_strnlen(identity, sizeof(identity))) ||
1323         !CBB_flush(&body)) {
1324       return ssl_hs_error;
1325     }
1326   }
1327 
1328   // Depending on the key exchange method, compute |pms|.
1329   if (alg_k & SSL_kRSA) {
1330     if (!pms.Init(SSL_MAX_MASTER_KEY_LENGTH)) {
1331       return ssl_hs_error;
1332     }
1333 
1334     RSA *rsa = EVP_PKEY_get0_RSA(hs->peer_pubkey.get());
1335     if (rsa == NULL) {
1336       OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1337       return ssl_hs_error;
1338     }
1339 
1340     pms[0] = hs->client_version >> 8;
1341     pms[1] = hs->client_version & 0xff;
1342     if (!RAND_bytes(&pms[2], SSL_MAX_MASTER_KEY_LENGTH - 2)) {
1343       return ssl_hs_error;
1344     }
1345 
1346     CBB enc_pms;
1347     uint8_t *ptr;
1348     size_t enc_pms_len;
1349     if (!CBB_add_u16_length_prefixed(&body, &enc_pms) ||
1350         !CBB_reserve(&enc_pms, &ptr, RSA_size(rsa)) ||
1351         !RSA_encrypt(rsa, &enc_pms_len, ptr, RSA_size(rsa), pms.data(),
1352                      pms.size(), RSA_PKCS1_PADDING) ||
1353         !CBB_did_write(&enc_pms, enc_pms_len) ||
1354         !CBB_flush(&body)) {
1355       return ssl_hs_error;
1356     }
1357   } else if (alg_k & SSL_kECDHE) {
1358     // Generate a keypair and serialize the public half.
1359     CBB child;
1360     if (!CBB_add_u8_length_prefixed(&body, &child)) {
1361       return ssl_hs_error;
1362     }
1363 
1364     // Compute the premaster.
1365     uint8_t alert = SSL_AD_DECODE_ERROR;
1366     if (!hs->key_shares[0]->Accept(&child, &pms, &alert, hs->peer_key)) {
1367       ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1368       return ssl_hs_error;
1369     }
1370     if (!CBB_flush(&body)) {
1371       return ssl_hs_error;
1372     }
1373 
1374     // The key exchange state may now be discarded.
1375     hs->key_shares[0].reset();
1376     hs->key_shares[1].reset();
1377     hs->peer_key.Reset();
1378   } else if (alg_k & SSL_kPSK) {
1379     // For plain PSK, other_secret is a block of 0s with the same length as
1380     // the pre-shared key.
1381     if (!pms.Init(psk_len)) {
1382       return ssl_hs_error;
1383     }
1384     OPENSSL_memset(pms.data(), 0, pms.size());
1385   } else {
1386     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1387     OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1388     return ssl_hs_error;
1389   }
1390 
1391   // For a PSK cipher suite, other_secret is combined with the pre-shared
1392   // key.
1393   if (alg_a & SSL_aPSK) {
1394     ScopedCBB pms_cbb;
1395     CBB child;
1396     if (!CBB_init(pms_cbb.get(), 2 + psk_len + 2 + pms.size()) ||
1397         !CBB_add_u16_length_prefixed(pms_cbb.get(), &child) ||
1398         !CBB_add_bytes(&child, pms.data(), pms.size()) ||
1399         !CBB_add_u16_length_prefixed(pms_cbb.get(), &child) ||
1400         !CBB_add_bytes(&child, psk, psk_len) ||
1401         !CBBFinishArray(pms_cbb.get(), &pms)) {
1402       OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
1403       return ssl_hs_error;
1404     }
1405   }
1406 
1407   // The message must be added to the finished hash before calculating the
1408   // master secret.
1409   if (!ssl_add_message_cbb(ssl, cbb.get())) {
1410     return ssl_hs_error;
1411   }
1412 
1413   hs->new_session->master_key_length =
1414       tls1_generate_master_secret(hs, hs->new_session->master_key, pms);
1415   if (hs->new_session->master_key_length == 0) {
1416     return ssl_hs_error;
1417   }
1418   hs->new_session->extended_master_secret = hs->extended_master_secret;
1419 
1420   hs->state = state_send_client_certificate_verify;
1421   return ssl_hs_ok;
1422 }
1423 
do_send_client_certificate_verify(SSL_HANDSHAKE * hs)1424 static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs) {
1425   SSL *const ssl = hs->ssl;
1426 
1427   if (!hs->cert_request || !ssl_has_certificate(hs)) {
1428     hs->state = state_send_client_finished;
1429     return ssl_hs_ok;
1430   }
1431 
1432   assert(ssl_has_private_key(hs));
1433   ScopedCBB cbb;
1434   CBB body, child;
1435   if (!ssl->method->init_message(ssl, cbb.get(), &body,
1436                                  SSL3_MT_CERTIFICATE_VERIFY)) {
1437     return ssl_hs_error;
1438   }
1439 
1440   uint16_t signature_algorithm;
1441   if (!tls1_choose_signature_algorithm(hs, &signature_algorithm)) {
1442     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1443     return ssl_hs_error;
1444   }
1445   if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
1446     // Write out the digest type in TLS 1.2.
1447     if (!CBB_add_u16(&body, signature_algorithm)) {
1448       OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1449       return ssl_hs_error;
1450     }
1451   }
1452 
1453   // Set aside space for the signature.
1454   const size_t max_sig_len = EVP_PKEY_size(hs->local_pubkey.get());
1455   uint8_t *ptr;
1456   if (!CBB_add_u16_length_prefixed(&body, &child) ||
1457       !CBB_reserve(&child, &ptr, max_sig_len)) {
1458     return ssl_hs_error;
1459   }
1460 
1461   size_t sig_len = max_sig_len;
1462   switch (ssl_private_key_sign(hs, ptr, &sig_len, max_sig_len,
1463                                signature_algorithm,
1464                                hs->transcript.buffer())) {
1465     case ssl_private_key_success:
1466       break;
1467     case ssl_private_key_failure:
1468       return ssl_hs_error;
1469     case ssl_private_key_retry:
1470       hs->state = state_send_client_certificate_verify;
1471       return ssl_hs_private_key_operation;
1472   }
1473 
1474   if (!CBB_did_write(&child, sig_len) ||
1475       !ssl_add_message_cbb(ssl, cbb.get())) {
1476     return ssl_hs_error;
1477   }
1478 
1479   // The handshake buffer is no longer necessary.
1480   hs->transcript.FreeBuffer();
1481 
1482   hs->state = state_send_client_finished;
1483   return ssl_hs_ok;
1484 }
1485 
do_send_client_finished(SSL_HANDSHAKE * hs)1486 static enum ssl_hs_wait_t do_send_client_finished(SSL_HANDSHAKE *hs) {
1487   SSL *const ssl = hs->ssl;
1488   // Resolve Channel ID first, before any non-idempotent operations.
1489   if (ssl->s3->channel_id_valid) {
1490     if (!ssl_do_channel_id_callback(hs)) {
1491       return ssl_hs_error;
1492     }
1493 
1494     if (hs->config->channel_id_private == NULL) {
1495       hs->state = state_send_client_finished;
1496       return ssl_hs_channel_id_lookup;
1497     }
1498   }
1499 
1500   if (!ssl->method->add_change_cipher_spec(ssl) ||
1501       !tls1_change_cipher_state(hs, evp_aead_seal)) {
1502     return ssl_hs_error;
1503   }
1504 
1505   if (hs->next_proto_neg_seen) {
1506     static const uint8_t kZero[32] = {0};
1507     size_t padding_len =
1508         32 - ((ssl->s3->next_proto_negotiated.size() + 2) % 32);
1509 
1510     ScopedCBB cbb;
1511     CBB body, child;
1512     if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_NEXT_PROTO) ||
1513         !CBB_add_u8_length_prefixed(&body, &child) ||
1514         !CBB_add_bytes(&child, ssl->s3->next_proto_negotiated.data(),
1515                        ssl->s3->next_proto_negotiated.size()) ||
1516         !CBB_add_u8_length_prefixed(&body, &child) ||
1517         !CBB_add_bytes(&child, kZero, padding_len) ||
1518         !ssl_add_message_cbb(ssl, cbb.get())) {
1519       OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1520       return ssl_hs_error;
1521     }
1522   }
1523 
1524   if (ssl->s3->channel_id_valid) {
1525     ScopedCBB cbb;
1526     CBB body;
1527     if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_CHANNEL_ID) ||
1528         !tls1_write_channel_id(hs, &body) ||
1529         !ssl_add_message_cbb(ssl, cbb.get())) {
1530       OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1531       return ssl_hs_error;
1532     }
1533   }
1534 
1535   if (!ssl_send_finished(hs)) {
1536     return ssl_hs_error;
1537   }
1538 
1539   hs->state = state_finish_flight;
1540   return ssl_hs_flush;
1541 }
1542 
can_false_start(const SSL_HANDSHAKE * hs)1543 static bool can_false_start(const SSL_HANDSHAKE *hs) {
1544   SSL *const ssl = hs->ssl;
1545 
1546   // False Start bypasses the Finished check's downgrade protection. This can
1547   // enable attacks where we send data under weaker settings than supported
1548   // (e.g. the Logjam attack). Thus we require TLS 1.2 with an ECDHE+AEAD
1549   // cipher, our strongest settings before TLS 1.3.
1550   //
1551   // Now that TLS 1.3 exists, we would like to avoid similar attacks between
1552   // TLS 1.2 and TLS 1.3, but there are too many TLS 1.2 deployments to
1553   // sacrifice False Start on them. TLS 1.3's downgrade signal fixes this, but
1554   // |SSL_CTX_set_ignore_tls13_downgrade| can disable it due to compatibility
1555   // issues.
1556   //
1557   // |SSL_CTX_set_ignore_tls13_downgrade| normally still retains Finished-based
1558   // downgrade protection, but False Start bypasses that. Thus, we disable False
1559   // Start based on the TLS 1.3 downgrade signal, even if otherwise unenforced.
1560   if (SSL_is_dtls(ssl) ||
1561       SSL_version(ssl) != TLS1_2_VERSION ||
1562       hs->new_cipher->algorithm_mkey != SSL_kECDHE ||
1563       hs->new_cipher->algorithm_mac != SSL_AEAD ||
1564       ssl->s3->tls13_downgrade) {
1565     return false;
1566   }
1567 
1568   // Additionally require ALPN or NPN by default.
1569   //
1570   // TODO(davidben): Can this constraint be relaxed globally now that cipher
1571   // suite requirements have been tightened?
1572   if (!ssl->ctx->false_start_allowed_without_alpn &&
1573       ssl->s3->alpn_selected.empty() &&
1574       ssl->s3->next_proto_negotiated.empty()) {
1575     return false;
1576   }
1577 
1578   return true;
1579 }
1580 
do_finish_flight(SSL_HANDSHAKE * hs)1581 static enum ssl_hs_wait_t do_finish_flight(SSL_HANDSHAKE *hs) {
1582   SSL *const ssl = hs->ssl;
1583   if (ssl->session != NULL) {
1584     hs->state = state_finish_client_handshake;
1585     return ssl_hs_ok;
1586   }
1587 
1588   // This is a full handshake. If it involves ChannelID, then record the
1589   // handshake hashes at this point in the session so that any resumption of
1590   // this session with ChannelID can sign those hashes.
1591   if (!tls1_record_handshake_hashes_for_channel_id(hs)) {
1592     return ssl_hs_error;
1593   }
1594 
1595   hs->state = state_read_session_ticket;
1596 
1597   if ((SSL_get_mode(ssl) & SSL_MODE_ENABLE_FALSE_START) &&
1598       can_false_start(hs) &&
1599       // No False Start on renegotiation (would complicate the state machine).
1600       !ssl->s3->initial_handshake_complete) {
1601     hs->in_false_start = true;
1602     hs->can_early_write = true;
1603     return ssl_hs_early_return;
1604   }
1605 
1606   return ssl_hs_ok;
1607 }
1608 
do_read_session_ticket(SSL_HANDSHAKE * hs)1609 static enum ssl_hs_wait_t do_read_session_ticket(SSL_HANDSHAKE *hs) {
1610   SSL *const ssl = hs->ssl;
1611 
1612   if (!hs->ticket_expected) {
1613     hs->state = state_process_change_cipher_spec;
1614     return ssl_hs_read_change_cipher_spec;
1615   }
1616 
1617   SSLMessage msg;
1618   if (!ssl->method->get_message(ssl, &msg)) {
1619     return ssl_hs_read_message;
1620   }
1621 
1622   if (!ssl_check_message_type(ssl, msg, SSL3_MT_NEW_SESSION_TICKET) ||
1623       !ssl_hash_message(hs, msg)) {
1624     return ssl_hs_error;
1625   }
1626 
1627   CBS new_session_ticket = msg.body, ticket;
1628   uint32_t ticket_lifetime_hint;
1629   if (!CBS_get_u32(&new_session_ticket, &ticket_lifetime_hint) ||
1630       !CBS_get_u16_length_prefixed(&new_session_ticket, &ticket) ||
1631       CBS_len(&new_session_ticket) != 0) {
1632     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1633     OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1634     return ssl_hs_error;
1635   }
1636 
1637   if (CBS_len(&ticket) == 0) {
1638     // RFC 5077 allows a server to change its mind and send no ticket after
1639     // negotiating the extension. The value of |ticket_expected| is checked in
1640     // |ssl_update_cache| so is cleared here to avoid an unnecessary update.
1641     hs->ticket_expected = false;
1642     ssl->method->next_message(ssl);
1643     hs->state = state_process_change_cipher_spec;
1644     return ssl_hs_read_change_cipher_spec;
1645   }
1646 
1647   SSL_SESSION *session = hs->new_session.get();
1648   UniquePtr<SSL_SESSION> renewed_session;
1649   if (ssl->session != NULL) {
1650     // The server is sending a new ticket for an existing session. Sessions are
1651     // immutable once established, so duplicate all but the ticket of the
1652     // existing session.
1653     renewed_session =
1654         SSL_SESSION_dup(ssl->session.get(), SSL_SESSION_INCLUDE_NONAUTH);
1655     if (!renewed_session) {
1656       // This should never happen.
1657       OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1658       return ssl_hs_error;
1659     }
1660     session = renewed_session.get();
1661   }
1662 
1663   // |ticket_lifetime_hint| is measured from when the ticket was issued.
1664   ssl_session_rebase_time(ssl, session);
1665 
1666   if (!session->ticket.CopyFrom(ticket)) {
1667     return ssl_hs_error;
1668   }
1669   session->ticket_lifetime_hint = ticket_lifetime_hint;
1670 
1671   // Generate a session ID for this session. Some callers expect all sessions to
1672   // have a session ID. Additionally, it acts as the session ID to signal
1673   // resumption.
1674   SHA256(CBS_data(&ticket), CBS_len(&ticket), session->session_id);
1675   session->session_id_length = SHA256_DIGEST_LENGTH;
1676 
1677   if (renewed_session) {
1678     session->not_resumable = false;
1679     ssl->session = std::move(renewed_session);
1680   }
1681 
1682   ssl->method->next_message(ssl);
1683   hs->state = state_process_change_cipher_spec;
1684   return ssl_hs_read_change_cipher_spec;
1685 }
1686 
do_process_change_cipher_spec(SSL_HANDSHAKE * hs)1687 static enum ssl_hs_wait_t do_process_change_cipher_spec(SSL_HANDSHAKE *hs) {
1688   if (!tls1_change_cipher_state(hs, evp_aead_open)) {
1689     return ssl_hs_error;
1690   }
1691 
1692   hs->state = state_read_server_finished;
1693   return ssl_hs_ok;
1694 }
1695 
do_read_server_finished(SSL_HANDSHAKE * hs)1696 static enum ssl_hs_wait_t do_read_server_finished(SSL_HANDSHAKE *hs) {
1697   SSL *const ssl = hs->ssl;
1698   enum ssl_hs_wait_t wait = ssl_get_finished(hs);
1699   if (wait != ssl_hs_ok) {
1700     return wait;
1701   }
1702 
1703   if (ssl->session != NULL) {
1704     hs->state = state_send_client_finished;
1705     return ssl_hs_ok;
1706   }
1707 
1708   hs->state = state_finish_client_handshake;
1709   return ssl_hs_ok;
1710 }
1711 
do_finish_client_handshake(SSL_HANDSHAKE * hs)1712 static enum ssl_hs_wait_t do_finish_client_handshake(SSL_HANDSHAKE *hs) {
1713   SSL *const ssl = hs->ssl;
1714 
1715   ssl->method->on_handshake_complete(ssl);
1716 
1717   if (ssl->session != NULL) {
1718     ssl->s3->established_session = UpRef(ssl->session);
1719   } else {
1720     // We make a copy of the session in order to maintain the immutability
1721     // of the new established_session due to False Start. The caller may
1722     // have taken a reference to the temporary session.
1723     ssl->s3->established_session =
1724         SSL_SESSION_dup(hs->new_session.get(), SSL_SESSION_DUP_ALL);
1725     if (!ssl->s3->established_session) {
1726       return ssl_hs_error;
1727     }
1728     // Renegotiations do not participate in session resumption.
1729     if (!ssl->s3->initial_handshake_complete) {
1730       ssl->s3->established_session->not_resumable = false;
1731     }
1732 
1733     hs->new_session.reset();
1734   }
1735 
1736   hs->handshake_finalized = true;
1737   ssl->s3->initial_handshake_complete = true;
1738   ssl_update_cache(hs, SSL_SESS_CACHE_CLIENT);
1739 
1740   hs->state = state_done;
1741   return ssl_hs_ok;
1742 }
1743 
ssl_client_handshake(SSL_HANDSHAKE * hs)1744 enum ssl_hs_wait_t ssl_client_handshake(SSL_HANDSHAKE *hs) {
1745   while (hs->state != state_done) {
1746     enum ssl_hs_wait_t ret = ssl_hs_error;
1747     enum ssl_client_hs_state_t state =
1748         static_cast<enum ssl_client_hs_state_t>(hs->state);
1749     switch (state) {
1750       case state_start_connect:
1751         ret = do_start_connect(hs);
1752         break;
1753       case state_enter_early_data:
1754         ret = do_enter_early_data(hs);
1755         break;
1756       case state_early_reverify_server_certificate:
1757         ret = do_early_reverify_server_certificate(hs);
1758         break;
1759       case state_read_hello_verify_request:
1760         ret = do_read_hello_verify_request(hs);
1761         break;
1762       case state_read_server_hello:
1763         ret = do_read_server_hello(hs);
1764         break;
1765       case state_tls13:
1766         ret = do_tls13(hs);
1767         break;
1768       case state_read_server_certificate:
1769         ret = do_read_server_certificate(hs);
1770         break;
1771       case state_read_certificate_status:
1772         ret = do_read_certificate_status(hs);
1773         break;
1774       case state_verify_server_certificate:
1775         ret = do_verify_server_certificate(hs);
1776         break;
1777       case state_reverify_server_certificate:
1778         ret = do_reverify_server_certificate(hs);
1779         break;
1780       case state_read_server_key_exchange:
1781         ret = do_read_server_key_exchange(hs);
1782         break;
1783       case state_read_certificate_request:
1784         ret = do_read_certificate_request(hs);
1785         break;
1786       case state_read_server_hello_done:
1787         ret = do_read_server_hello_done(hs);
1788         break;
1789       case state_send_client_certificate:
1790         ret = do_send_client_certificate(hs);
1791         break;
1792       case state_send_client_key_exchange:
1793         ret = do_send_client_key_exchange(hs);
1794         break;
1795       case state_send_client_certificate_verify:
1796         ret = do_send_client_certificate_verify(hs);
1797         break;
1798       case state_send_client_finished:
1799         ret = do_send_client_finished(hs);
1800         break;
1801       case state_finish_flight:
1802         ret = do_finish_flight(hs);
1803         break;
1804       case state_read_session_ticket:
1805         ret = do_read_session_ticket(hs);
1806         break;
1807       case state_process_change_cipher_spec:
1808         ret = do_process_change_cipher_spec(hs);
1809         break;
1810       case state_read_server_finished:
1811         ret = do_read_server_finished(hs);
1812         break;
1813       case state_finish_client_handshake:
1814         ret = do_finish_client_handshake(hs);
1815         break;
1816       case state_done:
1817         ret = ssl_hs_ok;
1818         break;
1819     }
1820 
1821     if (hs->state != state) {
1822       ssl_do_info_callback(hs->ssl, SSL_CB_CONNECT_LOOP, 1);
1823     }
1824 
1825     if (ret != ssl_hs_ok) {
1826       return ret;
1827     }
1828   }
1829 
1830   ssl_do_info_callback(hs->ssl, SSL_CB_HANDSHAKE_DONE, 1);
1831   return ssl_hs_ok;
1832 }
1833 
ssl_client_handshake_state(SSL_HANDSHAKE * hs)1834 const char *ssl_client_handshake_state(SSL_HANDSHAKE *hs) {
1835   enum ssl_client_hs_state_t state =
1836       static_cast<enum ssl_client_hs_state_t>(hs->state);
1837   switch (state) {
1838     case state_start_connect:
1839       return "TLS client start_connect";
1840     case state_enter_early_data:
1841       return "TLS client enter_early_data";
1842     case state_early_reverify_server_certificate:
1843       return "TLS client early_reverify_server_certificate";
1844     case state_read_hello_verify_request:
1845       return "TLS client read_hello_verify_request";
1846     case state_read_server_hello:
1847       return "TLS client read_server_hello";
1848     case state_tls13:
1849       return tls13_client_handshake_state(hs);
1850     case state_read_server_certificate:
1851       return "TLS client read_server_certificate";
1852     case state_read_certificate_status:
1853       return "TLS client read_certificate_status";
1854     case state_verify_server_certificate:
1855       return "TLS client verify_server_certificate";
1856     case state_reverify_server_certificate:
1857       return "TLS client reverify_server_certificate";
1858     case state_read_server_key_exchange:
1859       return "TLS client read_server_key_exchange";
1860     case state_read_certificate_request:
1861       return "TLS client read_certificate_request";
1862     case state_read_server_hello_done:
1863       return "TLS client read_server_hello_done";
1864     case state_send_client_certificate:
1865       return "TLS client send_client_certificate";
1866     case state_send_client_key_exchange:
1867       return "TLS client send_client_key_exchange";
1868     case state_send_client_certificate_verify:
1869       return "TLS client send_client_certificate_verify";
1870     case state_send_client_finished:
1871       return "TLS client send_client_finished";
1872     case state_finish_flight:
1873       return "TLS client finish_flight";
1874     case state_read_session_ticket:
1875       return "TLS client read_session_ticket";
1876     case state_process_change_cipher_spec:
1877       return "TLS client process_change_cipher_spec";
1878     case state_read_server_finished:
1879       return "TLS client read_server_finished";
1880     case state_finish_client_handshake:
1881       return "TLS client finish_client_handshake";
1882     case state_done:
1883       return "TLS client done";
1884   }
1885 
1886   return "TLS client unknown";
1887 }
1888 
1889 BSSL_NAMESPACE_END
1890