Move QuicRandom functionality to QuicheRandom, and update `third_party/quic` ,`net/quic` to use alias `using QuicRandom = quiche::QuicheRandom;`

PiperOrigin-RevId: 475958042
diff --git a/build/source_list.bzl b/build/source_list.bzl
index edbefc2..4269322 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -54,6 +54,7 @@
     "common/quiche_linked_hash_map.h",
     "common/quiche_mem_slice_storage.h",
     "common/quiche_protocol_flags_list.h",
+    "common/quiche_random.h",
     "common/quiche_text_utils.h",
     "common/simple_buffer_allocator.h",
     "common/structured_headers.h",
@@ -415,6 +416,7 @@
     "common/quiche_ip_address.cc",
     "common/quiche_ip_address_family.cc",
     "common/quiche_mem_slice_storage.cc",
+    "common/quiche_random.cc",
     "common/quiche_text_utils.cc",
     "common/simple_buffer_allocator.cc",
     "common/structured_headers.cc",
@@ -530,7 +532,6 @@
     "quic/core/crypto/quic_decrypter.cc",
     "quic/core/crypto/quic_encrypter.cc",
     "quic/core/crypto/quic_hkdf.cc",
-    "quic/core/crypto/quic_random.cc",
     "quic/core/crypto/tls_client_connection.cc",
     "quic/core/crypto/tls_connection.cc",
     "quic/core/crypto/tls_server_connection.cc",
@@ -1046,6 +1047,7 @@
     "common/quiche_ip_address_test.cc",
     "common/quiche_linked_hash_map_test.cc",
     "common/quiche_mem_slice_storage_test.cc",
+    "common/quiche_random_test.cc",
     "common/quiche_text_utils_test.cc",
     "common/simple_buffer_allocator_test.cc",
     "common/structured_headers_generated_test.cc",
@@ -1145,7 +1147,6 @@
     "quic/core/crypto/quic_crypto_client_config_test.cc",
     "quic/core/crypto/quic_crypto_server_config_test.cc",
     "quic/core/crypto/quic_hkdf_test.cc",
-    "quic/core/crypto/quic_random_test.cc",
     "quic/core/crypto/transport_parameters_test.cc",
     "quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
     "quic/core/deterministic_connection_id_generator_test.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index b30c93f..57eab18 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -54,6 +54,7 @@
     "src/quiche/common/quiche_linked_hash_map.h",
     "src/quiche/common/quiche_mem_slice_storage.h",
     "src/quiche/common/quiche_protocol_flags_list.h",
+    "src/quiche/common/quiche_random.h",
     "src/quiche/common/quiche_text_utils.h",
     "src/quiche/common/simple_buffer_allocator.h",
     "src/quiche/common/structured_headers.h",
@@ -415,6 +416,7 @@
     "src/quiche/common/quiche_ip_address.cc",
     "src/quiche/common/quiche_ip_address_family.cc",
     "src/quiche/common/quiche_mem_slice_storage.cc",
+    "src/quiche/common/quiche_random.cc",
     "src/quiche/common/quiche_text_utils.cc",
     "src/quiche/common/simple_buffer_allocator.cc",
     "src/quiche/common/structured_headers.cc",
@@ -530,7 +532,6 @@
     "src/quiche/quic/core/crypto/quic_decrypter.cc",
     "src/quiche/quic/core/crypto/quic_encrypter.cc",
     "src/quiche/quic/core/crypto/quic_hkdf.cc",
-    "src/quiche/quic/core/crypto/quic_random.cc",
     "src/quiche/quic/core/crypto/tls_client_connection.cc",
     "src/quiche/quic/core/crypto/tls_connection.cc",
     "src/quiche/quic/core/crypto/tls_server_connection.cc",
@@ -1046,6 +1047,7 @@
     "src/quiche/common/quiche_ip_address_test.cc",
     "src/quiche/common/quiche_linked_hash_map_test.cc",
     "src/quiche/common/quiche_mem_slice_storage_test.cc",
+    "src/quiche/common/quiche_random_test.cc",
     "src/quiche/common/quiche_text_utils_test.cc",
     "src/quiche/common/simple_buffer_allocator_test.cc",
     "src/quiche/common/structured_headers_generated_test.cc",
@@ -1145,7 +1147,6 @@
     "src/quiche/quic/core/crypto/quic_crypto_client_config_test.cc",
     "src/quiche/quic/core/crypto/quic_crypto_server_config_test.cc",
     "src/quiche/quic/core/crypto/quic_hkdf_test.cc",
