OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_QUIC_CRYPTO_QUIC_CRYPTO_CLIENT_CONFIG_H_ | 5 #ifndef NET_QUIC_CRYPTO_QUIC_CRYPTO_CLIENT_CONFIG_H_ |
6 #define NET_QUIC_CRYPTO_QUIC_CRYPTO_CLIENT_CONFIG_H_ | 6 #define NET_QUIC_CRYPTO_QUIC_CRYPTO_CLIENT_CONFIG_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
13 #include "base/strings/string_piece.h" | 13 #include "base/strings/string_piece.h" |
14 #include "net/base/net_export.h" | 14 #include "net/base/net_export.h" |
15 #include "net/quic/crypto/crypto_handshake.h" | 15 #include "net/quic/crypto/crypto_handshake.h" |
16 #include "net/quic/quic_protocol.h" | 16 #include "net/quic/quic_protocol.h" |
17 | 17 |
18 namespace net { | 18 namespace net { |
19 | 19 |
20 class ChannelIDSigner; | 20 class ChannelIDSigner; |
21 class CryptoHandshakeMessage; | 21 class CryptoHandshakeMessage; |
22 class ProofVerifier; | 22 class ProofVerifier; |
23 class ProofVerifyDetails; | 23 class ProofVerifyDetails; |
24 class QuicRandom; | 24 class QuicRandom; |
| 25 class QuicSessionKey; |
25 | 26 |
26 // QuicCryptoClientConfig contains crypto-related configuration settings for a | 27 // QuicCryptoClientConfig contains crypto-related configuration settings for a |
27 // client. Note that this object isn't thread-safe. It's designed to be used on | 28 // client. Note that this object isn't thread-safe. It's designed to be used on |
28 // a single thread at a time. | 29 // a single thread at a time. |
29 class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig { | 30 class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig { |
30 public: | 31 public: |
31 // A CachedState contains the information that the client needs in order to | 32 // A CachedState contains the information that the client needs in order to |
32 // perform a 0-RTT handshake with a server. This information can be reused | 33 // perform a 0-RTT handshake with a server. This information can be reused |
33 // over several connections to the same server. | 34 // over several connections to the same server. |
34 class NET_EXPORT_PRIVATE CachedState { | 35 class NET_EXPORT_PRIVATE CachedState { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 | 125 |
125 DISALLOW_COPY_AND_ASSIGN(CachedState); | 126 DISALLOW_COPY_AND_ASSIGN(CachedState); |
126 }; | 127 }; |
127 | 128 |
128 QuicCryptoClientConfig(); | 129 QuicCryptoClientConfig(); |
129 ~QuicCryptoClientConfig(); | 130 ~QuicCryptoClientConfig(); |
130 | 131 |
131 // Sets the members to reasonable, default values. | 132 // Sets the members to reasonable, default values. |
132 void SetDefaults(); | 133 void SetDefaults(); |
133 | 134 |
134 // LookupOrCreate returns a CachedState for the given hostname. If no such | 135 // LookupOrCreate returns a CachedState for the given |server_key|. If no such |
135 // CachedState currently exists, it will be created and cached. | 136 // CachedState currently exists, it will be created and cached. |
136 CachedState* LookupOrCreate(const std::string& server_hostname); | 137 CachedState* LookupOrCreate(const QuicSessionKey& server_key); |
137 | 138 |
138 // FillInchoateClientHello sets |out| to be a CHLO message that elicits a | 139 // FillInchoateClientHello sets |out| to be a CHLO message that elicits a |
139 // source-address token or SCFG from a server. If |cached| is non-NULL, the | 140 // source-address token or SCFG from a server. If |cached| is non-NULL, the |
140 // source-address token will be taken from it. |out_params| is used in order | 141 // source-address token will be taken from it. |out_params| is used in order |
141 // to store the cached certs that were sent as hints to the server in | 142 // to store the cached certs that were sent as hints to the server in |
142 // |out_params->cached_certs|. |preferred_version| is the version of the | 143 // |out_params->cached_certs|. |preferred_version| is the version of the |
143 // QUIC protocol that this client chose to use initially. This allows the | 144 // QUIC protocol that this client chose to use initially. This allows the |
144 // server to detect downgrade attacks. | 145 // server to detect downgrade attacks. |
145 void FillInchoateClientHello(const std::string& server_hostname, | 146 void FillInchoateClientHello(const std::string& server_hostname, |
146 const QuicVersion preferred_version, | 147 const QuicVersion preferred_version, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 void SetProofVerifier(ProofVerifier* verifier); | 205 void SetProofVerifier(ProofVerifier* verifier); |
205 | 206 |
206 ChannelIDSigner* channel_id_signer() const; | 207 ChannelIDSigner* channel_id_signer() const; |
207 | 208 |
208 // SetChannelIDSigner sets a ChannelIDSigner that will be called when the | 209 // SetChannelIDSigner sets a ChannelIDSigner that will be called when the |
209 // server supports channel IDs to sign a message proving possession of the | 210 // server supports channel IDs to sign a message proving possession of the |
210 // given ChannelID. This object takes ownership of |signer|. | 211 // given ChannelID. This object takes ownership of |signer|. |
211 void SetChannelIDSigner(ChannelIDSigner* signer); | 212 void SetChannelIDSigner(ChannelIDSigner* signer); |
212 | 213 |
213 // Initialize the CachedState from |canonical_crypto_config| for the | 214 // Initialize the CachedState from |canonical_crypto_config| for the |
214 // |canonical_server_hostname| as the initial CachedState for | 215 // |canonical_server_key| as the initial CachedState for |server_key|. We will |
215 // |server_hostname|. We will copy config data only if | 216 // copy config data only if |canonical_crypto_config| has valid proof. |
216 // |canonical_crypto_config| has valid proof. | 217 void InitializeFrom(const QuicSessionKey& server_key, |
217 void InitializeFrom(const std::string& server_hostname, | 218 const QuicSessionKey& canonical_server_key, |
218 const std::string& canonical_server_hostname, | |
219 QuicCryptoClientConfig* canonical_crypto_config); | 219 QuicCryptoClientConfig* canonical_crypto_config); |
220 | 220 |
221 private: | 221 private: |
222 // cached_states_ maps from the server hostname to the cached information | 222 // cached_states_ maps from the server_key to the cached information about |
223 // about that server. | 223 // that server. |
224 std::map<std::string, CachedState*> cached_states_; | 224 std::map<QuicSessionKey, CachedState*> cached_states_; |
225 | 225 |
226 scoped_ptr<ProofVerifier> proof_verifier_; | 226 scoped_ptr<ProofVerifier> proof_verifier_; |
227 scoped_ptr<ChannelIDSigner> channel_id_signer_; | 227 scoped_ptr<ChannelIDSigner> channel_id_signer_; |
228 | 228 |
229 DISALLOW_COPY_AND_ASSIGN(QuicCryptoClientConfig); | 229 DISALLOW_COPY_AND_ASSIGN(QuicCryptoClientConfig); |
230 }; | 230 }; |
231 | 231 |
232 } // namespace net | 232 } // namespace net |
233 | 233 |
234 #endif // NET_QUIC_CRYPTO_QUIC_CRYPTO_CLIENT_CONFIG_H_ | 234 #endif // NET_QUIC_CRYPTO_QUIC_CRYPTO_CLIENT_CONFIG_H_ |
OLD | NEW |