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