1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright 2020 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Worker #include "BiometricsFace.h"
18*4d7e907cSAndroid Build Coastguard Worker
19*4d7e907cSAndroid Build Coastguard Worker namespace android::hardware::biometrics::face::implementation {
20*4d7e907cSAndroid Build Coastguard Worker using android::hardware::biometrics::face::V1_0::FaceError;
21*4d7e907cSAndroid Build Coastguard Worker using android::hardware::biometrics::face::V1_0::OptionalUint64;
22*4d7e907cSAndroid Build Coastguard Worker
23*4d7e907cSAndroid Build Coastguard Worker // Arbitrary value.
24*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kDeviceId = 123;
25*4d7e907cSAndroid Build Coastguard Worker // Arbitrary value.
26*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kAuthenticatorId = 987;
27*4d7e907cSAndroid Build Coastguard Worker // Not locked out.
28*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kLockoutDuration = 0;
29*4d7e907cSAndroid Build Coastguard Worker
BiometricsFace()30*4d7e907cSAndroid Build Coastguard Worker BiometricsFace::BiometricsFace() : mRandom(std::mt19937::default_seed) {}
31*4d7e907cSAndroid Build Coastguard Worker
32*4d7e907cSAndroid Build Coastguard Worker // Methods from IBiometricsFace follow.
setCallback(const sp<IBiometricsFaceClientCallback> & clientCallback,setCallback_cb _hidl_cb)33*4d7e907cSAndroid Build Coastguard Worker Return<void> BiometricsFace::setCallback(const sp<IBiometricsFaceClientCallback>& clientCallback,
34*4d7e907cSAndroid Build Coastguard Worker setCallback_cb _hidl_cb) {
35*4d7e907cSAndroid Build Coastguard Worker mClientCallback = clientCallback;
36*4d7e907cSAndroid Build Coastguard Worker _hidl_cb({Status::OK, kDeviceId});
37*4d7e907cSAndroid Build Coastguard Worker return Void();
38*4d7e907cSAndroid Build Coastguard Worker }
39*4d7e907cSAndroid Build Coastguard Worker
setActiveUser(int32_t userId,const hidl_string & storePath)40*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::setActiveUser(int32_t userId, const hidl_string& storePath) {
41*4d7e907cSAndroid Build Coastguard Worker if (userId < 0 || storePath.empty() || std::string(storePath).find("/data") != 0) {
42*4d7e907cSAndroid Build Coastguard Worker return Status::ILLEGAL_ARGUMENT;
43*4d7e907cSAndroid Build Coastguard Worker }
44*4d7e907cSAndroid Build Coastguard Worker mUserId = userId;
45*4d7e907cSAndroid Build Coastguard Worker mClientCallback->onLockoutChanged(kLockoutDuration);
46*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
47*4d7e907cSAndroid Build Coastguard Worker }
48*4d7e907cSAndroid Build Coastguard Worker
generateChallenge(uint32_t,generateChallenge_cb _hidl_cb)49*4d7e907cSAndroid Build Coastguard Worker Return<void> BiometricsFace::generateChallenge(uint32_t /* challengeTimeoutSec */,
50*4d7e907cSAndroid Build Coastguard Worker generateChallenge_cb _hidl_cb) {
51*4d7e907cSAndroid Build Coastguard Worker std::uniform_int_distribution<uint64_t> dist;
52*4d7e907cSAndroid Build Coastguard Worker _hidl_cb({Status::OK, dist(mRandom)});
53*4d7e907cSAndroid Build Coastguard Worker return Void();
54*4d7e907cSAndroid Build Coastguard Worker }
55*4d7e907cSAndroid Build Coastguard Worker
enroll(const hidl_vec<uint8_t> &,uint32_t,const hidl_vec<Feature> &)56*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::enroll(const hidl_vec<uint8_t>& /* hat */, uint32_t /* timeoutSec */,
57*4d7e907cSAndroid Build Coastguard Worker const hidl_vec<Feature>& /* disabledFeatures */) {
58*4d7e907cSAndroid Build Coastguard Worker // hat can never be valid in this implementation.
59*4d7e907cSAndroid Build Coastguard Worker mClientCallback->onError(kDeviceId, mUserId, FaceError::UNABLE_TO_PROCESS, 0 /* vendorCode */);
60*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
61*4d7e907cSAndroid Build Coastguard Worker }
62*4d7e907cSAndroid Build Coastguard Worker
revokeChallenge()63*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::revokeChallenge() {
64*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
65*4d7e907cSAndroid Build Coastguard Worker }
66*4d7e907cSAndroid Build Coastguard Worker
setFeature(Feature,bool,const hidl_vec<uint8_t> &,uint32_t)67*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::setFeature(Feature /* feature */, bool /* enabled */,
68*4d7e907cSAndroid Build Coastguard Worker const hidl_vec<uint8_t>& /* hat */,
69*4d7e907cSAndroid Build Coastguard Worker uint32_t /* faceId */) {
70*4d7e907cSAndroid Build Coastguard Worker // hat can never be valid in this implementation.
71*4d7e907cSAndroid Build Coastguard Worker return Status::ILLEGAL_ARGUMENT;
72*4d7e907cSAndroid Build Coastguard Worker }
73*4d7e907cSAndroid Build Coastguard Worker
getFeature(Feature,uint32_t,getFeature_cb _hidl_cb)74*4d7e907cSAndroid Build Coastguard Worker Return<void> BiometricsFace::getFeature(Feature /* feature */, uint32_t /* faceId */,
75*4d7e907cSAndroid Build Coastguard Worker getFeature_cb _hidl_cb) {
76*4d7e907cSAndroid Build Coastguard Worker // hat can never be valid in this implementation.
77*4d7e907cSAndroid Build Coastguard Worker _hidl_cb({Status::ILLEGAL_ARGUMENT, false});
78*4d7e907cSAndroid Build Coastguard Worker return Void();
79*4d7e907cSAndroid Build Coastguard Worker }
80*4d7e907cSAndroid Build Coastguard Worker
getAuthenticatorId(getAuthenticatorId_cb _hidl_cb)81*4d7e907cSAndroid Build Coastguard Worker Return<void> BiometricsFace::getAuthenticatorId(getAuthenticatorId_cb _hidl_cb) {
82*4d7e907cSAndroid Build Coastguard Worker _hidl_cb({Status::OK, kAuthenticatorId});
83*4d7e907cSAndroid Build Coastguard Worker return Void();
84*4d7e907cSAndroid Build Coastguard Worker }
85*4d7e907cSAndroid Build Coastguard Worker
cancel()86*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::cancel() {
87*4d7e907cSAndroid Build Coastguard Worker mClientCallback->onError(kDeviceId, mUserId, FaceError::CANCELED, 0 /* vendorCode */);
88*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
89*4d7e907cSAndroid Build Coastguard Worker }
90*4d7e907cSAndroid Build Coastguard Worker
enumerate()91*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::enumerate() {
92*4d7e907cSAndroid Build Coastguard Worker mClientCallback->onEnumerate(kDeviceId, {}, mUserId);
93*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
94*4d7e907cSAndroid Build Coastguard Worker }
95*4d7e907cSAndroid Build Coastguard Worker
remove(uint32_t)96*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::remove(uint32_t /* faceId */) {
97*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
98*4d7e907cSAndroid Build Coastguard Worker }
99*4d7e907cSAndroid Build Coastguard Worker
authenticate(uint64_t)100*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::authenticate(uint64_t /* operationId */) {
101*4d7e907cSAndroid Build Coastguard Worker mClientCallback->onError(kDeviceId, mUserId, FaceError::HW_UNAVAILABLE, 0 /* vendorCode */);
102*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
103*4d7e907cSAndroid Build Coastguard Worker }
104*4d7e907cSAndroid Build Coastguard Worker
userActivity()105*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::userActivity() {
106*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
107*4d7e907cSAndroid Build Coastguard Worker }
108*4d7e907cSAndroid Build Coastguard Worker
resetLockout(const hidl_vec<uint8_t> &)109*4d7e907cSAndroid Build Coastguard Worker Return<Status> BiometricsFace::resetLockout(const hidl_vec<uint8_t>& /* hat */) {
110*4d7e907cSAndroid Build Coastguard Worker return Status::OK;
111*4d7e907cSAndroid Build Coastguard Worker }
112*4d7e907cSAndroid Build Coastguard Worker
113*4d7e907cSAndroid Build Coastguard Worker } // namespace android::hardware::biometrics::face::implementation
114