-    "src/quiche/quic/core/crypto/quic_random_test.cc",
     "src/quiche/quic/core/crypto/transport_parameters_test.cc",
     "src/quiche/quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
     "src/quiche/quic/core/deterministic_connection_id_generator_test.cc",
diff --git a/build/source_list.json b/build/source_list.json
index 21ac56f..1c6503f 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -53,6 +53,7 @@
     "quiche/common/quiche_linked_hash_map.h",
     "quiche/common/quiche_mem_slice_storage.h",
     "quiche/common/quiche_protocol_flags_list.h",
+    "quiche/common/quiche_random.h",
     "quiche/common/quiche_text_utils.h",
     "quiche/common/simple_buffer_allocator.h",
     "quiche/common/structured_headers.h",
@@ -414,6 +415,7 @@
     "quiche/common/quiche_ip_address.cc",
     "quiche/common/quiche_ip_address_family.cc",
     "quiche/common/quiche_mem_slice_storage.cc",
+    "quiche/common/quiche_random.cc",
     "quiche/common/quiche_text_utils.cc",
     "quiche/common/simple_buffer_allocator.cc",
     "quiche/common/structured_headers.cc",
@@ -529,7 +531,6 @@
     "quiche/quic/core/crypto/quic_decrypter.cc",
     "quiche/quic/core/crypto/quic_encrypter.cc",
     "quiche/quic/core/crypto/quic_hkdf.cc",
-    "quiche/quic/core/crypto/quic_random.cc",
     "quiche/quic/core/crypto/tls_client_connection.cc",
     "quiche/quic/core/crypto/tls_connection.cc",
     "quiche/quic/core/crypto/tls_server_connection.cc",
@@ -1045,6 +1046,7 @@
     "quiche/common/quiche_ip_address_test.cc",
     "quiche/common/quiche_linked_hash_map_test.cc",
     "quiche/common/quiche_mem_slice_storage_test.cc",
+    "quiche/common/quiche_random_test.cc",
     "quiche/common/quiche_text_utils_test.cc",
     "quiche/common/simple_buffer_allocator_test.cc",
     "quiche/common/structured_headers_generated_test.cc",
@@ -1144,7 +1146,6 @@
     "quiche/quic/core/crypto/quic_crypto_client_config_test.cc",
     "quiche/quic/core/crypto/quic_crypto_server_config_test.cc",
     "quiche/quic/core/crypto/quic_hkdf_test.cc",
-    "quiche/quic/core/crypto/quic_random_test.cc",
     "quiche/quic/core/crypto/transport_parameters_test.cc",
     "quiche/quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
     "quiche/quic/core/deterministic_connection_id_generator_test.cc",
diff --git a/quiche/quic/core/crypto/quic_random.cc b/quiche/common/quiche_random.cc
similarity index 68%
rename from quiche/quic/core/crypto/quic_random.cc
rename to quiche/common/quiche_random.cc
index bd0dc5b..12eeac2 100644
--- a/quiche/quic/core/crypto/quic_random.cc
+++ b/quiche/common/quiche_random.cc
@@ -1,18 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "quiche/quic/core/crypto/quic_random.h"
+#include "quiche/common/quiche_random.h"
 
 #include <cstdint>
 #include <cstring>
 
 #include "openssl/rand.h"
-#include "quiche/quic/platform/api/quic_bug_tracker.h"
-#include "quiche/quic/platform/api/quic_logging.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-
-namespace quic {
+namespace quiche {
 
 namespace {
 
@@ -48,12 +41,12 @@
   return result;
 }
 
-class DefaultRandom : public QuicRandom {
+class DefaultQuicheRandom : public QuicheRandom {
  public:
-  DefaultRandom() {}
-  DefaultRandom(const DefaultRandom&) = delete;
-  DefaultRandom& operator=(const DefaultRandom&) = delete;
-  ~DefaultRandom() override {}
+  DefaultQuicheRandom() {}
+  DefaultQuicheRandom(const DefaultQuicheRandom&) = delete;
+  DefaultQuicheRandom& operator=(const DefaultQuicheRandom&) = delete;
+  ~DefaultQuicheRandom() override {}
 
   // QuicRandom implementation
   void RandBytes(void* data, size_t len) override;
@@ -62,17 +55,17 @@
   uint64_t InsecureRandUint64() override;
 };
 
-void DefaultRandom::RandBytes(void* data, size_t len) {
+void DefaultQuicheRandom::RandBytes(void* data, size_t len) {
   RAND_bytes(reinterpret_cast<uint8_t*>(data), len);
 }
 
-uint64_t DefaultRandom::RandUint64() {
+uint64_t DefaultQuicheRandom::RandUint64() {
   uint64_t value;
   RandBytes(&value, sizeof(value));
   return value;
 }
 
-void DefaultRandom::InsecureRandBytes(void* data, size_t len) {
+void DefaultQuicheRandom::InsecureRandBytes(void* data, size_t len) {
   while (len >= sizeof(uint64_t)) {
     uint64_t random_bytes64 = Xoshiro256PlusPlus();
     memcpy(data, &random_bytes64, sizeof(uint64_t));
@@ -86,14 +79,15 @@
   }
 }
 
-uint64_t DefaultRandom::InsecureRandUint64() { return Xoshiro256PlusPlus(); }
+uint64_t DefaultQuicheRandom::InsecureRandUint64() {
+  return Xoshiro256PlusPlus();
+}
 
 }  // namespace
 
 // static
-QuicRandom* QuicRandom::GetInstance() {
-  static DefaultRandom* random = new DefaultRandom();
+QuicheRandom* QuicheRandom::GetInstance() {
+  static DefaultQuicheRandom* random = new DefaultQuicheRandom();
   return random;
 }
-
-}  // namespace quic
+}  // namespace quiche
diff --git a/quiche/common/quiche_random.h b/quiche/common/quiche_random.h
new file mode 100644
index 0000000..7ee2995
--- /dev/null
+++ b/quiche/common/quiche_random.h
@@ -0,0 +1,37 @@
+#ifndef QUICHE_COMMON_QUICHE_RANDOM_H_
+#define QUICHE_COMMON_QUICHE_RANDOM_H_
+
+#include <cstddef>
+#include <cstdint>
+
+#include "quiche/common/platform/api/quiche_export.h"
+
+namespace quiche {
+
+// The interface for a random number generator.
+class QUICHE_EXPORT_PRIVATE QuicheRandom {
+ public:
+  virtual ~QuicheRandom() {}
+
+  // Returns the default random number generator, which is cryptographically
+  // secure and thread-safe.
+  static QuicheRandom* GetInstance();
+
+  // Generates |len| random bytes in the |data| buffer.
+  virtual void RandBytes(void* data, size_t len) = 0;
+
+  // Returns a random number in the range [0, kuint64max].
+  virtual uint64_t RandUint64() = 0;
+
+  // Generates |len| random bytes in the |data| buffer. This MUST NOT be used
+  // for any application that requires cryptographically-secure randomness.
+  virtual void InsecureRandBytes(void* data, size_t len) = 0;
+
+  // Returns a random number in the range [0, kuint64max]. This MUST NOT be used
+  // for any application that requires cryptographically-secure randomness.
+  virtual uint64_t InsecureRandUint64() = 0;
+};
+
+}  // namespace quiche
+
+#endif  // QUICHE_COMMON_QUICHE_RANDOM_H_
diff --git a/quiche/common/quiche_random_test.cc b/quiche/common/quiche_random_test.cc
new file mode 100644
index 0000000..2f1aacc
--- /dev/null
+++ b/quiche/common/quiche_random_test.cc
@@ -0,0 +1,47 @@
+#include "quiche/common/quiche_random.h"
+
+#include "quiche/common/platform/api/quiche_test.h"
+
+namespace quiche {
+namespace {
+
+TEST(QuicheRandom, RandBytes) {
+  unsigned char buf1[16];
+  unsigned char buf2[16];
+  memset(buf1, 0xaf, sizeof(buf1));
+  memset(buf2, 0xaf, sizeof(buf2));
+  ASSERT_EQ(0, memcmp(buf1, buf2, sizeof(buf1)));
+
+  auto rng = QuicheRandom::GetInstance();
+  rng->RandBytes(buf1, sizeof(buf1));
+  EXPECT_NE(0, memcmp(buf1, buf2, sizeof(buf1)));
+}
+
+TEST(QuicheRandom, RandUint64) {
+  auto rng = QuicheRandom::GetInstance();
+  uint64_t value1 = rng->RandUint64();
+  uint64_t value2 = rng->RandUint64();
+  EXPECT_NE(value1, value2);
+}
+
+TEST(QuicheRandom, InsecureRandBytes) {
+  unsigned char buf1[16];
+  unsigned char buf2[16];
+  memset(buf1, 0xaf, sizeof(buf1));
+  memset(buf2, 0xaf, sizeof(buf2));
+  ASSERT_EQ(0, memcmp(buf1, buf2, sizeof(buf1)));
+
+  auto rng = QuicheRandom::GetInstance();
+  rng->InsecureRandBytes(buf1, sizeof(buf1));
+  EXPECT_NE(0, memcmp(buf1, buf2, sizeof(buf1)));
+}
+
+TEST(QuicheRandom, InsecureRandUint64) {
+  auto rng = QuicheRandom::GetInstance();
+  uint64_t value1 = rng->InsecureRandUint64();
+  uint64_t value2 = rng->InsecureRandUint64();
+  EXPECT_NE(value1, value2);
+}
+
+}  // namespace
+}  // namespace quiche
diff --git a/quiche/quic/core/crypto/crypto_secret_boxer.h b/quiche/quic/core/crypto/crypto_secret_boxer.h
index e1927f2..5d334c3 100644
--- a/quiche/quic/core/crypto/crypto_secret_boxer.h
+++ b/quiche/quic/core/crypto/crypto_secret_boxer.h
@@ -11,13 +11,12 @@
 #include <vector>
 
 #include "absl/strings/string_view.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/platform/api/quic_export.h"
 #include "quiche/quic/platform/api/quic_mutex.h"
 
 namespace quic {
 
-class QuicRandom;
-
 // CryptoSecretBoxer encrypts small chunks of plaintext (called 'boxing') and
 // then, later, can authenticate+decrypt the resulting boxes. This object is
 // thread-safe.
diff --git a/quiche/quic/core/crypto/crypto_utils.h b/quiche/quic/core/crypto/crypto_utils.h
index 87bf309..adc818d 100644
--- a/quiche/quic/core/crypto/crypto_utils.h
+++ b/quiche/quic/core/crypto/crypto_utils.h
@@ -18,6 +18,7 @@
 #include "quiche/quic/core/crypto/crypto_handshake_message.h"
 #include "quiche/quic/core/crypto/crypto_protocol.h"
 #include "quiche/quic/core/crypto/quic_crypter.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/core/quic_connection_id.h"
 #include "quiche/quic/core/quic_packets.h"
 #include "quiche/quic/core/quic_time.h"
@@ -26,8 +27,6 @@
 
 namespace quic {
 
-class QuicRandom;
-
 class QUIC_EXPORT_PRIVATE CryptoUtils {
  public:
   CryptoUtils() = delete;
diff --git a/quiche/quic/core/crypto/curve25519_key_exchange.h b/quiche/quic/core/crypto/curve25519_key_exchange.h
index 34a49f9..b6e06f3 100644
--- a/quiche/quic/core/crypto/curve25519_key_exchange.h
+++ b/quiche/quic/core/crypto/curve25519_key_exchange.h
@@ -10,12 +10,11 @@
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/crypto/key_exchange.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/platform/api/quic_export.h"
 
 namespace quic {
 
-class QuicRandom;
-
 // Curve25519KeyExchange implements a SynchronousKeyExchange using
 // elliptic-curve Diffie-Hellman on curve25519. See http://cr.yp.to/ecdh.html
 class QUIC_EXPORT_PRIVATE Curve25519KeyExchange
diff --git a/quiche/quic/core/crypto/key_exchange.h b/quiche/quic/core/crypto/key_exchange.h
index a681bf5..573b289 100644
--- a/quiche/quic/core/crypto/key_exchange.h
+++ b/quiche/quic/core/crypto/key_exchange.h
@@ -10,12 +10,11 @@
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/crypto/crypto_protocol.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/platform/api/quic_export.h"
 
 namespace quic {
 
-class QuicRandom;
-
 // Interface for a Diffie-Hellman key exchange with an asynchronous interface.
 // This allows for implementations which hold the private key locally, as well
 // as ones which make an RPC to an external key-exchange service.
diff --git a/quiche/quic/core/crypto/quic_crypto_client_config.h b/quiche/quic/core/crypto/quic_crypto_client_config.h
index f44aac1..546f4d1 100644
--- a/quiche/quic/core/crypto/quic_crypto_client_config.h
+++ b/quiche/quic/core/crypto/quic_crypto_client_config.h
@@ -17,6 +17,7 @@
 #include "quiche/quic/core/crypto/client_proof_source.h"
 #include "quiche/quic/core/crypto/crypto_handshake.h"
 #include "quiche/quic/core/crypto/crypto_protocol.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/core/crypto/transport_parameters.h"
 #include "quiche/quic/core/quic_packets.h"
 #include "quiche/quic/core/quic_server_id.h"
@@ -28,7 +29,6 @@
 class CryptoHandshakeMessage;
 class ProofVerifier;
 class ProofVerifyDetails;
-class QuicRandom;
 
 // QuicResumptionState stores the state a client needs for performing connection
 // resumption.
diff --git a/quiche/quic/core/crypto/quic_crypto_server_config.h b/quiche/quic/core/crypto/quic_crypto_server_config.h
index f114546..77be1f4 100644
--- a/quiche/quic/core/crypto/quic_crypto_server_config.h
+++ b/quiche/quic/core/crypto/quic_crypto_server_config.h
@@ -22,6 +22,7 @@
 #include "quiche/quic/core/crypto/proof_source.h"
 #include "quiche/quic/core/crypto/quic_compressed_certs_cache.h"
 #include "quiche/quic/core/crypto/quic_crypto_proof.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/core/proto/cached_network_parameters_proto.h"
 #include "quiche/quic/core/proto/source_address_token_proto.h"
 #include "quiche/quic/core/quic_time.h"
@@ -35,7 +36,6 @@
 class CryptoHandshakeMessage;
 class ProofSource;
 class QuicClock;
-class QuicRandom;
 class QuicServerConfigProtobuf;
 struct QuicSignedServerConfig;
 
diff --git a/quiche/quic/core/crypto/quic_random.h b/quiche/quic/core/crypto/quic_random.h
index 47722cb..9f7c216 100644
--- a/quiche/quic/core/crypto/quic_random.h
+++ b/quiche/quic/core/crypto/quic_random.h
@@ -5,36 +5,11 @@
 #ifndef QUICHE_QUIC_CORE_CRYPTO_QUIC_RANDOM_H_
 #define QUICHE_QUIC_CORE_CRYPTO_QUIC_RANDOM_H_
 
-#include <cstddef>
-#include <cstdint>
-
-#include "quiche/quic/platform/api/quic_export.h"
+#include "quiche/common/quiche_random.h"
 
 namespace quic {
 
-// The interface for a random number generator.
-class QUIC_EXPORT_PRIVATE QuicRandom {
- public:
-  virtual ~QuicRandom() {}
-
-  // Returns the default random number generator, which is cryptographically
-  // secure and thread-safe.
-  static QuicRandom* GetInstance();
-
-  // Generates |len| random bytes in the |data| buffer.
-  virtual void RandBytes(void* data, size_t len) = 0;
-
-  // Returns a random number in the range [0, kuint64max].
-  virtual uint64_t RandUint64() = 0;
-
-  // Generates |len| random bytes in the |data| buffer. This MUST NOT be used
-  // for any application that requires cryptographically-secure randomness.
-  virtual void InsecureRandBytes(void* data, size_t len) = 0;
-
-  // Returns a random number in the range [0, kuint64max]. This MUST NOT be used
-  // for any application that requires cryptographically-secure randomness.
-  virtual uint64_t InsecureRandUint64() = 0;
-};
+using QuicRandom = quiche::QuicheRandom;
 
 }  // namespace quic
 
diff --git a/quiche/quic/core/crypto/quic_random_test.cc b/quiche/quic/core/crypto/quic_random_test.cc
deleted file mode 100644
index 2a43c29..0000000
--- a/quiche/quic/core/crypto/quic_random_test.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "quiche/quic/core/crypto/quic_random.h"
-
-#include "quiche/quic/platform/api/quic_test.h"
-
-namespace quic {
-namespace test {
-
-class QuicRandomTest : public QuicTest {};
-
-TEST_F(QuicRandomTest, RandBytes) {
-  unsigned char buf1[16];
-  unsigned char buf2[16];
-  memset(buf1, 0xaf, sizeof(buf1));
-  memset(buf2, 0xaf, sizeof(buf2));
-  ASSERT_EQ(0, memcmp(buf1, buf2, sizeof(buf1)));
-
-  QuicRandom* rng = QuicRandom::GetInstance();
-  rng->RandBytes(buf1, sizeof(buf1));
-  EXPECT_NE(0, memcmp(buf1, buf2, sizeof(buf1)));
-}
-
-TEST_F(QuicRandomTest, RandUint64) {
-  QuicRandom* rng = QuicRandom::GetInstance();
-  uint64_t value1 = rng->RandUint64();
-  uint64_t value2 = rng->RandUint64();
-  EXPECT_NE(value1, value2);
-}
-
-TEST_F(QuicRandomTest, InsecureRandBytes) {
-  unsigned char buf1[16];
-  unsigned char buf2[16];
-  memset(buf1, 0xaf, sizeof(buf1));
-  memset(buf2, 0xaf, sizeof(buf2));
-  ASSERT_EQ(0, memcmp(buf1, buf2, sizeof(buf1)));
-
-  QuicRandom* rng = QuicRandom::GetInstance();
-  rng->InsecureRandBytes(buf1, sizeof(buf1));
-  EXPECT_NE(0, memcmp(buf1, buf2, sizeof(buf1)));
-}
-
-TEST_F(QuicRandomTest, InsecureRandUint64) {
-  QuicRandom* rng = QuicRandom::GetInstance();
-  uint64_t value1 = rng->InsecureRandUint64();
-  uint64_t value2 = rng->InsecureRandUint64();
-  EXPECT_NE(value1, value2);
-}
-
-}  // namespace test
-}  // namespace quic
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h
index 0e4c956..578de98 100644
--- a/quiche/quic/core/quic_connection.h
+++ b/quiche/quic/core/quic_connection.h
@@ -29,6 +29,7 @@
 #include "quiche/quic/core/congestion_control/rtt_stats.h"
 #include "quiche/quic/core/crypto/quic_decrypter.h"
 #include "quiche/quic/core/crypto/quic_encrypter.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/core/crypto/transport_parameters.h"
 #include "quiche/quic/core/frames/quic_ack_frequency_frame.h"
 #include "quiche/quic/core/frames/quic_max_streams_frame.h"
@@ -67,7 +68,6 @@
 class QuicClock;
 class QuicConfig;
 class QuicConnection;
-class QuicRandom;
 
 namespace test {
 class QuicConnectionPeer;
diff --git a/quiche/quic/core/quic_data_writer.h b/quiche/quic/core/quic_data_writer.h
index c96b3b7..cd2486a 100644
--- a/quiche/quic/core/quic_data_writer.h
+++ b/quiche/quic/core/quic_data_writer.h
@@ -9,6 +9,7 @@
 #include <cstdint>
 
 #include "absl/strings/string_view.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/platform/api/quic_export.h"
 #include "quiche/common/quiche_data_writer.h"
@@ -16,8 +17,6 @@
 
 namespace quic {
 
-class QuicRandom;
-
 // This class provides facilities for packing QUIC data.
 //
 // The QuicDataWriter supports appending primitive values (int, string, etc)
diff --git a/quiche/quic/test_tools/crypto_test_utils.h b/quiche/quic/test_tools/crypto_test_utils.h
index d21e897..d650706 100644
--- a/quiche/quic/test_tools/crypto_test_utils.h
+++ b/quiche/quic/test_tools/crypto_test_utils.h
@@ -14,6 +14,7 @@
 #include "absl/strings/string_view.h"
 #include "openssl/evp.h"
 #include "quiche/quic/core/crypto/crypto_framer.h"
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/core/quic_framer.h"
 #include "quiche/quic/core/quic_packets.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
@@ -29,7 +30,6 @@
 class QuicCryptoServerConfig;
 class QuicCryptoServerStreamBase;
 class QuicCryptoStream;
-class QuicRandom;
 class QuicServerId;
 
 namespace test {
diff --git a/quiche/quic/test_tools/quic_packet_creator_peer.h b/quiche/quic/test_tools/quic_packet_creator_peer.h
index 4607bcd..b7833a4 100644
--- a/quiche/quic/test_tools/quic_packet_creator_peer.h
+++ b/quiche/quic/test_tools/quic_packet_creator_peer.h
@@ -5,12 +5,12 @@
 #ifndef QUICHE_QUIC_TEST_TOOLS_QUIC_PACKET_CREATOR_PEER_H_
 #define QUICHE_QUIC_TEST_TOOLS_QUIC_PACKET_CREATOR_PEER_H_
 
+#include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/core/quic_packets.h"
 
 namespace quic {
 class QuicFramer;
 class QuicPacketCreator;
-class QuicRandom;
 
 namespace test {