summaryrefslogtreecommitdiff
path: root/chromium/device/fido/authenticator_data.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/device/fido/authenticator_data.cc')
-rw-r--r--chromium/device/fido/authenticator_data.cc44
1 files changed, 41 insertions, 3 deletions
diff --git a/chromium/device/fido/authenticator_data.cc b/chromium/device/fido/authenticator_data.cc
index b6681e6990f..09479b23a31 100644
--- a/chromium/device/fido/authenticator_data.cc
+++ b/chromium/device/fido/authenticator_data.cc
@@ -21,6 +21,26 @@ namespace {
constexpr size_t kAttestedCredentialDataOffset =
kRpIdHashLength + kFlagsLength + kSignCounterLength;
+uint8_t AuthenticatorDataFlags(bool user_present,
+ bool user_verified,
+ bool has_attested_credential_data,
+ bool has_extension_data) {
+ return (user_present ? base::strict_cast<uint8_t>(
+ AuthenticatorData::Flag::kTestOfUserPresence)
+ : 0) |
+ (user_verified ? base::strict_cast<uint8_t>(
+ AuthenticatorData::Flag::kTestOfUserVerification)
+ : 0) |
+ (has_attested_credential_data
+ ? base::strict_cast<uint8_t>(
+ AuthenticatorData::Flag::kAttestation)
+ : 0) |
+ (has_extension_data
+ ? base::strict_cast<uint8_t>(
+ AuthenticatorData::Flag::kExtensionDataIncluded)
+ : 0);
+}
+
} // namespace
// static
@@ -71,13 +91,12 @@ base::Optional<AuthenticatorData> AuthenticatorData::DecodeAuthenticatorData(
}
AuthenticatorData::AuthenticatorData(
- base::span<const uint8_t, kRpIdHashLength> application_parameter,
+ base::span<const uint8_t, kRpIdHashLength> rp_id_hash,
uint8_t flags,
base::span<const uint8_t, kSignCounterLength> counter,
base::Optional<AttestedCredentialData> data,
base::Optional<cbor::Value> extensions)
- : application_parameter_(
- fido_parsing_utils::Materialize(application_parameter)),
+ : application_parameter_(fido_parsing_utils::Materialize(rp_id_hash)),
flags_(flags),
counter_(fido_parsing_utils::Materialize(counter)),
attested_data_(std::move(data)),
@@ -89,6 +108,25 @@ AuthenticatorData::AuthenticatorData(
!!attested_data_);
}
+AuthenticatorData::AuthenticatorData(
+ base::span<const uint8_t, kRpIdHashLength> rp_id_hash,
+ bool user_present,
+ bool user_verified,
+ uint32_t sign_counter,
+ base::Optional<AttestedCredentialData> attested_credential_data,
+ base::Optional<cbor::Value> extensions)
+ : AuthenticatorData(
+ rp_id_hash,
+ AuthenticatorDataFlags(user_present,
+ user_verified,
+ attested_credential_data.has_value(),
+ extensions.has_value()),
+ std::array<uint8_t, kSignCounterLength>{
+ (sign_counter >> 24) & 0xff, (sign_counter >> 16) & 0xff,
+ (sign_counter >> 8) & 0xff, sign_counter & 0xff},
+ std::move(attested_credential_data),
+ std::move(extensions)) {}
+
AuthenticatorData::AuthenticatorData(AuthenticatorData&& other) = default;
AuthenticatorData& AuthenticatorData::operator=(AuthenticatorData&& other) =
default;