Moving functions that use protocol buffers to "testing/proto_utils" from testing/utils. This CL does not add any new code and only touches test and build files.

All the other files in this CL have changes related to adding "testing/proto_utils" as a dependency instead of / in addition to "testing/utils".

Tldr; Splits an existing file into two and adds the paths for the second file in all relevant BUILD, header and cc files.

PiperOrigin-RevId: 539760965
diff --git a/build/source_list.bzl b/build/source_list.bzl
index a37c510..e539204 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1568,6 +1568,7 @@
     "blind_sign_auth/anonymous_tokens/cpp/crypto/verifier.h",
     "blind_sign_auth/anonymous_tokens/cpp/shared/proto_utils.h",
     "blind_sign_auth/anonymous_tokens/cpp/shared/status_utils.h",
+    "blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h",
     "blind_sign_auth/anonymous_tokens/cpp/testing/utils.h",
     "blind_sign_auth/blind_sign_auth.h",
     "blind_sign_auth/blind_sign_auth_interface.h",
@@ -1584,6 +1585,7 @@
     "blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blinder.cc",
     "blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_ssa_pss_verifier.cc",
     "blind_sign_auth/anonymous_tokens/cpp/shared/proto_utils.cc",
+    "blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.cc",
     "blind_sign_auth/anonymous_tokens/cpp/testing/utils.cc",
     "blind_sign_auth/blind_sign_auth.cc",
     "blind_sign_auth/cached_blind_sign_auth.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 5f25812..2e5c6c2 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1572,6 +1572,7 @@
     "src/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/verifier.h",
     "src/quiche/blind_sign_auth/anonymous_tokens/cpp/shared/proto_utils.h",
     "src/quiche/blind_sign_auth/anonymous_tokens/cpp/shared/status_utils.h",
+    "src/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h",
     "src/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h",
     "src/quiche/blind_sign_auth/blind_sign_auth.h",
     "src/quiche/blind_sign_auth/blind_sign_auth_interface.h",
@@ -1588,6 +1589,7 @@
     "src/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blinder.cc",
     "src/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_ssa_pss_verifier.cc",
     "src/quiche/blind_sign_auth/anonymous_tokens/cpp/shared/proto_utils.cc",
+    "src/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.cc",
     "src/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.cc",
     "src/quiche/blind_sign_auth/blind_sign_auth.cc",
     "src/quiche/blind_sign_auth/cached_blind_sign_auth.cc",
diff --git a/build/source_list.json b/build/source_list.json
index ae24505..f30cdfa 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1571,6 +1571,7 @@
     "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/verifier.h",
     "quiche/blind_sign_auth/anonymous_tokens/cpp/shared/proto_utils.h",
     "quiche/blind_sign_auth/anonymous_tokens/cpp/shared/status_utils.h",
+    "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h",
     "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h",
     "quiche/blind_sign_auth/blind_sign_auth.h",
     "quiche/blind_sign_auth/blind_sign_auth_interface.h",
@@ -1587,6 +1588,7 @@
     "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blinder.cc",
     "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_ssa_pss_verifier.cc",
     "quiche/blind_sign_auth/anonymous_tokens/cpp/shared/proto_utils.cc",
