diff --git a/quiche/oblivious_http/buffers/oblivious_http_integration_test.cc b/quiche/oblivious_http/buffers/oblivious_http_integration_test.cc
index ac096b7..5d00efc 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_integration_test.cc
+++ b/quiche/oblivious_http/buffers/oblivious_http_integration_test.cc
@@ -51,15 +51,6 @@
 }
 }  // namespace
 
-absl::StatusOr<ObliviousHttpRequest>
-CreateClientObliviousRequestWithSeedForTesting(
-    absl::string_view plaintext_payload, absl::string_view hpke_public_key,
-    const ObliviousHttpHeaderKeyConfig &ohttp_key_config,
-    absl::string_view seed) {
-  return ObliviousHttpRequest::EncapsulateWithSeed(
-      plaintext_payload, hpke_public_key, ohttp_key_config, seed);
-}
-
 using ObliviousHttpParameterizedTest =
     test::QuicheTestWithParam<ObliviousHttpResponseTestStrings>;
 
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request.cc b/quiche/oblivious_http/buffers/oblivious_http_request.cc
index 4ccd0fa..e7903b6 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_request.cc
+++ b/quiche/oblivious_http/buffers/oblivious_http_request.cc
@@ -104,6 +104,15 @@
                              ohttp_key_config, "");
 }
 
+absl::StatusOr<ObliviousHttpRequest>
+ObliviousHttpRequest::CreateClientWithSeedForTesting(
+    absl::string_view plaintext_payload, absl::string_view hpke_public_key,
+    const ObliviousHttpHeaderKeyConfig& ohttp_key_config,
+    absl::string_view seed) {
+  return ObliviousHttpRequest::EncapsulateWithSeed(
+      plaintext_payload, hpke_public_key, ohttp_key_config, seed);
+}
+
 absl::StatusOr<ObliviousHttpRequest> ObliviousHttpRequest::EncapsulateWithSeed(
     absl::string_view plaintext_payload, absl::string_view hpke_public_key,
     const ObliviousHttpHeaderKeyConfig& ohttp_key_config,
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request.h b/quiche/oblivious_http/buffers/oblivious_http_request.h
index 75f4780..1aef1f2 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_request.h
+++ b/quiche/oblivious_http/buffers/oblivious_http_request.h
@@ -63,6 +63,12 @@
       absl::string_view plaintext_payload, absl::string_view hpke_public_key,
       const ObliviousHttpHeaderKeyConfig& ohttp_key_config);
 
+  // Same as above but accepts a random number seed for testing.
+  static absl::StatusOr<ObliviousHttpRequest> CreateClientWithSeedForTesting(
+      absl::string_view plaintext_payload, absl::string_view hpke_public_key,
+      const ObliviousHttpHeaderKeyConfig& ohttp_key_config,
+      absl::string_view seed);
+
   // Movable.
   ObliviousHttpRequest(ObliviousHttpRequest&& other) = default;
   ObliviousHttpRequest& operator=(ObliviousHttpRequest&& other) = default;
@@ -92,12 +98,6 @@
   }
 
  private:
