| Index: net/quic/test_tools/crypto_test_utils.cc
|
| diff --git a/net/quic/test_tools/crypto_test_utils.cc b/net/quic/test_tools/crypto_test_utils.cc
|
| index f210e26b82116263d49f36ee75c4bfe0589ffccf..5b22e1ed9ebaf9a266b880e0099f8df6a96955a9 100644
|
| --- a/net/quic/test_tools/crypto_test_utils.cc
|
| +++ b/net/quic/test_tools/crypto_test_utils.cc
|
| @@ -27,6 +27,7 @@
|
| #include "net/quic/platform/api/quic_text_utils.h"
|
| #include "net/quic/test_tools/quic_connection_peer.h"
|
| #include "net/quic/test_tools/quic_framer_peer.h"
|
| +#include "net/quic/test_tools/quic_stream_peer.h"
|
| #include "net/quic/test_tools/quic_test_utils.h"
|
| #include "net/quic/test_tools/simple_quic_framer.h"
|
| #include "third_party/boringssl/src/include/openssl/bn.h"
|
| @@ -41,6 +42,7 @@ using std::string;
|
|
|
| namespace net {
|
| namespace test {
|
| +namespace crypto_test_utils {
|
|
|
| namespace {
|
|
|
| @@ -86,8 +88,7 @@ bool HexChar(char c, uint8_t* value) {
|
|
|
| // A ChannelIDSource that works in asynchronous mode unless the |callback|
|
| // argument to GetChannelIDKey is nullptr.
|
| -class AsyncTestChannelIDSource : public ChannelIDSource,
|
| - public CryptoTestUtils::CallbackSource {
|
| +class AsyncTestChannelIDSource : public ChannelIDSource, public CallbackSource {
|
| public:
|
| // Takes ownership of |sync_source|, a synchronous ChannelIDSource.
|
| explicit AsyncTestChannelIDSource(ChannelIDSource* sync_source)
|
| @@ -260,14 +261,14 @@ class TestChannelIDSource : public ChannelIDSource {
|
|
|
| } // anonymous namespace
|
|
|
| -CryptoTestUtils::FakeServerOptions::FakeServerOptions() {}
|
| +FakeServerOptions::FakeServerOptions() {}
|
|
|
| -CryptoTestUtils::FakeServerOptions::~FakeServerOptions() {}
|
| +FakeServerOptions::~FakeServerOptions() {}
|
|
|
| -CryptoTestUtils::FakeClientOptions::FakeClientOptions()
|
| +FakeClientOptions::FakeClientOptions()
|
| : channel_id_enabled(false), channel_id_source_async(false) {}
|
|
|
| -CryptoTestUtils::FakeClientOptions::~FakeClientOptions() {}
|
| +FakeClientOptions::~FakeClientOptions() {}
|
|
|
| namespace {
|
| // This class is used by GenerateFullCHLO() to extract SCID and STK from
|
| @@ -368,7 +369,7 @@ class FullChloGenerator {
|
| *out_ = result_->client_hello;
|
| out_->SetStringPiece(kSCID, scid);
|
| out_->SetStringPiece(kSourceAddressTokenTag, srct);
|
| - uint64_t xlct = CryptoTestUtils::LeafCertHashForTesting();
|
| + uint64_t xlct = LeafCertHashForTesting();
|
| out_->SetValue(kXLCT, xlct);
|
| }
|
|
|
| @@ -388,14 +389,12 @@ class FullChloGenerator {
|
|
|
| } // namespace
|
|
|
| -// static
|
| -int CryptoTestUtils::HandshakeWithFakeServer(
|
| - QuicConfig* server_quic_config,
|
| - MockQuicConnectionHelper* helper,
|
| - MockAlarmFactory* alarm_factory,
|
| - PacketSavingConnection* client_conn,
|
| - QuicCryptoClientStream* client,
|
| - const FakeServerOptions& options) {
|
| +int HandshakeWithFakeServer(QuicConfig* server_quic_config,
|
| + MockQuicConnectionHelper* helper,
|
| + MockAlarmFactory* alarm_factory,
|
| + PacketSavingConnection* client_conn,
|
| + QuicCryptoClientStream* client,
|
| + const FakeServerOptions& options) {
|
| PacketSavingConnection* server_conn =
|
| new PacketSavingConnection(helper, alarm_factory, Perspective::IS_SERVER,
|
| client_conn->supported_versions());
|
| @@ -423,14 +422,12 @@ int CryptoTestUtils::HandshakeWithFakeServer(
|
| return client->num_sent_client_hellos();
|
| }
|
|
|
| -// static
|
| -int CryptoTestUtils::HandshakeWithFakeClient(
|
| - MockQuicConnectionHelper* helper,
|
| - MockAlarmFactory* alarm_factory,
|
| - PacketSavingConnection* server_conn,
|
| - QuicCryptoServerStream* server,
|
| - const QuicServerId& server_id,
|
| - const FakeClientOptions& options) {
|
| +int HandshakeWithFakeClient(MockQuicConnectionHelper* helper,
|
| + MockAlarmFactory* alarm_factory,
|
| + PacketSavingConnection* server_conn,
|
| + QuicCryptoServerStream* server,
|
| + const QuicServerId& server_id,
|
| + const FakeClientOptions& options) {
|
| PacketSavingConnection* client_conn =
|
| new PacketSavingConnection(helper, alarm_factory, Perspective::IS_CLIENT);
|
| // Advance the time, because timers do not like uninitialized times.
|
| @@ -481,12 +478,10 @@ int CryptoTestUtils::HandshakeWithFakeClient(
|
| return client_session.GetCryptoStream()->num_sent_client_hellos();
|
| }
|
|
|
| -// static
|
| -void CryptoTestUtils::SetupCryptoServerConfigForTest(
|
| - const QuicClock* clock,
|
| - QuicRandom* rand,
|
| - QuicCryptoServerConfig* crypto_config,
|
| - const FakeServerOptions& fake_options) {
|
| +void SetupCryptoServerConfigForTest(const QuicClock* clock,
|
| + QuicRandom* rand,
|
| + QuicCryptoServerConfig* crypto_config,
|
| + const FakeServerOptions& fake_options) {
|
| QuicCryptoServerConfig::ConfigOptions options;
|
| options.channel_id_enabled = true;
|
| options.token_binding_params = fake_options.token_binding_params;
|
| @@ -494,18 +489,15 @@ void CryptoTestUtils::SetupCryptoServerConfigForTest(
|
| crypto_config->AddDefaultConfig(rand, clock, options));
|
| }
|
|
|
| -// static
|
| -void CryptoTestUtils::CommunicateHandshakeMessages(
|
| - PacketSavingConnection* client_conn,
|
| - QuicCryptoStream* client,
|
| - PacketSavingConnection* server_conn,
|
| - QuicCryptoStream* server) {
|
| +void CommunicateHandshakeMessages(PacketSavingConnection* client_conn,
|
| + QuicCryptoStream* client,
|
| + PacketSavingConnection* server_conn,
|
| + QuicCryptoStream* server) {
|
| CommunicateHandshakeMessagesAndRunCallbacks(client_conn, client, server_conn,
|
| server, nullptr);
|
| }
|
|
|
| -// static
|
| -void CryptoTestUtils::CommunicateHandshakeMessagesAndRunCallbacks(
|
| +void CommunicateHandshakeMessagesAndRunCallbacks(
|
| PacketSavingConnection* client_conn,
|
| QuicCryptoStream* client,
|
| PacketSavingConnection* server_conn,
|
| @@ -535,14 +527,12 @@ void CryptoTestUtils::CommunicateHandshakeMessagesAndRunCallbacks(
|
| }
|
| }
|
|
|
| -// static
|
| -std::pair<size_t, size_t> CryptoTestUtils::AdvanceHandshake(
|
| - PacketSavingConnection* client_conn,
|
| - QuicCryptoStream* client,
|
| - size_t client_i,
|
| - PacketSavingConnection* server_conn,
|
| - QuicCryptoStream* server,
|
| - size_t server_i) {
|
| +std::pair<size_t, size_t> AdvanceHandshake(PacketSavingConnection* client_conn,
|
| + QuicCryptoStream* client,
|
| + size_t client_i,
|
| + PacketSavingConnection* server_conn,
|
| + QuicCryptoStream* server,
|
| + size_t server_i) {
|
| QUIC_LOG(INFO) << "Processing "
|
| << client_conn->encrypted_packets_.size() - client_i
|
| << " packets client->server";
|
| @@ -561,9 +551,7 @@ std::pair<size_t, size_t> CryptoTestUtils::AdvanceHandshake(
|
| return std::make_pair(client_i, server_i);
|
| }
|
|
|
| -// static
|
| -string CryptoTestUtils::GetValueForTag(const CryptoHandshakeMessage& message,
|
| - QuicTag tag) {
|
| +string GetValueForTag(const CryptoHandshakeMessage& message, QuicTag tag) {
|
| QuicTagValueMap::const_iterator it = message.tag_value_map().find(tag);
|
| if (it == message.tag_value_map().end()) {
|
| return string();
|
| @@ -571,12 +559,11 @@ string CryptoTestUtils::GetValueForTag(const CryptoHandshakeMessage& message,
|
| return it->second;
|
| }
|
|
|
| -uint64_t CryptoTestUtils::LeafCertHashForTesting() {
|
| +uint64_t LeafCertHashForTesting() {
|
| QuicReferenceCountedPointer<ProofSource::Chain> chain;
|
| QuicSocketAddress server_address;
|
| QuicCryptoProof proof;
|
| - std::unique_ptr<ProofSource> proof_source(
|
| - CryptoTestUtils::ProofSourceForTesting());
|
| + std::unique_ptr<ProofSource> proof_source(ProofSourceForTesting());
|
| if (!proof_source->GetProof(server_address, "", "",
|
| AllSupportedVersions().front(), "",
|
| QuicTagVector(), &chain, &proof) ||
|
| @@ -641,15 +628,13 @@ class MockCommonCertSets : public CommonCertSets {
|
| const uint32_t index_;
|
| };
|
|
|
| -CommonCertSets* CryptoTestUtils::MockCommonCertSets(StringPiece cert,
|
| - uint64_t hash,
|
| - uint32_t index) {
|
| +CommonCertSets* MockCommonCertSets(StringPiece cert,
|
| + uint64_t hash,
|
| + uint32_t index) {
|
| return new class MockCommonCertSets(cert, hash, index);
|
| }
|
|
|
| -// static
|
| -void CryptoTestUtils::FillInDummyReject(CryptoHandshakeMessage* rej,
|
| - bool reject_is_stateless) {
|
| +void FillInDummyReject(CryptoHandshakeMessage* rej, bool reject_is_stateless) {
|
| if (reject_is_stateless) {
|
| rej->set_tag(kSREJ);
|
| } else {
|
| @@ -683,29 +668,28 @@ void CryptoTestUtils::FillInDummyReject(CryptoHandshakeMessage* rej,
|
| rej->SetVector(kRREJ, reject_reasons);
|
| }
|
|
|
| -void CryptoTestUtils::CompareClientAndServerKeys(
|
| - QuicCryptoClientStream* client,
|
| - QuicCryptoServerStream* server) {
|
| - QuicFramer* client_framer =
|
| - QuicConnectionPeer::GetFramer(client->session()->connection());
|
| - QuicFramer* server_framer =
|
| - QuicConnectionPeer::GetFramer(server->session()->connection());
|
| +void CompareClientAndServerKeys(QuicCryptoClientStream* client,
|
| + QuicCryptoServerStream* server) {
|
| + QuicFramer* client_framer = QuicConnectionPeer::GetFramer(
|
| + QuicStreamPeer::session(client)->connection());
|
| + QuicFramer* server_framer = QuicConnectionPeer::GetFramer(
|
| + QuicStreamPeer::session(server)->connection());
|
| const QuicEncrypter* client_encrypter(
|
| QuicFramerPeer::GetEncrypter(client_framer, ENCRYPTION_INITIAL));
|
| const QuicDecrypter* client_decrypter(
|
| - client->session()->connection()->decrypter());
|
| + QuicStreamPeer::session(client)->connection()->decrypter());
|
| const QuicEncrypter* client_forward_secure_encrypter(
|
| QuicFramerPeer::GetEncrypter(client_framer, ENCRYPTION_FORWARD_SECURE));
|
| const QuicDecrypter* client_forward_secure_decrypter(
|
| - client->session()->connection()->alternative_decrypter());
|
| + QuicStreamPeer::session(client)->connection()->alternative_decrypter());
|
| const QuicEncrypter* server_encrypter(
|
| QuicFramerPeer::GetEncrypter(server_framer, ENCRYPTION_INITIAL));
|
| const QuicDecrypter* server_decrypter(
|
| - server->session()->connection()->decrypter());
|
| + QuicStreamPeer::session(server)->connection()->decrypter());
|
| const QuicEncrypter* server_forward_secure_encrypter(
|
| QuicFramerPeer::GetEncrypter(server_framer, ENCRYPTION_FORWARD_SECURE));
|
| const QuicDecrypter* server_forward_secure_decrypter(
|
| - server->session()->connection()->alternative_decrypter());
|
| + QuicStreamPeer::session(server)->connection()->alternative_decrypter());
|
|
|
| StringPiece client_encrypter_key = client_encrypter->GetKey();
|
| StringPiece client_encrypter_iv = client_encrypter->GetNoncePrefix();
|
| @@ -803,8 +787,7 @@ void CryptoTestUtils::CompareClientAndServerKeys(
|
| server_tb_ekm.data(), server_tb_ekm.length());
|
| }
|
|
|
| -// static
|
| -QuicTag CryptoTestUtils::ParseTag(const char* tagstr) {
|
| +QuicTag ParseTag(const char* tagstr) {
|
| const size_t len = strlen(tagstr);
|
| CHECK_NE(0u, len);
|
|
|
| @@ -836,8 +819,7 @@ QuicTag CryptoTestUtils::ParseTag(const char* tagstr) {
|
| return tag;
|
| }
|
|
|
| -// static
|
| -CryptoHandshakeMessage CryptoTestUtils::Message(const char* message_tag, ...) {
|
| +CryptoHandshakeMessage Message(const char* message_tag, ...) {
|
| va_list ap;
|
| va_start(ap, message_tag);
|
|
|
| @@ -901,17 +883,15 @@ CryptoHandshakeMessage CryptoTestUtils::Message(const char* message_tag, ...) {
|
| return *parsed;
|
| }
|
|
|
| -// static
|
| -ChannelIDSource* CryptoTestUtils::ChannelIDSourceForTesting() {
|
| +ChannelIDSource* ChannelIDSourceForTesting() {
|
| return new TestChannelIDSource();
|
| }
|
|
|
| -// static
|
| -void CryptoTestUtils::MovePackets(PacketSavingConnection* source_conn,
|
| - size_t* inout_packet_index,
|
| - QuicCryptoStream* dest_stream,
|
| - PacketSavingConnection* dest_conn,
|
| - Perspective dest_perspective) {
|
| +void MovePackets(PacketSavingConnection* source_conn,
|
| + size_t* inout_packet_index,
|
| + QuicCryptoStream* dest_stream,
|
| + PacketSavingConnection* dest_conn,
|
| + Perspective dest_perspective) {
|
| SimpleQuicFramer framer(source_conn->supported_versions(), dest_perspective);
|
| CryptoFramer crypto_framer;
|
| CryptoFramerVisitor crypto_visitor;
|
| @@ -953,18 +933,18 @@ void CryptoTestUtils::MovePackets(PacketSavingConnection* source_conn,
|
| QuicConnectionPeer::SetCurrentPacket(dest_conn, StringPiece(nullptr, 0));
|
| }
|
|
|
| -CryptoHandshakeMessage CryptoTestUtils::GenerateDefaultInchoateCHLO(
|
| +CryptoHandshakeMessage GenerateDefaultInchoateCHLO(
|
| const QuicClock* clock,
|
| QuicVersion version,
|
| QuicCryptoServerConfig* crypto_config) {
|
| // clang-format off
|
| - return CryptoTestUtils::Message(
|
| + return Message(
|
| "CHLO",
|
| "PDMD", "X509",
|
| "AEAD", "AESG",
|
| "KEXS", "C255",
|
| - "PUBS", CryptoTestUtils::GenerateClientPublicValuesHex().c_str(),
|
| - "NONC", CryptoTestUtils::GenerateClientNonceHex(clock,
|
| + "PUBS", GenerateClientPublicValuesHex().c_str(),
|
| + "NONC", GenerateClientNonceHex(clock,
|
| crypto_config).c_str(),
|
| "VER\0", QuicTagToString(
|
| QuicVersionToQuicTag(version)).c_str(),
|
| @@ -973,9 +953,8 @@ CryptoHandshakeMessage CryptoTestUtils::GenerateDefaultInchoateCHLO(
|
| // clang-format on
|
| }
|
|
|
| -string CryptoTestUtils::GenerateClientNonceHex(
|
| - const QuicClock* clock,
|
| - QuicCryptoServerConfig* crypto_config) {
|
| +string GenerateClientNonceHex(const QuicClock* clock,
|
| + QuicCryptoServerConfig* crypto_config) {
|
| net::QuicCryptoServerConfig::ConfigOptions old_config_options;
|
| net::QuicCryptoServerConfig::ConfigOptions new_config_options;
|
| old_config_options.id = "old-config-id";
|
| @@ -998,23 +977,21 @@ string CryptoTestUtils::GenerateClientNonceHex(
|
| return ("#" + QuicTextUtils::HexEncode(nonce));
|
| }
|
|
|
| -string CryptoTestUtils::GenerateClientPublicValuesHex() {
|
| +string GenerateClientPublicValuesHex() {
|
| char public_value[32];
|
| memset(public_value, 42, sizeof(public_value));
|
| return ("#" + QuicTextUtils::HexEncode(public_value, sizeof(public_value)));
|
| }
|
|
|
| -// static
|
| -void CryptoTestUtils::GenerateFullCHLO(
|
| - const CryptoHandshakeMessage& inchoate_chlo,
|
| - QuicCryptoServerConfig* crypto_config,
|
| - QuicSocketAddress server_addr,
|
| - QuicSocketAddress client_addr,
|
| - QuicVersion version,
|
| - const QuicClock* clock,
|
| - QuicReferenceCountedPointer<QuicSignedServerConfig> proof,
|
| - QuicCompressedCertsCache* compressed_certs_cache,
|
| - CryptoHandshakeMessage* out) {
|
| +void GenerateFullCHLO(const CryptoHandshakeMessage& inchoate_chlo,
|
| + QuicCryptoServerConfig* crypto_config,
|
| + QuicSocketAddress server_addr,
|
| + QuicSocketAddress client_addr,
|
| + QuicVersion version,
|
| + const QuicClock* clock,
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> proof,
|
| + QuicCompressedCertsCache* compressed_certs_cache,
|
| + CryptoHandshakeMessage* out) {
|
| // Pass a inchoate CHLO.
|
| FullChloGenerator generator(crypto_config, server_addr, client_addr, clock,
|
| proof, compressed_certs_cache, out);
|
| @@ -1023,5 +1000,6 @@ void CryptoTestUtils::GenerateFullCHLO(
|
| generator.GetValidateClientHelloCallback());
|
| }
|
|
|
| +} // namespace crypto_test_utils
|
| } // namespace test
|
| } // namespace net
|
|
|