+    "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.cc",
     "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.cc",
     "quiche/blind_sign_auth/blind_sign_auth.cc",
     "quiche/blind_sign_auth/cached_blind_sign_auth.cc"
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/client/anonymous_tokens_rsa_bssa_client_test.cc b/quiche/blind_sign_auth/anonymous_tokens/cpp/client/anonymous_tokens_rsa_bssa_client_test.cc
index 25cf416..b013b5a 100644
--- a/quiche/blind_sign_auth/anonymous_tokens/cpp/client/anonymous_tokens_rsa_bssa_client_test.cc
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/client/anonymous_tokens_rsa_bssa_client_test.cc
@@ -26,6 +26,7 @@
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blind_signer.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/shared/proto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/shared/status_utils.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
 #include "openssl/base.h"
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/at_crypto_utils_test.cc b/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/at_crypto_utils_test.cc
index 24ff66f..940c112 100644
--- a/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/at_crypto_utils_test.cc
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/at_crypto_utils_test.cc
@@ -23,6 +23,7 @@
 #include "quiche/common/test_tools/quiche_test_utils.h"
 #include "absl/strings/escaping.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
 #include "openssl/base.h"
 #include "openssl/rsa.h"
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blind_signer_test.cc b/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blind_signer_test.cc
index a332f19..47d2093 100644
--- a/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blind_signer_test.cc
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blind_signer_test.cc
@@ -27,6 +27,7 @@
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/constants.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/crypto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_ssa_pss_verifier.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
 #include "openssl/digest.h"
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blinder_test.cc b/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blinder_test.cc
index 509bfda..7c16753 100644
--- a/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blinder_test.cc
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_blinder_test.cc
@@ -26,6 +26,7 @@
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/constants.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/crypto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
 #include "openssl/base.h"
 #include "openssl/rsa.h"
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_ssa_pss_verifier_test.cc b/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_ssa_pss_verifier_test.cc
index 2732c75..52dc988 100644
--- a/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_ssa_pss_verifier_test.cc
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/rsa_ssa_pss_verifier_test.cc
@@ -25,6 +25,7 @@
 #include "absl/strings/string_view.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/constants.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/crypto_utils.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
 #include "openssl/rsa.h"
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.cc b/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.cc
new file mode 100644
index 0000000..51f8b8a
--- /dev/null
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.cc
@@ -0,0 +1,294 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h"
+
+#include <cstdint>
+#include <fstream>
+#include <ios>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "absl/status/status.h"
+#include "absl/status/statusor.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/string_view.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/constants.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/crypto_utils.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/shared/status_utils.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
+#include "quiche/common/platform/api/quiche_file_utils.h"
+#include "quiche/common/platform/api/quiche_test.h"
+#include "openssl/base.h"
+#include "openssl/bn.h"
+#include "openssl/rsa.h"
+
+namespace private_membership {
+namespace anonymous_tokens {
+
+namespace {
+
+absl::StatusOr<std::string> ReadFileToString(absl::string_view path) {
+  std::ifstream file(std::string(path), std::ios::binary);
+  if (!file.is_open()) {
+    return absl::InternalError("Reading file failed.");
+  }
+  std::ostringstream ss(std::ios::binary);
+  ss << file.rdbuf();
+  return ss.str();
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> ParseRsaKeysFromFile(
+    absl::string_view path) {
+  ANON_TOKENS_ASSIGN_OR_RETURN(std::string binary_proto,
+                               ReadFileToString(path));
+  RSAPrivateKey private_key;
+  if (!private_key.ParseFromString(binary_proto)) {
+    return absl::InternalError("Parsing binary proto failed.");
+  }
+  RSAPublicKey public_key;
+  public_key.set_n(private_key.n());
+  public_key.set_e(private_key.e());
+  return std::make_pair(std::move(public_key), std::move(private_key));
+}
+
+absl::StatusOr<bssl::UniquePtr<RSA>> GenerateRSAKey(int modulus_bit_size,
+                                                    const BIGNUM& e) {
+  bssl::UniquePtr<RSA> rsa(RSA_new());
+  if (!rsa.get()) {
+    return absl::InternalError(
+        absl::StrCat("RSA_new failed: ", GetSslErrors()));
+  }
+  if (RSA_generate_key_ex(rsa.get(), modulus_bit_size, &e,
+                          /*cb=*/nullptr) != kBsslSuccess) {
+    return absl::InternalError(
+        absl::StrCat("Error generating private key: ", GetSslErrors()));
+  }
+  return rsa;
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> PopulateTestVectorKeys(
+    const std::string& n, const std::string& e, const std::string& d,
+    const std::string& p, const std::string& q) {
+  RSAPublicKey public_key;
+  RSAPrivateKey private_key;
+
+  public_key.set_n(n);
+  public_key.set_e(e);
+
+  private_key.set_n(n);
+  private_key.set_e(e);
+  private_key.set_d(d);
+  private_key.set_p(p);
+  private_key.set_q(q);
+
+  // Computing CRT parameters
+  ANON_TOKENS_ASSIGN_OR_RETURN(BnCtxPtr bn_ctx, GetAndStartBigNumCtx());
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> dp_bn, NewBigNum());
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> dq_bn, NewBigNum());
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> crt_bn, NewBigNum());
+
+  // p - 1
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> pm1, StringToBignum(p));
+  BN_sub_word(pm1.get(), 1);
+  // q - 1
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> qm1, StringToBignum(q));
+  BN_sub_word(qm1.get(), 1);
+  // d mod p-1
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> d_bn, StringToBignum(d));
+  BN_mod(dp_bn.get(), d_bn.get(), pm1.get(), bn_ctx.get());
+  // d mod q-1
+  BN_mod(dq_bn.get(), d_bn.get(), qm1.get(), bn_ctx.get());
+  // crt q^(-1) mod p
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> q_bn, StringToBignum(q));
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> p_bn, StringToBignum(p));
+  BN_mod_inverse(crt_bn.get(), q_bn.get(), p_bn.get(), bn_ctx.get());
+
+  // Populating crt params in private key
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      std::string dp_str, BignumToString(*dp_bn, BN_num_bytes(dp_bn.get())));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      std::string dq_str, BignumToString(*dq_bn, BN_num_bytes(dq_bn.get())));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      std::string crt_str, BignumToString(*crt_bn, BN_num_bytes(crt_bn.get())));
+  private_key.set_dp(dp_str);
+  private_key.set_dq(dq_str);
+  private_key.set_crt(crt_str);
+
+  return std::make_pair(std::move(public_key), std::move(private_key));
+}
+
+}  // namespace
+
+absl::StatusOr<std::pair<bssl::UniquePtr<RSA>, RSABlindSignaturePublicKey>>
+CreateTestKey(int key_size, HashType sig_hash, MaskGenFunction mfg1_hash,
+              int salt_length, MessageMaskType message_mask_type,
+              int message_mask_size) {
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> rsa_f4, NewBigNum());
+  BN_set_u64(rsa_f4.get(), RSA_F4);
+
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<RSA> rsa_key,
+                               GenerateRSAKey(key_size * 8, *rsa_f4));
+
+  RSAPublicKey rsa_public_key;
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_public_key.mutable_n(),
+      BignumToString(*RSA_get0_n(rsa_key.get()), key_size));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_public_key.mutable_e(),
+      BignumToString(*RSA_get0_e(rsa_key.get()), key_size));
+
+  RSABlindSignaturePublicKey public_key;
+  public_key.set_serialized_public_key(rsa_public_key.SerializeAsString());
+  public_key.set_sig_hash_type(sig_hash);
+  public_key.set_mask_gen_function(mfg1_hash);
+  public_key.set_salt_length(salt_length);
+  public_key.set_key_size(key_size);
+  public_key.set_message_mask_type(message_mask_type);
+  public_key.set_message_mask_size(message_mask_size);
+
+  return std::make_pair(std::move(rsa_key), std::move(public_key));
+}
+
+absl::StatusOr<std::string> EncodeMessageForTests(absl::string_view message,
+                                                  RSAPublicKey public_key,
+                                                  const EVP_MD* sig_hasher,
+                                                  const EVP_MD* mgf1_hasher,
+                                                  int32_t salt_length) {
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> rsa_modulus,
+                               StringToBignum(public_key.n()));
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> e,
+                               StringToBignum(public_key.e()));
+  // Convert to OpenSSL RSA.
+  bssl::UniquePtr<RSA> rsa_public_key(RSA_new());
+  if (!rsa_public_key.get()) {
+    return absl::InternalError(
+        absl::StrCat("RSA_new failed: ", GetSslErrors()));
+  } else if (RSA_set0_key(rsa_public_key.get(), rsa_modulus.release(),
+                          e.release(), nullptr) != kBsslSuccess) {
+    return absl::InternalError(
+        absl::StrCat("RSA_set0_key failed: ", GetSslErrors()));
+  }
+
+  const int padded_len = RSA_size(rsa_public_key.get());
+  std::vector<uint8_t> padded(padded_len);
+  ANON_TOKENS_ASSIGN_OR_RETURN(std::string digest,
+                               ComputeHash(message, *sig_hasher));
+  if (RSA_padding_add_PKCS1_PSS_mgf1(
+          /*rsa=*/rsa_public_key.get(), /*EM=*/padded.data(),
+          /*mHash=*/reinterpret_cast<uint8_t*>(&digest[0]), /*Hash=*/sig_hasher,
+          /*mgf1Hash=*/mgf1_hasher,
+          /*sLen=*/salt_length) != kBsslSuccess) {
+    return absl::InternalError(
+        "RSA_padding_add_PKCS1_PSS_mgf1 failed when called from "
+        "testing_utils");
+  }
+  std::string encoded_message(padded.begin(), padded.end());
+  return encoded_message;
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStandardRsaKeyPair(
+    int modulus_size_in_bytes) {
+  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> rsa_f4, NewBigNum());
+  BN_set_u64(rsa_f4.get(), RSA_F4);
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      bssl::UniquePtr<RSA> rsa_key,
+      GenerateRSAKey(modulus_size_in_bytes * 8, *rsa_f4));
+
+  RSAPublicKey rsa_public_key;
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_public_key.mutable_n(),
+      BignumToString(*RSA_get0_n(rsa_key.get()), modulus_size_in_bytes));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_public_key.mutable_e(),
+      BignumToString(*RSA_get0_e(rsa_key.get()), modulus_size_in_bytes));
+
+  RSAPrivateKey rsa_private_key;
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_private_key.mutable_n(),
+      BignumToString(*RSA_get0_n(rsa_key.get()), modulus_size_in_bytes));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_private_key.mutable_e(),
+      BignumToString(*RSA_get0_e(rsa_key.get()), modulus_size_in_bytes));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_private_key.mutable_d(),
+      BignumToString(*RSA_get0_d(rsa_key.get()), modulus_size_in_bytes));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_private_key.mutable_p(),
+      BignumToString(*RSA_get0_p(rsa_key.get()), modulus_size_in_bytes));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_private_key.mutable_q(),
+      BignumToString(*RSA_get0_q(rsa_key.get()), modulus_size_in_bytes));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_private_key.mutable_dp(),
+      BignumToString(*RSA_get0_dmp1(rsa_key.get()), modulus_size_in_bytes));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_private_key.mutable_dq(),
+      BignumToString(*RSA_get0_dmq1(rsa_key.get()), modulus_size_in_bytes));
+  ANON_TOKENS_ASSIGN_OR_RETURN(
+      *rsa_private_key.mutable_crt(),
+      BignumToString(*RSA_get0_iqmp(rsa_key.get()), modulus_size_in_bytes));
+
+  return std::make_pair(std::move(rsa_public_key), std::move(rsa_private_key));
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys2048() {
+  std::string path = absl::StrCat(quiche::test::QuicheGetCommonSourcePath(),
+                                  "/anonymous_tokens/testdata/strong_rsa_modulus2048_example.binarypb");
+  ANON_TOKENS_ASSIGN_OR_RETURN(auto key_pair, ParseRsaKeysFromFile(path));
+  return std::make_pair(std::move(key_pair.first), std::move(key_pair.second));
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
+GetAnotherStrongRsaKeys2048() {
+  std::string path = absl::StrCat(quiche::test::QuicheGetCommonSourcePath(),
+                                  "/anonymous_tokens/testdata/strong_rsa_modulus2048_example_2.binarypb");
+  ANON_TOKENS_ASSIGN_OR_RETURN(auto key_pair, ParseRsaKeysFromFile(path));
+  return std::make_pair(std::move(key_pair.first), std::move(key_pair.second));
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys3072() {
+  std::string path = absl::StrCat(quiche::test::QuicheGetCommonSourcePath(),
+                                  "/anonymous_tokens/testdata/strong_rsa_modulus3072_example.binarypb");
+  ANON_TOKENS_ASSIGN_OR_RETURN(auto key_pair, ParseRsaKeysFromFile(path));
+  return std::make_pair(std::move(key_pair.first), std::move(key_pair.second));
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys4096() {
+  std::string path = absl::StrCat(quiche::test::QuicheGetCommonSourcePath(),
+                                  "/anonymous_tokens/testdata/strong_rsa_modulus4096_example.binarypb");
+  ANON_TOKENS_ASSIGN_OR_RETURN(auto key_pair, ParseRsaKeysFromFile(path));
+  return std::make_pair(std::move(key_pair.first), std::move(key_pair.second));
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
+GetIetfStandardRsaBlindSignatureTestKeys() {
+  IetfStandardRsaBlindSignatureTestVector test_vector =
+      GetIetfStandardRsaBlindSignatureTestVector();
+  return PopulateTestVectorKeys(test_vector.n, test_vector.e, test_vector.d,
+                                test_vector.p, test_vector.q);
+}
+
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
+GetIetfRsaBlindSignatureWithPublicMetadataTestKeys() {
+  auto test_vectors = GetIetfRsaBlindSignatureWithPublicMetadataTestVectors();
+  return PopulateTestVectorKeys(test_vectors[0].n, test_vectors[0].e,
+                                test_vectors[0].d, test_vectors[0].p,
+                                test_vectors[0].q);
+}
+
+}  // namespace anonymous_tokens
+}  // namespace private_membership
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h b/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h
new file mode 100644
index 0000000..6b1359d
--- /dev/null
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h
@@ -0,0 +1,84 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef THIRD_PARTY_ANONYMOUS_TOKENS_CPP_TESTING_PROTO_UTILS_H_
+#define THIRD_PARTY_ANONYMOUS_TOKENS_CPP_TESTING_PROTO_UTILS_H_
+
+#include <string>
+#include <utility>
+#include <cstdint>
+
+#include "absl/status/statusor.h"
+#include "absl/strings/string_view.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/constants.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
+#include "openssl/base.h"
+
+namespace private_membership {
+namespace anonymous_tokens {
+
+// Creates a pair containing a standard RSA Private key and an Anonymous Tokens
+// RSABlindSignaturePublicKey using RSA_F4 (65537) as the public exponent and
+// other input parameters.
+absl::StatusOr<std::pair<bssl::UniquePtr<RSA>, RSABlindSignaturePublicKey>>
+CreateTestKey(int key_size = 512, HashType sig_hash = AT_HASH_TYPE_SHA384,
+              MaskGenFunction mfg1_hash = AT_MGF_SHA384, int salt_length = 48,
+              MessageMaskType message_mask_type = AT_MESSAGE_MASK_CONCAT,
+              int message_mask_size = kRsaMessageMaskSizeInBytes32);
+
+// Prepares message for signing by computing its hash and then applying the PSS
+// padding to the result by executing RSA_padding_add_PKCS1_PSS_mgf1 from the
+// openssl library, using the input parameters.
+//
+// This is a test function and it skips the message blinding part.
+absl::StatusOr<std::string> EncodeMessageForTests(absl::string_view message,
+                                                  RSAPublicKey public_key,
+                                                  const EVP_MD* sig_hasher,
+                                                  const EVP_MD* mgf1_hasher,
+                                                  int32_t salt_length);
+
+// This method returns a newly generated RSA key pair, setting the public
+// exponent to be the standard RSA_F4 (65537) and the default modulus size to
+// 512 bytes.
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStandardRsaKeyPair(
+    int modulus_size_in_bytes = kRsaModulusSizeInBytes512);
+
+// Method returns fixed 2048-bit strong RSA modulus for testing.
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys2048();
+
+// Method returns another fixed 2048-bit strong RSA modulus for testing.
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
+GetAnotherStrongRsaKeys2048();
+
+// Method returns fixed 3072-bit strong RSA modulus for testing.
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys3072();
+
+// Method returns fixed 4096-bit strong RSA modulus for testing.
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys4096();
+
+// This method returns a RSA key pair as described in the IETF test example
+// above.
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
+GetIetfStandardRsaBlindSignatureTestKeys();
+
+// This method returns a RSA key pair as described in the IETF test with Public
+// Metadata example. It can be used for all test vectors returned by
+// GetIetfRsaBlindSignatureWithPublicMetadataTestVectors.
+absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
+GetIetfRsaBlindSignatureWithPublicMetadataTestKeys();
+
+}  // namespace anonymous_tokens
+}  // namespace private_membership
+
+#endif  // THIRD_PARTY_ANONYMOUS_TOKENS_CPP_TESTING_PROTO_UTILS_H_
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.cc b/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.cc
index 63fd304..3b48f9a 100644
--- a/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.cc
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.cc
@@ -13,16 +13,10 @@
 // limitations under the License.
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
 
-#include <stddef.h>
-#include <stdint.h>
-
-#include <fstream>
-#include <ios>
-#include <memory>
+#include <cstddef>
+#include <cstdint>
 #include <random>
-#include <sstream>
 #include <string>
-#include <utility>
 #include <vector>
 
 #include "absl/status/status.h"
@@ -33,138 +27,15 @@
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/constants.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/crypto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/shared/status_utils.h"
-#include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
 #include "quiche/common/platform/api/quiche_file_utils.h"
 #include "quiche/common/platform/api/quiche_test.h"
+#include "openssl/base.h"
+#include "openssl/bn.h"
 #include "openssl/rsa.h"
 
 namespace private_membership {
 namespace anonymous_tokens {
 
-namespace {
-
-absl::StatusOr<std::string> ReadFileToString(absl::string_view path) {
-  std::ifstream file(std::string(path), std::ios::binary);
-  if (!file.is_open()) {
-    return absl::InternalError("Reading file failed.");
-  }
-  std::ostringstream ss(std::ios::binary);
-  ss << file.rdbuf();
-  return ss.str();
-}
-
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> ParseRsaKeysFromFile(
-    absl::string_view path) {
-  ANON_TOKENS_ASSIGN_OR_RETURN(std::string binary_proto,
-                               ReadFileToString(path));
-  RSAPrivateKey private_key;
-  if (!private_key.ParseFromString(binary_proto)) {
-    return absl::InternalError("Parsing binary proto failed.");
-  }
-  RSAPublicKey public_key;
-  public_key.set_n(private_key.n());
-  public_key.set_e(private_key.e());
-  return std::make_pair(std::move(public_key), std::move(private_key));
-}
-
-absl::StatusOr<bssl::UniquePtr<RSA>> GenerateRSAKey(int modulus_bit_size,
-                                                    const BIGNUM& e) {
-  bssl::UniquePtr<RSA> rsa(RSA_new());
-  if (!rsa.get()) {
-    return absl::InternalError(
-        absl::StrCat("RSA_new failed: ", GetSslErrors()));
-  }
-  if (RSA_generate_key_ex(rsa.get(), modulus_bit_size, &e,
-                          /*cb=*/nullptr) != kBsslSuccess) {
-    return absl::InternalError(
-        absl::StrCat("Error generating private key: ", GetSslErrors()));
-  }
-  return rsa;
-}
-
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> PopulateTestVectorKeys(
-    const std::string& n, const std::string& e, const std::string& d,
-    const std::string& p, const std::string& q) {
-  RSAPublicKey public_key;
-  RSAPrivateKey private_key;
-
-  public_key.set_n(n);
-  public_key.set_e(e);
-
-  private_key.set_n(n);
-  private_key.set_e(e);
-  private_key.set_d(d);
-  private_key.set_p(p);
-  private_key.set_q(q);
-
-  // Computing CRT parameters
-  ANON_TOKENS_ASSIGN_OR_RETURN(BnCtxPtr bn_ctx, GetAndStartBigNumCtx());
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> dp_bn, NewBigNum());
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> dq_bn, NewBigNum());
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> crt_bn, NewBigNum());
-
-  // p - 1
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> pm1, StringToBignum(p));
-  BN_sub_word(pm1.get(), 1);
-  // q - 1
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> qm1, StringToBignum(q));
-  BN_sub_word(qm1.get(), 1);
-  // d mod p-1
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> d_bn, StringToBignum(d));
-  BN_mod(dp_bn.get(), d_bn.get(), pm1.get(), bn_ctx.get());
-  // d mod q-1
-  BN_mod(dq_bn.get(), d_bn.get(), qm1.get(), bn_ctx.get());
-  // crt q^(-1) mod p
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> q_bn, StringToBignum(q));
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> p_bn, StringToBignum(p));
-  BN_mod_inverse(crt_bn.get(), q_bn.get(), p_bn.get(), bn_ctx.get());
-
-  // Populating crt params in private key
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      std::string dp_str, BignumToString(*dp_bn, BN_num_bytes(dp_bn.get())));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      std::string dq_str, BignumToString(*dq_bn, BN_num_bytes(dq_bn.get())));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      std::string crt_str, BignumToString(*crt_bn, BN_num_bytes(crt_bn.get())));
-  private_key.set_dp(dp_str);
-  private_key.set_dq(dq_str);
-  private_key.set_crt(crt_str);
-
-  return std::make_pair(std::move(public_key), std::move(private_key));
-}
-
-}  // namespace
-
-absl::StatusOr<std::pair<bssl::UniquePtr<RSA>, RSABlindSignaturePublicKey>>
-CreateTestKey(int key_size, HashType sig_hash, MaskGenFunction mfg1_hash,
-              int salt_length, MessageMaskType message_mask_type,
-              int message_mask_size) {
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> rsa_f4, NewBigNum());
-  BN_set_u64(rsa_f4.get(), RSA_F4);
-
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<RSA> rsa_key,
-                               GenerateRSAKey(key_size * 8, *rsa_f4));
-
-  RSAPublicKey rsa_public_key;
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_public_key.mutable_n(),
-      BignumToString(*RSA_get0_n(rsa_key.get()), key_size));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_public_key.mutable_e(),
-      BignumToString(*RSA_get0_e(rsa_key.get()), key_size));
-
-  RSABlindSignaturePublicKey public_key;
-  public_key.set_serialized_public_key(rsa_public_key.SerializeAsString());
-  public_key.set_sig_hash_type(sig_hash);
-  public_key.set_mask_gen_function(mfg1_hash);
-  public_key.set_salt_length(salt_length);
-  public_key.set_key_size(key_size);
-  public_key.set_message_mask_type(message_mask_type);
-  public_key.set_message_mask_size(message_mask_size);
-
-  return std::make_pair(std::move(rsa_key), std::move(public_key));
-}
-
 absl::StatusOr<std::string> TestSign(const absl::string_view blinded_data,
                                      RSA* rsa_key) {
   if (blinded_data.empty()) {
@@ -268,117 +139,6 @@
   return BignumToString(*result, BN_num_bytes(RSA_get0_n(&rsa_key)));
 }
 
-absl::StatusOr<std::string> EncodeMessageForTests(absl::string_view message,
-                                                  RSAPublicKey public_key,
-                                                  const EVP_MD* sig_hasher,
-                                                  const EVP_MD* mgf1_hasher,
-                                                  int32_t salt_length) {
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> rsa_modulus,
-                               StringToBignum(public_key.n()));
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> e,
-                               StringToBignum(public_key.e()));
-  // Convert to OpenSSL RSA.
-  bssl::UniquePtr<RSA> rsa_public_key(RSA_new());
-  if (!rsa_public_key.get()) {
-    return absl::InternalError(
-        absl::StrCat("RSA_new failed: ", GetSslErrors()));
-  } else if (RSA_set0_key(rsa_public_key.get(), rsa_modulus.release(),
-                          e.release(), nullptr) != kBsslSuccess) {
-    return absl::InternalError(
-        absl::StrCat("RSA_set0_key failed: ", GetSslErrors()));
-  }
-
-  const int padded_len = RSA_size(rsa_public_key.get());
-  std::vector<uint8_t> padded(padded_len);
-  ANON_TOKENS_ASSIGN_OR_RETURN(std::string digest,
-                               ComputeHash(message, *sig_hasher));
-  if (RSA_padding_add_PKCS1_PSS_mgf1(
-          /*rsa=*/rsa_public_key.get(), /*EM=*/padded.data(),
-          /*mHash=*/reinterpret_cast<uint8_t*>(&digest[0]), /*Hash=*/sig_hasher,
-          /*mgf1Hash=*/mgf1_hasher,
-          /*sLen=*/salt_length) != kBsslSuccess) {
-    return absl::InternalError(
-        "RSA_padding_add_PKCS1_PSS_mgf1 failed when called from "
-        "testing_utils");
-  }
-  std::string encoded_message(padded.begin(), padded.end());
-  return encoded_message;
-}
-
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStandardRsaKeyPair(
-    int modulus_size_in_bytes) {
-  ANON_TOKENS_ASSIGN_OR_RETURN(bssl::UniquePtr<BIGNUM> rsa_f4, NewBigNum());
-  BN_set_u64(rsa_f4.get(), RSA_F4);
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      bssl::UniquePtr<RSA> rsa_key,
-      GenerateRSAKey(modulus_size_in_bytes * 8, *rsa_f4));
-
-  RSAPublicKey rsa_public_key;
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_public_key.mutable_n(),
-      BignumToString(*RSA_get0_n(rsa_key.get()), modulus_size_in_bytes));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_public_key.mutable_e(),
-      BignumToString(*RSA_get0_e(rsa_key.get()), modulus_size_in_bytes));
-
-  RSAPrivateKey rsa_private_key;
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_private_key.mutable_n(),
-      BignumToString(*RSA_get0_n(rsa_key.get()), modulus_size_in_bytes));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_private_key.mutable_e(),
-      BignumToString(*RSA_get0_e(rsa_key.get()), modulus_size_in_bytes));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_private_key.mutable_d(),
-      BignumToString(*RSA_get0_d(rsa_key.get()), modulus_size_in_bytes));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_private_key.mutable_p(),
-      BignumToString(*RSA_get0_p(rsa_key.get()), modulus_size_in_bytes));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_private_key.mutable_q(),
-      BignumToString(*RSA_get0_q(rsa_key.get()), modulus_size_in_bytes));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_private_key.mutable_dp(),
-      BignumToString(*RSA_get0_dmp1(rsa_key.get()), modulus_size_in_bytes));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_private_key.mutable_dq(),
-      BignumToString(*RSA_get0_dmq1(rsa_key.get()), modulus_size_in_bytes));
-  ANON_TOKENS_ASSIGN_OR_RETURN(
-      *rsa_private_key.mutable_crt(),
-      BignumToString(*RSA_get0_iqmp(rsa_key.get()), modulus_size_in_bytes));
-
-  return std::make_pair(std::move(rsa_public_key), std::move(rsa_private_key));
-}
-
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys2048() {
-  std::string path = absl::StrCat(quiche::test::QuicheGetCommonSourcePath(),
-                                  "/anonymous_tokens/testdata/strong_rsa_modulus2048_example.binarypb");
-  ANON_TOKENS_ASSIGN_OR_RETURN(auto key_pair, ParseRsaKeysFromFile(path));
-  return std::make_pair(std::move(key_pair.first), std::move(key_pair.second));
-}
-
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
-GetAnotherStrongRsaKeys2048() {
-  std::string path = absl::StrCat(quiche::test::QuicheGetCommonSourcePath(),
-                                  "/anonymous_tokens/testdata/strong_rsa_modulus2048_example_2.binarypb");
-  ANON_TOKENS_ASSIGN_OR_RETURN(auto key_pair, ParseRsaKeysFromFile(path));
-  return std::make_pair(std::move(key_pair.first), std::move(key_pair.second));
-}
-
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys3072() {
-  std::string path = absl::StrCat(quiche::test::QuicheGetCommonSourcePath(),
-                                  "/anonymous_tokens/testdata/strong_rsa_modulus3072_example.binarypb");
-  ANON_TOKENS_ASSIGN_OR_RETURN(auto key_pair, ParseRsaKeysFromFile(path));
-  return std::make_pair(std::move(key_pair.first), std::move(key_pair.second));
-}
-
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys4096() {
-  std::string path = absl::StrCat(quiche::test::QuicheGetCommonSourcePath(),
-                                  "/anonymous_tokens/testdata/strong_rsa_modulus4096_example.binarypb");
-  ANON_TOKENS_ASSIGN_OR_RETURN(auto key_pair, ParseRsaKeysFromFile(path));
-  return std::make_pair(std::move(key_pair.first), std::move(key_pair.second));
-}
-
 IetfStandardRsaBlindSignatureTestVector
 GetIetfStandardRsaBlindSignatureTestVector() {
   IetfStandardRsaBlindSignatureTestVector test_vector = {
@@ -761,22 +521,6 @@
   return test_vectors;
 }
 
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
-GetIetfStandardRsaBlindSignatureTestKeys() {
-  IetfStandardRsaBlindSignatureTestVector test_vector =
-      GetIetfStandardRsaBlindSignatureTestVector();
-  return PopulateTestVectorKeys(test_vector.n, test_vector.e, test_vector.d,
-                                test_vector.p, test_vector.q);
-}
-
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
-GetIetfRsaBlindSignatureWithPublicMetadataTestKeys() {
-  auto test_vectors = GetIetfRsaBlindSignatureWithPublicMetadataTestVectors();
-  return PopulateTestVectorKeys(test_vectors[0].n, test_vectors[0].e,
-                                test_vectors[0].d, test_vectors[0].p,
-                                test_vectors[0].q);
-}
-
 std::string RandomString(int n, std::uniform_int_distribution<int>* distr_u8,
                          std::mt19937_64* generator) {
   std::string rand(n, 0);
diff --git a/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h b/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h
index 5c6aa1c..c2993cd 100644
--- a/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h
+++ b/quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h
@@ -15,16 +15,11 @@
 #ifndef THIRD_PARTY_ANONYMOUS_TOKENS_CPP_TESTING_UTILS_H_
 #define THIRD_PARTY_ANONYMOUS_TOKENS_CPP_TESTING_UTILS_H_
 
-#include <stdint.h>
-
 #include <random>
 #include <string>
-#include <utility>
 
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
-#include "quiche/blind_sign_auth/anonymous_tokens/cpp/crypto/constants.h"
-#include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
 #include "openssl/base.h"
 
 namespace private_membership {
@@ -59,26 +54,6 @@
   std::string signature;
 };
 
-// Creates a pair containing a standard RSA Private key and an Anonymous Tokens
-// RSABlindSignaturePublicKey using RSA_F4 (65537) as the public exponent and
-// other input parameters.
-absl::StatusOr<std::pair<bssl::UniquePtr<RSA>, RSABlindSignaturePublicKey>>
-CreateTestKey(int key_size = 512, HashType sig_hash = AT_HASH_TYPE_SHA384,
-              MaskGenFunction mfg1_hash = AT_MGF_SHA384, int salt_length = 48,
-              MessageMaskType message_mask_type = AT_MESSAGE_MASK_CONCAT,
-              int message_mask_size = kRsaMessageMaskSizeInBytes32);
-
-// Prepares message for signing by computing its hash and then applying the PSS
-// padding to the result by executing RSA_padding_add_PKCS1_PSS_mgf1 from the
-// openssl library, using the input parameters.
-//
-// This is a test function and it skips the message blinding part.
-absl::StatusOr<std::string> EncodeMessageForTests(absl::string_view message,
-                                                  RSAPublicKey public_key,
-                                                  const EVP_MD* sig_hasher,
-                                                  const EVP_MD* mgf1_hasher,
-                                                  int32_t salt_length);
-
 // TestSign can be removed once rsa_blind_signer is moved to
 // anonympous_tokens/public/cpp/crypto
 absl::StatusOr<std::string> TestSign(absl::string_view blinded_data,
@@ -90,35 +65,11 @@
     absl::string_view blinded_data, absl::string_view public_metadata,
     const RSA& rsa_key);
 
-// This method returns a newly generated RSA key pair, setting the public
-// exponent to be the standard RSA_F4 (65537) and the default modulus size to
-// 512 bytes.
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStandardRsaKeyPair(
-    int modulus_size_in_bytes = kRsaModulusSizeInBytes512);
-
-// Method returns fixed 2048-bit strong RSA modulus for testing.
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys2048();
-
-// Method returns another fixed 2048-bit strong RSA modulus for testing.
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
-GetAnotherStrongRsaKeys2048();
-
-// Method returns fixed 3072-bit strong RSA modulus for testing.
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys3072();
-
-// Method returns fixed 4096-bit strong RSA modulus for testing.
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>> GetStrongRsaKeys4096();
-
 // Returns the IETF test example from
 // https://datatracker.ietf.org/doc/draft-irtf-cfrg-rsa-blind-signatures/
 IetfStandardRsaBlindSignatureTestVector
 GetIetfStandardRsaBlindSignatureTestVector();
 
-// This method returns a RSA key pair as described in the IETF test example
-// above.
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
-GetIetfStandardRsaBlindSignatureTestKeys();
-
 // Returns the IETF test with Public Metadata examples from
 // https://datatracker.ietf.org/doc/draft-amjad-cfrg-partially-blind-rsa/
 //
@@ -126,12 +77,6 @@
 std::vector<IetfRsaBlindSignatureWithPublicMetadataTestVector>
 GetIetfRsaBlindSignatureWithPublicMetadataTestVectors();
 
-// This method returns a RSA key pair as described in the IETF test with Public
-// Metadata example. It can be used for all test vectors returned by
-// GetIetfRsaBlindSignatureWithPublicMetadataTestVectors.
-absl::StatusOr<std::pair<RSAPublicKey, RSAPrivateKey>>
-GetIetfRsaBlindSignatureWithPublicMetadataTestKeys();
-
 // Outputs a random string of n characters.
 std::string RandomString(int n, std::uniform_int_distribution<int>* distr_u8,
                          std::mt19937_64* generator);
diff --git a/quiche/blind_sign_auth/blind_sign_auth_test.cc b/quiche/blind_sign_auth/blind_sign_auth_test.cc
index 3a5d842..ff1e969 100644
--- a/quiche/blind_sign_auth/blind_sign_auth_test.cc
+++ b/quiche/blind_sign_auth/blind_sign_auth_test.cc
@@ -19,6 +19,7 @@
 #include "absl/status/statusor.h"
 #include "absl/strings/escaping.h"
 #include "absl/strings/string_view.h"
+#include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h"
 #include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h"
 #include "openssl/base.h"