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

Unified Diff: net/quic/quic_protocol.cc

Issue 1904213002: QUIC: support diversified keys with version 33. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@hkdf
Patch Set: Rebase Created 4 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
« no previous file with comments | « net/quic/quic_protocol.h ('k') | net/quic/reliable_quic_stream_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_protocol.cc
diff --git a/net/quic/quic_protocol.cc b/net/quic/quic_protocol.cc
index 2da013e829ea4d9e1462509b0bedea73b8e487fc..fc1e837725602a1886687f9ce9b7d78d8ada62c6 100644
--- a/net/quic/quic_protocol.cc
+++ b/net/quic/quic_protocol.cc
@@ -5,6 +5,7 @@
#include "net/quic/quic_protocol.h"
#include "base/stl_util.h"
+#include "base/strings/string_number_conversions.h"
#include "net/quic/quic_flags.h"
#include "net/quic/quic_utils.h"
@@ -22,16 +23,19 @@ size_t GetPacketHeaderSize(const QuicPacketHeader& header) {
return GetPacketHeaderSize(header.public_header.connection_id_length,
header.public_header.version_flag,
header.public_header.multipath_flag,
+ header.public_header.nonce != nullptr,
header.public_header.packet_number_length);
}
size_t GetPacketHeaderSize(QuicConnectionIdLength connection_id_length,
bool include_version,
bool include_path_id,
+ bool include_diversification_nonce,
QuicPacketNumberLength packet_number_length) {
return kPublicFlagsSize + connection_id_length +
(include_version ? kQuicVersionSize : 0) +
(include_path_id ? kQuicPathIdSize : 0) + packet_number_length +
+ (include_diversification_nonce ? kDiversificationNonceSize : 0) +
kPrivateFlagsSize;
}
@@ -42,10 +46,12 @@ size_t GetStartOfEncryptedData(const QuicPacketHeader& header) {
size_t GetStartOfEncryptedData(QuicConnectionIdLength connection_id_length,
bool include_version,
bool include_path_id,
+ bool include_diversification_nonce,
QuicPacketNumberLength packet_number_length) {
// Encryption starts before private flags.
return GetPacketHeaderSize(connection_id_length, include_version,
- include_path_id, packet_number_length) -
+ include_path_id, include_diversification_nonce,
+ packet_number_length) -
kPrivateFlagsSize;
}
@@ -55,17 +61,11 @@ QuicPacketPublicHeader::QuicPacketPublicHeader()
multipath_flag(false),
reset_flag(false),
version_flag(false),
- packet_number_length(PACKET_6BYTE_PACKET_NUMBER) {}
+ packet_number_length(PACKET_6BYTE_PACKET_NUMBER),
+ nonce(nullptr) {}
QuicPacketPublicHeader::QuicPacketPublicHeader(
- const QuicPacketPublicHeader& other)
- : connection_id(other.connection_id),
- connection_id_length(other.connection_id_length),
- multipath_flag(other.multipath_flag),
- reset_flag(other.reset_flag),
- version_flag(other.version_flag),
- packet_number_length(other.packet_number_length),
- versions(other.versions) {}
+ const QuicPacketPublicHeader& other) = default;
QuicPacketPublicHeader::~QuicPacketPublicHeader() {}
@@ -196,6 +196,8 @@ QuicTag QuicVersionToQuicTag(const QuicVersion version) {
return MakeQuicTag('Q', '0', '3', '1');
case QUIC_VERSION_32:
return MakeQuicTag('Q', '0', '3', '2');
+ case QUIC_VERSION_33:
+ return MakeQuicTag('Q', '0', '3', '3');
default:
// This shold be an ERROR because we should never attempt to convert an
// invalid QuicVersion to be written to the wire.
@@ -230,6 +232,7 @@ string QuicVersionToString(const QuicVersion version) {
RETURN_STRING_LITERAL(QUIC_VERSION_30);
RETURN_STRING_LITERAL(QUIC_VERSION_31);
RETURN_STRING_LITERAL(QUIC_VERSION_32);
+ RETURN_STRING_LITERAL(QUIC_VERSION_33);
default:
return "QUIC_VERSION_UNSUPPORTED";
}
@@ -268,6 +271,11 @@ ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
os << header.public_header.versions[i] << " ";
}
}
+ os << ", diversification_nonce: "
+ << (header.public_header.nonce == nullptr
+ ? "none"
+ : "0x" + base::HexEncode(*header.public_header.nonce,
+ kDiversificationNonceSize));
os << ", fec_flag: " << header.fec_flag
<< ", entropy_flag: " << header.entropy_flag
<< ", entropy hash: " << static_cast<int>(header.entropy_hash)
@@ -682,12 +690,14 @@ QuicPacket::QuicPacket(char* buffer,
QuicConnectionIdLength connection_id_length,
bool includes_version,
bool includes_path_id,
+ bool includes_diversification_nonce,
QuicPacketNumberLength packet_number_length)
: QuicData(buffer, length, owns_buffer),
buffer_(buffer),
connection_id_length_(connection_id_length),
includes_version_(includes_version),
includes_path_id_(includes_path_id),
+ includes_diversification_nonce_(includes_diversification_nonce),
packet_number_length_(packet_number_length) {}
QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, size_t length)
@@ -733,15 +743,16 @@ ostream& operator<<(ostream& os, const QuicReceivedPacket& s) {
}
StringPiece QuicPacket::AssociatedData() const {
- return StringPiece(data(), GetStartOfEncryptedData(
- connection_id_length_, includes_version_,
- includes_path_id_, packet_number_length_));
+ return StringPiece(
+ data(), GetStartOfEncryptedData(
+ connection_id_length_, includes_version_, includes_path_id_,
+ includes_diversification_nonce_, packet_number_length_));
}
StringPiece QuicPacket::Plaintext() const {
- const size_t start_of_encrypted_data =
- GetStartOfEncryptedData(connection_id_length_, includes_version_,
- includes_path_id_, packet_number_length_);
+ const size_t start_of_encrypted_data = GetStartOfEncryptedData(
+ connection_id_length_, includes_version_, includes_path_id_,
+ includes_diversification_nonce_, packet_number_length_);
return StringPiece(data() + start_of_encrypted_data,
length() - start_of_encrypted_data);
}
« no previous file with comments | « net/quic/quic_protocol.h ('k') | net/quic/reliable_quic_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698