| 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 6d8dae9bef4124dcb394607b0787d6ae0f47dce2..cb9ce7ce39bc7e87f3052d4d9e9c11079f22489c 100644
|
| --- a/net/quic/test_tools/crypto_test_utils.cc
|
| +++ b/net/quic/test_tools/crypto_test_utils.cc
|
| @@ -58,51 +58,6 @@ class CryptoFramerVisitor : public CryptoFramerVisitorInterface {
|
| vector<CryptoHandshakeMessage> messages_;
|
| };
|
|
|
| -// MovePackets parses crypto handshake messages from packet number
|
| -// |*inout_packet_index| through to the last packet (or until a packet fails to
|
| -// decrypt) and has |dest_stream| process them. |*inout_packet_index| is updated
|
| -// with an index one greater than the last packet processed.
|
| -void MovePackets(PacketSavingConnection* source_conn,
|
| - size_t *inout_packet_index,
|
| - QuicCryptoStream* dest_stream,
|
| - PacketSavingConnection* dest_conn) {
|
| - SimpleQuicFramer framer(source_conn->supported_versions());
|
| - CryptoFramer crypto_framer;
|
| - CryptoFramerVisitor crypto_visitor;
|
| -
|
| - // In order to properly test the code we need to perform encryption and
|
| - // decryption so that the crypters latch when expected. The crypters are in
|
| - // |dest_conn|, but we don't want to try and use them there. Instead we swap
|
| - // them into |framer|, perform the decryption with them, and then swap them
|
| - // back.
|
| - QuicConnectionPeer::SwapCrypters(dest_conn, framer.framer());
|
| -
|
| - crypto_framer.set_visitor(&crypto_visitor);
|
| -
|
| - size_t index = *inout_packet_index;
|
| - for (; index < source_conn->encrypted_packets_.size(); index++) {
|
| - if (!framer.ProcessPacket(*source_conn->encrypted_packets_[index])) {
|
| - // The framer will be unable to decrypt forward-secure packets sent after
|
| - // the handshake is complete. Don't treat them as handshake packets.
|
| - break;
|
| - }
|
| -
|
| - for (const QuicStreamFrame& stream_frame : framer.stream_frames()) {
|
| - ASSERT_TRUE(crypto_framer.ProcessInput(stream_frame.data));
|
| - ASSERT_FALSE(crypto_visitor.error());
|
| - }
|
| - }
|
| - *inout_packet_index = index;
|
| -
|
| - QuicConnectionPeer::SwapCrypters(dest_conn, framer.framer());
|
| -
|
| - ASSERT_EQ(0u, crypto_framer.InputBytesRemaining());
|
| -
|
| - for (const CryptoHandshakeMessage& message : crypto_visitor.messages()) {
|
| - dest_stream->OnHandshakeMessage(message);
|
| - }
|
| -}
|
| -
|
| // HexChar parses |c| as a hex character. If valid, it sets |*value| to the
|
| // value of the hex character and returns true. Otherwise it returns false.
|
| bool HexChar(char c, uint8* value) {
|
| @@ -166,14 +121,20 @@ class AsyncTestChannelIDSource : public ChannelIDSource,
|
|
|
| } // anonymous namespace
|
|
|
| +CryptoTestUtils::FakeServerOptions::FakeServerOptions()
|
| + : token_binding_enabled(false) {}
|
| +
|
| CryptoTestUtils::FakeClientOptions::FakeClientOptions()
|
| - : channel_id_enabled(false), channel_id_source_async(false) {}
|
| + : channel_id_enabled(false),
|
| + channel_id_source_async(false),
|
| + token_binding_enabled(false) {}
|
|
|
| // static
|
| int CryptoTestUtils::HandshakeWithFakeServer(
|
| MockConnectionHelper* helper,
|
| PacketSavingConnection* client_conn,
|
| - QuicCryptoClientStream* client) {
|
| + QuicCryptoClientStream* client,
|
| + const FakeServerOptions& options) {
|
| PacketSavingConnection* server_conn = new PacketSavingConnection(
|
| helper, Perspective::IS_SERVER, client_conn->supported_versions());
|
|
|
| @@ -183,7 +144,7 @@ int CryptoTestUtils::HandshakeWithFakeServer(
|
| ProofSourceForTesting());
|
| SetupCryptoServerConfigForTest(server_conn->clock(),
|
| server_conn->random_generator(), &config,
|
| - &crypto_config);
|
| + &crypto_config, options);
|
|
|
| TestQuicSpdyServerSession server_session(server_conn, config, &crypto_config);
|
|
|
| @@ -220,6 +181,9 @@ int CryptoTestUtils::HandshakeWithFakeClient(
|
| }
|
| crypto_config.SetChannelIDSource(source);
|
| }
|
| + if (options.token_binding_enabled) {
|
| + crypto_config.tb_key_params.push_back(kP256);
|
| + }
|
| TestQuicSpdyClientSession client_session(client_conn, DefaultQuicConfig(),
|
| server_id, &crypto_config);
|
|
|
| @@ -252,9 +216,11 @@ void CryptoTestUtils::SetupCryptoServerConfigForTest(
|
| const QuicClock* clock,
|
| QuicRandom* rand,
|
| QuicConfig* config,
|
| - QuicCryptoServerConfig* crypto_config) {
|
| + QuicCryptoServerConfig* crypto_config,
|
| + const FakeServerOptions& fake_options) {
|
| QuicCryptoServerConfig::ConfigOptions options;
|
| options.channel_id_enabled = true;
|
| + options.token_binding_enabled = fake_options.token_binding_enabled;
|
| scoped_ptr<CryptoHandshakeMessage> scfg(
|
| crypto_config->AddDefaultConfig(rand, clock, options));
|
| }
|
| @@ -608,5 +574,47 @@ CryptoHandshakeMessage CryptoTestUtils::Message(const char* message_tag, ...) {
|
| return *parsed;
|
| }
|
|
|
| +// static
|
| +void CryptoTestUtils::MovePackets(PacketSavingConnection* source_conn,
|
| + size_t* inout_packet_index,
|
| + QuicCryptoStream* dest_stream,
|
| + PacketSavingConnection* dest_conn) {
|
| + SimpleQuicFramer framer(source_conn->supported_versions());
|
| + CryptoFramer crypto_framer;
|
| + CryptoFramerVisitor crypto_visitor;
|
| +
|
| + // In order to properly test the code we need to perform encryption and
|
| + // decryption so that the crypters latch when expected. The crypters are in
|
| + // |dest_conn|, but we don't want to try and use them there. Instead we swap
|
| + // them into |framer|, perform the decryption with them, and then swap ther
|
| + // back.
|
| + QuicConnectionPeer::SwapCrypters(dest_conn, framer.framer());
|
| +
|
| + crypto_framer.set_visitor(&crypto_visitor);
|
| +
|
| + size_t index = *inout_packet_index;
|
| + for (; index < source_conn->encrypted_packets_.size(); index++) {
|
| + if (!framer.ProcessPacket(*source_conn->encrypted_packets_[index])) {
|
| + // The framer will be unable to decrypt forward-secure packets sent after
|
| + // the handshake is complete. Don't treat them as handshake packets.
|
| + break;
|
| + }
|
| +
|
| + for (const QuicStreamFrame& stream_frame : framer.stream_frames()) {
|
| + ASSERT_TRUE(crypto_framer.ProcessInput(stream_frame.data));
|
| + ASSERT_FALSE(crypto_visitor.error());
|
| + }
|
| + }
|
| + *inout_packet_index = index;
|
| +
|
| + QuicConnectionPeer::SwapCrypters(dest_conn, framer.framer());
|
| +
|
| + ASSERT_EQ(0u, crypto_framer.InputBytesRemaining());
|
| +
|
| + for (const CryptoHandshakeMessage& message : crypto_visitor.messages()) {
|
| + dest_stream->OnHandshakeMessage(message);
|
| + }
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace net
|
|
|