diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index 3458c99..9cccff9 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -229,6 +229,28 @@
   return out;
 }
 
+ParsedQuicVersionVector AllSupportedVersionsWithQuicCrypto() {
+  ParsedQuicVersionVector versions;
+  for (const ParsedQuicVersion& version : AllSupportedVersions()) {
+    if (version.handshake_protocol == PROTOCOL_QUIC_CRYPTO) {
+      versions.push_back(version);
+    }
+  }
+  QUIC_BUG_IF(versions.empty()) << "No version with QUIC crypto found.";
+  return versions;
+}
+
+ParsedQuicVersionVector CurrentSupportedVersionsWithQuicCrypto() {
+  ParsedQuicVersionVector versions;
+  for (const ParsedQuicVersion& version : CurrentSupportedVersions()) {
+    if (version.handshake_protocol == PROTOCOL_QUIC_CRYPTO) {
+      versions.push_back(version);
+    }
+  }
+  QUIC_BUG_IF(versions.empty()) << "No version with QUIC crypto found.";
+  return versions;
+}
+
 ParsedQuicVersion ParseQuicVersionLabel(QuicVersionLabel version_label) {
   for (const ParsedQuicVersion& version : AllSupportedVersions()) {
     if (version_label == CreateQuicVersionLabel(version)) {
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index bc15354..3151fa2 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -363,6 +363,18 @@
 QUIC_EXPORT_PRIVATE ParsedQuicVersionVector
 FilterSupportedVersions(ParsedQuicVersionVector versions);
 
+// Returns a subset of AllSupportedVersions() with
+// handshake_protocol == PROTOCOL_QUIC_CRYPTO, in the same order.
+// Deprecated; only to be used in components that do not yet support
+// PROTOCOL_TLS1_3.
+ParsedQuicVersionVector AllSupportedVersionsWithQuicCrypto();
+
+// Returns a subset of CurrentSupportedVersions() with
+// handshake_protocol == PROTOCOL_QUIC_CRYPTO, in the same order.
+// Deprecated; only to be used in components that do not yet support
+// PROTOCOL_TLS1_3.
+ParsedQuicVersionVector CurrentSupportedVersionsWithQuicCrypto();
+
 // Returns QUIC version of |index| in result of |versions|. Returns
 // QUIC_VERSION_UNSUPPORTED if |index| is out of bounds.
 QUIC_EXPORT_PRIVATE QuicTransportVersionVector
diff --git a/quic/qbone/qbone_client_test.cc b/quic/qbone/qbone_client_test.cc
index 813d05b..a41e6a9 100644
--- a/quic/qbone/qbone_client_test.cc
+++ b/quic/qbone/qbone_client_test.cc
@@ -34,11 +34,8 @@
 ParsedQuicVersionVector GetTestParams() {
   ParsedQuicVersionVector test_versions;
 
-  for (const auto& version : CurrentSupportedVersions()) {
-    // TODO(b/113130636): Make QBONE work with TLS.
-    if (version.handshake_protocol == PROTOCOL_TLS1_3) {
-      continue;
-    }
+  // TODO(b/113130636): Make QBONE work with TLS.
+  for (const auto& version : CurrentSupportedVersionsWithQuicCrypto()) {
     // QBONE requires MESSAGE frames
     if (!version.SupportsMessageFrames()) {
       continue;
diff --git a/quic/qbone/qbone_session_test.cc b/quic/qbone/qbone_session_test.cc
index c3219e5..629d281 100644
--- a/quic/qbone/qbone_session_test.cc
+++ b/quic/qbone/qbone_session_test.cc
@@ -47,11 +47,8 @@
 ParsedQuicVersionVector GetTestParams() {
   ParsedQuicVersionVector test_versions;
 
-  for (const auto& version : CurrentSupportedVersions()) {
-    // TODO(b/113130636): Make QBONE work with TLS.
-    if (version.handshake_protocol == PROTOCOL_TLS1_3) {
-      continue;
-    }
+  // TODO(b/113130636): Make QBONE work with TLS.
+  for (const auto& version : CurrentSupportedVersionsWithQuicCrypto()) {
     // QBONE requires MESSAGE frames
     if (!version.SupportsMessageFrames()) {
       continue;
diff --git a/quic/quartc/quartc_stream_test.cc b/quic/quartc/quartc_stream_test.cc
index f1de032..7a8b22d 100644
--- a/quic/quartc/quartc_stream_test.cc
+++ b/quic/quartc/quartc_stream_test.cc
@@ -47,19 +47,6 @@
 
 static const QuicStreamId kStreamId = 5;
 
-ParsedQuicVersionVector GetTestParams() {
-  ParsedQuicVersionVector test_versions;
-
-  for (const auto& version : CurrentSupportedVersions()) {
-    // TODO(b/150224094): Enable versions with TLS handshake.
-    if (version.handshake_protocol != PROTOCOL_TLS1_3) {
-      test_versions.push_back(version);
-    }
-  }
-
-  return test_versions;
-}
-
 // MockQuicSession that does not create streams and writes data from
 // QuicStream to a string.
 class MockQuicSession : public QuicSession {
@@ -285,10 +272,12 @@
   MockClock clock_;
 };
 
-INSTANTIATE_TEST_SUITE_P(Tests,
-                         QuartcStreamTest,
-                         ::testing::ValuesIn(GetTestParams()),
-                         ::testing::PrintToStringParamName());
+// TODO(b/150224094): Enable versions with TLS handshake.
+INSTANTIATE_TEST_SUITE_P(
+    Tests,
+    QuartcStreamTest,
+    ::testing::ValuesIn(CurrentSupportedVersionsWithQuicCrypto()),
+    ::testing::PrintToStringParamName());
 
 // Write an entire string.
 TEST_P(QuartcStreamTest, WriteDataWhole) {
