Internal change

PiperOrigin-RevId: 473874471
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 2f69820..6a35a8e 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -45,6 +45,7 @@
     "common/print_elements.h",
     "common/quiche_buffer_allocator.h",
     "common/quiche_circular_deque.h",
+    "common/quiche_crypto_logging.h",
     "common/quiche_data_reader.h",
     "common/quiche_data_writer.h",
     "common/quiche_endian.h",
@@ -406,6 +407,7 @@
     "common/platform/api/quiche_hostname_utils.cc",
     "common/platform/api/quiche_mutex.cc",
     "common/quiche_buffer_allocator.cc",
+    "common/quiche_crypto_logging.cc",
     "common/quiche_data_reader.cc",
     "common/quiche_data_writer.cc",
     "common/quiche_ip_address.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 9defb90..8d629f6 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -45,6 +45,7 @@
     "src/quiche/common/print_elements.h",
     "src/quiche/common/quiche_buffer_allocator.h",
     "src/quiche/common/quiche_circular_deque.h",
+    "src/quiche/common/quiche_crypto_logging.h",
     "src/quiche/common/quiche_data_reader.h",
     "src/quiche/common/quiche_data_writer.h",
     "src/quiche/common/quiche_endian.h",
@@ -406,6 +407,7 @@
     "src/quiche/common/platform/api/quiche_hostname_utils.cc",
     "src/quiche/common/platform/api/quiche_mutex.cc",
     "src/quiche/common/quiche_buffer_allocator.cc",
+    "src/quiche/common/quiche_crypto_logging.cc",
     "src/quiche/common/quiche_data_reader.cc",
     "src/quiche/common/quiche_data_writer.cc",
     "src/quiche/common/quiche_ip_address.cc",
diff --git a/build/source_list.json b/build/source_list.json
index 8ab853a..e0c9ba9 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -44,6 +44,7 @@
     "quiche/common/print_elements.h",
     "quiche/common/quiche_buffer_allocator.h",
     "quiche/common/quiche_circular_deque.h",
+    "quiche/common/quiche_crypto_logging.h",
     "quiche/common/quiche_data_reader.h",
     "quiche/common/quiche_data_writer.h",
     "quiche/common/quiche_endian.h",
@@ -405,6 +406,7 @@
     "quiche/common/platform/api/quiche_hostname_utils.cc",
     "quiche/common/platform/api/quiche_mutex.cc",
     "quiche/common/quiche_buffer_allocator.cc",
+    "quiche/common/quiche_crypto_logging.cc",
     "quiche/common/quiche_data_reader.cc",
     "quiche/common/quiche_data_writer.cc",
     "quiche/common/quiche_ip_address.cc",
