blob: 79088473bbcdfa6c0a0b6f2bf0eee4be0208973f [file] [log] [blame]
nharper6ebe83b2019-06-13 17:43:52 -07001// Copyright (c) 2019 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/third_party/quiche/src/quic/core/crypto/tls_client_connection.h"
6
7namespace quic {
8
9TlsClientConnection::TlsClientConnection(SSL_CTX* ssl_ctx, Delegate* delegate)
10 : TlsConnection(ssl_ctx, delegate->ConnectionDelegate()),
11 delegate_(delegate) {}
12
13// static
nharperd25cd652020-05-20 13:10:26 -070014bssl::UniquePtr<SSL_CTX> TlsClientConnection::CreateSslCtx(
15 bool enable_early_data) {
nharper6ebe83b2019-06-13 17:43:52 -070016 bssl::UniquePtr<SSL_CTX> ssl_ctx = TlsConnection::CreateSslCtx();
17 // Configure certificate verification.
nharper6ebe83b2019-06-13 17:43:52 -070018 SSL_CTX_set_custom_verify(ssl_ctx.get(), SSL_VERIFY_PEER, &VerifyCallback);
nharper1473c092019-11-11 13:13:19 -080019 int reverify_on_resume_enabled = 1;
20 SSL_CTX_set_reverify_on_resume(ssl_ctx.get(), reverify_on_resume_enabled);
nharperdf7a77b2019-11-11 13:12:45 -080021
22 // Configure session caching.
23 SSL_CTX_set_session_cache_mode(
24 ssl_ctx.get(), SSL_SESS_CACHE_CLIENT | SSL_SESS_CACHE_NO_INTERNAL);
25 SSL_CTX_sess_set_new_cb(ssl_ctx.get(), NewSessionCallback);
nharperd25cd652020-05-20 13:10:26 -070026
27 SSL_CTX_set_early_data_enabled(ssl_ctx.get(), enable_early_data);
nharper6ebe83b2019-06-13 17:43:52 -070028 return ssl_ctx;
29}
30
31// static
32enum ssl_verify_result_t TlsClientConnection::VerifyCallback(
33 SSL* ssl,
34 uint8_t* out_alert) {
35 return static_cast<TlsClientConnection*>(ConnectionFromSsl(ssl))
36 ->delegate_->VerifyCert(out_alert);
37}
38
nharperdf7a77b2019-11-11 13:12:45 -080039// static
40int TlsClientConnection::NewSessionCallback(SSL* ssl, SSL_SESSION* session) {
41 static_cast<TlsClientConnection*>(ConnectionFromSsl(ssl))
42 ->delegate_->InsertSession(bssl::UniquePtr<SSL_SESSION>(session));
43 return 1;
44}
45
nharper6ebe83b2019-06-13 17:43:52 -070046} // namespace quic