Remove HTTP specific logic from BlindSignAuth and dependencies

PiperOrigin-RevId: 627465992
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 465be42..83c2a51 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1625,14 +1625,15 @@
     "blind_sign_auth/blind_sign_auth.h",
     "blind_sign_auth/blind_sign_auth_interface.h",
     "blind_sign_auth/blind_sign_auth_protos.h",
-    "blind_sign_auth/blind_sign_http_response.h",
     "blind_sign_auth/blind_sign_message_interface.h",
+    "blind_sign_auth/blind_sign_message_response.h",
     "blind_sign_auth/cached_blind_sign_auth.h",
     "blind_sign_auth/test_tools/mock_blind_sign_auth_interface.h",
-    "blind_sign_auth/test_tools/mock_blind_sign_http_interface.h",
+    "blind_sign_auth/test_tools/mock_blind_sign_message_interface.h",
 ]
 blind_sign_auth_srcs = [
     "blind_sign_auth/blind_sign_auth.cc",
+    "blind_sign_auth/blind_sign_message_response.cc",
     "blind_sign_auth/cached_blind_sign_auth.cc",
 ]
 blind_sign_auth_tests_hdrs = [
diff --git a/build/source_list.gni b/build/source_list.gni
index 1bb50dd..70587e1 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1629,14 +1629,15 @@
     "src/quiche/blind_sign_auth/blind_sign_auth.h",
     "src/quiche/blind_sign_auth/blind_sign_auth_interface.h",
     "src/quiche/blind_sign_auth/blind_sign_auth_protos.h",
-    "src/quiche/blind_sign_auth/blind_sign_http_response.h",
     "src/quiche/blind_sign_auth/blind_sign_message_interface.h",
+    "src/quiche/blind_sign_auth/blind_sign_message_response.h",
     "src/quiche/blind_sign_auth/cached_blind_sign_auth.h",
     "src/quiche/blind_sign_auth/test_tools/mock_blind_sign_auth_interface.h",
-    "src/quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h",
+    "src/quiche/blind_sign_auth/test_tools/mock_blind_sign_message_interface.h",
 ]
 blind_sign_auth_srcs = [
     "src/quiche/blind_sign_auth/blind_sign_auth.cc",
+    "src/quiche/blind_sign_auth/blind_sign_message_response.cc",
     "src/quiche/blind_sign_auth/cached_blind_sign_auth.cc",
 ]
 blind_sign_auth_tests_hdrs = [
diff --git a/build/source_list.json b/build/source_list.json
index fb45e82..191c426 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1628,14 +1628,15 @@
     "quiche/blind_sign_auth/blind_sign_auth.h",
     "quiche/blind_sign_auth/blind_sign_auth_interface.h",
     "quiche/blind_sign_auth/blind_sign_auth_protos.h",
-    "quiche/blind_sign_auth/blind_sign_http_response.h",
     "quiche/blind_sign_auth/blind_sign_message_interface.h",
+    "quiche/blind_sign_auth/blind_sign_message_response.h",
     "quiche/blind_sign_auth/cached_blind_sign_auth.h",
     "quiche/blind_sign_auth/test_tools/mock_blind_sign_auth_interface.h",
-    "quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h"
+    "quiche/blind_sign_auth/test_tools/mock_blind_sign_message_interface.h"
   ],
   "blind_sign_auth_srcs": [
     "quiche/blind_sign_auth/blind_sign_auth.cc",
+    "quiche/blind_sign_auth/blind_sign_message_response.cc",
     "quiche/blind_sign_auth/cached_blind_sign_auth.cc"
   ],
   "blind_sign_auth_tests_hdrs": [
diff --git a/quiche/blind_sign_auth/blind_sign_auth.cc b/quiche/blind_sign_auth/blind_sign_auth.cc
index 898fcfd..b52367e 100644
--- a/quiche/blind_sign_auth/blind_sign_auth.cc
+++ b/quiche/blind_sign_auth/blind_sign_auth.cc
@@ -28,8 +28,8 @@
 #include "anonymous_tokens/cpp/shared/proto_utils.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_interface.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_protos.h"
-#include "quiche/blind_sign_auth/blind_sign_http_response.h"
 #include "quiche/blind_sign_auth/blind_sign_message_interface.h"
+#include "quiche/blind_sign_auth/blind_sign_message_response.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/quiche_random.h"
 
@@ -60,27 +60,27 @@
   request.set_validation_version(2);
   request.set_proxy_layer(QuicheProxyLayerToPpnProxyLayer(proxy_layer));
 
-  // Call GetInitialData on the HttpFetcher.
+  // Call GetInitialData on the BlindSignMessageInterface Fetcher.
   std::string body = request.SerializeAsString();
-  BlindSignHttpCallback initial_data_callback = absl::bind_front(
+  BlindSignMessageCallback initial_data_callback = absl::bind_front(
       &BlindSignAuth::GetInitialDataCallback, this, oauth_token, num_tokens,
       proxy_layer, service_type, std::move(callback));
-  http_fetcher_->DoRequest(BlindSignHttpRequestType::kGetInitialData,
-                           oauth_token, body, std::move(initial_data_callback));
+  fetcher_->DoRequest(BlindSignMessageRequestType::kGetInitialData, oauth_token,
+                      body, std::move(initial_data_callback));
 }
 
 void BlindSignAuth::GetInitialDataCallback(
     std::optional<std::string> oauth_token, int num_tokens,
     ProxyLayer proxy_layer, BlindSignAuthServiceType service_type,
     SignedTokenCallback callback,
-    absl::StatusOr<BlindSignHttpResponse> response) {
+    absl::StatusOr<BlindSignMessageResponse> response) {
   if (!response.ok()) {
     QUICHE_LOG(WARNING) << "GetInitialDataRequest failed: "
                         << response.status();
     std::move(callback)(response.status());
     return;
   }
-  absl::StatusCode code = HttpCodeToStatusCode(response->status_code());
+  absl::StatusCode code = response->status_code();
   if (code != absl::StatusCode::kOk) {
     std::string message =
         absl::StrCat("GetInitialDataRequest failed with code: ", code);
@@ -244,16 +244,16 @@
     return;
   }
 
-  BlindSignHttpCallback auth_and_sign_callback =
+  BlindSignMessageCallback auth_and_sign_callback =
       absl::bind_front(&BlindSignAuth::PrivacyPassAuthAndSignCallback, this,
                        std::move(initial_data_response.privacy_pass_data()
                                      .public_metadata_extensions()),
                        public_metadata_expiry_time, *use_case,
                        std::move(privacy_pass_clients), std::move(callback));
   // TODO(b/304811277): remove other usages of string.data()
-  http_fetcher_->DoRequest(BlindSignHttpRequestType::kAuthAndSign, oauth_token,
-                           sign_request.SerializeAsString(),
-                           std::move(auth_and_sign_callback));
+  fetcher_->DoRequest(BlindSignMessageRequestType::kAuthAndSign, oauth_token,
+                      sign_request.SerializeAsString(),
+                      std::move(auth_and_sign_callback));
 }
 
 void BlindSignAuth::PrivacyPassAuthAndSignCallback(
@@ -263,14 +263,14 @@
                                     PrivacyPassRsaBssaPublicMetadataClient>>
         privacy_pass_clients,
     SignedTokenCallback callback,
-    absl::StatusOr<BlindSignHttpResponse> response) {
+    absl::StatusOr<BlindSignMessageResponse> response) {
   // Validate response.
   if (!response.ok()) {
     QUICHE_LOG(WARNING) << "AuthAndSign failed: " << response.status();
     std::move(callback)(response.status());
     return;
   }
-  absl::StatusCode code = HttpCodeToStatusCode(response->status_code());
+  absl::StatusCode code = response->status_code();
   if (code != absl::StatusCode::kOk) {
     std::string message = absl::StrCat("AuthAndSign failed with code: ", code);
     QUICHE_LOG(WARNING) << message;
@@ -338,44 +338,6 @@
   std::move(callback)(absl::Span<BlindSignToken>(tokens_vec));
 }
 
-absl::StatusCode BlindSignAuth::HttpCodeToStatusCode(int http_code) {
-  // copybara:strip_begin(golink)
-  // This mapping is from go/http-canonical-mapping
-  // copybara:strip_end
-  if (http_code >= 200 && http_code < 300) {
-    return absl::StatusCode::kOk;
-  } else if (http_code >= 300 && http_code < 400) {
-    return absl::StatusCode::kUnknown;
-  } else if (http_code == 400) {
-    return absl::StatusCode::kInvalidArgument;
-  } else if (http_code == 401) {
-    return absl::StatusCode::kUnauthenticated;
-  } else if (http_code == 403) {
-    return absl::StatusCode::kPermissionDenied;
-  } else if (http_code == 404) {
-    return absl::StatusCode::kNotFound;
-  } else if (http_code == 409) {
-    return absl::StatusCode::kAborted;
-  } else if (http_code == 416) {
-    return absl::StatusCode::kOutOfRange;
-  } else if (http_code == 429) {
-    return absl::StatusCode::kResourceExhausted;
-  } else if (http_code == 499) {
-    return absl::StatusCode::kCancelled;
-  } else if (http_code >= 400 && http_code < 500) {
-    return absl::StatusCode::kFailedPrecondition;
-  } else if (http_code == 501) {
-    return absl::StatusCode::kUnimplemented;
-  } else if (http_code == 503) {
-    return absl::StatusCode::kUnavailable;
-  } else if (http_code == 504) {
-    return absl::StatusCode::kDeadlineExceeded;
-  } else if (http_code >= 500 && http_code < 600) {
-    return absl::StatusCode::kInternal;
-  }
-  return absl::StatusCode::kUnknown;
-}
-
 privacy::ppn::ProxyLayer BlindSignAuth::QuicheProxyLayerToPpnProxyLayer(
     quiche::ProxyLayer proxy_layer) {
   switch (proxy_layer) {
diff --git a/quiche/blind_sign_auth/blind_sign_auth.h b/quiche/blind_sign_auth/blind_sign_auth.h
index ab223ad..552f2c1 100644
--- a/quiche/blind_sign_auth/blind_sign_auth.h
+++ b/quiche/blind_sign_auth/blind_sign_auth.h
@@ -9,14 +9,13 @@
 #include <optional>
 #include <string>
 
-#include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/time/time.h"
 #include "anonymous_tokens/cpp/privacy_pass/rsa_bssa_public_metadata_client.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_interface.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_protos.h"
-#include "quiche/blind_sign_auth/blind_sign_http_response.h"
 #include "quiche/blind_sign_auth/blind_sign_message_interface.h"
+#include "quiche/blind_sign_auth/blind_sign_message_response.h"
 #include "quiche/common/platform/api/quiche_export.h"
 
 namespace quiche {
@@ -24,14 +23,12 @@
 // BlindSignAuth provides signed, unblinded tokens to callers.
 class QUICHE_EXPORT BlindSignAuth : public BlindSignAuthInterface {
  public:
-  explicit BlindSignAuth(BlindSignMessageInterface* http_fetcher,
+  explicit BlindSignAuth(BlindSignMessageInterface* fetcher,
                          privacy::ppn::BlindSignAuthOptions auth_options)
-      : http_fetcher_(http_fetcher), auth_options_(std::move(auth_options)) {}
+      : fetcher_(fetcher), auth_options_(std::move(auth_options)) {}
 
   // Returns signed unblinded tokens and their expiration time in a callback.
   // Tokens are single-use.
-  // GetTokens starts asynchronous HTTP POST requests to a signer hostname
-  // specified by the caller, with path and query params given in the request.
   // The GetTokens callback will run on the same thread as the
   // BlindSignMessageInterface callbacks.
   // Callers can make multiple concurrent requests to GetTokens.
@@ -40,11 +37,11 @@
                  SignedTokenCallback callback) override;
 
  private:
-  void GetInitialDataCallback(std::optional<std::string> oauth_token,
-                              int num_tokens, ProxyLayer proxy_layer,
-                              BlindSignAuthServiceType service_type,
-                              SignedTokenCallback callback,
-                              absl::StatusOr<BlindSignHttpResponse> response);
+  void GetInitialDataCallback(
+      std::optional<std::string> oauth_token, int num_tokens,
+      ProxyLayer proxy_layer, BlindSignAuthServiceType service_type,
+      SignedTokenCallback callback,
+      absl::StatusOr<BlindSignMessageResponse> response);
   void GeneratePrivacyPassTokens(
       privacy::ppn::GetInitialDataResponse initial_data_response,
       std::optional<std::string> oauth_token, int num_tokens,
@@ -57,12 +54,11 @@
                                       PrivacyPassRsaBssaPublicMetadataClient>>
           privacy_pass_clients,
       SignedTokenCallback callback,
-      absl::StatusOr<BlindSignHttpResponse> response);
-  absl::StatusCode HttpCodeToStatusCode(int http_code);
+      absl::StatusOr<BlindSignMessageResponse> response);
   privacy::ppn::ProxyLayer QuicheProxyLayerToPpnProxyLayer(
       quiche::ProxyLayer proxy_layer);
 
-  BlindSignMessageInterface* http_fetcher_ = nullptr;
+  BlindSignMessageInterface* fetcher_ = nullptr;
   privacy::ppn::BlindSignAuthOptions auth_options_;
 };
 
diff --git a/quiche/blind_sign_auth/blind_sign_auth_test.cc b/quiche/blind_sign_auth/blind_sign_auth_test.cc
index 24d6d15..6e01b5c 100644
--- a/quiche/blind_sign_auth/blind_sign_auth_test.cc
+++ b/quiche/blind_sign_auth/blind_sign_auth_test.cc
@@ -21,9 +21,9 @@
 #include "openssl/digest.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_interface.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_protos.h"
-#include "quiche/blind_sign_auth/blind_sign_http_response.h"
 #include "quiche/blind_sign_auth/blind_sign_message_interface.h"
-#include "quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h"
+#include "quiche/blind_sign_auth/blind_sign_message_response.h"
+#include "quiche/blind_sign_auth/test_tools/mock_blind_sign_message_interface.h"
 #include "quiche/common/platform/api/quiche_mutex.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/test_tools/quiche_test_utils.h"
@@ -159,7 +159,7 @@
     options.set_enable_privacy_pass(true);
 
     blind_sign_auth_ =
-        std::make_unique<BlindSignAuth>(&mock_http_interface_, options);
+        std::make_unique<BlindSignAuth>(&mock_message_interface_, options);
   }
 
   void TearDown() override { blind_sign_auth_.reset(nullptr); }
@@ -246,7 +246,7 @@
     }
   }
 
-  MockBlindSignHttpInterface mock_http_interface_;
+  MockBlindSignMessageInterface mock_message_interface_;
   std::unique_ptr<BlindSignAuth> blind_sign_auth_;
   anonymous_tokens::RSABlindSignaturePublicKey
       public_key_proto_;
@@ -262,8 +262,8 @@
 };
 
 TEST_F(BlindSignAuthTest, TestGetTokensFailedNetworkError) {
-  EXPECT_CALL(mock_http_interface_,
-              DoRequest(Eq(BlindSignHttpRequestType::kGetInitialData),
+  EXPECT_CALL(mock_message_interface_,
+              DoRequest(Eq(BlindSignMessageRequestType::kGetInitialData),
                         Eq(oauth_token_), _, _))
       .Times(1)
       .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) {
@@ -271,8 +271,8 @@
             absl::InternalError("Failed to create socket"));
       });
 
-  EXPECT_CALL(mock_http_interface_,
-              DoRequest(Eq(BlindSignHttpRequestType::kAuthAndSign), _, _, _))
+  EXPECT_CALL(mock_message_interface_,
+              DoRequest(Eq(BlindSignMessageRequestType::kAuthAndSign), _, _, _))
       .Times(0);
 
   int num_tokens = 1;
@@ -292,20 +292,22 @@
   *fake_get_initial_data_response_.mutable_at_public_metadata_public_key()
        ->mutable_use_case() = "SPAM";
 
-  BlindSignHttpResponse fake_public_key_response(
-      200, fake_get_initial_data_response_.SerializeAsString());
+  BlindSignMessageResponse fake_public_key_response(
+      absl::StatusCode::kOk,
+      fake_get_initial_data_response_.SerializeAsString());
 
   EXPECT_CALL(
-      mock_http_interface_,
-      DoRequest(Eq(BlindSignHttpRequestType::kGetInitialData), Eq(oauth_token_),
+      mock_message_interface_,
+      DoRequest(Eq(BlindSignMessageRequestType::kGetInitialData),
+                Eq(oauth_token_),
                 Eq(expected_get_initial_data_request_.SerializeAsString()), _))
       .Times(1)
       .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) {
         std::move(get_initial_data_cb)(fake_public_key_response);
       });
 
-  EXPECT_CALL(mock_http_interface_,
-              DoRequest(Eq(BlindSignHttpRequestType::kAuthAndSign), _, _, _))
+  EXPECT_CALL(mock_message_interface_,
+              DoRequest(Eq(BlindSignMessageRequestType::kAuthAndSign), _, _, _))
       .Times(0);
 
   int num_tokens = 1;
@@ -322,33 +324,34 @@
 }
 
 TEST_F(BlindSignAuthTest, TestGetTokensFailedBadAuthAndSignResponse) {
-  BlindSignHttpResponse fake_public_key_response(
-      200, fake_get_initial_data_response_.SerializeAsString());
+  BlindSignMessageResponse fake_public_key_response(
+      absl::StatusCode::kOk,
+      fake_get_initial_data_response_.SerializeAsString());
   {
     InSequence seq;
 
     EXPECT_CALL(
-        mock_http_interface_,
+        mock_message_interface_,
         DoRequest(
-            Eq(BlindSignHttpRequestType::kGetInitialData), Eq(oauth_token_),
+            Eq(BlindSignMessageRequestType::kGetInitialData), Eq(oauth_token_),
             Eq(expected_get_initial_data_request_.SerializeAsString()), _))
         .Times(1)
         .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) {
           std::move(get_initial_data_cb)(fake_public_key_response);
         });
 
-    EXPECT_CALL(mock_http_interface_,
-                DoRequest(Eq(BlindSignHttpRequestType::kAuthAndSign),
+    EXPECT_CALL(mock_message_interface_,
+                DoRequest(Eq(BlindSignMessageRequestType::kAuthAndSign),
                           Eq(oauth_token_), _, _))
         .Times(1)
         .WillOnce(Invoke([this](Unused, Unused, const std::string& body,
-                                BlindSignHttpCallback callback) {
+                                BlindSignMessageCallback callback) {
           CreateSignResponse(body, false);
           // Add an invalid signature that can't be Base64 decoded.
           sign_response_.add_blinded_token_signature("invalid_signature%");
-          BlindSignHttpResponse http_response(
-              200, sign_response_.SerializeAsString());
-          std::move(callback)(http_response);
+          BlindSignMessageResponse response(absl::StatusCode::kOk,
+                                            sign_response_.SerializeAsString());
+          std::move(callback)(response);
         }));
   }
 
@@ -366,31 +369,32 @@
 }
 
 TEST_F(BlindSignAuthTest, TestPrivacyPassGetTokensSucceeds) {
-  BlindSignHttpResponse fake_public_key_response(
-      200, fake_get_initial_data_response_.SerializeAsString());
+  BlindSignMessageResponse fake_public_key_response(
+      absl::StatusCode::kOk,
+      fake_get_initial_data_response_.SerializeAsString());
   {
     InSequence seq;
 
     EXPECT_CALL(
-        mock_http_interface_,
+        mock_message_interface_,
         DoRequest(
-            Eq(BlindSignHttpRequestType::kGetInitialData), Eq(oauth_token_),
+            Eq(BlindSignMessageRequestType::kGetInitialData), Eq(oauth_token_),
             Eq(expected_get_initial_data_request_.SerializeAsString()), _))
         .Times(1)
         .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) {
           std::move(get_initial_data_cb)(fake_public_key_response);
         });
 
-    EXPECT_CALL(mock_http_interface_,
-                DoRequest(Eq(BlindSignHttpRequestType::kAuthAndSign),
+    EXPECT_CALL(mock_message_interface_,
+                DoRequest(Eq(BlindSignMessageRequestType::kAuthAndSign),
                           Eq(oauth_token_), _, _))
         .Times(1)
         .WillOnce(Invoke([this](Unused, Unused, const std::string& body,
-                                BlindSignHttpCallback callback) {
+                                BlindSignMessageCallback callback) {
           CreateSignResponse(body, /*use_privacy_pass=*/true);
-          BlindSignHttpResponse http_response(
-              200, sign_response_.SerializeAsString());
-          std::move(callback)(http_response);
+          BlindSignMessageResponse response(absl::StatusCode::kOk,
+                                            sign_response_.SerializeAsString());
+          std::move(callback)(response);
         }));
   }
 
@@ -412,7 +416,7 @@
   privacy::ppn::BlindSignAuthOptions options;
   options.set_enable_privacy_pass(true);
   blind_sign_auth_ =
-      std::make_unique<BlindSignAuth>(&mock_http_interface_, options);
+      std::make_unique<BlindSignAuth>(&mock_message_interface_, options);
 
   public_key_proto_.set_message_mask_type(
       anonymous_tokens::AT_MESSAGE_MASK_NO_MASK);
@@ -421,12 +425,14 @@
       public_key_proto_;
   fake_get_initial_data_response_.mutable_privacy_pass_data()
       ->set_public_metadata_extensions("spam");
-  BlindSignHttpResponse fake_public_key_response(
-      200, fake_get_initial_data_response_.SerializeAsString());
+  BlindSignMessageResponse fake_public_key_response(
+      absl::StatusCode::kOk,
+      fake_get_initial_data_response_.SerializeAsString());
 
   EXPECT_CALL(
-      mock_http_interface_,
-      DoRequest(Eq(BlindSignHttpRequestType::kGetInitialData), Eq(oauth_token_),
+      mock_message_interface_,
+      DoRequest(Eq(BlindSignMessageRequestType::kGetInitialData),
+                Eq(oauth_token_),
                 Eq(expected_get_initial_data_request_.SerializeAsString()), _))
       .Times(1)
       .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) {
diff --git a/quiche/blind_sign_auth/blind_sign_http_response.h b/quiche/blind_sign_auth/blind_sign_http_response.h
deleted file mode 100644
index 89d9072..0000000
--- a/quiche/blind_sign_auth/blind_sign_http_response.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2023 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_BLIND_SIGN_AUTH_BLIND_SIGN_HTTP_RESPONSE_H_
-#define QUICHE_BLIND_SIGN_AUTH_BLIND_SIGN_HTTP_RESPONSE_H_
-
-#include <map>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "quiche/common/platform/api/quiche_export.h"
-
-namespace quiche {
-
-// Contains a response to a HTTP POST request issued by BlindSignAuth.
-class QUICHE_EXPORT BlindSignHttpResponse {
- public:
-  BlindSignHttpResponse(int status_code, std::string body)
-      : status_code_(status_code), body_(std::move(body)) {}
-
-  int status_code() const { return status_code_; }
-  const std::string& body() const { return body_; }
-
- private:
-  int status_code_;
-  std::string body_;
-};
-
-}  // namespace quiche
-
-#endif  // QUICHE_BLIND_SIGN_AUTH_BLIND_SIGN_HTTP_RESPONSE_H_
diff --git a/quiche/blind_sign_auth/blind_sign_message_interface.h b/quiche/blind_sign_auth/blind_sign_message_interface.h
index 5edad7b..8004a0e 100644
--- a/quiche/blind_sign_auth/blind_sign_message_interface.h
+++ b/quiche/blind_sign_auth/blind_sign_message_interface.h
@@ -10,40 +10,37 @@
 
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
-#include "quiche/blind_sign_auth/blind_sign_http_response.h"
+#include "quiche/blind_sign_auth/blind_sign_message_response.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/quiche_callbacks.h"
 
 namespace quiche {
 
-using BlindSignHttpCallback =
-    quiche::SingleUseCallback<void(absl::StatusOr<BlindSignHttpResponse>)>;
+using BlindSignMessageCallback =
+    quiche::SingleUseCallback<void(absl::StatusOr<BlindSignMessageResponse>)>;
 
-enum class BlindSignHttpRequestType {
+enum class BlindSignMessageRequestType {
   kUnknown = 0,
   kGetInitialData,
   kAuthAndSign,
 };
 
-// Interface for async HTTP POST requests in BlindSignAuth.
-// Implementers must send a request to a signer server's URL
-// and call the provided callback when the request is complete.
+// Interface for async requests in BlindSignAuth. Implementers must send a
+// request and call the provided callback when the request is complete.
 class QUICHE_EXPORT BlindSignMessageInterface {
  public:
   virtual ~BlindSignMessageInterface() = default;
-  // Non-HTTP errors (like failing to create a socket) must return an
-  // absl::Status.
-  // HTTP errors must set status_code and body in BlindSignHttpResponse.
-  // DoRequest must be a HTTP POST request.
+  // Errors must set status_code and body in BlindSignMessageResponse.
+  // DoRequest must either be a HTTP POST or an IPC request.
   // Requests do not need cookies and must follow redirects.
   // The implementer must set Content-Type and Accept headers to
   // "application/x-protobuf".
   // DoRequest is async. When the request completes, the implementer must call
   // the provided callback.
-  virtual void DoRequest(BlindSignHttpRequestType request_type,
+  virtual void DoRequest(BlindSignMessageRequestType request_type,
                          std::optional<absl::string_view> authorization_header,
                          const std::string& body,
-                         BlindSignHttpCallback callback) = 0;
+                         BlindSignMessageCallback callback) = 0;
 };
 
 }  // namespace quiche
diff --git a/quiche/blind_sign_auth/blind_sign_message_response.cc b/quiche/blind_sign_auth/blind_sign_message_response.cc
new file mode 100644
index 0000000..5e7d9ce
--- /dev/null
+++ b/quiche/blind_sign_auth/blind_sign_message_response.cc
@@ -0,0 +1,43 @@
+#include "quiche/blind_sign_auth/blind_sign_message_response.h"
+
+namespace quiche {
+
+absl::StatusCode BlindSignMessageResponse::HttpCodeToStatusCode(int http_code) {
+  // copybara:strip_begin(golink)
+  // This mapping is from go/http-canonical-mapping
+  // copybara:strip_end
+  if (http_code >= 200 && http_code < 300) {
+    return absl::StatusCode::kOk;
+  } else if (http_code >= 300 && http_code < 400) {
+    return absl::StatusCode::kUnknown;
+  } else if (http_code == 400) {
+    return absl::StatusCode::kInvalidArgument;
+  } else if (http_code == 401) {
+    return absl::StatusCode::kUnauthenticated;
+  } else if (http_code == 403) {
+    return absl::StatusCode::kPermissionDenied;
+  } else if (http_code == 404) {
+    return absl::StatusCode::kNotFound;
+  } else if (http_code == 409) {
+    return absl::StatusCode::kAborted;
+  } else if (http_code == 416) {
+    return absl::StatusCode::kOutOfRange;
+  } else if (http_code == 429) {
+    return absl::StatusCode::kResourceExhausted;
+  } else if (http_code == 499) {
+    return absl::StatusCode::kCancelled;
+  } else if (http_code >= 400 && http_code < 500) {
+    return absl::StatusCode::kFailedPrecondition;
+  } else if (http_code == 501) {
+    return absl::StatusCode::kUnimplemented;
+  } else if (http_code == 503) {
+    return absl::StatusCode::kUnavailable;
+  } else if (http_code == 504) {
+    return absl::StatusCode::kDeadlineExceeded;
+  } else if (http_code >= 500 && http_code < 600) {
+    return absl::StatusCode::kInternal;
+  }
+  return absl::StatusCode::kUnknown;
+}
+
+}  // namespace quiche
diff --git a/quiche/blind_sign_auth/blind_sign_message_response.h b/quiche/blind_sign_auth/blind_sign_message_response.h
new file mode 100644
index 0000000..9991477
--- /dev/null
+++ b/quiche/blind_sign_auth/blind_sign_message_response.h
@@ -0,0 +1,37 @@
+// Copyright (c) 2023 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_BLIND_SIGN_AUTH_BLIND_SIGN_MESSAGE_RESPONSE_H_
+#define QUICHE_BLIND_SIGN_AUTH_BLIND_SIGN_MESSAGE_RESPONSE_H_
+
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "absl/status/status.h"
+#include "quiche/common/platform/api/quiche_export.h"
+
+namespace quiche {
+
+// Contains a response to a request issued by BlindSignAuth.
+class QUICHE_EXPORT BlindSignMessageResponse {
+ public:
+  BlindSignMessageResponse(absl::StatusCode status_code, std::string body)
+      : status_code_(status_code), body_(std::move(body)) {}
+
+  absl::StatusCode status_code() const { return status_code_; }
+  const std::string& body() const { return body_; }
+
+  // Converts HTTP code to a StatusCode.
+  static absl::StatusCode HttpCodeToStatusCode(int http_code);
+
+ private:
+  absl::StatusCode status_code_;
+  std::string body_;
+};
+
+}  // namespace quiche
+
+#endif  // QUICHE_BLIND_SIGN_AUTH_BLIND_SIGN_MESSAGE_RESPONSE_H_
diff --git a/quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h b/quiche/blind_sign_auth/test_tools/mock_blind_sign_message_interface.h
similarity index 60%
rename from quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h
rename to quiche/blind_sign_auth/test_tools/mock_blind_sign_message_interface.h
index ae2d2e0..a889d3f 100644
--- a/quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h
+++ b/quiche/blind_sign_auth/test_tools/mock_blind_sign_message_interface.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_BLIND_SIGN_AUTH_TEST_TOOLS_MOCK_BLIND_SIGN_HTTP_INTERFACE_H_
-#define QUICHE_BLIND_SIGN_AUTH_TEST_TOOLS_MOCK_BLIND_SIGN_HTTP_INTERFACE_H_
+#ifndef QUICHE_BLIND_SIGN_AUTH_TEST_TOOLS_MOCK_BLIND_SIGN_MESSAGE_INTERFACE_H_
+#define QUICHE_BLIND_SIGN_AUTH_TEST_TOOLS_MOCK_BLIND_SIGN_MESSAGE_INTERFACE_H_
 
 #include <optional>
 #include <string>
@@ -15,16 +15,16 @@
 
 namespace quiche::test {
 
-class QUICHE_NO_EXPORT MockBlindSignHttpInterface
+class QUICHE_NO_EXPORT MockBlindSignMessageInterface
     : public BlindSignMessageInterface {
  public:
   MOCK_METHOD(void, DoRequest,
-              (BlindSignHttpRequestType request_type,
+              (BlindSignMessageRequestType request_type,
                std::optional<absl::string_view> authorization_header,
-               const std::string& body, BlindSignHttpCallback callback),
+               const std::string& body, BlindSignMessageCallback callback),
               (override));
 };
 
 }  // namespace quiche::test
 
-#endif  // QUICHE_BLIND_SIGN_AUTH_TEST_TOOLS_MOCK_BLIND_SIGN_HTTP_INTERFACE_H_
+#endif  // QUICHE_BLIND_SIGN_AUTH_TEST_TOOLS_MOCK_BLIND_SIGN_MESSAGE_INTERFACE_H_