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