Commit 09140981 authored by Matthew Webb's avatar Matthew Webb Committed by Commit Bot

fido/bio: clean/const-ify bio enrollment

Just cleaning up some bio enrollment-related code and reducing copying.

Bug: 974046
Change-Id: If0f30989ee06097717abd0f62887ed7ba00d4ec4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1659851
Commit-Queue: Matthew Webb <noviv@google.com>
Reviewed-by: default avatarMartin Kreichgauer <martinkr@google.com>
Reviewed-by: default avatarKim Paulhamus <kpaulhamus@chromium.org>
Cr-Commit-Position: refs/heads/master@{#669935}
parent 61430215
......@@ -10,6 +10,23 @@
namespace device {
static void SetPinAuth(BioEnrollmentRequest* request,
const pin::TokenResponse& token) {
request->pin_protocol = 1;
request->modality = BioEnrollmentModality::kFingerprint;
std::vector<uint8_t> pin_auth;
if (request->params)
pin_auth = *cbor::Writer::Write(cbor::Value(request->params.value()));
if (request->subcommand)
pin_auth.insert(pin_auth.begin(), static_cast<int>(*request->subcommand));
pin_auth.insert(pin_auth.begin(), static_cast<int>(*request->modality));
request->pin_auth = token.PinAuth(std::move(pin_auth));
}
// static
BioEnrollmentRequest BioEnrollmentRequest::ForGetModality() {
BioEnrollmentRequest request;
......@@ -27,37 +44,24 @@ BioEnrollmentRequest BioEnrollmentRequest::ForGetSensorInfo() {
// static
BioEnrollmentRequest BioEnrollmentRequest::ForEnrollBegin(
const pin::TokenResponse& response) {
const pin::TokenResponse& token) {
BioEnrollmentRequest request;
request.pin_protocol = 1;
request.modality = BioEnrollmentModality::kFingerprint;
request.subcommand = BioEnrollmentSubCommand::kEnrollBegin;
request.pin_auth = response.PinAuth(
std::vector<uint8_t>{static_cast<uint8_t>(*request.modality),
static_cast<uint8_t>(*request.subcommand)});
SetPinAuth(&request, token);
return request;
}
// static
BioEnrollmentRequest BioEnrollmentRequest::ForEnrollNextSample(
const pin::TokenResponse& response,
const pin::TokenResponse& token,
std::vector<uint8_t> template_id) {
BioEnrollmentRequest request;
request.pin_protocol = 1;
request.modality = BioEnrollmentModality::kFingerprint;
request.subcommand = BioEnrollmentSubCommand::kEnrollCaptureNextSample;
request.params = cbor::Value::MapValue();
request.params->emplace(
static_cast<int>(BioEnrollmentSubCommandParam::kTemplateId),
cbor::Value(template_id));
std::vector<uint8_t> pin_auth =
*cbor::Writer::Write(cbor::Value(*request.params));
pin_auth.insert(pin_auth.begin(), static_cast<int>(*request.subcommand));
pin_auth.insert(pin_auth.begin(), static_cast<int>(*request.modality));
request.pin_auth = response.PinAuth(std::move(pin_auth));
SetPinAuth(&request, token);
return request;
}
......@@ -71,38 +75,25 @@ BioEnrollmentRequest BioEnrollmentRequest::ForCancel() {
// static
BioEnrollmentRequest BioEnrollmentRequest::ForEnumerate(
const pin::TokenResponse& response) {
const pin::TokenResponse& token) {
BioEnrollmentRequest request;
request.modality = BioEnrollmentModality::kFingerprint;
request.subcommand = BioEnrollmentSubCommand::kEnumerateEnrollments;
request.pin_protocol = 1;
request.pin_auth = response.PinAuth(
std::vector<uint8_t>{static_cast<int>(*request.modality),
static_cast<int>(*request.subcommand)});
SetPinAuth(&request, token);
return request;
}
// static
BioEnrollmentRequest BioEnrollmentRequest::ForRename(
const pin::TokenResponse& response,
const pin::TokenResponse& token,
std::vector<uint8_t> id,
std::string name) {
BioEnrollmentRequest request;
request.pin_protocol = 1;
request.modality = BioEnrollmentModality::kFingerprint;
request.subcommand = BioEnrollmentSubCommand::kSetFriendlyName;
request.params = cbor::Value::MapValue();
request.params->emplace(
static_cast<int>(BioEnrollmentSubCommandParam::kTemplateId),
cbor::Value(std::move(id)));
std::vector<uint8_t> pin_auth =
*cbor::Writer::Write(cbor::Value(*request.params));
pin_auth.insert(pin_auth.begin(), static_cast<int>(*request.subcommand));
pin_auth.insert(pin_auth.begin(), static_cast<int>(*request.modality));
request.pin_auth = response.PinAuth(std::move(pin_auth));
SetPinAuth(&request, token);
return request;
}
......
......@@ -91,7 +91,7 @@ void FidoAuthenticator::GetSensorInfo(BioEnrollmentCallback) {
NOTREACHED();
}
void FidoAuthenticator::BioEnrollFingerprint(pin::TokenResponse,
void FidoAuthenticator::BioEnrollFingerprint(const pin::TokenResponse&,
BioEnrollmentCallback) {
NOTREACHED();
}
......@@ -100,12 +100,12 @@ void FidoAuthenticator::BioEnrollCancel(BioEnrollmentCallback) {
NOTREACHED();
}
void FidoAuthenticator::BioEnrollEnumerate(pin::TokenResponse,
void FidoAuthenticator::BioEnrollEnumerate(const pin::TokenResponse&,
BioEnrollmentCallback) {
NOTREACHED();
}
void FidoAuthenticator::BioEnrollRename(pin::TokenResponse,
void FidoAuthenticator::BioEnrollRename(const pin::TokenResponse&,
std::vector<uint8_t>,
std::string,
BioEnrollmentCallback) {
......
......@@ -168,13 +168,15 @@ class COMPONENT_EXPORT(DEVICE_FIDO) FidoAuthenticator {
base::span<const uint8_t> credential_id,
DeleteCredentialCallback callback);
// bio enrollment
// Biometric enrollment commands.
virtual void GetModality(BioEnrollmentCallback callback);
virtual void GetSensorInfo(BioEnrollmentCallback callback);
virtual void BioEnrollFingerprint(pin::TokenResponse, BioEnrollmentCallback);
virtual void BioEnrollFingerprint(const pin::TokenResponse&,
BioEnrollmentCallback);
virtual void BioEnrollCancel(BioEnrollmentCallback);
virtual void BioEnrollEnumerate(pin::TokenResponse, BioEnrollmentCallback);
virtual void BioEnrollRename(pin::TokenResponse,
virtual void BioEnrollEnumerate(const pin::TokenResponse&,
BioEnrollmentCallback);
virtual void BioEnrollRename(const pin::TokenResponse&,
std::vector<uint8_t>,
std::string,
BioEnrollmentCallback);
......
......@@ -513,7 +513,7 @@ void FidoDeviceAuthenticator::GetSensorInfo(BioEnrollmentCallback callback) {
}
void FidoDeviceAuthenticator::BioEnrollFingerprint(
pin::TokenResponse token,
const pin::TokenResponse& token,
BioEnrollmentCallback callback) {
DCHECK(
Options()->bio_enrollment_availability_preview !=
......@@ -527,7 +527,7 @@ void FidoDeviceAuthenticator::BioEnrollFingerprint(
base::BindOnce(&BioEnrollmentResponse::Parse));
}
void FidoDeviceAuthenticator::BioEnrollRename(pin::TokenResponse token,
void FidoDeviceAuthenticator::BioEnrollRename(const pin::TokenResponse& token,
std::vector<uint8_t> id,
std::string name,
BioEnrollmentCallback callback) {
......@@ -535,13 +535,9 @@ void FidoDeviceAuthenticator::BioEnrollRename(pin::TokenResponse token,
Options()->bio_enrollment_availability_preview !=
AuthenticatorSupportedOptions::BioEnrollmentAvailability::kNotSupported);
operation_ = std::make_unique<
Ctap2DeviceOperation<BioEnrollmentRequest, BioEnrollmentResponse>>(
device_.get(),
RunOperation<BioEnrollmentRequest, BioEnrollmentResponse>(
BioEnrollmentRequest::ForRename(token, std::move(id), std::move(name)),
std::move(callback), base::BindOnce(&BioEnrollmentResponse::Parse),
/*string_fixup_predicate=*/nullptr);
operation_->Start();
std::move(callback), base::BindOnce(&BioEnrollmentResponse::Parse));
}
void FidoDeviceAuthenticator::OnBioEnroll(
......@@ -577,18 +573,15 @@ void FidoDeviceAuthenticator::BioEnrollCancel(BioEnrollmentCallback callback) {
}
void FidoDeviceAuthenticator::BioEnrollEnumerate(
pin::TokenResponse token,
const pin::TokenResponse& token,
BioEnrollmentCallback callback) {
DCHECK(
Options()->bio_enrollment_availability_preview !=
AuthenticatorSupportedOptions::BioEnrollmentAvailability::kNotSupported);
operation_ = std::make_unique<
Ctap2DeviceOperation<BioEnrollmentRequest, BioEnrollmentResponse>>(
device_.get(), BioEnrollmentRequest::ForEnumerate(std::move(token)),
std::move(callback), base::BindOnce(&BioEnrollmentResponse::Parse),
/*string_fixup_predicate=*/nullptr);
operation_->Start();
RunOperation<BioEnrollmentRequest, BioEnrollmentResponse>(
BioEnrollmentRequest::ForEnumerate(std::move(token)), std::move(callback),
base::BindOnce(&BioEnrollmentResponse::Parse));
}
void FidoDeviceAuthenticator::Reset(ResetCallback callback) {
......
......@@ -81,10 +81,12 @@ class COMPONENT_EXPORT(DEVICE_FIDO) FidoDeviceAuthenticator
void GetModality(BioEnrollmentCallback callback) override;
void GetSensorInfo(BioEnrollmentCallback callback) override;
void BioEnrollFingerprint(pin::TokenResponse, BioEnrollmentCallback) override;
void BioEnrollFingerprint(const pin::TokenResponse&,
BioEnrollmentCallback) override;
void BioEnrollCancel(BioEnrollmentCallback) override;
void BioEnrollEnumerate(pin::TokenResponse, BioEnrollmentCallback) override;
void BioEnrollRename(pin::TokenResponse,
void BioEnrollEnumerate(const pin::TokenResponse&,
BioEnrollmentCallback) override;
void BioEnrollRename(const pin::TokenResponse&,
std::vector<uint8_t>,
std::string,
BioEnrollmentCallback) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment