OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/test_tools/crypto_test_utils.h" | 5 #include "net/quic/test_tools/crypto_test_utils.h" |
6 | 6 |
7 #include <openssl/bn.h> | 7 #include <openssl/bn.h> |
8 #include <openssl/ec.h> | 8 #include <openssl/ec.h> |
9 #include <openssl/ecdsa.h> | 9 #include <openssl/ecdsa.h> |
10 #include <openssl/evp.h> | 10 #include <openssl/evp.h> |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 const FakeServerOptions& fake_options) { | 367 const FakeServerOptions& fake_options) { |
368 QuicCryptoServerConfig::ConfigOptions options; | 368 QuicCryptoServerConfig::ConfigOptions options; |
369 options.channel_id_enabled = true; | 369 options.channel_id_enabled = true; |
370 options.token_binding_enabled = fake_options.token_binding_enabled; | 370 options.token_binding_enabled = fake_options.token_binding_enabled; |
371 std::unique_ptr<CryptoHandshakeMessage> scfg( | 371 std::unique_ptr<CryptoHandshakeMessage> scfg( |
372 crypto_config->AddDefaultConfig(rand, clock, options)); | 372 crypto_config->AddDefaultConfig(rand, clock, options)); |
373 } | 373 } |
374 | 374 |
375 // static | 375 // static |
376 void CryptoTestUtils::CommunicateHandshakeMessages( | 376 void CryptoTestUtils::CommunicateHandshakeMessages( |
377 PacketSavingConnection* a_conn, | 377 PacketSavingConnection* client_conn, |
378 QuicCryptoStream* a, | 378 QuicCryptoStream* client, |
379 PacketSavingConnection* b_conn, | 379 PacketSavingConnection* server_conn, |
380 QuicCryptoStream* b) { | 380 QuicCryptoStream* server) { |
381 CommunicateHandshakeMessagesAndRunCallbacks(a_conn, a, b_conn, b, nullptr); | 381 CommunicateHandshakeMessagesAndRunCallbacks(client_conn, client, server_conn, |
| 382 server, nullptr); |
382 } | 383 } |
383 | 384 |
384 // static | 385 // static |
385 void CryptoTestUtils::CommunicateHandshakeMessagesAndRunCallbacks( | 386 void CryptoTestUtils::CommunicateHandshakeMessagesAndRunCallbacks( |
386 PacketSavingConnection* a_conn, | 387 PacketSavingConnection* client_conn, |
387 QuicCryptoStream* a, | 388 QuicCryptoStream* client, |
388 PacketSavingConnection* b_conn, | 389 PacketSavingConnection* server_conn, |
389 QuicCryptoStream* b, | 390 QuicCryptoStream* server, |
390 CallbackSource* callback_source) { | 391 CallbackSource* callback_source) { |
391 size_t a_i = 0, b_i = 0; | 392 size_t client_i = 0, server_i = 0; |
392 while (!a->handshake_confirmed()) { | 393 while (!client->handshake_confirmed()) { |
393 ASSERT_GT(a_conn->encrypted_packets_.size(), a_i); | 394 ASSERT_GT(client_conn->encrypted_packets_.size(), client_i); |
394 VLOG(1) << "Processing " << a_conn->encrypted_packets_.size() - a_i | 395 VLOG(1) << "Processing " |
395 << " packets a->b"; | 396 << client_conn->encrypted_packets_.size() - client_i |
396 MovePackets(a_conn, &a_i, b, b_conn); | 397 << " packets client->server"; |
| 398 MovePackets(client_conn, &client_i, server, server_conn, |
| 399 Perspective::IS_SERVER); |
397 if (callback_source) { | 400 if (callback_source) { |
398 callback_source->RunPendingCallbacks(); | 401 callback_source->RunPendingCallbacks(); |
399 } | 402 } |
400 | 403 |
401 ASSERT_GT(b_conn->encrypted_packets_.size(), b_i); | 404 ASSERT_GT(server_conn->encrypted_packets_.size(), server_i); |
402 VLOG(1) << "Processing " << b_conn->encrypted_packets_.size() - b_i | 405 VLOG(1) << "Processing " |
403 << " packets b->a"; | 406 << server_conn->encrypted_packets_.size() - server_i |
404 MovePackets(b_conn, &b_i, a, a_conn); | 407 << " packets server->client"; |
| 408 MovePackets(server_conn, &server_i, client, client_conn, |
| 409 Perspective::IS_CLIENT); |
405 if (callback_source) { | 410 if (callback_source) { |
406 callback_source->RunPendingCallbacks(); | 411 callback_source->RunPendingCallbacks(); |
407 } | 412 } |
408 } | 413 } |
409 } | 414 } |
410 | 415 |
411 // static | 416 // static |
412 pair<size_t, size_t> CryptoTestUtils::AdvanceHandshake( | 417 pair<size_t, size_t> CryptoTestUtils::AdvanceHandshake( |
413 PacketSavingConnection* a_conn, | 418 PacketSavingConnection* client_conn, |
414 QuicCryptoStream* a, | 419 QuicCryptoStream* client, |
415 size_t a_i, | 420 size_t client_i, |
416 PacketSavingConnection* b_conn, | 421 PacketSavingConnection* server_conn, |
417 QuicCryptoStream* b, | 422 QuicCryptoStream* server, |
418 size_t b_i) { | 423 size_t server_i) { |
419 VLOG(1) << "Processing " << a_conn->encrypted_packets_.size() - a_i | 424 VLOG(1) << "Processing " << client_conn->encrypted_packets_.size() - client_i |
420 << " packets a->b"; | 425 << " packets client->server"; |
421 MovePackets(a_conn, &a_i, b, b_conn); | 426 MovePackets(client_conn, &client_i, server, server_conn, |
| 427 Perspective::IS_SERVER); |
422 | 428 |
423 VLOG(1) << "Processing " << b_conn->encrypted_packets_.size() - b_i | 429 VLOG(1) << "Processing " << server_conn->encrypted_packets_.size() - server_i |
424 << " packets b->a"; | 430 << " packets server->client"; |
425 if (b_conn->encrypted_packets_.size() - b_i == 2) { | 431 if (server_conn->encrypted_packets_.size() - server_i == 2) { |
426 VLOG(1) << "here"; | 432 VLOG(1) << "here"; |
427 } | 433 } |
428 MovePackets(b_conn, &b_i, a, a_conn); | 434 MovePackets(server_conn, &server_i, client, client_conn, |
| 435 Perspective::IS_CLIENT); |
429 | 436 |
430 return std::make_pair(a_i, b_i); | 437 return std::make_pair(client_i, server_i); |
431 } | 438 } |
432 | 439 |
433 // static | 440 // static |
434 string CryptoTestUtils::GetValueForTag(const CryptoHandshakeMessage& message, | 441 string CryptoTestUtils::GetValueForTag(const CryptoHandshakeMessage& message, |
435 QuicTag tag) { | 442 QuicTag tag) { |
436 QuicTagValueMap::const_iterator it = message.tag_value_map().find(tag); | 443 QuicTagValueMap::const_iterator it = message.tag_value_map().find(tag); |
437 if (it == message.tag_value_map().end()) { | 444 if (it == message.tag_value_map().end()) { |
438 return string(); | 445 return string(); |
439 } | 446 } |
440 return it->second; | 447 return it->second; |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 | 760 |
754 // static | 761 // static |
755 ChannelIDSource* CryptoTestUtils::ChannelIDSourceForTesting() { | 762 ChannelIDSource* CryptoTestUtils::ChannelIDSourceForTesting() { |
756 return new TestChannelIDSource(); | 763 return new TestChannelIDSource(); |
757 } | 764 } |
758 | 765 |
759 // static | 766 // static |
760 void CryptoTestUtils::MovePackets(PacketSavingConnection* source_conn, | 767 void CryptoTestUtils::MovePackets(PacketSavingConnection* source_conn, |
761 size_t* inout_packet_index, | 768 size_t* inout_packet_index, |
762 QuicCryptoStream* dest_stream, | 769 QuicCryptoStream* dest_stream, |
763 PacketSavingConnection* dest_conn) { | 770 PacketSavingConnection* dest_conn, |
764 SimpleQuicFramer framer(source_conn->supported_versions()); | 771 Perspective dest_perspective) { |
| 772 SimpleQuicFramer framer(source_conn->supported_versions(), dest_perspective); |
765 CryptoFramer crypto_framer; | 773 CryptoFramer crypto_framer; |
766 CryptoFramerVisitor crypto_visitor; | 774 CryptoFramerVisitor crypto_visitor; |
767 | 775 |
768 // In order to properly test the code we need to perform encryption and | 776 // In order to properly test the code we need to perform encryption and |
769 // decryption so that the crypters latch when expected. The crypters are in | 777 // decryption so that the crypters latch when expected. The crypters are in |
770 // |dest_conn|, but we don't want to try and use them there. Instead we swap | 778 // |dest_conn|, but we don't want to try and use them there. Instead we swap |
771 // them into |framer|, perform the decryption with them, and then swap ther | 779 // them into |framer|, perform the decryption with them, and then swap ther |
772 // back. | 780 // back. |
773 QuicConnectionPeer::SwapCrypters(dest_conn, framer.framer()); | 781 QuicConnectionPeer::SwapCrypters(dest_conn, framer.framer()); |
774 | 782 |
(...skipping 19 matching lines...) Expand all Loading... |
794 | 802 |
795 ASSERT_EQ(0u, crypto_framer.InputBytesRemaining()); | 803 ASSERT_EQ(0u, crypto_framer.InputBytesRemaining()); |
796 | 804 |
797 for (const CryptoHandshakeMessage& message : crypto_visitor.messages()) { | 805 for (const CryptoHandshakeMessage& message : crypto_visitor.messages()) { |
798 dest_stream->OnHandshakeMessage(message); | 806 dest_stream->OnHandshakeMessage(message); |
799 } | 807 } |
800 } | 808 } |
801 | 809 |
802 } // namespace test | 810 } // namespace test |
803 } // namespace net | 811 } // namespace net |
OLD | NEW |