Add non-determinism to TestTicketCrypter This is effectively the same as cl/335958328, but for the TicketCrypter used in chromium. PiperOrigin-RevId: 339294711 Change-Id: Ic90aff0c03aa206b3aa096289fdc5abea7267a1b
diff --git a/quic/test_tools/test_ticket_crypter.cc b/quic/test_tools/test_ticket_crypter.cc index 87ff202..40f28d2 100644 --- a/quic/test_tools/test_ticket_crypter.cc +++ b/quic/test_tools/test_ticket_crypter.cc
@@ -7,6 +7,7 @@ #include <cstring> #include "absl/base/macros.h" +#include "net/third_party/quiche/src/quic/core/crypto/quic_random.h" namespace quic { namespace test { @@ -25,22 +26,29 @@ } // namespace +TestTicketCrypter::TestTicketCrypter() + : ticket_prefix_(ABSL_ARRAYSIZE(kTicketPrefix) + 16) { + memcpy(ticket_prefix_.data(), kTicketPrefix, ABSL_ARRAYSIZE(kTicketPrefix)); + QuicRandom::GetInstance()->RandBytes( + ticket_prefix_.data() + ABSL_ARRAYSIZE(kTicketPrefix), 16); +} + size_t TestTicketCrypter::MaxOverhead() { - return ABSL_ARRAYSIZE(kTicketPrefix); + return ticket_prefix_.size(); } std::vector<uint8_t> TestTicketCrypter::Encrypt(absl::string_view in) { - size_t prefix_len = ABSL_ARRAYSIZE(kTicketPrefix); + size_t prefix_len = ticket_prefix_.size(); std::vector<uint8_t> out(prefix_len + in.size()); - memcpy(out.data(), kTicketPrefix, prefix_len); + memcpy(out.data(), ticket_prefix_.data(), prefix_len); memcpy(out.data() + prefix_len, in.data(), in.size()); return out; } std::vector<uint8_t> TestTicketCrypter::Decrypt(absl::string_view in) { - size_t prefix_len = ABSL_ARRAYSIZE(kTicketPrefix); + size_t prefix_len = ticket_prefix_.size(); if (fail_decrypt_ || in.size() < prefix_len || - memcmp(kTicketPrefix, in.data(), prefix_len) != 0) { + memcmp(ticket_prefix_.data(), in.data(), prefix_len) != 0) { return std::vector<uint8_t>(); } return std::vector<uint8_t>(in.begin() + prefix_len, in.end());
diff --git a/quic/test_tools/test_ticket_crypter.h b/quic/test_tools/test_ticket_crypter.h index 5fdfdb9..5785463 100644 --- a/quic/test_tools/test_ticket_crypter.h +++ b/quic/test_tools/test_ticket_crypter.h
@@ -14,6 +14,7 @@ // THIS IMPLEMENTATION IS NOT SECURE. It is only intended for testing purposes. class TestTicketCrypter : public ProofSource::TicketCrypter { public: + TestTicketCrypter(); ~TestTicketCrypter() override = default; // TicketCrypter interface @@ -41,6 +42,7 @@ bool fail_decrypt_ = false; bool run_async_ = false; std::vector<PendingCallback> pending_callbacks_; + std::vector<uint8_t> ticket_prefix_; }; } // namespace test