Add GetAesGcmAeadForKeySize to subtle_util_boringssl

PiperOrigin-RevId: 269573228
diff --git a/cc/subtle/aes_gcm_boringssl.cc b/cc/subtle/aes_gcm_boringssl.cc
index 08aa301..bf9558c 100644
--- a/cc/subtle/aes_gcm_boringssl.cc
+++ b/cc/subtle/aes_gcm_boringssl.cc
@@ -22,6 +22,7 @@
 #include "tink/aead.h"
 #include "tink/subtle/random.h"
 #include "tink/subtle/subtle_util.h"
+#include "tink/subtle/subtle_util_boringssl.h"
 #include "tink/util/errors.h"
 #include "tink/util/status.h"
 #include "tink/util/statusor.h"
@@ -33,19 +34,9 @@
 namespace tink {
 namespace subtle {
 
-static const EVP_AEAD* GetAeadForKeySize(uint32_t size_in_bytes) {
-  switch (size_in_bytes) {
-    case 16:
-      return EVP_aead_aes_128_gcm();
-    case 32:
-      return EVP_aead_aes_256_gcm();
-    default:
-      return nullptr;
-  }
-}
-
 util::Status AesGcmBoringSsl::Init(absl::string_view key_value) {
-  const EVP_AEAD* aead = GetAeadForKeySize(key_value.size());
+  const EVP_AEAD* aead =
+      SubtleUtilBoringSSL::GetAesGcmAeadForKeySize(key_value.size());
   if (aead == nullptr) {
     return util::Status(util::error::INTERNAL, "invalid key size");
   }
diff --git a/cc/subtle/aes_gcm_hkdf_stream_segment_decrypter.cc b/cc/subtle/aes_gcm_hkdf_stream_segment_decrypter.cc
index ca3a929..5ad9a2d 100644
--- a/cc/subtle/aes_gcm_hkdf_stream_segment_decrypter.cc
+++ b/cc/subtle/aes_gcm_hkdf_stream_segment_decrypter.cc
@@ -50,17 +50,6 @@
 
 }  // namespace
 
-static const EVP_AEAD* GetAeadForKeySize(uint32_t size_in_bytes) {
-  switch (size_in_bytes) {
-    case 16:
-      return EVP_aead_aes_128_gcm();
-    case 32:
-      return EVP_aead_aes_256_gcm();
-    default:
-      return nullptr;
-  }
-}
-
 util::Status Validate(const AesGcmHkdfStreamSegmentDecrypter::Params& params) {
   if (!(params.hkdf_hash == SHA1 || params.hkdf_hash == SHA256 ||
         params.hkdf_hash == SHA512)) {
@@ -141,7 +130,8 @@
   key_value_ = hkdf_result.ValueOrDie();
 
   // Initialize ctx_.
-  const EVP_AEAD* aead = GetAeadForKeySize(key_value_.size());
+  const EVP_AEAD* aead =
+      SubtleUtilBoringSSL::GetAesGcmAeadForKeySize(key_value_.size());
   if (aead == nullptr) {
     return util::Status(util::error::INTERNAL, "invalid key size");
   }
diff --git a/cc/subtle/aes_gcm_hkdf_stream_segment_encrypter.cc b/cc/subtle/aes_gcm_hkdf_stream_segment_encrypter.cc
index 5f94686..2c4d6a9 100644
--- a/cc/subtle/aes_gcm_hkdf_stream_segment_encrypter.cc
+++ b/cc/subtle/aes_gcm_hkdf_stream_segment_encrypter.cc
@@ -51,17 +51,6 @@
 const int AesGcmHkdfStreamSegmentEncrypter::kNoncePrefixSizeInBytes;
 const int AesGcmHkdfStreamSegmentEncrypter::kTagSizeInBytes;
 
-static const EVP_AEAD* GetAeadForKeySize(uint32_t size_in_bytes) {
-  switch (size_in_bytes) {
-    case 16:
-      return EVP_aead_aes_128_gcm();
-    case 32:
-      return EVP_aead_aes_256_gcm();
-    default:
-      return nullptr;
-  }
-}
-
 util::Status Validate(const AesGcmHkdfStreamSegmentEncrypter::Params& params) {
   if (params.key_value.size() != 16 && params.key_value.size() != 32) {
     return util::Status(util::error::INVALID_ARGUMENT,
@@ -88,7 +77,8 @@
 
 util::Status AesGcmHkdfStreamSegmentEncrypter::InitCtx(
     absl::string_view key_value) {
-  const EVP_AEAD* aead = GetAeadForKeySize(key_value.size());
+  const EVP_AEAD* aead =
+      SubtleUtilBoringSSL::GetAesGcmAeadForKeySize(key_value.size());
   if (aead == nullptr) {
     return util::Status(util::error::INTERNAL, "invalid key size");
   }
diff --git a/cc/subtle/subtle_util_boringssl.cc b/cc/subtle/subtle_util_boringssl.cc
index 7a1af24..fcf50ab 100644
--- a/cc/subtle/subtle_util_boringssl.cc
+++ b/cc/subtle/subtle_util_boringssl.cc
@@ -559,6 +559,19 @@
   }
 }
 
+// static
+const EVP_AEAD* SubtleUtilBoringSSL::GetAesGcmAeadForKeySize(
+    uint32_t size_in_bytes) {
+  switch (size_in_bytes) {
+    case 16:
+      return EVP_aead_aes_128_gcm();
+    case 32:
+      return EVP_aead_aes_256_gcm();
+    default:
+      return nullptr;
+  }
+}
+
 namespace boringssl {
 
 util::StatusOr<std::vector<uint8_t>> ComputeHash(absl::string_view input,
diff --git a/cc/subtle/subtle_util_boringssl.h b/cc/subtle/subtle_util_boringssl.h
index 4b020b2..e857cc2 100644
--- a/cc/subtle/subtle_util_boringssl.h
+++ b/cc/subtle/subtle_util_boringssl.h
@@ -190,6 +190,9 @@
 
   // Returns BoringSSL's AES CTR EVP_CIPHER for the key size.
   static const EVP_CIPHER* GetAesCtrCipherForKeySize(uint32_t size_in_bytes);
+
+  // Returns BoringSSL's AES GCM EVP_AEAD for the key size.
+  static const EVP_AEAD* GetAesGcmAeadForKeySize(uint32_t size_in_bytes);
 };
 
 namespace boringssl {