Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(542)

Unified Diff: net/quic/crypto/crypto_handshake.h

Issue 14411004: Land Recent QUIC Changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use CONFIG_VERSION insteaf of VERSION Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/quic/crypto/crypto_handshake.h
diff --git a/net/quic/crypto/crypto_handshake.h b/net/quic/crypto/crypto_handshake.h
index c597b7432f47a2d59af1a8a594961cb3495dbf35..0be50d0129811470b6d0b925cdac2141214d4936 100644
--- a/net/quic/crypto/crypto_handshake.h
+++ b/net/quic/crypto/crypto_handshake.h
@@ -11,8 +11,6 @@
#include "base/memory/scoped_ptr.h"
#include "base/strings/string_piece.h"
-#include "base/synchronization/lock.h"
-#include "net/base/ip_endpoint.h"
#include "net/base/net_export.h"
#include "net/quic/crypto/crypto_protocol.h"
#include "net/quic/quic_time.h"
@@ -24,12 +22,6 @@ class QuicClock;
class QuicDecrypter;
class QuicEncrypter;
class QuicRandom;
-class QuicServerConfigProtobuf;
-class StrikeRegister;
-
-namespace test {
-class QuicCryptoServerConfigPeer;
-} // namespace test
// An intermediate format of a handshake message that's convenient for a
// CryptoFramer to serialize from or parse into.
@@ -126,90 +118,6 @@ class NET_EXPORT_PRIVATE CryptoHandshakeMessage {
mutable scoped_ptr<QuicData> serialized_;
};
-// TODO(rch): sync with server more rationally
-class NET_EXPORT_PRIVATE QuicServerConfigProtobuf {
- public:
- class NET_EXPORT_PRIVATE PrivateKey {
- public:
- CryptoTag tag() const {
- return tag_;
- }
- void set_tag(CryptoTag tag) {
- tag_ = tag;
- }
- std::string private_key() const {
- return private_key_;
- }
- void set_private_key(std::string key) {
- private_key_ = key;
- }
-
- private:
- CryptoTag tag_;
- std::string private_key_;
- };
-
- QuicServerConfigProtobuf();
- ~QuicServerConfigProtobuf();
-
- size_t key_size() const {
- return keys_.size();
- }
-
- const PrivateKey& key(size_t i) const {
- DCHECK_GT(keys_.size(), i);
- return *keys_[i];
- }
-
- std::string config() const {
- return config_;
- }
-
- void set_config(base::StringPiece config) {
- config_ = config.as_string();
- }
-
- QuicServerConfigProtobuf::PrivateKey* add_key() {
- keys_.push_back(new PrivateKey);
- return keys_.back();
- }
-
- private:
- std::vector<PrivateKey*> keys_;
- std::string config_;
-};
-
-// TODO(rtenneti): sync with server more rationally.
-class NET_EXPORT_PRIVATE SourceAddressToken {
- public:
- SourceAddressToken();
- ~SourceAddressToken();
-
- std::string SerializeAsString() const;
-
- bool ParseFromArray(unsigned char* plaintext, size_t plaintext_length);
-
- std::string ip() const {
- return ip_;
- }
-
- int64 timestamp() const {
- return timestamp_;
- }
-
- void set_ip(base::StringPiece ip) {
- ip_ = ip.as_string();
- }
-
- void set_timestamp(int64 timestamp) {
- timestamp_ = timestamp;
- }
-
- private:
- std::string ip_;
- int64 timestamp_;
-};
-
// Parameters negotiated by the crypto handshake.
struct NET_EXPORT_PRIVATE QuicCryptoNegotiatedParameters {
// Initializes the members to 0 or empty values.
@@ -229,6 +137,16 @@ struct NET_EXPORT_PRIVATE QuicCryptoNegotiatedParameters {
// QuicCryptoConfig contains common configuration between clients and servers.
class NET_EXPORT_PRIVATE QuicCryptoConfig {
public:
+ enum {
+ // CONFIG_VERSION is the one (and, for the moment, only) version number that
+ // we implement.
+ CONFIG_VERSION = 0,
+ };
+
+ // kLabel is constant that is used in key derivation to tie the resulting key
+ // to this protocol.
+ static const char kLabel[];
+
QuicCryptoConfig();
~QuicCryptoConfig();
@@ -344,128 +262,6 @@ class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig {
std::map<std::string, CachedState*> cached_states_;
};
-// QuicCryptoServerConfig contains the crypto configuration of a QUIC server.
-// Unlike a client, a QUIC server can have multiple configurations active in
-// order to support clients resuming with a previous configuration.
-// TODO(agl): when adding configurations at runtime is added, this object will
-// need to consider locking.
-class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
- public:
- // |source_address_token_secret|: secret key material used for encrypting and
- // decrypting source address tokens. It can be of any length as it is fed
- // into a KDF before use. In tests, use TESTING.
- explicit QuicCryptoServerConfig(
- base::StringPiece source_address_token_secret);
- ~QuicCryptoServerConfig();
-
- // TESTING is a magic parameter for passing to the constructor in tests.
- static const char TESTING[];
-
- // DefaultConfig generates a QuicServerConfigProtobuf protobuf suitable
- // for using in tests. |extra_tags| contains additional key/value pairs that
- // will be inserted into the config.
- static QuicServerConfigProtobuf* DefaultConfig(
- QuicRandom* rand,
- const QuicClock* clock,
- const CryptoHandshakeMessage& extra_tags);
-
- // AddConfig adds a QuicServerConfigProtobuf to the availible configurations.
- // It returns the SCFG message from the config if successful. The caller
- // takes ownership of the CryptoHandshakeMessage.
- CryptoHandshakeMessage* AddConfig(QuicServerConfigProtobuf* protobuf);
-
- // AddDefaultConfig creates a config and then calls AddConfig to
- // add it. Any tags in |extra_tags| will be copied into the config.
- CryptoHandshakeMessage* AddDefaultConfig(
- QuicRandom* rand,
- const QuicClock* clock,
- const CryptoHandshakeMessage& extra_tags);
-
- // ProcessClientHello processes |client_hello| and decides whether to accept
- // or reject the connection. If the connection is to be accepted, |out| is
- // set to the contents of the ServerHello, |out_params| is completed and
- // QUIC_NO_ERROR is returned. Otherwise |out| is set to be a REJ message and
- // an error code is returned.
- //
- // client_hello: the incoming client hello message.
- // guid: the GUID for the connection, which is used in key derivation.
- // client_ip: the IP address of the client, which is used to generate and
- // validate source-address tokens.
- // now_since_epoch: the current time, as a delta since the unix epoch,
- // which is used to validate client nonces.
- // rand: an entropy source
- // params: the state of the handshake. This may be updated with a server
- // nonce when we send a rejection. After a successful handshake, this will
- // contain the state of the connection.
- // out: the resulting handshake message (either REJ or SHLO)
- // error_details: used to store a string describing any error.
- QuicErrorCode ProcessClientHello(const CryptoHandshakeMessage& client_hello,
- QuicGuid guid,
- const IPEndPoint& client_ip,
- QuicTime::Delta now_since_epoch,
- QuicRandom* rand,
- QuicCryptoNegotiatedParameters* params,
- CryptoHandshakeMessage* out,
- std::string* error_details) const;
-
- private:
- friend class test::QuicCryptoServerConfigPeer;
-
- // Config represents a server config: a collection of preferences and
- // Diffie-Hellman public values.
- struct Config : public QuicCryptoConfig {
- Config();
- ~Config();
-
- // serialized contains the bytes of this server config, suitable for sending
- // on the wire.
- std::string serialized;
- // id contains the SCID of this server config.
- std::string id;
- // orbit contains the orbit value for this config: an opaque identifier
- // used to identify clusters of server frontends.
- unsigned char orbit[kOrbitSize];
-
- // key_exchanges contains key exchange objects with the private keys
- // already loaded. The values correspond, one-to-one, with the tags in
- // |kexs| from the parent class.
- std::vector<KeyExchange*> key_exchanges;
-
- // tag_value_map contains the raw key/value pairs for the config.
- CryptoTagValueMap tag_value_map;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(Config);
- };
-
- // NewSourceAddressToken returns a fresh source address token for the given
- // IP address.
- std::string NewSourceAddressToken(const IPEndPoint& ip,
- QuicRandom* rand,
- QuicTime::Delta now_since_epoch) const;
-
- // ValidateSourceAddressToken returns true if the source address token in
- // |token| is a valid and timely token for the IP address |ip| given that the
- // current time is |now|.
- bool ValidateSourceAddressToken(base::StringPiece token,
- const IPEndPoint& ip,
- QuicTime::Delta now_since_epoch) const;
-
- std::map<ServerConfigID, Config*> configs_;
-
- ServerConfigID active_config_;
-
- mutable base::Lock strike_register_lock_;
- // strike_register_ contains a data structure that keeps track of previously
- // observed client nonces in order to prevent replay attacks.
- mutable scoped_ptr<StrikeRegister> strike_register_;
-
- // These members are used to encrypt and decrypt the source address tokens
- // that we receive from and send to clients.
- scoped_ptr<QuicEncrypter> source_address_token_encrypter_;
- scoped_ptr<QuicDecrypter> source_address_token_decrypter_;
-};
-
} // namespace net
#endif // NET_QUIC_CRYPTO_CRYPTO_HANDSHAKE_H_

Powered by Google App Engine
This is Rietveld 408576698