| Index: net/quic/quic_protocol.h
|
| diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h
|
| index e2e6ee0109906b9d75ddbe429a28f7a721870a5c..9f2936481a2563a68291422faf324b8ed7c20aa7 100644
|
| --- a/net/quic/quic_protocol.h
|
| +++ b/net/quic/quic_protocol.h
|
| @@ -122,6 +122,8 @@ const size_t kFecGroupSize = 1;
|
| const bool kIncludeVersion = true;
|
| // Signifies that the QuicPacket will contain path id.
|
| const bool kIncludePathId = true;
|
| +// Signifies that the QuicPacket will include a diversification nonce.
|
| +const bool kIncludeDiversificationNonce = true;
|
|
|
| // Stream ID is reserved to denote an invalid ID.
|
| const QuicStreamId kInvalidStreamId = 0;
|
| @@ -209,6 +211,11 @@ const QuicPathId kDefaultPathId = 0;
|
| // Invalid path ID.
|
| const QuicPathId kInvalidPathId = 0xff;
|
|
|
| +// kDiversificationNonceSize is the size, in bytes, of the nonce that a server
|
| +// may set in the packet header to ensure that its INITIAL keys are not
|
| +// duplicated.
|
| +const size_t kDiversificationNonceSize = 32;
|
| +
|
| enum TransmissionType : int8_t {
|
| NOT_RETRANSMISSION,
|
| FIRST_TRANSMISSION_TYPE = NOT_RETRANSMISSION,
|
| @@ -265,8 +272,6 @@ enum QuicFrameType {
|
|
|
| enum QuicConnectionIdLength {
|
| PACKET_0BYTE_CONNECTION_ID = 0,
|
| - PACKET_1BYTE_CONNECTION_ID = 1,
|
| - PACKET_4BYTE_CONNECTION_ID = 4,
|
| PACKET_8BYTE_CONNECTION_ID = 8
|
| };
|
|
|
| @@ -300,15 +305,16 @@ enum QuicPacketPublicFlags {
|
| // Bit 1: Is this packet a public reset packet?
|
| PACKET_PUBLIC_FLAGS_RST = 1 << 1,
|
|
|
| - // Bits 2 and 3 specify the length of the ConnectionId as follows:
|
| - // ----00--: 0 bytes
|
| - // ----01--: 1 byte
|
| - // ----10--: 4 bytes
|
| - // ----11--: 8 bytes
|
| + // Bit 2: indicates the that public header includes a nonce.
|
| + PACKET_PUBLIC_FLAGS_NONCE = 1 << 2,
|
| +
|
| + // Bit 3: indicates whether a ConnectionID is included.
|
| PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID = 0,
|
| - PACKET_PUBLIC_FLAGS_1BYTE_CONNECTION_ID = 1 << 2,
|
| - PACKET_PUBLIC_FLAGS_4BYTE_CONNECTION_ID = 1 << 3,
|
| - PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID = 1 << 3 | 1 << 2,
|
| + PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID = 1 << 3,
|
| +
|
| + // QUIC_VERSION_32 and earlier use two bits for an 8 byte
|
| + // connection id.
|
| + PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID_OLD = 1 << 3 | 1 << 2,
|
|
|
| // Bits 4 and 5 describe the packet number length as follows:
|
| // --00----: 1 byte
|
| @@ -323,6 +329,11 @@ enum QuicPacketPublicFlags {
|
| // Bit 6: Does the packet header contain a path id?
|
| PACKET_PUBLIC_FLAGS_MULTIPATH = 1 << 6,
|
|
|
| + // Reserved, unimplemented flags:
|
| +
|
| + // Bit 7: indicates the presence of a second flags byte.
|
| + PACKET_PUBLIC_FLAGS_TWO_OR_MORE_BYTES = 1 << 7,
|
| +
|
| // All bits set (bit 7 is not currently used): 01111111
|
| PACKET_PUBLIC_FLAGS_MAX = (1 << 7) - 1,
|
| };
|
| @@ -366,6 +377,7 @@ enum QuicVersion {
|
| QUIC_VERSION_30 = 30, // Add server side support of cert transparency.
|
| QUIC_VERSION_31 = 31, // Adds a hash of the client hello to crypto proof.
|
| QUIC_VERSION_32 = 32, // FEC related fields are removed from wire format.
|
| + QUIC_VERSION_33 = 33, // Adds diversification nonces.
|
| };
|
|
|
| // This vector contains QUIC versions which we currently support.
|
| @@ -376,8 +388,9 @@ enum QuicVersion {
|
| // IMPORTANT: if you are adding to this list, follow the instructions at
|
| // http://sites/quic/adding-and-removing-versions
|
| static const QuicVersion kSupportedQuicVersions[] = {
|
| - QUIC_VERSION_32, QUIC_VERSION_31, QUIC_VERSION_30, QUIC_VERSION_29,
|
| - QUIC_VERSION_28, QUIC_VERSION_27, QUIC_VERSION_26, QUIC_VERSION_25};
|
| + QUIC_VERSION_33, QUIC_VERSION_32, QUIC_VERSION_31,
|
| + QUIC_VERSION_30, QUIC_VERSION_29, QUIC_VERSION_28,
|
| + QUIC_VERSION_27, QUIC_VERSION_26, QUIC_VERSION_25};
|
|
|
| typedef std::vector<QuicVersion> QuicVersionVector;
|
|
|
| @@ -425,6 +438,7 @@ NET_EXPORT_PRIVATE size_t
|
| GetPacketHeaderSize(QuicConnectionIdLength connection_id_length,
|
| bool include_version,
|
| bool include_path_id,
|
| + bool include_diversification_nonce,
|
| QuicPacketNumberLength packet_number_length);
|
|
|
| // Index of the first byte in a QUIC packet of encrypted data.
|
| @@ -435,6 +449,7 @@ NET_EXPORT_PRIVATE size_t
|
| GetStartOfEncryptedData(QuicConnectionIdLength connection_id_length,
|
| bool include_version,
|
| bool include_path_id,
|
| + bool include_diversification_nonce,
|
| QuicPacketNumberLength packet_number_length);
|
|
|
| enum QuicRstStreamErrorCode {
|
| @@ -681,6 +696,8 @@ enum QuicErrorCode {
|
| const int kDeprecatedQuicErrorCount = 4;
|
| const int kActiveQuicErrorCount = QUIC_LAST_ERROR - kDeprecatedQuicErrorCount;
|
|
|
| +typedef char DiversificationNonce[32];
|
| +
|
| struct NET_EXPORT_PRIVATE QuicPacketPublicHeader {
|
| QuicPacketPublicHeader();
|
| explicit QuicPacketPublicHeader(const QuicPacketPublicHeader& other);
|
| @@ -695,6 +712,9 @@ struct NET_EXPORT_PRIVATE QuicPacketPublicHeader {
|
| bool version_flag;
|
| QuicPacketNumberLength packet_number_length;
|
| QuicVersionVector versions;
|
| + // nonce contains an optional, 32-byte nonce value. If not included in the
|
| + // packet, |nonce| will be empty.
|
| + DiversificationNonce* nonce;
|
| };
|
|
|
| // An integer which cannot be a packet number.
|
| @@ -1220,6 +1240,7 @@ class NET_EXPORT_PRIVATE QuicPacket : public QuicData {
|
| QuicConnectionIdLength connection_id_length,
|
| bool includes_version,
|
| bool includes_path_id,
|
| + bool includes_diversification_nonce,
|
| QuicPacketNumberLength packet_number_length);
|
|
|
| base::StringPiece AssociatedData() const;
|
| @@ -1232,6 +1253,7 @@ class NET_EXPORT_PRIVATE QuicPacket : public QuicData {
|
| const QuicConnectionIdLength connection_id_length_;
|
| const bool includes_version_;
|
| const bool includes_path_id_;
|
| + const bool includes_diversification_nonce_;
|
| const QuicPacketNumberLength packet_number_length_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(QuicPacket);
|
|
|