#ifndef DEVICE_FIDO_MAC_UTIL_H_
#define DEVICE_FIDO_MAC_UTIL_H_
#import <Security/Security.h>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/component_export.h"
#include "base/containers/span.h"
#include "device/fido/attested_credential_data.h"
#include "device/fido/authenticator_data.h"
#include "device/fido/fido_constants.h"
#include "device/fido/mac/credential_metadata.h"
#include "device/fido/p256_public_key.h"
namespace device::fido::mac {
COMPONENT_EXPORT(DEVICE_FIDO)
std::optional<AttestedCredentialData> MakeAttestedCredentialData(
std::vector<uint8_t> credential_id,
std::unique_ptr<PublicKey> public_key);
COMPONENT_EXPORT(DEVICE_FIDO)
AuthenticatorData MakeAuthenticatorData(
CredentialMetadata::SignCounter counter_type,
const std::string& rp_id,
std::optional<AttestedCredentialData> attested_credential_data,
bool has_uv);
std::optional<std::vector<uint8_t>> GenerateSignature(
const AuthenticatorData& authenticator_data,
base::span<const uint8_t, kClientDataHashLength> client_data_hash,
SecKeyRef private_key);
std::unique_ptr<PublicKey> SecKeyRefToECPublicKey(SecKeyRef public_key_ref);
enum class CodeSigningState {
kSigned,
kNotSigned,
};
CodeSigningState ProcessIsSigned();
class COMPONENT_EXPORT(DEVICE_FIDO) ScopedProcessIsSignedOverride {
public:
explicit ScopedProcessIsSignedOverride(CodeSigningState process_is_signed);
ScopedProcessIsSignedOverride(const ScopedProcessIsSignedOverride&) = delete;
ScopedProcessIsSignedOverride& operator=(
const ScopedProcessIsSignedOverride&) = delete;
~ScopedProcessIsSignedOverride();
};
COMPONENT_EXPORT(DEVICE_FIDO)
bool ProfileAuthenticatorWillDoUserVerification(
device::UserVerificationRequirement requirement,
bool platform_has_biometrics);
COMPONENT_EXPORT(DEVICE_FIDO)
bool DeviceHasBiometricsAvailable();
class COMPONENT_EXPORT(DEVICE_FIDO) ScopedBiometricsOverride {
public:
explicit ScopedBiometricsOverride(bool has_biometrics);
ScopedBiometricsOverride(const ScopedBiometricsOverride&) = delete;
ScopedBiometricsOverride& operator=(const ScopedBiometricsOverride&) = delete;
~ScopedBiometricsOverride();
};
}
#endif