diff --git a/quiche/blind_sign_auth/blind_sign_auth.cc b/quiche/blind_sign_auth/blind_sign_auth.cc
index dd2935e..c76ab2d 100644
--- a/quiche/blind_sign_auth/blind_sign_auth.cc
+++ b/quiche/blind_sign_auth/blind_sign_auth.cc
@@ -68,11 +68,12 @@
     callback(response.status());
     return;
   }
-  int status_code = response.value().status_code();
-  if (response.value().status_code() != 200) {
-    QUICHE_LOG(WARNING) << "GetInitialDataRequest failed with code: "
-                        << status_code;
-    callback(response.status());
+  absl::StatusCode code = HttpCodeToStatusCode(response.value().status_code());
+  if (code != absl::StatusCode::kOk) {
+    std::string message =
+        absl::StrCat("GetInitialDataRequest failed with code: ", code);
+    QUICHE_LOG(WARNING) << message;
+    callback(absl::Status(code, message));
     return;
   }
   // Parse GetInitialDataResponse.
@@ -188,10 +189,11 @@
     callback(response.status());
     return;
   }
-  int status_code = response.value().status_code();
-  if (response.value().status_code() != 200) {
-    QUICHE_LOG(WARNING) << "AuthAndSign failed with code: " << status_code;
-    callback(response.status());
+  absl::StatusCode code = HttpCodeToStatusCode(response.value().status_code());
+  if (code != absl::StatusCode::kOk) {
+    std::string message = absl::StrCat("AuthAndSign failed with code: ", code);
+    QUICHE_LOG(WARNING) << message;
+    callback(absl::Status(code, message));
     return;
   }
 
@@ -315,4 +317,42 @@
   return absl::OkStatus();
 }
 
+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;
+}
+
 }  // namespace quiche
diff --git a/quiche/blind_sign_auth/blind_sign_auth.h b/quiche/blind_sign_auth/blind_sign_auth.h
index 710659f..0c29136 100644
--- a/quiche/blind_sign_auth/blind_sign_auth.h
+++ b/quiche/blind_sign_auth/blind_sign_auth.h
@@ -12,6 +12,7 @@
 #include <vector>
 
 #include "quiche/blind_sign_auth/proto/public_metadata.pb.h"
+#include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
 #include "absl/time/time.h"
@@ -58,6 +59,7 @@
       std::function<void(absl::StatusOr<absl::Span<BlindSignToken>>)> callback);
   absl::Status FingerprintPublicMetadata(
       const privacy::ppn::PublicMetadata& metadata, uint64_t* fingerprint);
+  absl::StatusCode HttpCodeToStatusCode(int http_code);
 
   BlindSignHttpInterface* http_fetcher_ = nullptr;
 };
