| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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_CRYPTO_HANDSHAKE_H_ | 5 #ifndef NET_QUIC_CRYPTO_CRYPTO_HANDSHAKE_MESSAGE_H_ |
| 6 #define NET_QUIC_CRYPTO_CRYPTO_HANDSHAKE_H_ | 6 #define NET_QUIC_CRYPTO_CRYPTO_HANDSHAKE_MESSAGE_H_ |
| 7 | 7 |
| 8 #include <map> | |
| 9 #include <string> | 8 #include <string> |
| 10 #include <vector> | 9 #include <vector> |
| 11 | 10 |
| 12 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/strings/string_piece.h" | 12 #include "base/strings/string_piece.h" |
| 14 #include "net/base/net_export.h" | 13 #include "net/base/net_export.h" |
| 15 #include "net/cert/cert_verify_result.h" | |
| 16 #include "net/cert/x509_certificate.h" | |
| 17 #include "net/quic/crypto/crypto_protocol.h" | |
| 18 #include "net/quic/crypto/proof_verifier.h" | |
| 19 #include "net/quic/quic_protocol.h" | 14 #include "net/quic/quic_protocol.h" |
| 20 | 15 |
| 21 namespace net { | 16 namespace net { |
| 22 | 17 |
| 23 class ChannelIDSigner; | |
| 24 class CommonCertSets; | |
| 25 class KeyExchange; | |
| 26 class ProofVerifier; | |
| 27 class QuicDecrypter; | |
| 28 class QuicEncrypter; | |
| 29 class QuicRandom; | |
| 30 | |
| 31 // An intermediate format of a handshake message that's convenient for a | 18 // An intermediate format of a handshake message that's convenient for a |
| 32 // CryptoFramer to serialize from or parse into. | 19 // CryptoFramer to serialize from or parse into. |
| 33 class NET_EXPORT_PRIVATE CryptoHandshakeMessage { | 20 class NET_EXPORT_PRIVATE CryptoHandshakeMessage { |
| 34 public: | 21 public: |
| 35 CryptoHandshakeMessage(); | 22 CryptoHandshakeMessage(); |
| 36 CryptoHandshakeMessage(const CryptoHandshakeMessage& other); | 23 CryptoHandshakeMessage(const CryptoHandshakeMessage& other); |
| 37 ~CryptoHandshakeMessage(); | 24 ~CryptoHandshakeMessage(); |
| 38 | 25 |
| 39 CryptoHandshakeMessage& operator=(const CryptoHandshakeMessage& other); | 26 CryptoHandshakeMessage& operator=(const CryptoHandshakeMessage& other); |
| 40 | 27 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 QuicTag tag_; | 123 QuicTag tag_; |
| 137 QuicTagValueMap tag_value_map_; | 124 QuicTagValueMap tag_value_map_; |
| 138 | 125 |
| 139 size_t minimum_size_; | 126 size_t minimum_size_; |
| 140 | 127 |
| 141 // The serialized form of the handshake message. This member is constructed | 128 // The serialized form of the handshake message. This member is constructed |
| 142 // lasily. | 129 // lasily. |
| 143 mutable scoped_ptr<QuicData> serialized_; | 130 mutable scoped_ptr<QuicData> serialized_; |
| 144 }; | 131 }; |
| 145 | 132 |
| 146 // A CrypterPair contains the encrypter and decrypter for an encryption level. | |
| 147 struct NET_EXPORT_PRIVATE CrypterPair { | |
| 148 CrypterPair(); | |
| 149 ~CrypterPair(); | |
| 150 scoped_ptr<QuicEncrypter> encrypter; | |
| 151 scoped_ptr<QuicDecrypter> decrypter; | |
| 152 }; | |
| 153 | |
| 154 // Parameters negotiated by the crypto handshake. | |
| 155 struct NET_EXPORT_PRIVATE QuicCryptoNegotiatedParameters { | |
| 156 // Initializes the members to 0 or empty values. | |
| 157 QuicCryptoNegotiatedParameters(); | |
| 158 ~QuicCryptoNegotiatedParameters(); | |
| 159 | |
| 160 QuicTag key_exchange; | |
| 161 QuicTag aead; | |
| 162 std::string initial_premaster_secret; | |
| 163 std::string forward_secure_premaster_secret; | |
| 164 CrypterPair initial_crypters; | |
| 165 CrypterPair forward_secure_crypters; | |
| 166 // Normalized SNI: converted to lower case and trailing '.' removed. | |
| 167 std::string sni; | |
| 168 std::string client_nonce; | |
| 169 std::string server_nonce; | |
| 170 // hkdf_input_suffix contains the HKDF input following the label: the GUID, | |
| 171 // client hello and server config. This is only populated in the client | |
| 172 // because only the client needs to derive the forward secure keys at a later | |
| 173 // time from the initial keys. | |
| 174 std::string hkdf_input_suffix; | |
| 175 // cached_certs contains the cached certificates that a client used when | |
| 176 // sending a client hello. | |
| 177 std::vector<std::string> cached_certs; | |
| 178 // client_key_exchange is used by clients to store the ephemeral KeyExchange | |
| 179 // for the connection. | |
| 180 scoped_ptr<KeyExchange> client_key_exchange; | |
| 181 // channel_id is set by servers to a ChannelID key when the client correctly | |
| 182 // proves possession of the corresponding private key. It consists of 32 | |
| 183 // bytes of x coordinate, followed by 32 bytes of y coordinate. Both values | |
| 184 // are big-endian and the pair is a P-256 public key. | |
| 185 std::string channel_id; | |
| 186 // client_address is set by clients to the kCADR value provided by the server | |
| 187 // in ServerHello. It is a serialized form of an IP address and port. | |
| 188 std::string client_address; | |
| 189 }; | |
| 190 | |
| 191 // QuicCryptoConfig contains common configuration between clients and servers. | |
| 192 class NET_EXPORT_PRIVATE QuicCryptoConfig { | |
| 193 public: | |
| 194 // kInitialLabel is a constant that is used when deriving the initial | |
| 195 // (non-forward secure) keys for the connection in order to tie the resulting | |
| 196 // key to this protocol. | |
| 197 static const char kInitialLabel[]; | |
| 198 | |
| 199 // kCETVLabel is a constant that is used when deriving the keys for the | |
| 200 // encrypted tag/value block in the client hello. | |
| 201 static const char kCETVLabel[]; | |
| 202 | |
| 203 // kForwardSecureLabel is a constant that is used when deriving the forward | |
| 204 // secure keys for the connection in order to tie the resulting key to this | |
| 205 // protocol. | |
| 206 static const char kForwardSecureLabel[]; | |
| 207 | |
| 208 QuicCryptoConfig(); | |
| 209 ~QuicCryptoConfig(); | |
| 210 | |
| 211 // Key exchange methods. The following two members' values correspond by | |
| 212 // index. | |
| 213 QuicTagVector kexs; | |
| 214 // Authenticated encryption with associated data (AEAD) algorithms. | |
| 215 QuicTagVector aead; | |
| 216 | |
| 217 const CommonCertSets* common_cert_sets; | |
| 218 | |
| 219 private: | |
| 220 DISALLOW_COPY_AND_ASSIGN(QuicCryptoConfig); | |
| 221 }; | |
| 222 | |
| 223 } // namespace net | 133 } // namespace net |
| 224 | 134 |
| 225 #endif // NET_QUIC_CRYPTO_CRYPTO_HANDSHAKE_H_ | 135 #endif // NET_QUIC_CRYPTO_CRYPTO_HANDSHAKE_MESSAGE_H_ |
| OLD | NEW |