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_CORE_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ | 5 #ifndef NET_QUIC_CORE_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ |
6 #define NET_QUIC_CORE_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ | 6 #define NET_QUIC_CORE_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
11 #include <map> | 11 #include <map> |
12 #include <memory> | 12 #include <memory> |
13 #include <string> | 13 #include <string> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "base/macros.h" | 16 #include "base/macros.h" |
17 #include "base/memory/ref_counted.h" | 17 #include "base/memory/ref_counted.h" |
18 #include "base/strings/string_piece.h" | 18 #include "base/strings/string_piece.h" |
19 #include "base/synchronization/lock.h" | 19 #include "base/synchronization/lock.h" |
20 #include "net/base/ip_address.h" | 20 #include "net/base/ip_address.h" |
21 #include "net/base/ip_endpoint.h" | 21 #include "net/base/ip_endpoint.h" |
22 #include "net/base/net_export.h" | |
23 #include "net/quic/core/crypto/crypto_handshake.h" | 22 #include "net/quic/core/crypto/crypto_handshake.h" |
24 #include "net/quic/core/crypto/crypto_handshake_message.h" | 23 #include "net/quic/core/crypto/crypto_handshake_message.h" |
25 #include "net/quic/core/crypto/crypto_protocol.h" | 24 #include "net/quic/core/crypto/crypto_protocol.h" |
26 #include "net/quic/core/crypto/crypto_secret_boxer.h" | 25 #include "net/quic/core/crypto/crypto_secret_boxer.h" |
27 #include "net/quic/core/crypto/proof_source.h" | 26 #include "net/quic/core/crypto/proof_source.h" |
28 #include "net/quic/core/crypto/quic_compressed_certs_cache.h" | 27 #include "net/quic/core/crypto/quic_compressed_certs_cache.h" |
29 #include "net/quic/core/crypto/quic_crypto_proof.h" | 28 #include "net/quic/core/crypto/quic_crypto_proof.h" |
30 #include "net/quic/core/proto/cached_network_parameters.pb.h" | 29 #include "net/quic/core/proto/cached_network_parameters.pb.h" |
31 #include "net/quic/core/proto/source_address_token.pb.h" | 30 #include "net/quic/core/proto/source_address_token.pb.h" |
32 #include "net/quic/core/quic_time.h" | 31 #include "net/quic/core/quic_time.h" |
| 32 #include "net/quic/platform/api/quic_export.h" |
33 #include "net/quic/platform/api/quic_socket_address.h" | 33 #include "net/quic/platform/api/quic_socket_address.h" |
34 | 34 |
35 namespace net { | 35 namespace net { |
36 | 36 |
37 class CryptoHandshakeMessage; | 37 class CryptoHandshakeMessage; |
38 class EphemeralKeySource; | 38 class EphemeralKeySource; |
39 class KeyExchange; | 39 class KeyExchange; |
40 class ProofSource; | 40 class ProofSource; |
41 class QuicClock; | 41 class QuicClock; |
42 class QuicRandom; | 42 class QuicRandom; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 public: | 76 public: |
77 PrimaryConfigChangedCallback(); | 77 PrimaryConfigChangedCallback(); |
78 virtual ~PrimaryConfigChangedCallback(); | 78 virtual ~PrimaryConfigChangedCallback(); |
79 virtual void Run(const std::string& scid) = 0; | 79 virtual void Run(const std::string& scid) = 0; |
80 | 80 |
81 private: | 81 private: |
82 DISALLOW_COPY_AND_ASSIGN(PrimaryConfigChangedCallback); | 82 DISALLOW_COPY_AND_ASSIGN(PrimaryConfigChangedCallback); |
83 }; | 83 }; |
84 | 84 |
85 // Callback used to accept the result of the |client_hello| validation step. | 85 // Callback used to accept the result of the |client_hello| validation step. |
86 class NET_EXPORT_PRIVATE ValidateClientHelloResultCallback { | 86 class QUIC_EXPORT_PRIVATE ValidateClientHelloResultCallback { |
87 public: | 87 public: |
88 // Opaque token that holds information about the client_hello and | 88 // Opaque token that holds information about the client_hello and |
89 // its validity. Can be interpreted by calling ProcessClientHello. | 89 // its validity. Can be interpreted by calling ProcessClientHello. |
90 struct NET_EXPORT_PRIVATE Result : public base::RefCountedThreadSafe<Result> { | 90 struct QUIC_EXPORT_PRIVATE Result |
| 91 : public base::RefCountedThreadSafe<Result> { |
91 Result(const CryptoHandshakeMessage& in_client_hello, | 92 Result(const CryptoHandshakeMessage& in_client_hello, |
92 QuicIpAddress in_client_ip, | 93 QuicIpAddress in_client_ip, |
93 QuicWallTime in_now); | 94 QuicWallTime in_now); |
94 | 95 |
95 CryptoHandshakeMessage client_hello; | 96 CryptoHandshakeMessage client_hello; |
96 ClientHelloInfo info; | 97 ClientHelloInfo info; |
97 QuicErrorCode error_code; | 98 QuicErrorCode error_code; |
98 std::string error_details; | 99 std::string error_details; |
99 | 100 |
100 // Populated if the CHLO STK contained a CachedNetworkParameters proto. | 101 // Populated if the CHLO STK contained a CachedNetworkParameters proto. |
101 CachedNetworkParameters cached_network_params; | 102 CachedNetworkParameters cached_network_params; |
102 | 103 |
103 private: | 104 private: |
104 friend class base::RefCountedThreadSafe<Result>; | 105 friend class base::RefCountedThreadSafe<Result>; |
105 ~Result(); | 106 ~Result(); |
106 }; | 107 }; |
107 | 108 |
108 ValidateClientHelloResultCallback(); | 109 ValidateClientHelloResultCallback(); |
109 virtual void Run(scoped_refptr<Result> result, | 110 virtual void Run(scoped_refptr<Result> result, |
110 std::unique_ptr<ProofSource::Details> details) = 0; | 111 std::unique_ptr<ProofSource::Details> details) = 0; |
111 virtual ~ValidateClientHelloResultCallback(); | 112 virtual ~ValidateClientHelloResultCallback(); |
112 | 113 |
113 private: | 114 private: |
114 DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloResultCallback); | 115 DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloResultCallback); |
115 }; | 116 }; |
116 | 117 |
117 // Callback used to accept the result of the ProcessClientHello method. | 118 // Callback used to accept the result of the ProcessClientHello method. |
118 class NET_EXPORT_PRIVATE ProcessClientHelloResultCallback { | 119 class QUIC_EXPORT_PRIVATE ProcessClientHelloResultCallback { |
119 public: | 120 public: |
120 ProcessClientHelloResultCallback(); | 121 ProcessClientHelloResultCallback(); |
121 virtual ~ProcessClientHelloResultCallback(); | 122 virtual ~ProcessClientHelloResultCallback(); |
122 virtual void Run(QuicErrorCode error, | 123 virtual void Run(QuicErrorCode error, |
123 const std::string& error_details, | 124 const std::string& error_details, |
124 std::unique_ptr<CryptoHandshakeMessage> message, | 125 std::unique_ptr<CryptoHandshakeMessage> message, |
125 std::unique_ptr<DiversificationNonce> diversification_nonce, | 126 std::unique_ptr<DiversificationNonce> diversification_nonce, |
126 std::unique_ptr<ProofSource::Details> details) = 0; | 127 std::unique_ptr<ProofSource::Details> details) = 0; |
127 | 128 |
128 private: | 129 private: |
(...skipping 24 matching lines...) Expand all Loading... |
153 | 154 |
154 private: | 155 private: |
155 DISALLOW_COPY_AND_ASSIGN(RejectionObserver); | 156 DISALLOW_COPY_AND_ASSIGN(RejectionObserver); |
156 }; | 157 }; |
157 | 158 |
158 // QuicCryptoServerConfig contains the crypto configuration of a QUIC server. | 159 // QuicCryptoServerConfig contains the crypto configuration of a QUIC server. |
159 // Unlike a client, a QUIC server can have multiple configurations active in | 160 // Unlike a client, a QUIC server can have multiple configurations active in |
160 // order to support clients resuming with a previous configuration. | 161 // order to support clients resuming with a previous configuration. |
161 // TODO(agl): when adding configurations at runtime is added, this object will | 162 // TODO(agl): when adding configurations at runtime is added, this object will |
162 // need to consider locking. | 163 // need to consider locking. |
163 class NET_EXPORT_PRIVATE QuicCryptoServerConfig { | 164 class QUIC_EXPORT_PRIVATE QuicCryptoServerConfig { |
164 public: | 165 public: |
165 // ConfigOptions contains options for generating server configs. | 166 // ConfigOptions contains options for generating server configs. |
166 struct NET_EXPORT_PRIVATE ConfigOptions { | 167 struct QUIC_EXPORT_PRIVATE ConfigOptions { |
167 ConfigOptions(); | 168 ConfigOptions(); |
168 ConfigOptions(const ConfigOptions& other); | 169 ConfigOptions(const ConfigOptions& other); |
169 ~ConfigOptions(); | 170 ~ConfigOptions(); |
170 | 171 |
171 // expiry_time is the time, in UNIX seconds, when the server config will | 172 // expiry_time is the time, in UNIX seconds, when the server config will |
172 // expire. If unset, it defaults to the current time plus six months. | 173 // expire. If unset, it defaults to the current time plus six months. |
173 QuicWallTime expiry_time; | 174 QuicWallTime expiry_time; |
174 // channel_id_enabled controls whether the server config will indicate | 175 // channel_id_enabled controls whether the server config will indicate |
175 // support for ChannelIDs. | 176 // support for ChannelIDs. |
176 bool channel_id_enabled; | 177 bool channel_id_enabled; |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 void set_rejection_observer(RejectionObserver* rejection_observer) { | 422 void set_rejection_observer(RejectionObserver* rejection_observer) { |
422 rejection_observer_ = rejection_observer; | 423 rejection_observer_ = rejection_observer; |
423 } | 424 } |
424 | 425 |
425 private: | 426 private: |
426 friend class test::QuicCryptoServerConfigPeer; | 427 friend class test::QuicCryptoServerConfigPeer; |
427 friend struct QuicSignedServerConfig; | 428 friend struct QuicSignedServerConfig; |
428 | 429 |
429 // Config represents a server config: a collection of preferences and | 430 // Config represents a server config: a collection of preferences and |
430 // Diffie-Hellman public values. | 431 // Diffie-Hellman public values. |
431 class NET_EXPORT_PRIVATE Config : public QuicCryptoConfig, | 432 class QUIC_EXPORT_PRIVATE Config : public QuicCryptoConfig, |
432 public base::RefCounted<Config> { | 433 public base::RefCounted<Config> { |
433 public: | 434 public: |
434 Config(); | 435 Config(); |
435 | 436 |
436 // TODO(rtenneti): since this is a class, we should probably do | 437 // TODO(rtenneti): since this is a class, we should probably do |
437 // getters/setters here. | 438 // getters/setters here. |
438 // |serialized| contains the bytes of this server config, suitable for | 439 // |serialized| contains the bytes of this server config, suitable for |
439 // sending on the wire. | 440 // sending on the wire. |
440 std::string serialized; | 441 std::string serialized; |
441 // id contains the SCID of this server config. | 442 // id contains the SCID of this server config. |
442 std::string id; | 443 std::string id; |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 | 779 |
779 // Enable serving SCT or not. | 780 // Enable serving SCT or not. |
780 bool enable_serving_sct_; | 781 bool enable_serving_sct_; |
781 | 782 |
782 // Does not own this observer. | 783 // Does not own this observer. |
783 RejectionObserver* rejection_observer_; | 784 RejectionObserver* rejection_observer_; |
784 | 785 |
785 DISALLOW_COPY_AND_ASSIGN(QuicCryptoServerConfig); | 786 DISALLOW_COPY_AND_ASSIGN(QuicCryptoServerConfig); |
786 }; | 787 }; |
787 | 788 |
788 struct NET_EXPORT_PRIVATE QuicSignedServerConfig | 789 struct QUIC_EXPORT_PRIVATE QuicSignedServerConfig |
789 : public base::RefCounted<QuicSignedServerConfig> { | 790 : public base::RefCounted<QuicSignedServerConfig> { |
790 QuicSignedServerConfig(); | 791 QuicSignedServerConfig(); |
791 | 792 |
792 QuicCryptoProof proof; | 793 QuicCryptoProof proof; |
793 scoped_refptr<ProofSource::Chain> chain; | 794 scoped_refptr<ProofSource::Chain> chain; |
794 // The server config that is used for this proof (and the rest of the | 795 // The server config that is used for this proof (and the rest of the |
795 // request). | 796 // request). |
796 scoped_refptr<QuicCryptoServerConfig::Config> config; | 797 scoped_refptr<QuicCryptoServerConfig::Config> config; |
797 std::string primary_scid; | 798 std::string primary_scid; |
798 | 799 |
799 private: | 800 private: |
800 friend class base::RefCounted<QuicSignedServerConfig>; | 801 friend class base::RefCounted<QuicSignedServerConfig>; |
801 virtual ~QuicSignedServerConfig(); | 802 virtual ~QuicSignedServerConfig(); |
802 }; | 803 }; |
803 | 804 |
804 } // namespace net | 805 } // namespace net |
805 | 806 |
806 #endif // NET_QUIC_CORE_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ | 807 #endif // NET_QUIC_CORE_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ |
OLD | NEW |