handshake_server.cc
Go to the documentation of this file.
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 #include <openssl/ssl.h>
150 
151 #include <assert.h>
152 #include <string.h>
153 
154 #include <openssl/bn.h>
155 #include <openssl/bytestring.h>
156 #include <openssl/cipher.h>
157 #include <openssl/curve25519.h>
158 #include <openssl/digest.h>
159 #include <openssl/ec.h>
160 #include <openssl/ecdsa.h>
161 #include <openssl/err.h>
162 #include <openssl/evp.h>
163 #include <openssl/hmac.h>
164 #include <openssl/md5.h>
165 #include <openssl/mem.h>
166 #include <openssl/nid.h>
167 #include <openssl/rand.h>
168 #include <openssl/x509.h>
169 
170 #include "internal.h"
171 #include "../crypto/internal.h"
172 
173 
175 
177  const SSL_CLIENT_HELLO *client_hello, uint16_t id) {
179  CBS_init(&cipher_suites, client_hello->cipher_suites,
180  client_hello->cipher_suites_len);
181 
182  while (CBS_len(&cipher_suites) > 0) {
183  uint16_t got_id;
184  if (!CBS_get_u16(&cipher_suites, &got_id)) {
185  return false;
186  }
187 
188  if (got_id == id) {
189  return true;
190  }
191  }
192 
193  return false;
194 }
195 
196 static bool negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
197  const SSL_CLIENT_HELLO *client_hello) {
198  SSL *const ssl = hs->ssl;
199  assert(!ssl->s3->have_version);
200  CBS supported_versions, versions;
204  CBS_len(&supported_versions) != 0 ||
205  CBS_len(&versions) == 0) {
207  *out_alert = SSL_AD_DECODE_ERROR;
208  return false;
209  }
210  } else {
211  // Convert the ClientHello version to an equivalent supported_versions
212  // extension.
213  static const uint8_t kTLSVersions[] = {
214  0x03, 0x03, // TLS 1.2
215  0x03, 0x02, // TLS 1.1
216  0x03, 0x01, // TLS 1
217  };
218 
219  static const uint8_t kDTLSVersions[] = {
220  0xfe, 0xfd, // DTLS 1.2
221  0xfe, 0xff, // DTLS 1.0
222  };
223 
224  size_t versions_len = 0;
225  if (SSL_is_dtls(ssl)) {
226  if (client_hello->version <= DTLS1_2_VERSION) {
227  versions_len = 4;
228  } else if (client_hello->version <= DTLS1_VERSION) {
229  versions_len = 2;
230  }
231  CBS_init(&versions, kDTLSVersions + sizeof(kDTLSVersions) - versions_len,
232  versions_len);
233  } else {
234  if (client_hello->version >= TLS1_2_VERSION) {
235  versions_len = 6;
236  } else if (client_hello->version >= TLS1_1_VERSION) {
237  versions_len = 4;
238  } else if (client_hello->version >= TLS1_VERSION) {
239  versions_len = 2;
240  }
241  CBS_init(&versions, kTLSVersions + sizeof(kTLSVersions) - versions_len,
242  versions_len);
243  }
244  }
245 
246  if (!ssl_negotiate_version(hs, out_alert, &ssl->version, &versions)) {
247  return false;
248  }
249 
250  // At this point, the connection's version is known and |ssl->version| is
251  // fixed. Begin enforcing the record-layer version.
252  ssl->s3->have_version = true;
253  ssl->s3->aead_write_ctx->SetVersionIfNullCipher(ssl->version);
254 
255  // Handle FALLBACK_SCSV.
257  SSL3_CK_FALLBACK_SCSV & 0xffff) &&
258  ssl_protocol_version(ssl) < hs->max_version) {
260  *out_alert = SSL3_AD_INAPPROPRIATE_FALLBACK;
261  return false;
262  }
263 
264  return true;
265 }
266 
268  const SSL_CLIENT_HELLO *client_hello) {
270  CBS_init(&cipher_suites, client_hello->cipher_suites,
271  client_hello->cipher_suites_len);
272 
274  if (!sk) {
276  return nullptr;
277  }
278 
279  while (CBS_len(&cipher_suites) > 0) {
280  uint16_t cipher_suite;
281 
282  if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
284  return nullptr;
285  }
286 
287  const SSL_CIPHER *c = SSL_get_cipher_by_value(cipher_suite);
288  if (c != NULL && !sk_SSL_CIPHER_push(sk.get(), c)) {
290  return nullptr;
291  }
292  }
293 
294  return sk;
295 }
296 
297 // ssl_get_compatible_server_ciphers determines the key exchange and
298 // authentication cipher suite masks compatible with the server configuration
299 // and current ClientHello parameters of |hs|. It sets |*out_mask_k| to the key
300 // exchange mask and |*out_mask_a| to the authentication mask.
302  uint32_t *out_mask_k,
303  uint32_t *out_mask_a) {
304  uint32_t mask_k = 0;
305  uint32_t mask_a = 0;
306 
307  if (ssl_has_certificate(hs)) {
308  mask_a |= ssl_cipher_auth_mask_for_key(hs->local_pubkey.get());
309  if (EVP_PKEY_id(hs->local_pubkey.get()) == EVP_PKEY_RSA) {
310  mask_k |= SSL_kRSA;
311  }
312  }
313 
314  // Check for a shared group to consider ECDHE ciphers.
315  uint16_t unused;
316  if (tls1_get_shared_group(hs, &unused)) {
317  mask_k |= SSL_kECDHE;
318  }
319 
320  // PSK requires a server callback.
321  if (hs->config->psk_server_callback != NULL) {
322  mask_k |= SSL_kPSK;
323  mask_a |= SSL_aPSK;
324  }
325 
326  *out_mask_k = mask_k;
327  *out_mask_a = mask_a;
328 }
329 
330 static const SSL_CIPHER *choose_cipher(
331  SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello,
332  const SSLCipherPreferenceList *server_pref) {
333  SSL *const ssl = hs->ssl;
334  const STACK_OF(SSL_CIPHER) *prio, *allow;
335  // in_group_flags will either be NULL, or will point to an array of bytes
336  // which indicate equal-preference groups in the |prio| stack. See the
337  // comment about |in_group_flags| in the |SSLCipherPreferenceList|
338  // struct.
339  const bool *in_group_flags;
340  // group_min contains the minimal index so far found in a group, or -1 if no
341  // such value exists yet.
342  int group_min = -1;
343 
344  UniquePtr<STACK_OF(SSL_CIPHER)> client_pref =
345  ssl_parse_client_cipher_list(client_hello);
346  if (!client_pref) {
347  return nullptr;
348  }
349 
351  prio = server_pref->ciphers.get();
352  in_group_flags = server_pref->in_group_flags;
353  allow = client_pref.get();
354  } else {
355  prio = client_pref.get();
356  in_group_flags = NULL;
357  allow = server_pref->ciphers.get();
358  }
359 
360  uint32_t mask_k, mask_a;
361  ssl_get_compatible_server_ciphers(hs, &mask_k, &mask_a);
362 
363  for (size_t i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
364  const SSL_CIPHER *c = sk_SSL_CIPHER_value(prio, i);
365 
366  size_t cipher_index;
367  if (// Check if the cipher is supported for the current version.
370  // Check the cipher is supported for the server configuration.
371  (c->algorithm_mkey & mask_k) &&
372  (c->algorithm_auth & mask_a) &&
373  // Check the cipher is in the |allow| list.
374  sk_SSL_CIPHER_find(allow, &cipher_index, c)) {
375  if (in_group_flags != NULL && in_group_flags[i]) {
376  // This element of |prio| is in a group. Update the minimum index found
377  // so far and continue looking.
378  if (group_min == -1 || (size_t)group_min > cipher_index) {
379  group_min = cipher_index;
380  }
381  } else {
382  if (group_min != -1 && (size_t)group_min < cipher_index) {
383  cipher_index = group_min;
384  }
385  return sk_SSL_CIPHER_value(allow, cipher_index);
386  }
387  }
388 
389  if (in_group_flags != NULL && !in_group_flags[i] && group_min != -1) {
390  // We are about to leave a group, but we found a match in it, so that's
391  // our answer.
392  return sk_SSL_CIPHER_value(allow, group_min);
393  }
394  }
395 
396  return nullptr;
397 }
398 
402  return ssl_hs_ok;
403 }
404 
405 // is_probably_jdk11_with_tls13 returns whether |client_hello| was probably sent
406 // from a JDK 11 client with both TLS 1.3 and a prior version enabled.
407 static bool is_probably_jdk11_with_tls13(const SSL_CLIENT_HELLO *client_hello) {
408  // JDK 11 ClientHellos contain a number of unusual properties which should
409  // limit false positives.
410 
411  // JDK 11 does not support ChaCha20-Poly1305. This is unusual: many modern
412  // clients implement ChaCha20-Poly1305.
414  client_hello, TLS1_CK_CHACHA20_POLY1305_SHA256 & 0xffff)) {
415  return false;
416  }
417 
418  // JDK 11 always sends extensions in a particular order.
419  constexpr uint16_t kMaxFragmentLength = 0x0001;
420  constexpr uint16_t kStatusRequestV2 = 0x0011;
421  static CONSTEXPR_ARRAY struct {
422  uint16_t id;
423  bool required;
424  } kJavaExtensions[] = {
425  {TLSEXT_TYPE_server_name, false},
426  {kMaxFragmentLength, false},
431  // Java always sends signature_algorithms_cert.
434  {kStatusRequestV2, false},
437  {TLSEXT_TYPE_cookie, false},
439  {TLSEXT_TYPE_key_share, true},
440  {TLSEXT_TYPE_renegotiate, false},
442  };
443  Span<const uint8_t> sigalgs, sigalgs_cert;
444  bool has_status_request = false, has_status_request_v2 = false;
445  CBS extensions, supported_groups;
446  CBS_init(&extensions, client_hello->extensions, client_hello->extensions_len);
447  for (const auto &java_extension : kJavaExtensions) {
448  CBS copy = extensions;
449  uint16_t id;
450  if (CBS_get_u16(&copy, &id) && id == java_extension.id) {
451  // The next extension is the one we expected.
452  extensions = copy;
453  CBS body;
454  if (!CBS_get_u16_length_prefixed(&extensions, &body)) {
455  return false;
456  }
457  switch (id) {
459  has_status_request = true;
460  break;
461  case kStatusRequestV2:
462  has_status_request_v2 = true;
463  break;
465  sigalgs = body;
466  break;
468  sigalgs_cert = body;
469  break;
471  supported_groups = body;
472  break;
473  }
474  } else if (java_extension.required) {
475  return false;
476  }
477  }
478  if (CBS_len(&extensions) != 0) {
479  return false;
480  }
481 
482  // JDK 11 never advertises X25519. It is not offered by default, and
483  // -Djdk.tls.namedGroups=x25519 does not work. This is unusual: many modern
484  // clients implement X25519.
485  while (CBS_len(&supported_groups) > 0) {
486  uint16_t group;
487  if (!CBS_get_u16(&supported_groups, &group) ||
488  group == SSL_CURVE_X25519) {
489  return false;
490  }
491  }
492 
493  if (// JDK 11 always sends the same contents in signature_algorithms and
494  // signature_algorithms_cert. This is unusual: signature_algorithms_cert,
495  // if omitted, is treated as if it were signature_algorithms.
496  sigalgs != sigalgs_cert ||
497  // When TLS 1.2 or below is enabled, JDK 11 sends status_request_v2 iff it
498  // sends status_request. This is unusual: status_request_v2 is not widely
499  // implemented.
500  has_status_request != has_status_request_v2) {
501  return false;
502  }
503 
504  return true;
505 }
506 
507 static bool decrypt_ech(SSL_HANDSHAKE *hs, uint8_t *out_alert,
508  const SSL_CLIENT_HELLO *client_hello) {
509  SSL *const ssl = hs->ssl;
510  CBS body;
511  if (!ssl_client_hello_get_extension(client_hello, &body,
513  return true;
514  }
515  uint8_t type;
516  if (!CBS_get_u8(&body, &type)) {
518  *out_alert = SSL_AD_DECODE_ERROR;
519  return false;
520  }
521  if (type != ECH_CLIENT_OUTER) {
522  return true;
523  }
524  // This is a ClientHelloOuter ECH extension. Attempt to decrypt it.
525  uint8_t config_id;
526  uint16_t kdf_id, aead_id;
527  CBS enc, payload;
528  if (!CBS_get_u16(&body, &kdf_id) || //
529  !CBS_get_u16(&body, &aead_id) || //
530  !CBS_get_u8(&body, &config_id) ||
531  !CBS_get_u16_length_prefixed(&body, &enc) ||
532  !CBS_get_u16_length_prefixed(&body, &payload) || //
533  CBS_len(&body) != 0) {
535  *out_alert = SSL_AD_DECODE_ERROR;
536  return false;
537  }
538 
539  {
540  MutexReadLock lock(&ssl->ctx->lock);
541  hs->ech_keys = UpRef(ssl->ctx->ech_keys);
542  }
543 
544  if (!hs->ech_keys) {
545  ssl->s3->ech_status = ssl_ech_rejected;
546  return true;
547  }
548 
549  for (const auto &config : hs->ech_keys->configs) {
550  hs->ech_hpke_ctx.Reset();
551  if (config_id != config->ech_config().config_id ||
552  !config->SetupContext(hs->ech_hpke_ctx.get(), kdf_id, aead_id, enc)) {
553  // Ignore the error and try another ECHConfig.
554  ERR_clear_error();
555  continue;
556  }
557  Array<uint8_t> encoded_client_hello_inner;
558  bool is_decrypt_error;
559  if (!ssl_client_hello_decrypt(hs->ech_hpke_ctx.get(),
560  &encoded_client_hello_inner,
561  &is_decrypt_error, client_hello, payload)) {
562  if (is_decrypt_error) {
563  // Ignore the error and try another ECHConfig.
564  ERR_clear_error();
565  continue;
566  }
568  return false;
569  }
570 
571  // Recover the ClientHelloInner from the EncodedClientHelloInner.
572  bssl::Array<uint8_t> client_hello_inner;
573  if (!ssl_decode_client_hello_inner(ssl, out_alert, &client_hello_inner,
574  encoded_client_hello_inner,
575  client_hello)) {
577  return false;
578  }
579  hs->ech_client_hello_buf = std::move(client_hello_inner);
580  hs->ech_config_id = config_id;
581  ssl->s3->ech_status = ssl_ech_accepted;
582  return true;
583  }
584 
585  // If we did not accept ECH, proceed with the ClientHelloOuter. Note this
586  // could be key mismatch or ECH GREASE, so we must complete the handshake
587  // as usual, except EncryptedExtensions will contain retry configs.
588  ssl->s3->ech_status = ssl_ech_rejected;
589  return true;
590 }
591 
592 static bool extract_sni(SSL_HANDSHAKE *hs, uint8_t *out_alert,
593  const SSL_CLIENT_HELLO *client_hello) {
594  SSL *const ssl = hs->ssl;
595  CBS sni;
596  if (!ssl_client_hello_get_extension(client_hello, &sni,
598  // No SNI extension to parse.
599  return true;
600  }
601 
602  CBS server_name_list, host_name;
603  uint8_t name_type;
604  if (!CBS_get_u16_length_prefixed(&sni, &server_name_list) ||
605  !CBS_get_u8(&server_name_list, &name_type) ||
606  // Although the server_name extension was intended to be extensible to
607  // new name types and multiple names, OpenSSL 1.0.x had a bug which meant
608  // different name types will cause an error. Further, RFC 4366 originally
609  // defined syntax inextensibly. RFC 6066 corrected this mistake, but
610  // adding new name types is no longer feasible.
611  //
612  // Act as if the extensibility does not exist to simplify parsing.
613  !CBS_get_u16_length_prefixed(&server_name_list, &host_name) ||
614  CBS_len(&server_name_list) != 0 ||
615  CBS_len(&sni) != 0) {
616  *out_alert = SSL_AD_DECODE_ERROR;
617  return false;
618  }
619 
620  if (name_type != TLSEXT_NAMETYPE_host_name ||
621  CBS_len(&host_name) == 0 ||
622  CBS_len(&host_name) > TLSEXT_MAXLEN_host_name ||
623  CBS_contains_zero_byte(&host_name)) {
624  *out_alert = SSL_AD_UNRECOGNIZED_NAME;
625  return false;
626  }
627 
628  // Copy the hostname as a string.
629  char *raw = nullptr;
630  if (!CBS_strdup(&host_name, &raw)) {
631  *out_alert = SSL_AD_INTERNAL_ERROR;
632  return false;
633  }
634  ssl->s3->hostname.reset(raw);
635 
636  hs->should_ack_sni = true;
637  return true;
638 }
639 
641  SSL *const ssl = hs->ssl;
642 
643  SSLMessage msg;
644  if (!ssl->method->get_message(ssl, &msg)) {
645  return ssl_hs_read_message;
646  }
647 
649  return ssl_hs_error;
650  }
651 
652  SSL_CLIENT_HELLO client_hello;
653  if (!ssl_client_hello_init(ssl, &client_hello, msg.body)) {
656  return ssl_hs_error;
657  }
658 
659  // ClientHello should be the end of the flight. We check this early to cover
660  // all protocol versions.
661  if (ssl->method->has_unprocessed_handshake_data(ssl)) {
664  return ssl_hs_error;
665  }
666 
667  if (hs->config->handoff) {
668  return ssl_hs_handoff;
669  }
670 
672  if (!decrypt_ech(hs, &alert, &client_hello)) {
673  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
674  return ssl_hs_error;
675  }
676 
677  // ECH may have changed which ClientHello we process. Update |msg| and
678  // |client_hello| in case.
679  if (!hs->GetClientHello(&msg, &client_hello)) {
681  return ssl_hs_error;
682  }
683 
684  if (!extract_sni(hs, &alert, &client_hello)) {
685  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
686  return ssl_hs_error;
687  }
688 
690  return ssl_hs_ok;
691 }
692 
694  SSL *const ssl = hs->ssl;
695 
696  SSLMessage msg_unused;
697  SSL_CLIENT_HELLO client_hello;
698  if (!hs->GetClientHello(&msg_unused, &client_hello)) {
699  return ssl_hs_error;
700  }
701 
702  // Run the early callback.
703  if (ssl->ctx->select_certificate_cb != NULL) {
704  switch (ssl->ctx->select_certificate_cb(&client_hello)) {
707 
709  // Connection rejected.
712  return ssl_hs_error;
713 
714  default:
715  /* fallthrough */;
716  }
717  }
718 
719  // Freeze the version range after the early callback.
720  if (!ssl_get_version_range(hs, &hs->min_version, &hs->max_version)) {
721  return ssl_hs_error;
722  }
723 
724  if (hs->config->jdk11_workaround &&
725  is_probably_jdk11_with_tls13(&client_hello)) {
726  hs->apply_jdk11_workaround = true;
727  }
728 
730  if (!negotiate_version(hs, &alert, &client_hello)) {
731  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
732  return ssl_hs_error;
733  }
734 
735  hs->client_version = client_hello.version;
736  if (client_hello.random_len != SSL3_RANDOM_SIZE) {
738  return ssl_hs_error;
739  }
740  OPENSSL_memcpy(ssl->s3->client_random, client_hello.random,
741  client_hello.random_len);
742 
743  // Only null compression is supported. TLS 1.3 further requires the peer
744  // advertise no other compression.
745  if (OPENSSL_memchr(client_hello.compression_methods, 0,
746  client_hello.compression_methods_len) == NULL ||
748  client_hello.compression_methods_len != 1)) {
751  return ssl_hs_error;
752  }
753 
754  // TLS extensions.
755  if (!ssl_parse_clienthello_tlsext(hs, &client_hello)) {
757  return ssl_hs_error;
758  }
759 
761  return ssl_hs_ok;
762 }
763 
765  SSL *const ssl = hs->ssl;
766 
767  // Call |cert_cb| to update server certificates if required.
768  if (hs->config->cert->cert_cb != NULL) {
769  int rv = hs->config->cert->cert_cb(ssl, hs->config->cert->cert_cb_arg);
770  if (rv == 0) {
773  return ssl_hs_error;
774  }
775  if (rv < 0) {
776  return ssl_hs_x509_lookup;
777  }
778  }
779 
780  if (!ssl_on_certificate_selected(hs)) {
781  return ssl_hs_error;
782  }
783 
784  if (hs->ocsp_stapling_requested &&
785  ssl->ctx->legacy_ocsp_callback != nullptr) {
786  switch (ssl->ctx->legacy_ocsp_callback(
787  ssl, ssl->ctx->legacy_ocsp_callback_arg)) {
788  case SSL_TLSEXT_ERR_OK:
789  break;
791  hs->ocsp_stapling_requested = false;
792  break;
793  default:
796  return ssl_hs_error;
797  }
798  }
799 
800  if (ssl_protocol_version(ssl) >= TLS1_3_VERSION) {
801  // Jump to the TLS 1.3 state machine.
802  hs->state = state12_tls13;
803  return ssl_hs_ok;
804  }
805 
806  // It should not be possible to negotiate TLS 1.2 with ECH. The
807  // ClientHelloInner decoding function rejects ClientHellos which offer TLS 1.2
808  // or below.
809  assert(ssl->s3->ech_status != ssl_ech_accepted);
810 
811  // TODO(davidben): Also compute hints for TLS 1.2. When doing so, update the
812  // check in bssl_shim.cc to test this.
813  if (hs->hints_requested) {
814  return ssl_hs_hints_ready;
815  }
816 
817  ssl->s3->early_data_reason = ssl_early_data_protocol_version;
818 
819  SSLMessage msg_unused;
820  SSL_CLIENT_HELLO client_hello;
821  if (!hs->GetClientHello(&msg_unused, &client_hello)) {
822  return ssl_hs_error;
823  }
824 
825  // Negotiate the cipher suite. This must be done after |cert_cb| so the
826  // certificate is finalized.
828  ? hs->config->cipher_list.get()
829  : ssl->ctx->cipher_list.get();
830  hs->new_cipher = choose_cipher(hs, &client_hello, prefs);
831  if (hs->new_cipher == NULL) {
834  return ssl_hs_error;
835  }
836 
838  return ssl_hs_ok;
839 }
840 
843  if (wait == ssl_hs_ok) {
845  return ssl_hs_ok;
846  }
847 
848  return wait;
849 }
850 
852  SSL *const ssl = hs->ssl;
853 
854  SSLMessage msg;
855  if (!ssl->method->get_message(ssl, &msg)) {
856  return ssl_hs_read_message;
857  }
858 
859  SSL_CLIENT_HELLO client_hello;
860  if (!ssl_client_hello_init(ssl, &client_hello, msg.body)) {
861  return ssl_hs_error;
862  }
863 
864  hs->session_id_len = client_hello.session_id_len;
865  // This is checked in |ssl_client_hello_init|.
866  assert(hs->session_id_len <= sizeof(hs->session_id));
867  OPENSSL_memcpy(hs->session_id, client_hello.session_id, hs->session_id_len);
868 
869  // Determine whether we are doing session resumption.
870  UniquePtr<SSL_SESSION> session;
871  bool tickets_supported = false, renew_ticket = false;
873  hs, &session, &tickets_supported, &renew_ticket, &client_hello);
874  if (wait != ssl_hs_ok) {
875  return wait;
876  }
877 
878  if (session) {
879  if (session->extended_master_secret && !hs->extended_master_secret) {
880  // A ClientHello without EMS that attempts to resume a session with EMS
881  // is fatal to the connection.
884  return ssl_hs_error;
885  }
886 
887  if (!ssl_session_is_resumable(hs, session.get()) ||
888  // If the client offers the EMS extension, but the previous session
889  // didn't use it, then negotiate a new session.
890  hs->extended_master_secret != session->extended_master_secret) {
891  session.reset();
892  }
893  }
894 
895  if (session) {
896  // Use the old session.
897  hs->ticket_expected = renew_ticket;
898  ssl->session = std::move(session);
899  ssl->s3->session_reused = true;
900  hs->can_release_private_key = true;
901  } else {
902  hs->ticket_expected = tickets_supported;
903  ssl_set_session(ssl, nullptr);
904  if (!ssl_get_new_session(hs)) {
905  return ssl_hs_error;
906  }
907 
908  // Assign a session ID if not using session tickets.
909  if (!hs->ticket_expected &&
910  (ssl->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER)) {
911  hs->new_session->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
912  RAND_bytes(hs->new_session->session_id,
913  hs->new_session->session_id_length);
914  }
915  }
916 
917  if (ssl->ctx->dos_protection_cb != NULL &&
918  ssl->ctx->dos_protection_cb(&client_hello) == 0) {
919  // Connection rejected for DOS reasons.
922  return ssl_hs_error;
923  }
924 
925  if (ssl->session == NULL) {
926  hs->new_session->cipher = hs->new_cipher;
927 
928  // Determine whether to request a client certificate.
930  // Only request a certificate if Channel ID isn't negotiated.
932  hs->channel_id_negotiated) {
933  hs->cert_request = false;
934  }
935  // CertificateRequest may only be sent in certificate-based ciphers.
937  hs->cert_request = false;
938  }
939 
940  if (!hs->cert_request) {
941  // OpenSSL returns X509_V_OK when no certificates are requested. This is
942  // classed by them as a bug, but it's assumed by at least NGINX.
943  hs->new_session->verify_result = X509_V_OK;
944  }
945  }
946 
947  // HTTP/2 negotiation depends on the cipher suite, so ALPN negotiation was
948  // deferred. Complete it now.
950  if (!ssl_negotiate_alpn(hs, &alert, &client_hello)) {
951  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
952  return ssl_hs_error;
953  }
954 
955  // Now that all parameters are known, initialize the handshake hash and hash
956  // the ClientHello.
957  if (!hs->transcript.InitHash(ssl_protocol_version(ssl), hs->new_cipher) ||
958  !ssl_hash_message(hs, msg)) {
960  return ssl_hs_error;
961  }
962 
963  // Handback includes the whole handshake transcript, so we cannot free the
964  // transcript buffer in the handback case.
965  if (!hs->cert_request && !hs->handback) {
966  hs->transcript.FreeBuffer();
967  }
968 
969  ssl->method->next_message(ssl);
970 
972  return ssl_hs_ok;
973 }
974 
976  out = out.last(in.size());
977  OPENSSL_memcpy(out.data(), in.data(), in.size());
978 }
979 
981  SSL *const ssl = hs->ssl;
982 
983  // We only accept ChannelIDs on connections with ECDHE in order to avoid a
984  // known attack while we fix ChannelID itself.
985  if (hs->channel_id_negotiated &&
986  (hs->new_cipher->algorithm_mkey & SSL_kECDHE) == 0) {
987  hs->channel_id_negotiated = false;
988  }
989 
990  // If this is a resumption and the original handshake didn't support
991  // ChannelID then we didn't record the original handshake hashes in the
992  // session and so cannot resume with ChannelIDs.
993  if (ssl->session != NULL &&
994  ssl->session->original_handshake_hash_len == 0) {
995  hs->channel_id_negotiated = false;
996  }
997 
998  struct OPENSSL_timeval now;
999  ssl_get_current_time(ssl, &now);
1000  ssl->s3->server_random[0] = now.tv_sec >> 24;
1001  ssl->s3->server_random[1] = now.tv_sec >> 16;
1002  ssl->s3->server_random[2] = now.tv_sec >> 8;
1003  ssl->s3->server_random[3] = now.tv_sec;
1004  if (!RAND_bytes(ssl->s3->server_random + 4, SSL3_RANDOM_SIZE - 4)) {
1005  return ssl_hs_error;
1006  }
1007 
1008  // Implement the TLS 1.3 anti-downgrade feature.
1010  if (ssl_protocol_version(ssl) == TLS1_2_VERSION) {
1011  if (hs->apply_jdk11_workaround) {
1012  // JDK 11 implements the TLS 1.3 downgrade signal, so we cannot send it
1013  // here. However, the signal is only effective if all TLS 1.2
1014  // ServerHellos produced by the server are marked. Thus we send a
1015  // different non-standard signal for the time being, until JDK 11.0.2 is
1016  // released and clients have updated.
1017  copy_suffix(ssl->s3->server_random, kJDK11DowngradeRandom);
1018  } else {
1019  copy_suffix(ssl->s3->server_random, kTLS13DowngradeRandom);
1020  }
1021  } else {
1022  copy_suffix(ssl->s3->server_random, kTLS12DowngradeRandom);
1023  }
1024  }
1025 
1026  Span<const uint8_t> session_id;
1027  if (ssl->session != nullptr) {
1028  // Echo the session ID from the ClientHello to indicate resumption.
1029  session_id = MakeConstSpan(hs->session_id, hs->session_id_len);
1030  } else {
1031  session_id = MakeConstSpan(hs->new_session->session_id,
1032  hs->new_session->session_id_length);
1033  }
1034 
1035  ScopedCBB cbb;
1036  CBB body, session_id_bytes;
1037  if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_SERVER_HELLO) ||
1038  !CBB_add_u16(&body, ssl->version) ||
1039  !CBB_add_bytes(&body, ssl->s3->server_random, SSL3_RANDOM_SIZE) ||
1040  !CBB_add_u8_length_prefixed(&body, &session_id_bytes) ||
1041  !CBB_add_bytes(&session_id_bytes, session_id.data(), session_id.size()) ||
1043  !CBB_add_u8(&body, 0 /* no compression */) ||
1044  !ssl_add_serverhello_tlsext(hs, &body) ||
1045  !ssl_add_message_cbb(ssl, cbb.get())) {
1047  return ssl_hs_error;
1048  }
1049 
1050  if (ssl->session != NULL) {
1052  } else {
1054  }
1055  return ssl_hs_ok;
1056 }
1057 
1059  SSL *const ssl = hs->ssl;
1060  ScopedCBB cbb;
1061 
1063  if (!ssl_has_certificate(hs)) {
1065  return ssl_hs_error;
1066  }
1067 
1068  if (!ssl_output_cert_chain(hs)) {
1069  return ssl_hs_error;
1070  }
1071 
1072  if (hs->certificate_status_expected) {
1073  CBB body, ocsp_response;
1074  if (!ssl->method->init_message(ssl, cbb.get(), &body,
1077  !CBB_add_u24_length_prefixed(&body, &ocsp_response) ||
1078  !CBB_add_bytes(
1079  &ocsp_response,
1080  CRYPTO_BUFFER_data(hs->config->cert->ocsp_response.get()),
1081  CRYPTO_BUFFER_len(hs->config->cert->ocsp_response.get())) ||
1082  !ssl_add_message_cbb(ssl, cbb.get())) {
1084  return ssl_hs_error;
1085  }
1086  }
1087  }
1088 
1089  // Assemble ServerKeyExchange parameters if needed.
1090  uint32_t alg_k = hs->new_cipher->algorithm_mkey;
1091  uint32_t alg_a = hs->new_cipher->algorithm_auth;
1093  ((alg_a & SSL_aPSK) && hs->config->psk_identity_hint)) {
1094  // Pre-allocate enough room to comfortably fit an ECDHE public key. Prepend
1095  // the client and server randoms for the signing transcript.
1096  CBB child;
1097  if (!CBB_init(cbb.get(), SSL3_RANDOM_SIZE * 2 + 128) ||
1098  !CBB_add_bytes(cbb.get(), ssl->s3->client_random, SSL3_RANDOM_SIZE) ||
1099  !CBB_add_bytes(cbb.get(), ssl->s3->server_random, SSL3_RANDOM_SIZE)) {
1100  return ssl_hs_error;
1101  }
1102 
1103  // PSK ciphers begin with an identity hint.
1104  if (alg_a & SSL_aPSK) {
1105  size_t len = hs->config->psk_identity_hint == nullptr
1106  ? 0
1107  : strlen(hs->config->psk_identity_hint.get());
1108  if (!CBB_add_u16_length_prefixed(cbb.get(), &child) ||
1109  !CBB_add_bytes(&child,
1110  (const uint8_t *)hs->config->psk_identity_hint.get(),
1111  len)) {
1112  return ssl_hs_error;
1113  }
1114  }
1115 
1116  if (alg_k & SSL_kECDHE) {
1117  // Determine the group to use.
1118  uint16_t group_id;
1119  if (!tls1_get_shared_group(hs, &group_id)) {
1122  return ssl_hs_error;
1123  }
1124  hs->new_session->group_id = group_id;
1125 
1126  // Set up ECDH, generate a key, and emit the public half.
1127  hs->key_shares[0] = SSLKeyShare::Create(group_id);
1128  if (!hs->key_shares[0] ||
1129  !CBB_add_u8(cbb.get(), NAMED_CURVE_TYPE) ||
1130  !CBB_add_u16(cbb.get(), group_id) ||
1131  !CBB_add_u8_length_prefixed(cbb.get(), &child) ||
1132  !hs->key_shares[0]->Offer(&child)) {
1133  return ssl_hs_error;
1134  }
1135  } else {
1136  assert(alg_k & SSL_kPSK);
1137  }
1138 
1139  if (!CBBFinishArray(cbb.get(), &hs->server_params)) {
1140  return ssl_hs_error;
1141  }
1142  }
1143 
1145  return ssl_hs_ok;
1146 }
1147 
1149  SSL *const ssl = hs->ssl;
1150 
1151  if (hs->server_params.size() == 0) {
1153  return ssl_hs_ok;
1154  }
1155 
1156  ScopedCBB cbb;
1157  CBB body, child;
1158  if (!ssl->method->init_message(ssl, cbb.get(), &body,
1160  // |hs->server_params| contains a prefix for signing.
1161  hs->server_params.size() < 2 * SSL3_RANDOM_SIZE ||
1162  !CBB_add_bytes(&body, hs->server_params.data() + 2 * SSL3_RANDOM_SIZE,
1163  hs->server_params.size() - 2 * SSL3_RANDOM_SIZE)) {
1164  return ssl_hs_error;
1165  }
1166 
1167  // Add a signature.
1169  if (!ssl_has_private_key(hs)) {
1171  return ssl_hs_error;
1172  }
1173 
1174  // Determine the signature algorithm.
1178  return ssl_hs_error;
1179  }
1180  if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
1181  if (!CBB_add_u16(&body, signature_algorithm)) {
1184  return ssl_hs_error;
1185  }
1186  }
1187 
1188  // Add space for the signature.
1189  const size_t max_sig_len = EVP_PKEY_size(hs->local_pubkey.get());
1190  uint8_t *ptr;
1191  if (!CBB_add_u16_length_prefixed(&body, &child) ||
1192  !CBB_reserve(&child, &ptr, max_sig_len)) {
1193  return ssl_hs_error;
1194  }
1195 
1196  size_t sig_len;
1197  switch (ssl_private_key_sign(hs, ptr, &sig_len, max_sig_len,
1200  if (!CBB_did_write(&child, sig_len)) {
1201  return ssl_hs_error;
1202  }
1203  break;
1205  return ssl_hs_error;
1206  case ssl_private_key_retry:
1208  }
1209  }
1210 
1211  hs->can_release_private_key = true;
1212  if (!ssl_add_message_cbb(ssl, cbb.get())) {
1213  return ssl_hs_error;
1214  }
1215 
1216  hs->server_params.Reset();
1217 
1219  return ssl_hs_ok;
1220 }
1221 
1223  SSL *const ssl = hs->ssl;
1224 
1225  ScopedCBB cbb;
1226  CBB body;
1227 
1228  if (hs->cert_request) {
1229  CBB cert_types, sigalgs_cbb;
1230  if (!ssl->method->init_message(ssl, cbb.get(), &body,
1232  !CBB_add_u8_length_prefixed(&body, &cert_types) ||
1233  !CBB_add_u8(&cert_types, SSL3_CT_RSA_SIGN) ||
1234  !CBB_add_u8(&cert_types, TLS_CT_ECDSA_SIGN) ||
1236  (!CBB_add_u16_length_prefixed(&body, &sigalgs_cbb) ||
1237  !tls12_add_verify_sigalgs(hs, &sigalgs_cbb))) ||
1238  !ssl_add_client_CA_list(hs, &body) ||
1239  !ssl_add_message_cbb(ssl, cbb.get())) {
1241  return ssl_hs_error;
1242  }
1243  }
1244 
1245  if (!ssl->method->init_message(ssl, cbb.get(), &body,
1247  !ssl_add_message_cbb(ssl, cbb.get())) {
1249  return ssl_hs_error;
1250  }
1251 
1253  return ssl_hs_flush;
1254 }
1255 
1257  SSL *const ssl = hs->ssl;
1258 
1259  if (hs->handback && hs->new_cipher->algorithm_mkey == SSL_kECDHE) {
1260  return ssl_hs_handback;
1261  }
1262  if (!hs->cert_request) {
1264  return ssl_hs_ok;
1265  }
1266 
1267  SSLMessage msg;
1268  if (!ssl->method->get_message(ssl, &msg)) {
1269  return ssl_hs_read_message;
1270  }
1271 
1273  return ssl_hs_error;
1274  }
1275 
1276  if (!ssl_hash_message(hs, msg)) {
1277  return ssl_hs_error;
1278  }
1279 
1280  CBS certificate_msg = msg.body;
1281  uint8_t alert = SSL_AD_DECODE_ERROR;
1282  if (!ssl_parse_cert_chain(&alert, &hs->new_session->certs, &hs->peer_pubkey,
1284  ? hs->new_session->peer_sha256
1285  : nullptr,
1286  &certificate_msg, ssl->ctx->pool)) {
1287  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1288  return ssl_hs_error;
1289  }
1290 
1291  if (CBS_len(&certificate_msg) != 0 ||
1292  !ssl->ctx->x509_method->session_cache_objects(hs->new_session.get())) {
1295  return ssl_hs_error;
1296  }
1297 
1298  if (sk_CRYPTO_BUFFER_num(hs->new_session->certs.get()) == 0) {
1299  // No client certificate so the handshake buffer may be discarded.
1300  hs->transcript.FreeBuffer();
1301 
1303  // Fail for TLS only if we required a certificate
1306  return ssl_hs_error;
1307  }
1308 
1309  // OpenSSL returns X509_V_OK when no certificates are received. This is
1310  // classed by them as a bug, but it's assumed by at least NGINX.
1311  hs->new_session->verify_result = X509_V_OK;
1312  } else if (hs->config->retain_only_sha256_of_client_certs) {
1313  // The hash will have been filled in.
1314  hs->new_session->peer_sha256_valid = 1;
1315  }
1316 
1317  ssl->method->next_message(ssl);
1319  return ssl_hs_ok;
1320 }
1321 
1323  if (sk_CRYPTO_BUFFER_num(hs->new_session->certs.get()) > 0) {
1324  switch (ssl_verify_peer_cert(hs)) {
1325  case ssl_verify_ok:
1326  break;
1327  case ssl_verify_invalid:
1328  return ssl_hs_error;
1329  case ssl_verify_retry:
1331  }
1332  }
1333 
1335  return ssl_hs_ok;
1336 }
1337 
1339  SSL *const ssl = hs->ssl;
1340  SSLMessage msg;
1341  if (!ssl->method->get_message(ssl, &msg)) {
1342  return ssl_hs_read_message;
1343  }
1344 
1346  return ssl_hs_error;
1347  }
1348 
1349  CBS client_key_exchange = msg.body;
1350  uint32_t alg_k = hs->new_cipher->algorithm_mkey;
1351  uint32_t alg_a = hs->new_cipher->algorithm_auth;
1352 
1353  // If using a PSK key exchange, parse the PSK identity.
1354  if (alg_a & SSL_aPSK) {
1355  CBS psk_identity;
1356 
1357  // If using PSK, the ClientKeyExchange contains a psk_identity. If PSK,
1358  // then this is the only field in the message.
1359  if (!CBS_get_u16_length_prefixed(&client_key_exchange, &psk_identity) ||
1360  ((alg_k & SSL_kPSK) && CBS_len(&client_key_exchange) != 0)) {
1363  return ssl_hs_error;
1364  }
1365 
1366  if (CBS_len(&psk_identity) > PSK_MAX_IDENTITY_LEN ||
1367  CBS_contains_zero_byte(&psk_identity)) {
1370  return ssl_hs_error;
1371  }
1372  char *raw = nullptr;
1373  if (!CBS_strdup(&psk_identity, &raw)) {
1376  return ssl_hs_error;
1377  }
1378  hs->new_session->psk_identity.reset(raw);
1379  }
1380 
1381  // Depending on the key exchange method, compute |premaster_secret|.
1382  Array<uint8_t> premaster_secret;
1383  if (alg_k & SSL_kRSA) {
1384  CBS encrypted_premaster_secret;
1385  if (!CBS_get_u16_length_prefixed(&client_key_exchange,
1386  &encrypted_premaster_secret) ||
1387  CBS_len(&client_key_exchange) != 0) {
1390  return ssl_hs_error;
1391  }
1392 
1393  // Allocate a buffer large enough for an RSA decryption.
1394  Array<uint8_t> decrypt_buf;
1395  if (!decrypt_buf.Init(EVP_PKEY_size(hs->local_pubkey.get()))) {
1396  return ssl_hs_error;
1397  }
1398 
1399  // Decrypt with no padding. PKCS#1 padding will be removed as part of the
1400  // timing-sensitive code below.
1401  size_t decrypt_len;
1402  switch (ssl_private_key_decrypt(hs, decrypt_buf.data(), &decrypt_len,
1403  decrypt_buf.size(),
1404  encrypted_premaster_secret)) {
1406  break;
1408  return ssl_hs_error;
1409  case ssl_private_key_retry:
1411  }
1412 
1413  if (decrypt_len != decrypt_buf.size()) {
1416  return ssl_hs_error;
1417  }
1418 
1419  CONSTTIME_SECRET(decrypt_buf.data(), decrypt_len);
1420 
1421  // Prepare a random premaster, to be used on invalid padding. See RFC 5246,
1422  // section 7.4.7.1.
1423  if (!premaster_secret.Init(SSL_MAX_MASTER_KEY_LENGTH) ||
1424  !RAND_bytes(premaster_secret.data(), premaster_secret.size())) {
1425  return ssl_hs_error;
1426  }
1427 
1428  // The smallest padded premaster is 11 bytes of overhead. Small keys are
1429  // publicly invalid.
1430  if (decrypt_len < 11 + premaster_secret.size()) {
1433  return ssl_hs_error;
1434  }
1435 
1436  // Check the padding. See RFC 3447, section 7.2.2.
1437  size_t padding_len = decrypt_len - premaster_secret.size();
1438  uint8_t good = constant_time_eq_int_8(decrypt_buf[0], 0) &
1439  constant_time_eq_int_8(decrypt_buf[1], 2);
1440  for (size_t i = 2; i < padding_len - 1; i++) {
1441  good &= ~constant_time_is_zero_8(decrypt_buf[i]);
1442  }
1443  good &= constant_time_is_zero_8(decrypt_buf[padding_len - 1]);
1444 
1445  // The premaster secret must begin with |client_version|. This too must be
1446  // checked in constant time (http://eprint.iacr.org/2003/052/).
1447  good &= constant_time_eq_8(decrypt_buf[padding_len],
1448  (unsigned)(hs->client_version >> 8));
1449  good &= constant_time_eq_8(decrypt_buf[padding_len + 1],
1450  (unsigned)(hs->client_version & 0xff));
1451 
1452  // Select, in constant time, either the decrypted premaster or the random
1453  // premaster based on |good|.
1454  for (size_t i = 0; i < premaster_secret.size(); i++) {
1455  premaster_secret[i] = constant_time_select_8(
1456  good, decrypt_buf[padding_len + i], premaster_secret[i]);
1457  }
1458  } else if (alg_k & SSL_kECDHE) {
1459  // Parse the ClientKeyExchange.
1460  CBS peer_key;
1461  if (!CBS_get_u8_length_prefixed(&client_key_exchange, &peer_key) ||
1462  CBS_len(&client_key_exchange) != 0) {
1465  return ssl_hs_error;
1466  }
1467 
1468  // Compute the premaster.
1469  uint8_t alert = SSL_AD_DECODE_ERROR;
1470  if (!hs->key_shares[0]->Finish(&premaster_secret, &alert, peer_key)) {
1471  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1472  return ssl_hs_error;
1473  }
1474 
1475  // The key exchange state may now be discarded.
1476  hs->key_shares[0].reset();
1477  hs->key_shares[1].reset();
1478  } else if (!(alg_k & SSL_kPSK)) {
1481  return ssl_hs_error;
1482  }
1483 
1484  // For a PSK cipher suite, the actual pre-master secret is combined with the
1485  // pre-shared key.
1486  if (alg_a & SSL_aPSK) {
1487  if (hs->config->psk_server_callback == NULL) {
1490  return ssl_hs_error;
1491  }
1492 
1493  // Look up the key for the identity.
1494  uint8_t psk[PSK_MAX_PSK_LEN];
1495  unsigned psk_len = hs->config->psk_server_callback(
1496  ssl, hs->new_session->psk_identity.get(), psk, sizeof(psk));
1497  if (psk_len > PSK_MAX_PSK_LEN) {
1500  return ssl_hs_error;
1501  } else if (psk_len == 0) {
1502  // PSK related to the given identity not found.
1505  return ssl_hs_error;
1506  }
1507 
1508  if (alg_k & SSL_kPSK) {
1509  // In plain PSK, other_secret is a block of 0s with the same length as the
1510  // pre-shared key.
1511  if (!premaster_secret.Init(psk_len)) {
1512  return ssl_hs_error;
1513  }
1514  OPENSSL_memset(premaster_secret.data(), 0, premaster_secret.size());
1515  }
1516 
1517  ScopedCBB new_premaster;
1518  CBB child;
1519  if (!CBB_init(new_premaster.get(),
1520  2 + psk_len + 2 + premaster_secret.size()) ||
1521  !CBB_add_u16_length_prefixed(new_premaster.get(), &child) ||
1522  !CBB_add_bytes(&child, premaster_secret.data(),
1523  premaster_secret.size()) ||
1524  !CBB_add_u16_length_prefixed(new_premaster.get(), &child) ||
1525  !CBB_add_bytes(&child, psk, psk_len) ||
1526  !CBBFinishArray(new_premaster.get(), &premaster_secret)) {
1528  return ssl_hs_error;
1529  }
1530  }
1531 
1532  if (!ssl_hash_message(hs, msg)) {
1533  return ssl_hs_error;
1534  }
1535 
1536  // Compute the master secret.
1537  hs->new_session->secret_length = tls1_generate_master_secret(
1538  hs, hs->new_session->secret, premaster_secret);
1539  if (hs->new_session->secret_length == 0) {
1540  return ssl_hs_error;
1541  }
1542  hs->new_session->extended_master_secret = hs->extended_master_secret;
1543  CONSTTIME_DECLASSIFY(hs->new_session->secret, hs->new_session->secret_length);
1544  hs->can_release_private_key = true;
1545 
1546  ssl->method->next_message(ssl);
1548  return ssl_hs_ok;
1549 }
1550 
1552  SSL *const ssl = hs->ssl;
1553 
1554  // Only RSA and ECDSA client certificates are supported, so a
1555  // CertificateVerify is required if and only if there's a client certificate.
1556  if (!hs->peer_pubkey) {
1557  hs->transcript.FreeBuffer();
1559  return ssl_hs_ok;
1560  }
1561 
1562  SSLMessage msg;
1563  if (!ssl->method->get_message(ssl, &msg)) {
1564  return ssl_hs_read_message;
1565  }
1566 
1568  return ssl_hs_error;
1569  }
1570 
1571  // The peer certificate must be valid for signing.
1572  const CRYPTO_BUFFER *leaf =
1573  sk_CRYPTO_BUFFER_value(hs->new_session->certs.get(), 0);
1574  CBS leaf_cbs;
1575  CRYPTO_BUFFER_init_CBS(leaf, &leaf_cbs);
1577  return ssl_hs_error;
1578  }
1579 
1580  CBS certificate_verify = msg.body, signature;
1581 
1582  // Determine the signature algorithm.
1584  if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
1585  if (!CBS_get_u16(&certificate_verify, &signature_algorithm)) {
1588  return ssl_hs_error;
1589  }
1590  uint8_t alert = SSL_AD_DECODE_ERROR;
1591  if (!tls12_check_peer_sigalg(hs, &alert, signature_algorithm)) {
1592  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1593  return ssl_hs_error;
1594  }
1595  hs->new_session->peer_signature_algorithm = signature_algorithm;
1597  hs->peer_pubkey.get())) {
1600  return ssl_hs_error;
1601  }
1602 
1603  // Parse and verify the signature.
1604  if (!CBS_get_u16_length_prefixed(&certificate_verify, &signature) ||
1605  CBS_len(&certificate_verify) != 0) {
1608  return ssl_hs_error;
1609  }
1610 
1611  if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
1612  hs->peer_pubkey.get(), hs->transcript.buffer())) {
1615  return ssl_hs_error;
1616  }
1617 
1618  // The handshake buffer is no longer necessary, and we may hash the current
1619  // message.
1620  hs->transcript.FreeBuffer();
1621  if (!ssl_hash_message(hs, msg)) {
1622  return ssl_hs_error;
1623  }
1624 
1625  ssl->method->next_message(ssl);
1627  return ssl_hs_ok;
1628 }
1629 
1631  if (hs->handback && hs->ssl->session != NULL) {
1632  return ssl_hs_handback;
1633  }
1636 }
1637 
1640  return ssl_hs_error;
1641  }
1642 
1644  return ssl_hs_ok;
1645 }
1646 
1648  SSL *const ssl = hs->ssl;
1649 
1650  if (!hs->next_proto_neg_seen) {
1652  return ssl_hs_ok;
1653  }
1654 
1655  SSLMessage msg;
1656  if (!ssl->method->get_message(ssl, &msg)) {
1657  return ssl_hs_read_message;
1658  }
1659 
1661  !ssl_hash_message(hs, msg)) {
1662  return ssl_hs_error;
1663  }
1664 
1665  CBS next_protocol = msg.body, selected_protocol, padding;
1666  if (!CBS_get_u8_length_prefixed(&next_protocol, &selected_protocol) ||
1667  !CBS_get_u8_length_prefixed(&next_protocol, &padding) ||
1668  CBS_len(&next_protocol) != 0) {
1671  return ssl_hs_error;
1672  }
1673 
1674  if (!ssl->s3->next_proto_negotiated.CopyFrom(selected_protocol)) {
1675  return ssl_hs_error;
1676  }
1677 
1678  ssl->method->next_message(ssl);
1680  return ssl_hs_ok;
1681 }
1682 
1684  SSL *const ssl = hs->ssl;
1685 
1686  if (!hs->channel_id_negotiated) {
1688  return ssl_hs_ok;
1689  }
1690 
1691  SSLMessage msg;
1692  if (!ssl->method->get_message(ssl, &msg)) {
1693  return ssl_hs_read_message;
1694  }
1695 
1697  !tls1_verify_channel_id(hs, msg) ||
1698  !ssl_hash_message(hs, msg)) {
1699  return ssl_hs_error;
1700  }
1701 
1702  ssl->method->next_message(ssl);
1704  return ssl_hs_ok;
1705 }
1706 
1708  SSL *const ssl = hs->ssl;
1709  enum ssl_hs_wait_t wait = ssl_get_finished(hs);
1710  if (wait != ssl_hs_ok) {
1711  return wait;
1712  }
1713 
1714  if (ssl->session != NULL) {
1716  } else {
1718  }
1719 
1720  // If this is a full handshake with ChannelID then record the handshake
1721  // hashes in |hs->new_session| in case we need them to verify a
1722  // ChannelID signature on a resumption of this session in the future.
1723  if (ssl->session == NULL && ssl->s3->channel_id_valid &&
1725  return ssl_hs_error;
1726  }
1727 
1728  return ssl_hs_ok;
1729 }
1730 
1732  SSL *const ssl = hs->ssl;
1733 
1734  if (hs->ticket_expected) {
1735  const SSL_SESSION *session;
1736  UniquePtr<SSL_SESSION> session_copy;
1737  if (ssl->session == NULL) {
1738  // Fix the timeout to measure from the ticket issuance time.
1739  ssl_session_rebase_time(ssl, hs->new_session.get());
1740  session = hs->new_session.get();
1741  } else {
1742  // We are renewing an existing session. Duplicate the session to adjust
1743  // the timeout.
1744  session_copy =
1746  if (!session_copy) {
1747  return ssl_hs_error;
1748  }
1749 
1750  ssl_session_rebase_time(ssl, session_copy.get());
1751  session = session_copy.get();
1752  }
1753 
1754  ScopedCBB cbb;
1755  CBB body, ticket;
1756  if (!ssl->method->init_message(ssl, cbb.get(), &body,
1758  !CBB_add_u32(&body, session->timeout) ||
1759  !CBB_add_u16_length_prefixed(&body, &ticket) ||
1760  !ssl_encrypt_ticket(hs, &ticket, session) ||
1761  !ssl_add_message_cbb(ssl, cbb.get())) {
1762  return ssl_hs_error;
1763  }
1764  }
1765 
1766  if (!ssl->method->add_change_cipher_spec(ssl) ||
1768  !ssl_send_finished(hs)) {
1769  return ssl_hs_error;
1770  }
1771 
1772  if (ssl->session != NULL) {
1774  } else {
1776  }
1777  return ssl_hs_flush;
1778 }
1779 
1781  SSL *const ssl = hs->ssl;
1782 
1783  if (hs->handback) {
1784  return ssl_hs_handback;
1785  }
1786 
1787  ssl->method->on_handshake_complete(ssl);
1788 
1789  // If we aren't retaining peer certificates then we can discard it now.
1790  if (hs->new_session != NULL &&
1792  hs->new_session->certs.reset();
1793  ssl->ctx->x509_method->session_clear(hs->new_session.get());
1794  }
1795 
1796  bool has_new_session = hs->new_session != nullptr;
1797  if (has_new_session) {
1798  assert(ssl->session == nullptr);
1799  ssl->s3->established_session = std::move(hs->new_session);
1800  ssl->s3->established_session->not_resumable = false;
1801  } else {
1802  assert(ssl->session != nullptr);
1803  ssl->s3->established_session = UpRef(ssl->session);
1804  }
1805 
1806  hs->handshake_finalized = true;
1807  ssl->s3->initial_handshake_complete = true;
1808  if (has_new_session) {
1809  ssl_update_cache(ssl);
1810  }
1811 
1812  hs->state = state12_done;
1813  return ssl_hs_ok;
1814 }
1815 
1817  while (hs->state != state12_done) {
1820  static_cast<enum tls12_server_hs_state_t>(hs->state);
1821  switch (state) {
1822  case state12_start_accept:
1823  ret = do_start_accept(hs);
1824  break;
1826  ret = do_read_client_hello(hs);
1827  break;
1830  break;
1832  ret = do_select_certificate(hs);
1833  break;
1834  case state12_tls13:
1835  ret = do_tls13(hs);
1836  break;
1838  ret = do_select_parameters(hs);
1839  break;
1841  ret = do_send_server_hello(hs);
1842  break;
1845  break;
1848  break;
1851  break;
1854  break;
1857  break;
1860  break;
1863  break;
1866  break;
1869  break;
1871  ret = do_read_next_proto(hs);
1872  break;
1874  ret = do_read_channel_id(hs);
1875  break;
1878  break;
1881  break;
1884  break;
1885  case state12_done:
1886  ret = ssl_hs_ok;
1887  break;
1888  }
1889 
1890  if (hs->state != state) {
1892  }
1893 
1894  if (ret != ssl_hs_ok) {
1895  return ret;
1896  }
1897  }
1898 
1900  return ssl_hs_ok;
1901 }
1902 
1905  static_cast<enum tls12_server_hs_state_t>(hs->state);
1906  switch (state) {
1907  case state12_start_accept:
1908  return "TLS server start_accept";
1910  return "TLS server read_client_hello";
1912  return "TLS server read_client_hello_after_ech";
1914  return "TLS server select_certificate";
1915  case state12_tls13:
1916  return tls13_server_handshake_state(hs);
1918  return "TLS server select_parameters";
1920  return "TLS server send_server_hello";
1922  return "TLS server send_server_certificate";
1924  return "TLS server send_server_key_exchange";
1926  return "TLS server send_server_hello_done";
1928  return "TLS server read_client_certificate";
1930  return "TLS server verify_client_certificate";
1932  return "TLS server read_client_key_exchange";
1934  return "TLS server read_client_certificate_verify";
1936  return "TLS server read_change_cipher_spec";
1938  return "TLS server process_change_cipher_spec";
1940  return "TLS server read_next_proto";
1942  return "TLS server read_channel_id";
1944  return "TLS server read_client_finished";
1946  return "TLS server send_server_finished";
1948  return "TLS server finish_server_handshake";
1949  case state12_done:
1950  return "TLS server done";
1951  }
1952 
1953  return "TLS server unknown";
1954 }
1955 
SSL_CB_HANDSHAKE_START
#define SSL_CB_HANDSHAKE_START
Definition: ssl.h:4291
ssl_send_alert
void ssl_send_alert(SSL *ssl, int level, int desc)
Definition: s3_pkt.cc:379
SSL_HANDSHAKE::hints_requested
bool hints_requested
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2026
SSL_CONFIG::jdk11_workaround
bool jdk11_workaround
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3083
ssl_hs_read_change_cipher_spec
@ ssl_hs_read_change_cipher_spec
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1625
ptr
char * ptr
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:45
ssl_early_callback_ctx::cipher_suites
const uint8_t * cipher_suites
Definition: ssl.h:4195
NAMED_CURVE_TYPE
#define NAMED_CURVE_TYPE
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2343
ssl_hs_hints_ready
@ ssl_hs_hints_ready
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1627
ssl_cipher_st
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:520
bn.h
ssl_has_certificate
bool ssl_has_certificate(const SSL_HANDSHAKE *hs)
Definition: ssl_cert.cc:340
SSL_AD_UNEXPECTED_MESSAGE
#define SSL_AD_UNEXPECTED_MESSAGE
Definition: ssl.h:3795
EVP_PKEY_id
#define EVP_PKEY_id
Definition: boringssl_prefix_symbols.h:1638
tls13_server_handshake_state
const char * tls13_server_handshake_state(SSL_HANDSHAKE *hs)
Definition: tls13_server.cc:1306
sk_SSL_CIPHER_new_null
#define sk_SSL_CIPHER_new_null
Definition: boringssl_prefix_symbols.h:569
Array::Init
bool Init(size_t new_size)
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:314
ssl_hs_handoff
@ ssl_hs_handoff
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1616
sk_SSL_CIPHER_find
#define sk_SSL_CIPHER_find
Definition: boringssl_prefix_symbols.h:568
CBB_init
#define CBB_init
Definition: boringssl_prefix_symbols.h:1047
gen_build_yaml.out
dictionary out
Definition: src/benchmark/gen_build_yaml.py:24
RAND_bytes
#define RAND_bytes
Definition: boringssl_prefix_symbols.h:2060
SSL3_MT_CLIENT_KEY_EXCHANGE
#define SSL3_MT_CLIENT_KEY_EXCHANGE
Definition: ssl3.h:309
now
static double now(void)
Definition: test/core/fling/client.cc:130
CBS_get_u16
#define CBS_get_u16
Definition: boringssl_prefix_symbols.h:1073
Span::size
size_t size() const
Definition: boringssl-with-bazel/src/include/openssl/span.h:133
SSLTranscript::InitHash
bool InitHash(uint16_t version, const SSL_CIPHER *cipher)
Definition: ssl_transcript.cc:161
cbs_st
Definition: bytestring.h:39
SSL3_MT_SERVER_HELLO
#define SSL3_MT_SERVER_HELLO
Definition: ssl3.h:300
do_send_server_certificate
static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1058
ssl_send_finished
bool ssl_send_finished(SSL_HANDSHAKE *hs)
Definition: handshake.cc:523
state12_send_server_finished
@ state12_send_server_finished
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1661
ssl_cipher_auth_mask_for_key
uint32_t ssl_cipher_auth_mask_for_key(const EVP_PKEY *key)
Definition: ssl_cipher.cc:1282
ssl_server_handshake
enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1816
SSL_HANDSHAKE::ech_client_hello_buf
Array< uint8_t > ech_client_hello_buf
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1845
ssl_early_callback_ctx::compression_methods_len
size_t compression_methods_len
Definition: ssl.h:4198
SSL_HANDSHAKE::client_version
uint16_t client_version
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2044
TLSEXT_TYPE_renegotiate
#define TLSEXT_TYPE_renegotiate
Definition: tls1.h:240
do_finish_server_handshake
static enum ssl_hs_wait_t do_finish_server_handshake(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1780
SSL_CONFIG::psk_identity_hint
UniquePtr< char > psk_identity_hint
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2996
ssl_parse_cert_chain
bool ssl_parse_cert_chain(uint8_t *out_alert, UniquePtr< STACK_OF(CRYPTO_BUFFER)> *out_chain, UniquePtr< EVP_PKEY > *out_pubkey, uint8_t *out_leaf_sha256, CBS *cbs, CRYPTO_BUFFER_POOL *pool)
Definition: ssl_cert.cc:346
SSL_HANDSHAKE::extended_master_secret
bool extended_master_secret
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2011
state12_read_client_hello_after_ech
@ state12_read_client_hello_after_ech
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1644
DTLS1_2_VERSION
#define DTLS1_2_VERSION
Definition: ssl.h:656
Array::data
const T * data() const
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:274
evp.h
SSL_HANDSHAKE::session_id_len
uint8_t session_id_len
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2059
SSL_HANDSHAKE::local_pubkey
UniquePtr< EVP_PKEY > local_pubkey
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1909
SSL_CB_HANDSHAKE_DONE
#define SSL_CB_HANDSHAKE_DONE
Definition: ssl.h:4292
ssl_verify_ok
ssl_verify_ok
Definition: ssl.h:2412
SSL3_CK_FALLBACK_SCSV
#define SSL3_CK_FALLBACK_SCSV
Definition: ssl3.h:136
state12_verify_client_certificate
@ state12_verify_client_certificate
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1653
uint16_t
unsigned short uint16_t
Definition: stdint-msvc2008.h:79
SSLCipherPreferenceList::ciphers
UniquePtr< STACK_OF(SSL_CIPHER)> ciphers
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:620
ecdsa.h
SSL_HANDSHAKE::ech_config_id
uint8_t ech_config_id
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2055
SSL_HANDSHAKE::new_cipher
const SSL_CIPHER * new_cipher
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1933
ssl_hs_certificate_selection_pending
@ ssl_hs_certificate_selection_pending
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1615
SSL3_MT_SERVER_KEY_EXCHANGE
#define SSL3_MT_SERVER_KEY_EXCHANGE
Definition: ssl3.h:305
ssl_early_callback_ctx::random_len
size_t random_len
Definition: ssl.h:4192
state12_process_change_cipher_spec
@ state12_process_change_cipher_spec
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1657
CONSTEXPR_ARRAY
#define CONSTEXPR_ARRAY
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:253
ssl_public_key_verify
bool ssl_public_key_verify(SSL *ssl, Span< const uint8_t > signature, uint16_t sigalg, EVP_PKEY *pkey, Span< const uint8_t > in)
Definition: ssl_privkey.cc:236
SSL_R_PARSE_TLSEXT
#define SSL_R_PARSE_TLSEXT
Definition: ssl.h:5457
SSL3_MT_CERTIFICATE_VERIFY
#define SSL3_MT_CERTIFICATE_VERIFY
Definition: ssl3.h:308
OPENSSL_PUT_ERROR
#define OPENSSL_PUT_ERROR(library, reason)
Definition: err.h:423
internal.h
ssl_output_cert_chain
bool ssl_output_cert_chain(SSL_HANDSHAKE *hs)
Definition: handshake.cc:567
ssl_private_key_failure
ssl_private_key_failure
Definition: ssl.h:1236
SSL_SESS_CACHE_SERVER
#define SSL_SESS_CACHE_SERVER
Definition: ssl.h:1940
SSL3_SSL_SESSION_ID_LENGTH
#define SSL3_SSL_SESSION_ID_LENGTH
Definition: ssl3.h:200
string.h
copy
static int copy(grpc_slice_buffer *input, grpc_slice_buffer *output)
Definition: message_compress.cc:145
do_read_change_cipher_spec
static enum ssl_hs_wait_t do_read_change_cipher_spec(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1630
TLS_CT_ECDSA_SIGN
#define TLS_CT_ECDSA_SIGN
Definition: tls1.h:636
CBB_add_u16_length_prefixed
#define CBB_add_u16_length_prefixed
Definition: boringssl_prefix_symbols.h:1028
CBB_add_u8
#define CBB_add_u8
Definition: boringssl_prefix_symbols.h:1036
state12_start_accept
@ state12_start_accept
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1642
SSL_HANDSHAKE::ssl
SSL * ssl
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1726
ssl_hs_x509_lookup
@ ssl_hs_x509_lookup
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1618
ssl_cipher_uses_certificate_auth
bool ssl_cipher_uses_certificate_auth(const SSL_CIPHER *cipher)
Definition: ssl_cipher.cc:1295
SSL_TLSEXT_ERR_OK
#define SSL_TLSEXT_ERR_OK
Definition: ssl.h:2755
ssl_get_prev_session
enum ssl_hs_wait_t ssl_get_prev_session(SSL_HANDSHAKE *hs, UniquePtr< SSL_SESSION > *out_session, bool *out_tickets_supported, bool *out_renew_ticket, const SSL_CLIENT_HELLO *client_hello)
Definition: ssl_session.cc:710
SSL_AD_INTERNAL_ERROR
#define SSL_AD_INTERNAL_ERROR
Definition: ssl.h:3815
CRYPTO_BUFFER_len
#define CRYPTO_BUFFER_len
Definition: boringssl_prefix_symbols.h:1118
SSL_R_EXCESS_HANDSHAKE_DATA
#define SSL_R_EXCESS_HANDSHAKE_DATA
Definition: ssl.h:5522
ssl_verify_retry
ssl_verify_retry
Definition: ssl.h:2414
CBS_get_u8_length_prefixed
#define CBS_get_u8_length_prefixed
Definition: boringssl_prefix_symbols.h:1083
ssl_hs_ok
@ ssl_hs_ok
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1611
TLSEXT_TYPE_cookie
#define TLSEXT_TYPE_cookie
Definition: tls1.h:233
SSL3_CT_RSA_SIGN
#define SSL3_CT_RSA_SIGN
Definition: ssl3.h:296
OPENSSL_memchr
static void * OPENSSL_memchr(const void *s, int c, size_t n)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:801
SSL_R_INAPPROPRIATE_FALLBACK
#define SSL_R_INAPPROPRIATE_FALLBACK
Definition: ssl.h:5425
CBS_len
#define CBS_len
Definition: boringssl_prefix_symbols.h:1089
SSL_CONFIG::cert
UniquePtr< CERT > cert
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2986
SSL3_MT_SERVER_HELLO_DONE
#define SSL3_MT_SERVER_HELLO_DONE
Definition: ssl3.h:307
state12_read_client_certificate_verify
@ state12_read_client_certificate_verify
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1655
SSL_CONFIG::cipher_list
UniquePtr< SSLCipherPreferenceList > cipher_list
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2982
crypto_buffer_st
Definition: third_party/boringssl-with-bazel/src/crypto/pool/internal.h:31
EVP_PKEY_RSA
#define EVP_PKEY_RSA
Definition: evp.h:175
SSL_kRSA
#define SSL_kRSA
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:539
SSL_HANDSHAKE::ocsp_stapling_requested
bool ocsp_stapling_requested
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1973
SSL3_MT_CERTIFICATE
#define SSL3_MT_CERTIFICATE
Definition: ssl3.h:304
CONSTTIME_DECLASSIFY
#define CONSTTIME_DECLASSIFY(x, y)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:462
SSL_HANDSHAKE::min_version
uint16_t min_version
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1745
cipher_suites
static const char * cipher_suites
Definition: ssl_utils.cc:78
SSL_AD_ILLEGAL_PARAMETER
#define SSL_AD_ILLEGAL_PARAMETER
Definition: ssl.h:3807
ssl_negotiate_alpn
bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
Definition: extensions.cc:1538
SSLCipherPreferenceList
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:608
SSL_HANDSHAKE::new_session
UniquePtr< SSL_SESSION > new_session
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1916
ssl_ech_accepted
@ ssl_ech_accepted
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2614
sk_SSL_CIPHER_value
#define sk_SSL_CIPHER_value
Definition: boringssl_prefix_symbols.h:572
X509_V_OK
#define X509_V_OK
Definition: x509.h:1918
ssl_get_current_time
void ssl_get_current_time(const SSL *ssl, struct OPENSSL_timeval *out_clock)
Definition: ssl_lib.cc:354
SSL3_RANDOM_SIZE
#define SSL3_RANDOM_SIZE
Definition: ssl3.h:204
kTLSVersions
static const uint16_t kTLSVersions[]
Definition: ssl_versions.cc:54
CBS_init
#define CBS_init
Definition: boringssl_prefix_symbols.h:1085
SSL_HANDSHAKE::state
int state
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1737
ssl_early_data_protocol_version
ssl_early_data_protocol_version
Definition: ssl.h:3561
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
kDTLSVersions
static const uint16_t kDTLSVersions[]
Definition: ssl_versions.cc:61
state12_read_change_cipher_spec
@ state12_read_change_cipher_spec
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1656
SSL3_MT_CLIENT_HELLO
#define SSL3_MT_CLIENT_HELLO
Definition: ssl3.h:299
SSL_CB_ACCEPT_LOOP
#define SSL_CB_ACCEPT_LOOP
Definition: ssl.h:4287
do_tls13
static enum ssl_hs_wait_t do_tls13(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:841
OPENSSL_memset
static void * OPENSSL_memset(void *dst, int c, size_t n)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:835
SSL_HANDSHAKE::server_params
Array< uint8_t > server_params
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1889
state12_read_client_finished
@ state12_read_client_finished
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1660
SSL_R_CONNECTION_REJECTED
#define SSL_R_CONNECTION_REJECTED
Definition: ssl.h:5401
do_read_client_certificate_verify
static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1551
tls1_record_handshake_hashes_for_channel_id
bool tls1_record_handshake_hashes_for_channel_id(SSL_HANDSHAKE *hs)
Definition: extensions.cc:4260
ssl_st::session
bssl::UniquePtr< SSL_SESSION > session
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3750
TLS1_CK_CHACHA20_POLY1305_SHA256
#define TLS1_CK_CHACHA20_POLY1305_SHA256
Definition: tls1.h:457
SSL3_MT_CHANNEL_ID
#define SSL3_MT_CHANNEL_ID
Definition: ssl3.h:316
sk_SSL_CIPHER_push
#define sk_SSL_CIPHER_push
Definition: boringssl_prefix_symbols.h:571
SSLCipherPreferenceList::in_group_flags
bool * in_group_flags
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:621
key_usage_digital_signature
@ key_usage_digital_signature
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1321
ssl_set_session
void ssl_set_session(SSL *ssl, SSL_SESSION *session)
Definition: ssl_session.cc:788
ssl_get_compatible_server_ciphers
static void ssl_get_compatible_server_ciphers(SSL_HANDSHAKE *hs, uint32_t *out_mask_k, uint32_t *out_mask_a)
Definition: handshake_server.cc:301
state12_select_parameters
@ state12_select_parameters
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1647
do_read_channel_id
static enum ssl_hs_wait_t do_read_channel_id(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1683
SSL_HANDSHAKE::ech_hpke_ctx
ScopedEVP_HPKE_CTX ech_hpke_ctx
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1884
SSL_HANDSHAKE::peer_pubkey
UniquePtr< EVP_PKEY > peer_pubkey
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1912
CBB_reserve
#define CBB_reserve
Definition: boringssl_prefix_symbols.h:1050
ssl_server_handshake_state
const char * ssl_server_handshake_state(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1903
uint32_t
unsigned int uint32_t
Definition: stdint-msvc2008.h:80
ssl_cipher_requires_server_key_exchange
bool ssl_cipher_requires_server_key_exchange(const SSL_CIPHER *cipher)
Definition: ssl_cipher.cc:1299
TLSEXT_TYPE_supported_versions
#define TLSEXT_TYPE_supported_versions
Definition: tls1.h:232
do_read_client_hello
static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:640
CBB_did_write
#define CBB_did_write
Definition: boringssl_prefix_symbols.h:1041
bytestring.h
ssl_decode_client_hello_inner
bool ssl_decode_client_hello_inner(SSL *ssl, uint8_t *out_alert, Array< uint8_t > *out_client_hello_inner, Span< const uint8_t > encoded_client_hello_inner, const SSL_CLIENT_HELLO *client_hello_outer)
Definition: encrypted_client_hello.cc:125
state12_read_next_proto
@ state12_read_next_proto
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1658
in
const char * in
Definition: third_party/abseil-cpp/absl/strings/internal/str_format/parser_test.cc:391
do_send_server_finished
static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1731
SSL_HANDSHAKE::session_id
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2058
SSL_R_BAD_SIGNATURE
#define SSL_R_BAD_SIGNATURE
Definition: ssl.h:5382
CBB_add_u16
#define CBB_add_u16
Definition: boringssl_prefix_symbols.h:1027
c
void c(T a)
Definition: miscompile_with_no_unique_address_test.cc:40
do_read_next_proto
static enum ssl_hs_wait_t do_read_next_proto(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1647
TLS1_1_VERSION
#define TLS1_1_VERSION
Definition: ssl.h:651
SSL_HANDSHAKE
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1720
SSL_R_DECRYPTION_FAILED
#define SSL_R_DECRYPTION_FAILED
Definition: ssl.h:5406
ssl_negotiate_version
bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert, uint16_t *out_version, const CBS *peer_versions)
Definition: ssl_versions.cc:290
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
Array< uint8_t >
SSL_CONFIG::psk_server_callback
unsigned(* psk_server_callback)(SSL *ssl, const char *identity, uint8_t *psk, unsigned max_psk_len)
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3001
ssl_hash_message
bool ssl_hash_message(SSL_HANDSHAKE *hs, const SSLMessage &msg)
Definition: handshake.cc:260
ssl_parse_client_cipher_list
static UniquePtr< STACK_OF(SSL_CIPHER)> ssl_parse_client_cipher_list(const SSL_CLIENT_HELLO *client_hello)
Definition: handshake_server.cc:267
SSL_aPSK
#define SSL_aPSK
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:549
ssl_cipher_st::algorithm_mkey
uint32_t algorithm_mkey
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:529
STACK_OF
#define STACK_OF(type)
Definition: stack.h:125
Array::size
size_t size() const
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:276
SSL_HANDSHAKE::channel_id_negotiated
bool channel_id_negotiated
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2041
CBB_add_u8_length_prefixed
#define CBB_add_u8_length_prefixed
Definition: boringssl_prefix_symbols.h:1037
SSL_HANDSHAKE::should_ack_sni
bool should_ack_sni
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1981
ssl_hs_certificate_verify
@ ssl_hs_certificate_verify
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1626
ssl_st
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3698
ssl_select_cert_retry
ssl_select_cert_retry
Definition: ssl.h:4211
ssl_early_callback_ctx
Definition: ssl.h:4186
ssl_session_st::timeout
uint32_t timeout
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3850
CBS_strdup
#define CBS_strdup
Definition: boringssl_prefix_symbols.h:1094
ssl_hs_wait_t
ssl_hs_wait_t
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1609
SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
#define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
Definition: ssl.h:5460
SSL_HANDSHAKE::next_proto_neg_seen
bool next_proto_neg_seen
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2003
SSL3_MT_NEW_SESSION_TICKET
#define SSL3_MT_NEW_SESSION_TICKET
Definition: ssl3.h:301
ssl_early_callback_ctx::cipher_suites_len
size_t cipher_suites_len
Definition: ssl.h:4196
SSL_AD_UNKNOWN_PSK_IDENTITY
#define SSL_AD_UNKNOWN_PSK_IDENTITY
Definition: ssl.h:3826
OPENSSL_timeval
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2873
decrypt_ech
static bool decrypt_ech(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
Definition: handshake_server.cc:507
ssl_client_hello_get_extension
bool ssl_client_hello_get_extension(const SSL_CLIENT_HELLO *client_hello, CBS *out, uint16_t extension_type)
Definition: extensions.cc:283
SSL_is_dtls
#define SSL_is_dtls
Definition: boringssl_prefix_symbols.h:402
negotiate_version
static bool negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
Definition: handshake_server.cc:196
TLSEXT_TYPE_signature_algorithms
#define TLSEXT_TYPE_signature_algorithms
Definition: tls1.h:192
ssl_private_key_sign
enum ssl_private_key_result_t ssl_private_key_sign(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, size_t max_out, uint16_t sigalg, Span< const uint8_t > in)
Definition: ssl_privkey.cc:200
OPENSSL_memcpy
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:819
tls12_check_peer_sigalg
bool tls12_check_peer_sigalg(const SSL_HANDSHAKE *hs, uint8_t *out_alert, uint16_t sigalg)
Definition: extensions.cc:490
BSSL_NAMESPACE_END
#define BSSL_NAMESPACE_END
Definition: base.h:480
CBS_get_u8
#define CBS_get_u8
Definition: boringssl_prefix_symbols.h:1082
SSL_TLSEXT_ERR_NOACK
#define SSL_TLSEXT_ERR_NOACK
Definition: ssl.h:2758
ssl_verify_invalid
ssl_verify_invalid
Definition: ssl.h:2413
ssl_early_callback_ctx::random
const uint8_t * random
Definition: ssl.h:4191
err.h
ERR_R_INTERNAL_ERROR
#define ERR_R_INTERNAL_ERROR
Definition: err.h:374
ssl_protocol_version
uint16_t ssl_protocol_version(const SSL *ssl)
Definition: ssl_versions.cc:251
state12_tls13
@ state12_tls13
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1646
cipher.h
do_verify_client_certificate
static enum ssl_hs_wait_t do_verify_client_certificate(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1322
SSL_CIPHER_get_min_version
#define SSL_CIPHER_get_min_version
Definition: boringssl_prefix_symbols.h:52
state12_send_server_hello_done
@ state12_send_server_hello_done
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1651
state12_done
@ state12_done
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1663
tls1_choose_signature_algorithm
bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out)
Definition: extensions.cc:4054
SSL_MAX_MASTER_KEY_LENGTH
#define SSL_MAX_MASTER_KEY_LENGTH
Definition: ssl.h:1795
evp_aead_open
@ evp_aead_open
Definition: aead.h:430
TLSEXT_TYPE_key_share
#define TLSEXT_TYPE_key_share
Definition: tls1.h:237
evp_aead_seal
@ evp_aead_seal
Definition: aead.h:431
googletest-filter-unittest.child
child
Definition: bloaty/third_party/googletest/googletest/test/googletest-filter-unittest.py:62
SSL_VERIFY_PEER
#define SSL_VERIFY_PEER
Definition: ssl.h:2379
extract_sni
static bool extract_sni(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
Definition: handshake_server.cc:592
ssl_on_certificate_selected
bool ssl_on_certificate_selected(SSL_HANDSHAKE *hs)
Definition: ssl_cert.cc:726
state12_read_client_key_exchange
@ state12_read_client_key_exchange
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1654
PSK_MAX_PSK_LEN
#define PSK_MAX_PSK_LEN
Definition: ssl.h:3111
tls1_get_legacy_signature_algorithm
bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey)
Definition: extensions.cc:4041
CBB_add_u32
#define CBB_add_u32
Definition: boringssl_prefix_symbols.h:1032
do_process_change_cipher_spec
static enum ssl_hs_wait_t do_process_change_cipher_spec(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1638
conf.extensions
list extensions
Definition: doc/python/sphinx/conf.py:54
performance.bq_upload_result.required
required
Definition: bq_upload_result.py:299
SSL_SESSION_dup
OPENSSL_EXPORT UniquePtr< SSL_SESSION > SSL_SESSION_dup(SSL_SESSION *session, int dup_flags)
Definition: ssl_session.cc:191
state12_send_server_key_exchange
@ state12_send_server_key_exchange
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1650
SSL_HANDSHAKE::max_version
uint16_t max_version
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1749
SSL_CURVE_X25519
#define SSL_CURVE_X25519
Definition: ssl.h:2330
EVP_PKEY_size
#define EVP_PKEY_size
Definition: boringssl_prefix_symbols.h:1658
state12_send_server_hello
@ state12_send_server_hello
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1648
ssl_private_key_decrypt
enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, size_t max_out, Span< const uint8_t > in)
Definition: ssl_privkey.cc:252
is_probably_jdk11_with_tls13
static bool is_probably_jdk11_with_tls13(const SSL_CLIENT_HELLO *client_hello)
Definition: handshake_server.cc:407
state12_send_server_certificate
@ state12_send_server_certificate
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1649
ssl_cipher_st::algorithm_auth
uint32_t algorithm_auth
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:530
SSL_CONFIG::handoff
bool handoff
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3075
constant_time_eq_int_8
static uint8_t constant_time_eq_int_8(int a, int b)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:413
Span< const uint8_t >
grpc_core::UniquePtr
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
Definition: src/core/lib/gprpp/memory.h:43
kTLS12DowngradeRandom
const uint8_t kTLS12DowngradeRandom[8]
Definition: tls13_both.cc:47
SSL_HANDSHAKE::can_release_private_key
bool can_release_private_key
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2037
SSL_AD_UNSUPPORTED_CERTIFICATE
#define SSL_AD_UNSUPPORTED_CERTIFICATE
Definition: ssl.h:3803
SSL_HANDSHAKE::transcript
SSLTranscript transcript
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1821
ssl_hs_read_message
@ ssl_hs_read_message
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1613
ssl_select_cert_error
ssl_select_cert_error
Definition: ssl.h:4214
msg
std::string msg
Definition: client_interceptors_end2end_test.cc:372
SSL3_AL_FATAL
#define SSL3_AL_FATAL
Definition: ssl3.h:280
SSL_CONFIG::verify_mode
uint8_t verify_mode
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3044
do_read_client_hello_after_ech
static enum ssl_hs_wait_t do_read_client_hello_after_ech(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:693
ssl_hs_handback
@ ssl_hs_handback
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1617
state12_finish_server_handshake
@ state12_finish_server_handshake
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1662
ssl_client_hello_init
bool ssl_client_hello_init(const SSL *ssl, SSL_CLIENT_HELLO *out, Span< const uint8_t > body)
Definition: extensions.cc:211
TLSEXT_TYPE_supported_groups
#define TLSEXT_TYPE_supported_groups
Definition: tls1.h:229
ssl.h
choose_cipher
static const SSL_CIPHER * choose_cipher(SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello, const SSLCipherPreferenceList *server_pref)
Definition: handshake_server.cc:330
ssl_has_private_key
bool ssl_has_private_key(const SSL_HANDSHAKE *hs)
Definition: ssl_privkey.cc:136
SSL_R_INVALID_COMPRESSION_LIST
#define SSL_R_INVALID_COMPRESSION_LIST
Definition: ssl.h:5523
TLSEXT_TYPE_psk_key_exchange_modes
#define TLSEXT_TYPE_psk_key_exchange_modes
Definition: tls1.h:234
ssl_early_callback_ctx::session_id
const uint8_t * session_id
Definition: ssl.h:4193
ECH_CLIENT_OUTER
#define ECH_CLIENT_OUTER
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1492
SSL_HANDSHAKE::cert_request
bool cert_request
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1965
ssl_supports_version
bool ssl_supports_version(const SSL_HANDSHAKE *hs, uint16_t version)
Definition: ssl_versions.cc:263
SSL_HANDSHAKE::GetClientHello
bool GetClientHello(SSLMessage *out_msg, SSL_CLIENT_HELLO *out_client_hello)
Definition: handshake.cc:174
SSL_CONFIG::retain_only_sha256_of_client_certs
bool retain_only_sha256_of_client_certs
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3069
SSLMessage
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1140
constant_time_eq_8
static uint8_t constant_time_eq_8(crypto_word_t a, crypto_word_t b)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:401
SSL_OP_CIPHER_SERVER_PREFERENCE
#define SSL_OP_CIPHER_SERVER_PREFERENCE
Definition: ssl.h:714
ssl_get_version_range
bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version, uint16_t *out_max_version)
Definition: ssl_versions.cc:170
TLS1_3_VERSION
#define TLS1_3_VERSION
Definition: ssl.h:653
ssl_session_st
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3787
copy_suffix
static void copy_suffix(Span< uint8_t > out, Span< const uint8_t > in)
Definition: handshake_server.cc:975
sk_CRYPTO_BUFFER_value
#define sk_CRYPTO_BUFFER_value
Definition: boringssl_prefix_symbols.h:561
ssl_early_callback_ctx::session_id_len
size_t session_id_len
Definition: ssl.h:4194
TLSEXT_TYPE_signature_algorithms_cert
#define TLSEXT_TYPE_signature_algorithms_cert
Definition: tls1.h:236
ssl_early_callback_ctx::compression_methods
const uint8_t * compression_methods
Definition: ssl.h:4197
CBB_add_bytes
#define CBB_add_bytes
Definition: boringssl_prefix_symbols.h:1025
TLS1_2_VERSION
#define TLS1_2_VERSION
Definition: ssl.h:652
CBBFinishArray
OPENSSL_EXPORT bool CBBFinishArray(CBB *cbb, Array< uint8_t > *out)
Definition: ssl_lib.cc:190
SSL_HANDSHAKE::handshake_finalized
bool handshake_finalized
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1958
ssl_early_callback_ctx::version
uint16_t version
Definition: ssl.h:4190
kTLS13DowngradeRandom
const uint8_t kTLS13DowngradeRandom[8]
Definition: tls13_both.cc:49
BSSL_NAMESPACE_BEGIN
Definition: trust_token_test.cc:45
nid.h
ssl_st::s3
bssl::SSL3_STATE * s3
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3730
rand.h
SSLKeyShare::Create
static HAS_VIRTUAL_DESTRUCTOR UniquePtr< SSLKeyShare > Create(uint16_t group_id)
Definition: ssl_key_share.cc:308
digest.h
ssl_hs_flush
@ ssl_hs_flush
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1614
ssl_get_new_session
bool ssl_get_new_session(SSL_HANDSHAKE *hs)
Definition: ssl_session.cc:352
upload.group
group
Definition: bloaty/third_party/googletest/googlemock/scripts/upload.py:397
SSL_HANDSHAKE::config
SSL_CONFIG * config
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1729
SSL_R_NO_CERTIFICATE_SET
#define SSL_R_NO_CERTIFICATE_SET
Definition: ssl.h:5441
ssl_early_callback_ctx::extensions
const uint8_t * extensions
Definition: ssl.h:4199
TLS1_VERSION
#define TLS1_VERSION
Definition: ssl.h:650
TLSEXT_TYPE_status_request
#define TLSEXT_TYPE_status_request
Definition: tls1.h:186
state12_read_channel_id
@ state12_read_channel_id
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1659
ssl_parse_clienthello_tlsext
bool ssl_parse_clienthello_tlsext(SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello)
Definition: extensions.cc:3651
ssl_hs_private_key_operation
@ ssl_hs_private_key_operation
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1619
md5.h
CRYPTO_BUFFER_init_CBS
#define CRYPTO_BUFFER_init_CBS
Definition: boringssl_prefix_symbols.h:1117
TLSEXT_TYPE_extended_master_secret
#define TLSEXT_TYPE_extended_master_secret
Definition: tls1.h:204
SSL_R_NO_SHARED_CIPHER
#define SSL_R_NO_SHARED_CIPHER
Definition: ssl.h:5451
SSL_AD_DECODE_ERROR
#define SSL_AD_DECODE_ERROR
Definition: ssl.h:3810
ssl_add_client_CA_list
bool ssl_add_client_CA_list(SSL_HANDSHAKE *hs, CBB *cbb)
Definition: ssl_cert.cc:675
SSL_kECDHE
#define SSL_kECDHE
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:540
tls1_generate_master_secret
int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out, Span< const uint8_t > premaster)
Definition: t1_enc.cc:270
ssl_private_key_success
ssl_private_key_success
Definition: ssl.h:1234
ret
UniquePtr< SSL_SESSION > ret
Definition: ssl_x509.cc:1029
SSL3_MT_NEXT_PROTO
#define SSL3_MT_NEXT_PROTO
Definition: ssl3.h:315
SSL_kPSK
#define SSL_kPSK
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:542
CBS_get_u16_length_prefixed
#define CBS_get_u16_length_prefixed
Definition: boringssl_prefix_symbols.h:1074
SSL_VERIFY_FAIL_IF_NO_PEER_CERT
#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT
Definition: ssl.h:2384
SSL_HANDSHAKE::key_shares
UniquePtr< SSLKeyShare > key_shares[2]
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1818
do_select_certificate
static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:764
ssl_check_message_type
bool ssl_check_message_type(SSL *ssl, const SSLMessage &msg, int type)
Definition: handshake.cc:209
Array::Reset
void Reset()
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:287
do_select_parameters
static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:851
ssl_session_rebase_time
void ssl_session_rebase_time(SSL *ssl, SSL_SESSION *session)
Definition: ssl_session.cc:290
curve25519.h
SSL_AD_HANDSHAKE_FAILURE
#define SSL_AD_HANDSHAKE_FAILURE
Definition: ssl.h:3800
SSL_VERIFY_PEER_IF_NO_OBC
#define SSL_VERIFY_PEER_IF_NO_OBC
Definition: ssl.h:2388
ssl_client_hello_decrypt
bool ssl_client_hello_decrypt(EVP_HPKE_CTX *hpke_ctx, Array< uint8_t > *out, bool *out_is_decrypt_error, const SSL_CLIENT_HELLO *client_hello_outer, Span< const uint8_t > payload)
Definition: encrypted_client_hello.cc:255
ssl_add_message_cbb
bool ssl_add_message_cbb(SSL *ssl, CBB *cbb)
Definition: handshake.cc:220
state
Definition: bloaty/third_party/zlib/contrib/blast/blast.c:41
ERR_clear_error
#define ERR_clear_error
Definition: boringssl_prefix_symbols.h:1413
SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE
#define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE
Definition: ssl.h:5459
ssl_ech_rejected
@ ssl_ech_rejected
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2616
tls13_server_handshake
enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs)
Definition: tls13_server.cc:1235
SSL3_MT_CERTIFICATE_STATUS
#define SSL3_MT_CERTIFICATE_STATUS
Definition: ssl3.h:311
wait
static void wait(notification *n)
Definition: alts_tsi_handshaker_test.cc:114
TLSEXT_STATUSTYPE_ocsp
#define TLSEXT_STATUSTYPE_ocsp
Definition: tls1.h:265
do_send_server_key_exchange
static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1148
ssl_client_cipher_list_contains_cipher
BSSL_NAMESPACE_BEGIN bool ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello, uint16_t id)
Definition: handshake_server.cc:176
SSL_get_cipher_by_value
#define SSL_get_cipher_by_value
Definition: boringssl_prefix_symbols.h:328
ssl_st::method
const bssl::SSL_PROTOCOL_METHOD * method
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3706
TLSEXT_MAXLEN_host_name
#define TLSEXT_MAXLEN_host_name
Definition: tls1.h:290
state12_read_client_certificate
@ state12_read_client_certificate
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1652
config_s
Definition: bloaty/third_party/zlib/deflate.c:120
ssl_get_finished
enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs)
Definition: handshake.cc:467
ssl_encrypt_ticket
int ssl_encrypt_ticket(SSL_HANDSHAKE *hs, CBB *out, const SSL_SESSION *session)
Definition: ssl_session.cc:563
do_send_server_hello_done
static enum ssl_hs_wait_t do_send_server_hello_done(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1222
do_read_client_key_exchange
static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1338
constant_time_is_zero_8
static uint8_t constant_time_is_zero_8(crypto_word_t a)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:389
ssl_st::options
uint32_t options
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3763
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST
#define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST
Definition: ssl.h:5416
ssl_verify_peer_cert
enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs)
Definition: handshake.cc:323
ssl_update_cache
void ssl_update_cache(SSL *ssl)
Definition: ssl_session.cc:888
SSL_HANDSHAKE::certificate_status_expected
bool certificate_status_expected
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1970
SSLTranscript::FreeBuffer
void FreeBuffer()
Definition: ssl_transcript.cc:171
SSL_AD_UNRECOGNIZED_NAME
#define SSL_AD_UNRECOGNIZED_NAME
Definition: ssl.h:3822
SSL_HANDSHAKE::ticket_expected
bool ticket_expected
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2007
SSL_HANDSHAKE::ech_keys
UniquePtr< SSL_ECH_KEYS > ech_keys
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1925
Span::data
T * data() const
Definition: boringssl-with-bazel/src/include/openssl/span.h:132
TLSEXT_TYPE_encrypted_client_hello
#define TLSEXT_TYPE_encrypted_client_hello
Definition: tls1.h:251
SSL_R_DECODE_ERROR
#define SSL_R_DECODE_ERROR
Definition: ssl.h:5405
tls1_get_shared_group
bool tls1_get_shared_group(SSL_HANDSHAKE *hs, uint16_t *out_group_id)
Definition: extensions.cc:318
kJDK11DowngradeRandom
const uint8_t kJDK11DowngradeRandom[8]
Definition: tls13_both.cc:53
mem.h
ssl_session_is_resumable
int ssl_session_is_resumable(const SSL_HANDSHAKE *hs, const SSL_SESSION *session)
Definition: ssl_session.cc:610
ssl_do_info_callback
void ssl_do_info_callback(const SSL *ssl, int type, int value)
Definition: ssl_lib.cc:316
ssl_add_serverhello_tlsext
bool ssl_add_serverhello_tlsext(SSL_HANDSHAKE *hs, CBB *out)
Definition: extensions.cc:3552
CONSTTIME_SECRET
#define CONSTTIME_SECRET(x, y)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:461
tls1_change_cipher_state
bool tls1_change_cipher_state(SSL_HANDSHAKE *hs, evp_aead_direction_t direction)
Definition: t1_enc.cc:264
constant_time_select_8
static uint8_t constant_time_select_8(uint8_t mask, uint8_t a, uint8_t b)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:434
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46
TLSEXT_TYPE_application_layer_protocol_negotiation
#define TLSEXT_TYPE_application_layer_protocol_negotiation
Definition: tls1.h:198
SSL_R_DATA_LENGTH_TOO_LONG
#define SSL_R_DATA_LENGTH_TOO_LONG
Definition: ssl.h:5404
TLSEXT_TYPE_pre_shared_key
#define TLSEXT_TYPE_pre_shared_key
Definition: tls1.h:230
do_start_accept
static enum ssl_hs_wait_t do_start_accept(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:399
sk_SSL_CIPHER_num
#define sk_SSL_CIPHER_num
Definition: boringssl_prefix_symbols.h:570
ssl_cert_check_key_usage
bool ssl_cert_check_key_usage(const CBS *in, enum ssl_key_usage_t bit)
Definition: ssl_cert.cc:542
state12_select_certificate
@ state12_select_certificate
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1645
SSL_R_OCSP_CB_ERROR
#define SSL_R_OCSP_CB_ERROR
Definition: ssl.h:5556
ssl_hs_error
@ ssl_hs_error
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1610
DTLS1_VERSION
#define DTLS1_VERSION
Definition: ssl.h:655
tls1_verify_channel_id
bool tls1_verify_channel_id(SSL_HANDSHAKE *hs, const SSLMessage &msg)
Definition: extensions.cc:4111
state12_read_client_hello
@ state12_read_client_hello
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1643
do_read_client_certificate
static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1256
SSL_SESSION_INCLUDE_NONAUTH
#define SSL_SESSION_INCLUDE_NONAUTH
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3172
TLSEXT_TYPE_server_name
#define TLSEXT_TYPE_server_name
Definition: tls1.h:185
gen_server_registered_method_bad_client_test_body.payload
list payload
Definition: gen_server_registered_method_bad_client_test_body.py:40
ec.h
ssl_st::version
uint16_t version
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3715
SSL_CIPHER_get_protocol_id
#define SSL_CIPHER_get_protocol_id
Definition: boringssl_prefix_symbols.h:55
SSL_HANDSHAKE::handback
bool handback
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2021
ssl_st::ctx
bssl::UniquePtr< SSL_CTX > ctx
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3754
SSL_AD_DECRYPT_ERROR
#define SSL_AD_DECRYPT_ERROR
Definition: ssl.h:3811
SSL_R_PSK_IDENTITY_NOT_FOUND
#define SSL_R_PSK_IDENTITY_NOT_FOUND
Definition: ssl.h:5462
PSK_MAX_IDENTITY_LEN
#define PSK_MAX_IDENTITY_LEN
Definition: ssl.h:3108
TLSEXT_TYPE_ec_point_formats
#define TLSEXT_TYPE_ec_point_formats
Definition: tls1.h:189
TLSEXT_NAMETYPE_host_name
#define TLSEXT_NAMETYPE_host_name
Definition: ssl.h:2721
tls12_server_hs_state_t
tls12_server_hs_state_t
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1641
sk_CRYPTO_BUFFER_num
#define sk_CRYPTO_BUFFER_num
Definition: boringssl_prefix_symbols.h:558
SSL_CIPHER_get_max_version
#define SSL_CIPHER_get_max_version
Definition: boringssl_prefix_symbols.h:51
SSL_HANDSHAKE::apply_jdk11_workaround
bool apply_jdk11_workaround
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:2033
SSL3_AD_INAPPROPRIATE_FALLBACK
#define SSL3_AD_INAPPROPRIATE_FALLBACK
Definition: ssl3.h:294
do_send_server_hello
static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:980
CBS_contains_zero_byte
#define CBS_contains_zero_byte
Definition: boringssl_prefix_symbols.h:1055
ssl_early_callback_ctx::extensions_len
size_t extensions_len
Definition: ssl.h:4200
hmac.h
tls12_add_verify_sigalgs
bool tls12_add_verify_sigalgs(const SSL_HANDSHAKE *hs, CBB *out)
Definition: extensions.cc:481
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
CRYPTO_BUFFER_data
#define CRYPTO_BUFFER_data
Definition: boringssl_prefix_symbols.h:1115
SSL_R_CERT_CB_ERROR
#define SSL_R_CERT_CB_ERROR
Definition: ssl.h:5394
ERR_R_MALLOC_FAILURE
#define ERR_R_MALLOC_FAILURE
Definition: err.h:371
do_read_client_finished
static enum ssl_hs_wait_t do_read_client_finished(SSL_HANDSHAKE *hs)
Definition: handshake_server.cc:1707
signature_algorithm
uint16_t signature_algorithm
Definition: ssl_privkey.cc:439
id
uint32_t id
Definition: flow_control_fuzzer.cc:70
SSL_R_RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION
#define SSL_R_RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION
Definition: ssl.h:5471
SSL3_MT_CERTIFICATE_REQUEST
#define SSL3_MT_CERTIFICATE_REQUEST
Definition: ssl3.h:306
SSLTranscript::buffer
Span< const uint8_t > buffer() const
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:713
ssl_private_key_retry
ssl_private_key_retry
Definition: ssl.h:1235
x509.h
absl::MakeConstSpan
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
Definition: abseil-cpp/absl/types/span.h:707
cbb_st
Definition: bytestring.h:375
CBB_add_u24_length_prefixed
#define CBB_add_u24_length_prefixed
Definition: boringssl_prefix_symbols.h:1031
supported_versions
static const char *const supported_versions[]
Definition: src/core/ext/transport/chttp2/alpn/alpn.cc:28


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:10