Use ValidateExtensionsCardinality in BlindSignAuth PiperOrigin-RevId: 578921500
diff --git a/quiche/blind_sign_auth/blind_sign_auth.cc b/quiche/blind_sign_auth/blind_sign_auth.cc index fbfd429..62ca574 100644 --- a/quiche/blind_sign_auth/blind_sign_auth.cc +++ b/quiche/blind_sign_auth/blind_sign_auth.cc
@@ -4,7 +4,6 @@ #include "quiche/blind_sign_auth/blind_sign_auth.h" -#include <algorithm> #include <cstddef> #include <cstdint> #include <cstring> @@ -19,6 +18,7 @@ #include "absl/strings/escaping.h" #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" +#include "absl/time/clock.h" #include "absl/types/span.h" #include "anonymous_tokens/cpp/client/anonymous_tokens_rsa_bssa_client.h" #include "anonymous_tokens/cpp/crypto/crypto_utils.h" @@ -146,6 +146,17 @@ std::move(callback)(extensions.status()); return; } + std::vector<uint16_t> kExpectedExtensionTypes = { + /*ExpirationTimestamp=*/0x0001, /*GeoHint=*/0x0002, + /*ServiceType=*/0xF001, /*DebugMode=*/0xF002}; + absl::Status result = + anonymous_tokens::ValidateExtensionsOrderAndValues( + *extensions, absl::MakeSpan(kExpectedExtensionTypes), absl::Now()); + if (!result.ok()) { + QUICHE_LOG(WARNING) << "Failed to validate extensions: " << result; + std::move(callback)(result); + return; + } // Create token challenge. anonymous_tokens::TokenChallenge challenge;
diff --git a/quiche/blind_sign_auth/blind_sign_auth_test.cc b/quiche/blind_sign_auth/blind_sign_auth_test.cc index 9f61ee4..e2727fe 100644 --- a/quiche/blind_sign_auth/blind_sign_auth_test.cc +++ b/quiche/blind_sign_auth/blind_sign_auth_test.cc
@@ -124,7 +124,7 @@ extensions_.extensions.push_back(*expiration_extension); anonymous_tokens::GeoHint geo_hint; - geo_hint.country_code = "US"; + geo_hint.geo_hint = "US,US-AL,ALABASTER"; absl::StatusOr<anonymous_tokens::Extension> geo_hint_extension = geo_hint.AsExtension(); QUICHE_EXPECT_OK(geo_hint_extension); @@ -138,6 +138,13 @@ QUICHE_EXPECT_OK(service_type_extension); extensions_.extensions.push_back(*service_type_extension); + anonymous_tokens::DebugMode debug_mode; + debug_mode.mode = anonymous_tokens::DebugMode::kDebug; + absl::StatusOr<anonymous_tokens::Extension> + debug_mode_extension = debug_mode.AsExtension(); + QUICHE_EXPECT_OK(debug_mode_extension); + extensions_.extensions.push_back(*debug_mode_extension); + absl::StatusOr<std::string> serialized_extensions = anonymous_tokens::EncodeExtensions(extensions_); QUICHE_EXPECT_OK(serialized_extensions);