| Index: net/quic/crypto/crypto_protocol.h
|
| ===================================================================
|
| --- net/quic/crypto/crypto_protocol.h (revision 184750)
|
| +++ net/quic/crypto/crypto_protocol.h (working copy)
|
| @@ -12,11 +12,14 @@
|
| #include "base/basictypes.h"
|
| #include "base/logging.h"
|
| #include "net/base/net_export.h"
|
| +#include "net/quic/quic_protocol.h"
|
| #include "net/quic/quic_time.h"
|
|
|
| namespace net {
|
|
|
| +// CryptoTag is the type of a tag in the wire protocol.
|
| typedef uint32 CryptoTag;
|
| +typedef std::string ServerConfigID;
|
| typedef std::map<CryptoTag, std::string> CryptoTagValueMap;
|
| typedef std::vector<CryptoTag> CryptoTagVector;
|
| // An intermediate format of a handshake message that's convenient for a
|
| @@ -24,6 +27,40 @@
|
| struct NET_EXPORT_PRIVATE CryptoHandshakeMessage {
|
| CryptoHandshakeMessage();
|
| ~CryptoHandshakeMessage();
|
| +
|
| + // SetValue sets an element with the given tag to the raw, memory contents of
|
| + // |v|.
|
| + template<class T> void SetValue(CryptoTag tag, const T& v) {
|
| + tag_value_map[tag] = std::string(reinterpret_cast<const char*>(&v),
|
| + sizeof(v));
|
| + }
|
| +
|
| + // SetVector sets an element with the given tag to the raw contents of an
|
| + // array of elements in |v|.
|
| + template<class T> void SetVector(CryptoTag tag, const std::vector<T>& v) {
|
| + if (v.empty()) {
|
| + tag_value_map[tag] = std::string();
|
| + } else {
|
| + tag_value_map[tag] = std::string(reinterpret_cast<const char*>(&v[0]),
|
| + v.size() * sizeof(T));
|
| + }
|
| + }
|
| +
|
| + // SetTaglist sets an element with the given tag to contain a list of tags,
|
| + // passed as varargs. The argument list must be terminated with a 0 element.
|
| + void SetTaglist(CryptoTag tag, ...);
|
| +
|
| + // GetTaglist finds an element with the given tag containing zero or more
|
| + // tags. If such a tag doesn't exist, it returns false. Otherwise it sets
|
| + // |out_tags| and |out_len| to point to the array of tags and returns true.
|
| + // The array points into the CryptoHandshakeMessage and is valid only for as
|
| + // long as the CryptoHandshakeMessage exists and is not modified.
|
| + QuicErrorCode GetTaglist(CryptoTag tag, const CryptoTag** out_tags,
|
| + size_t* out_len) const;
|
| +
|
| + bool GetString(CryptoTag tag, std::string* out) const;
|
| + QuicErrorCode GetUint32(CryptoTag tag, uint32* out) const;
|
| +
|
| CryptoTag tag;
|
| CryptoTagValueMap tag_value_map;
|
| };
|
| @@ -38,6 +75,7 @@
|
|
|
| const CryptoTag kCHLO = MAKE_TAG('C', 'H', 'L', 'O'); // Client hello
|
| const CryptoTag kSHLO = MAKE_TAG('S', 'H', 'L', 'O'); // Server hello
|
| +const CryptoTag kSCFG = MAKE_TAG('S', 'H', 'L', 'O'); // Server config
|
|
|
| // Key exchange methods
|
| const CryptoTag kP256 = MAKE_TAG('P', '2', '5', '6'); // ECDH, Curve P-256
|
| @@ -67,52 +105,12 @@
|
| const CryptoTag kSNI = MAKE_TAG('S', 'N', 'I', '\0'); // Server name
|
| // indication
|
| const CryptoTag kPUBS = MAKE_TAG('P', 'U', 'B', 'S'); // Public key values
|
| +const CryptoTag kSCID = MAKE_TAG('S', 'C', 'I', 'D'); // Server config id
|
|
|
| const size_t kMaxEntries = 16; // Max number of entries in a message.
|
|
|
| const size_t kNonceSize = 32; // Size in bytes of the connection nonce.
|
|
|
| -// Crypto configuration settings.
|
| -struct NET_EXPORT_PRIVATE QuicCryptoConfig {
|
| - // Initializes the members to 0 or empty values.
|
| - QuicCryptoConfig();
|
| - ~QuicCryptoConfig();
|
| -
|
| - // Sets the members to client-side or server-side default values.
|
| - void SetClientDefaults();
|
| - void SetServerDefaults();
|
| -
|
| - // Protocol version
|
| - uint16 version;
|
| - // Key exchange methods
|
| - CryptoTagVector key_exchange;
|
| - // Authenticated encryption with associated data (AEAD) algorithms
|
| - CryptoTagVector aead;
|
| - // Congestion control feedback types
|
| - CryptoTagVector congestion_control;
|
| - // Idle connection state lifetime
|
| - QuicTime::Delta idle_connection_state_lifetime;
|
| - // Keepalive timeout, or 0 to turn off keepalive probes
|
| - QuicTime::Delta keepalive_timeout;
|
| -};
|
| -
|
| -// Parameters negotiated by the crypto handshake.
|
| -struct NET_EXPORT_PRIVATE QuicCryptoNegotiatedParams {
|
| - // Initializes the members to 0 or empty values.
|
| - QuicCryptoNegotiatedParams();
|
| - ~QuicCryptoNegotiatedParams();
|
| -
|
| - // Sets the members to the values that would be negotiated from the default
|
| - // client-side and server-side configuration settings.
|
| - void SetDefaults();
|
| -
|
| - uint16 version;
|
| - CryptoTag key_exchange;
|
| - CryptoTag aead;
|
| - CryptoTag congestion_control;
|
| - QuicTime::Delta idle_connection_state_lifetime;
|
| -};
|
| -
|
| } // namespace net
|
|
|
| #endif // NET_QUIC_CRYPTO_CRYPTO_PROTOCOL_H_
|
|
|