diff --git a/quiche/common/quiche_crypto_logging.cc b/quiche/common/quiche_crypto_logging.cc
new file mode 100644
index 0000000..7f3eb2a
--- /dev/null
+++ b/quiche/common/quiche_crypto_logging.cc
@@ -0,0 +1,42 @@
+// Copyright 2022 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/common/quiche_crypto_logging.h"
+
+#include "absl/status/status.h"
+#include "absl/strings/string_view.h"
+#include "openssl/err.h"
+#include "quiche/common/platform/api/quiche_logging.h"
+
+namespace quiche {
+void DLogOpenSslErrors() {
+#ifdef NDEBUG
+  // Clear OpenSSL error stack.
+  ClearOpenSslErrors();
+#else
+  while (uint32_t error = ERR_get_error()) {
+    char buf[120];
+    ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf));
+    QUICHE_DLOG(ERROR) << "OpenSSL error: " << buf;
+  }
+#endif
+}
+
+void ClearOpenSslErrors() {
+  while (ERR_get_error()) {
+  }
+}
+
+absl::Status SslErrorAsStatus(absl::string_view msg) {
+  std::string message;
+  absl::StrAppend(&message, msg, "OpenSSL error: ");
+  while (uint32_t error = ERR_get_error()) {
+    char buf[120];
+    ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf));
+    absl::StrAppend(&message, buf);
+  }
+  return absl::InternalError(message);
+}
+
+}  // namespace quiche
diff --git a/quiche/common/quiche_crypto_logging.h b/quiche/common/quiche_crypto_logging.h
new file mode 100644
index 0000000..709694d
--- /dev/null
+++ b/quiche/common/quiche_crypto_logging.h
@@ -0,0 +1,25 @@
+// Copyright 2022 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.
+
+#ifndef QUICHE_COMMON_QUICHE_CRYPTO_LOGGING_H_
+#define QUICHE_COMMON_QUICHE_CRYPTO_LOGGING_H_
+
+#include "absl/status/status.h"
+
+namespace quiche {
+
+// In debug builds only, log OpenSSL error stack. Then clear OpenSSL error
+// stack.
+void DLogOpenSslErrors();
+
+// Clears OpenSSL error stack.
+void ClearOpenSslErrors();
+
+// Include OpenSSL error stack in Status msg so that callers could choose to
+// only log it in debug builds if required.
+absl::Status SslErrorAsStatus(absl::string_view msg);
+
+}  // namespace quiche
+
+#endif  // QUICHE_COMMON_QUICHE_CRYPTO_LOGGING_H_
diff --git a/quiche/quic/core/crypto/aead_base_decrypter.cc b/quiche/quic/core/crypto/aead_base_decrypter.cc
index c79e74e..b6a3c4f 100644
--- a/quiche/quic/core/crypto/aead_base_decrypter.cc
+++ b/quiche/quic/core/crypto/aead_base_decrypter.cc
@@ -15,31 +15,13 @@
 #include "quiche/quic/core/quic_utils.h"
 #include "quiche/quic/platform/api/quic_bug_tracker.h"
 #include "quiche/quic/platform/api/quic_logging.h"
+#include "quiche/common/quiche_crypto_logging.h"
 
 namespace quic {
-
+using ::quiche::ClearOpenSslErrors;
+using ::quiche::DLogOpenSslErrors;
 namespace {
 
-// Clear OpenSSL error stack.
-void ClearOpenSslErrors() {
-  while (ERR_get_error()) {
-  }
-}
-
-// In debug builds only, log OpenSSL error stack. Then clear OpenSSL error
-// stack.
-void DLogOpenSslErrors() {
-#ifdef NDEBUG
-  ClearOpenSslErrors();
-#else
-  while (uint32_t error = ERR_get_error()) {
-    char buf[120];
-    ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf));
-    QUIC_DLOG(ERROR) << "OpenSSL error: " << buf;
-  }
-#endif
-}
-
 const EVP_AEAD* InitAndCall(const EVP_AEAD* (*aead_getter)()) {
   // Ensure BoringSSL is initialized before calling |aead_getter|. In Chromium,
   // the static initializer is disabled.
diff --git a/quiche/quic/core/crypto/aead_base_encrypter.cc b/quiche/quic/core/crypto/aead_base_encrypter.cc
index a2f0d59..481eaa9 100644
--- a/quiche/quic/core/crypto/aead_base_encrypter.cc
+++ b/quiche/quic/core/crypto/aead_base_encrypter.cc
@@ -12,26 +12,12 @@
 #include "quiche/quic/core/quic_utils.h"
 #include "quiche/quic/platform/api/quic_bug_tracker.h"
 #include "quiche/quic/platform/api/quic_logging.h"
+#include "quiche/common/quiche_crypto_logging.h"
 
 namespace quic {
-
+using ::quiche::DLogOpenSslErrors;
 namespace {
 
-// In debug builds only, log OpenSSL error stack. Then clear OpenSSL error
-// stack.
-void DLogOpenSslErrors() {
-#ifdef NDEBUG
-  while (ERR_get_error()) {
-  }
-#else
-  while (unsigned long error = ERR_get_error()) {
-    char buf[120];
-    ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf));
-    QUIC_DLOG(ERROR) << "OpenSSL error: " << buf;
-  }
-#endif
-}
-
 const EVP_AEAD* InitAndCall(const EVP_AEAD* (*aead_getter)()) {
   // Ensure BoringSSL is initialized before calling |aead_getter|. In Chromium,
   // the static initializer is disabled.