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 @@ ...@@ -10,6 +10,23 @@
namespace device { 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 // static
BioEnrollmentRequest BioEnrollmentRequest::ForGetModality() { BioEnrollmentRequest BioEnrollmentRequest::ForGetModality() {
BioEnrollmentRequest request; BioEnrollmentRequest request;
...@@ -27,37 +44,24 @@ BioEnrollmentRequest BioEnrollmentRequest::ForGetSensorInfo() { ...@@ -27,37 +44,24 @@ BioEnrollmentRequest BioEnrollmentRequest::ForGetSensorInfo() {
// static // static
BioEnrollmentRequest BioEnrollmentRequest::ForEnrollBegin( BioEnrollmentRequest BioEnrollmentRequest::ForEnrollBegin(
const pin::TokenResponse& response) { const pin::TokenResponse& token) {
BioEnrollmentRequest request; BioEnrollmentRequest request;
request.pin_protocol = 1;
request.modality = BioEnrollmentModality::kFingerprint;
request.subcommand = BioEnrollmentSubCommand::kEnrollBegin; request.subcommand = BioEnrollmentSubCommand::kEnrollBegin;
request.pin_auth = response.PinAuth( SetPinAuth(&request, token);
std::vector<uint8_t>{static_cast<uint8_t>(*request.modality),
static_cast<uint8_t>(*request.subcommand)});
return request; return request;
} }
// static // static
BioEnrollmentRequest BioEnrollmentRequest::ForEnrollNextSample( BioEnrollmentRequest BioEnrollmentRequest::ForEnrollNextSample(
const pin::TokenResponse& response, const pin::TokenResponse& token,
std::vector<uint8_t> template_id) { std::vector<uint8_t> template_id) {
BioEnrollmentRequest request; BioEnrollmentRequest request;
request.pin_protocol = 1;
request.modality = BioEnrollmentModality::kFingerprint;
request.subcommand = BioEnrollmentSubCommand::kEnrollCaptureNextSample; request.subcommand = BioEnrollmentSubCommand::kEnrollCaptureNextSample;
request.params = cbor::Value::MapValue(); request.params = cbor::Value::MapValue();
request.params->emplace( request.params->emplace(
static_cast<int>(BioEnrollmentSubCommandParam::kTemplateId), static_cast<int>(BioEnrollmentSubCommandParam::kTemplateId),
cbor::Value(template_id)); cbor::Value(template_id));
SetPinAuth(&request, token);
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));
return request; return request;
} }
...@@ -71,38 +75,25 @@ BioEnrollmentRequest BioEnrollmentRequest::ForCancel() { ...@@ -71,38 +75,25 @@ BioEnrollmentRequest BioEnrollmentRequest::ForCancel() {
// static // static
BioEnrollmentRequest BioEnrollmentRequest::ForEnumerate( BioEnrollmentRequest BioEnrollmentRequest::ForEnumerate(
const pin::TokenResponse& response) { const pin::TokenResponse& token) {
BioEnrollmentRequest request; BioEnrollmentRequest request;
request.modality = BioEnrollmentModality::kFingerprint;
request.subcommand = BioEnrollmentSubCommand::kEnumerateEnrollments; request.subcommand = BioEnrollmentSubCommand::kEnumerateEnrollments;
request.pin_protocol = 1; SetPinAuth(&request, token);
request.pin_auth = response.PinAuth(
std::vector<uint8_t>{static_cast<int>(*request.modality),
static_cast<int>(*request.subcommand)});
return request; return request;
} }
// static // static
BioEnrollmentRequest BioEnrollmentRequest::ForRename( BioEnrollmentRequest BioEnrollmentRequest::ForRename(
const pin::TokenResponse& response, const pin::TokenResponse& token,
std::vector<uint8_t> id, std::vector<uint8_t> id,
std::string name) { std::string name) {
BioEnrollmentRequest request; BioEnrollmentRequest request;
request.pin_protocol = 1;
request.modality = BioEnrollmentModality::kFingerprint;
request.subcommand = BioEnrollmentSubCommand::kSetFriendlyName; request.subcommand = BioEnrollmentSubCommand::kSetFriendlyName;
request.params = cbor::Value::MapValue(); request.params = cbor::Value::MapValue();
request.params->emplace( request.params->emplace(
static_cast<int>(BioEnrollmentSubCommandParam::kTemplateId), static_cast<int>(BioEnrollmentSubCommandParam::kTemplateId),
cbor::Value(std::move(id))); cbor::Value(std::move(id)));
SetPinAuth(&request, token);
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));
return request; return request;
} }
......
...@@ -91,7 +91,7 @@ void FidoAuthenticator::GetSensorInfo(BioEnrollmentCallback) { ...@@ -91,7 +91,7 @@ void FidoAuthenticator::GetSensorInfo(BioEnrollmentCallback) {
NOTREACHED(); NOTREACHED();
} }
void FidoAuthenticator::BioEnrollFingerprint(pin::TokenResponse, void FidoAuthenticator::BioEnrollFingerprint(const pin::TokenResponse&,
BioEnrollmentCallback) { BioEnrollmentCallback) {
NOTREACHED(); NOTREACHED();
} }
...@@ -100,12 +100,12 @@ void FidoAuthenticator::BioEnrollCancel(BioEnrollmentCallback) { ...@@ -100,12 +100,12 @@ void FidoAuthenticator::BioEnrollCancel(BioEnrollmentCallback) {
NOTREACHED(); NOTREACHED();
} }
void FidoAuthenticator::BioEnrollEnumerate(pin::TokenResponse, void FidoAuthenticator::BioEnrollEnumerate(const pin::TokenResponse&,
BioEnrollmentCallback) { BioEnrollmentCallback) {
NOTREACHED(); NOTREACHED();
} }
void FidoAuthenticator::BioEnrollRename(pin::TokenResponse, void FidoAuthenticator::BioEnrollRename(const pin::TokenResponse&,
std::vector<uint8_t>, std::vector<uint8_t>,
std::string, std::string,
BioEnrollmentCallback) { BioEnrollmentCallback) {
......
...@@ -168,13 +168,15 @@ class COMPONENT_EXPORT(DEVICE_FIDO) FidoAuthenticator { ...@@ -168,13 +168,15 @@ class COMPONENT_EXPORT(DEVICE_FIDO) FidoAuthenticator {
base::span<const uint8_t> credential_id, base::span<const uint8_t> credential_id,
DeleteCredentialCallback callback); DeleteCredentialCallback callback);
// bio enrollment // Biometric enrollment commands.
virtual void GetModality(BioEnrollmentCallback callback); virtual void GetModality(BioEnrollmentCallback callback);
virtual void GetSensorInfo(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 BioEnrollCancel(BioEnrollmentCallback);
virtual void BioEnrollEnumerate(pin::TokenResponse, BioEnrollmentCallback); virtual void BioEnrollEnumerate(const pin::TokenResponse&,
virtual void BioEnrollRename(pin::TokenResponse, BioEnrollmentCallback);
virtual void BioEnrollRename(const pin::TokenResponse&,
std::vector<uint8_t>, std::vector<uint8_t>,
std::string, std::string,
BioEnrollmentCallback); BioEnrollmentCallback);
......
...@@ -513,7 +513,7 @@ void FidoDeviceAuthenticator::GetSensorInfo(BioEnrollmentCallback callback) { ...@@ -513,7 +513,7 @@ void FidoDeviceAuthenticator::GetSensorInfo(BioEnrollmentCallback callback) {
} }
void FidoDeviceAuthenticator::BioEnrollFingerprint( void FidoDeviceAuthenticator::BioEnrollFingerprint(
pin::TokenResponse token, const pin::TokenResponse& token,
BioEnrollmentCallback callback) { BioEnrollmentCallback callback) {
DCHECK( DCHECK(
Options()->bio_enrollment_availability_preview != Options()->bio_enrollment_availability_preview !=
...@@ -527,7 +527,7 @@ void FidoDeviceAuthenticator::BioEnrollFingerprint( ...@@ -527,7 +527,7 @@ void FidoDeviceAuthenticator::BioEnrollFingerprint(
base::BindOnce(&BioEnrollmentResponse::Parse)); base::BindOnce(&BioEnrollmentResponse::Parse));
} }
void FidoDeviceAuthenticator::BioEnrollRename(pin::TokenResponse token, void FidoDeviceAuthenticator::BioEnrollRename(const pin::TokenResponse& token,
std::vector<uint8_t> id, std::vector<uint8_t> id,
std::string name, std::string name,
BioEnrollmentCallback callback) { BioEnrollmentCallback callback) {
...@@ -535,13 +535,9 @@ void FidoDeviceAuthenticator::BioEnrollRename(pin::TokenResponse token, ...@@ -535,13 +535,9 @@ void FidoDeviceAuthenticator::BioEnrollRename(pin::TokenResponse token,
Options()->bio_enrollment_availability_preview != Options()->bio_enrollment_availability_preview !=
AuthenticatorSupportedOptions::BioEnrollmentAvailability::kNotSupported); AuthenticatorSupportedOptions::BioEnrollmentAvailability::kNotSupported);
operation_ = std::make_unique< RunOperation<BioEnrollmentRequest, BioEnrollmentResponse>(
Ctap2DeviceOperation<BioEnrollmentRequest, BioEnrollmentResponse>>(
device_.get(),
BioEnrollmentRequest::ForRename(token, std::move(id), std::move(name)), BioEnrollmentRequest::ForRename(token, std::move(id), std::move(name)),
std::move(callback), base::BindOnce(&BioEnrollmentResponse::Parse), std::move(callback), base::BindOnce(&BioEnrollmentResponse::Parse));
/*string_fixup_predicate=*/nullptr);
operation_->Start();
} }
void FidoDeviceAuthenticator::OnBioEnroll( void FidoDeviceAuthenticator::OnBioEnroll(
...@@ -577,18 +573,15 @@ void FidoDeviceAuthenticator::BioEnrollCancel(BioEnrollmentCallback callback) { ...@@ -577,18 +573,15 @@ void FidoDeviceAuthenticator::BioEnrollCancel(BioEnrollmentCallback callback) {
} }
void FidoDeviceAuthenticator::BioEnrollEnumerate( void FidoDeviceAuthenticator::BioEnrollEnumerate(
pin::TokenResponse token, const pin::TokenResponse& token,
BioEnrollmentCallback callback) { BioEnrollmentCallback callback) {
DCHECK( DCHECK(
Options()->bio_enrollment_availability_preview != Options()->bio_enrollment_availability_preview !=
AuthenticatorSupportedOptions::BioEnrollmentAvailability::kNotSupported); AuthenticatorSupportedOptions::BioEnrollmentAvailability::kNotSupported);
operation_ = std::make_unique< RunOperation<BioEnrollmentRequest, BioEnrollmentResponse>(
Ctap2DeviceOperation<BioEnrollmentRequest, BioEnrollmentResponse>>( BioEnrollmentRequest::ForEnumerate(std::move(token)), std::move(callback),
device_.get(), BioEnrollmentRequest::ForEnumerate(std::move(token)), base::BindOnce(&BioEnrollmentResponse::Parse));
std::move(callback), base::BindOnce(&BioEnrollmentResponse::Parse),
/*string_fixup_predicate=*/nullptr);
operation_->Start();
} }
void FidoDeviceAuthenticator::Reset(ResetCallback callback) { void FidoDeviceAuthenticator::Reset(ResetCallback callback) {
......
...@@ -81,10 +81,12 @@ class COMPONENT_EXPORT(DEVICE_FIDO) FidoDeviceAuthenticator ...@@ -81,10 +81,12 @@ class COMPONENT_EXPORT(DEVICE_FIDO) FidoDeviceAuthenticator
void GetModality(BioEnrollmentCallback callback) override; void GetModality(BioEnrollmentCallback callback) override;
void GetSensorInfo(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 BioEnrollCancel(BioEnrollmentCallback) override;
void BioEnrollEnumerate(pin::TokenResponse, BioEnrollmentCallback) override; void BioEnrollEnumerate(const pin::TokenResponse&,
void BioEnrollRename(pin::TokenResponse, BioEnrollmentCallback) override;
void BioEnrollRename(const pin::TokenResponse&,
std::vector<uint8_t>, std::vector<uint8_t>,
std::string, std::string,
BioEnrollmentCallback) override; 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