-  friend absl::StatusOr<ObliviousHttpRequest>
-  CreateClientObliviousRequestWithSeedForTesting(
-      absl::string_view plaintext_payload, absl::string_view hpke_public_key,
-      const ObliviousHttpHeaderKeyConfig& ohttp_key_config,
-      absl::string_view seed);
-
   explicit ObliviousHttpRequest(
       bssl::UniquePtr<EVP_HPKE_CTX> hpke_context, std::string encapsulated_key,
       const ObliviousHttpHeaderKeyConfig& ohttp_key_config,
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request_test.cc b/quiche/oblivious_http/buffers/oblivious_http_request_test.cc
index bfe7252..e313bb8 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_request_test.cc
+++ b/quiche/oblivious_http/buffers/oblivious_http_request_test.cc
@@ -20,15 +20,6 @@
 
 namespace quiche {
 
-absl::StatusOr<ObliviousHttpRequest>
-CreateClientObliviousRequestWithSeedForTesting(
-    absl::string_view plaintext_payload, absl::string_view hpke_public_key,
-    const ObliviousHttpHeaderKeyConfig &ohttp_key_config,
-    absl::string_view seed) {
-  return ObliviousHttpRequest::EncapsulateWithSeed(
-      plaintext_payload, hpke_public_key, ohttp_key_config, seed);
-}
-
 namespace {
 const uint32_t kHeaderLength = ObliviousHttpHeaderKeyConfig::kHeaderLength;
 std::string GetHpkePrivateKey() {
@@ -161,7 +152,7 @@
   auto ohttp_key_config =
       GetOhttpKeyConfig(4, EVP_HPKE_DHKEM_X25519_HKDF_SHA256,
                         EVP_HPKE_HKDF_SHA256, EVP_HPKE_AES_256_GCM);
-  auto encapsulated = CreateClientObliviousRequestWithSeedForTesting(
+  auto encapsulated = ObliviousHttpRequest::CreateClientWithSeedForTesting(
       "test", GetHpkePublicKey(), ohttp_key_config, GetSeed());
   ASSERT_TRUE(encapsulated.ok());
   auto encapsulated_request = encapsulated->EncapsulateAndSerialize();
@@ -184,12 +175,12 @@
       GetOhttpKeyConfig(8, EVP_HPKE_DHKEM_X25519_HKDF_SHA256,
                         EVP_HPKE_HKDF_SHA256, EVP_HPKE_AES_256_GCM);
   auto req_with_same_plaintext_1 =
-      CreateClientObliviousRequestWithSeedForTesting(
+      ObliviousHttpRequest::CreateClientWithSeedForTesting(
           "same plaintext", GetHpkePublicKey(), ohttp_key_config, GetSeed());
   ASSERT_TRUE(req_with_same_plaintext_1.ok());
   auto ciphertext_1 = req_with_same_plaintext_1->EncapsulateAndSerialize();
   auto req_with_same_plaintext_2 =
-      CreateClientObliviousRequestWithSeedForTesting(
+      ObliviousHttpRequest::CreateClientWithSeedForTesting(
           "same plaintext", GetHpkePublicKey(), ohttp_key_config, GetSeed());
   ASSERT_TRUE(req_with_same_plaintext_2.ok());
   auto ciphertext_2 = req_with_same_plaintext_2->EncapsulateAndSerialize();
@@ -202,12 +193,12 @@
       GetOhttpKeyConfig(8, EVP_HPKE_DHKEM_X25519_HKDF_SHA256,
                         EVP_HPKE_HKDF_SHA256, EVP_HPKE_AES_256_GCM);
   auto req_with_different_plaintext_1 =
-      CreateClientObliviousRequestWithSeedForTesting(
+      ObliviousHttpRequest::CreateClientWithSeedForTesting(
           "different 1", GetHpkePublicKey(), ohttp_key_config, GetSeed());
   ASSERT_TRUE(req_with_different_plaintext_1.ok());
   auto ciphertext_1 = req_with_different_plaintext_1->EncapsulateAndSerialize();
   auto req_with_different_plaintext_2 =
-      CreateClientObliviousRequestWithSeedForTesting(
+      ObliviousHttpRequest::CreateClientWithSeedForTesting(
           "different 2", GetHpkePublicKey(), ohttp_key_config, GetSeed());
   ASSERT_TRUE(req_with_different_plaintext_2.ok());
   auto ciphertext_2 = req_with_different_plaintext_2->EncapsulateAndSerialize();
diff --git a/quiche/oblivious_http/buffers/oblivious_http_response_test.cc b/quiche/oblivious_http/buffers/oblivious_http_response_test.cc
index 1e8eb34..f19020d 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_response_test.cc
+++ b/quiche/oblivious_http/buffers/oblivious_http_response_test.cc
@@ -18,15 +18,6 @@
 
 namespace quiche {
 
-absl::StatusOr<ObliviousHttpRequest>
-CreateClientObliviousRequestWithSeedForTesting(
-    absl::string_view plaintext_payload, absl::string_view hpke_public_key,
-    const ObliviousHttpHeaderKeyConfig &ohttp_key_config,
-    absl::string_view seed) {
-  return ObliviousHttpRequest::EncapsulateWithSeed(
-      plaintext_payload, hpke_public_key, ohttp_key_config, seed);
-}
-
 namespace {
 std::string GetHpkePrivateKey() {
   absl::string_view hpke_key_hex =
@@ -102,7 +93,7 @@
                                                absl::string_view plaintext) {
   auto ohttp_key_config = GetOhttpKeyConfig(key_id, kem_id, kdf_id, aead_id);
   auto client_request_encapsulate =
-      CreateClientObliviousRequestWithSeedForTesting(
+      ObliviousHttpRequest::CreateClientWithSeedForTesting(
           plaintext, GetHpkePublicKey(), ohttp_key_config, GetSeed());
   EXPECT_TRUE(client_request_encapsulate.ok());
   auto oblivious_request =
