xref: /aosp_15_r20/hardware/interfaces/biometrics/fingerprint/2.2/default/BiometricsFingerprint.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 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 #define LOG_TAG "[email protected]"
17*4d7e907cSAndroid Build Coastguard Worker #define LOG_VERBOSE "[email protected]"
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include <hardware/hw_auth_token.h>
20*4d7e907cSAndroid Build Coastguard Worker 
21*4d7e907cSAndroid Build Coastguard Worker #include <android/log.h>
22*4d7e907cSAndroid Build Coastguard Worker #include <hardware/hardware.h>
23*4d7e907cSAndroid Build Coastguard Worker #include <hardware/fingerprint.h>
24*4d7e907cSAndroid Build Coastguard Worker #include "BiometricsFingerprint.h"
25*4d7e907cSAndroid Build Coastguard Worker 
26*4d7e907cSAndroid Build Coastguard Worker #include <inttypes.h>
27*4d7e907cSAndroid Build Coastguard Worker #include <stdio.h>
28*4d7e907cSAndroid Build Coastguard Worker #include <stdlib.h>
29*4d7e907cSAndroid Build Coastguard Worker #include <unistd.h>
30*4d7e907cSAndroid Build Coastguard Worker 
31*4d7e907cSAndroid Build Coastguard Worker namespace android {
32*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
33*4d7e907cSAndroid Build Coastguard Worker namespace biometrics {
34*4d7e907cSAndroid Build Coastguard Worker namespace fingerprint {
35*4d7e907cSAndroid Build Coastguard Worker namespace V2_2 {
36*4d7e907cSAndroid Build Coastguard Worker namespace implementation {
37*4d7e907cSAndroid Build Coastguard Worker 
38*4d7e907cSAndroid Build Coastguard Worker using RequestStatus = android::hardware::biometrics::fingerprint::V2_1::RequestStatus;
39*4d7e907cSAndroid Build Coastguard Worker using FingerprintError = android::hardware::biometrics::fingerprint::V2_1::FingerprintError;
40*4d7e907cSAndroid Build Coastguard Worker 
41*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kDeviceId = 1;
42*4d7e907cSAndroid Build Coastguard Worker 
BiometricsFingerprint()43*4d7e907cSAndroid Build Coastguard Worker BiometricsFingerprint::BiometricsFingerprint() {
44*4d7e907cSAndroid Build Coastguard Worker 
45*4d7e907cSAndroid Build Coastguard Worker }
46*4d7e907cSAndroid Build Coastguard Worker 
~BiometricsFingerprint()47*4d7e907cSAndroid Build Coastguard Worker BiometricsFingerprint::~BiometricsFingerprint() {
48*4d7e907cSAndroid Build Coastguard Worker 
49*4d7e907cSAndroid Build Coastguard Worker }
50*4d7e907cSAndroid Build Coastguard Worker 
setNotify(const sp<IBiometricsFingerprintClientCallback> & clientCallback)51*4d7e907cSAndroid Build Coastguard Worker Return<uint64_t> BiometricsFingerprint::setNotify(
52*4d7e907cSAndroid Build Coastguard Worker         const sp<IBiometricsFingerprintClientCallback>& clientCallback) {
53*4d7e907cSAndroid Build Coastguard Worker     mClientCallback = clientCallback;
54*4d7e907cSAndroid Build Coastguard Worker     return kDeviceId;
55*4d7e907cSAndroid Build Coastguard Worker }
56*4d7e907cSAndroid Build Coastguard Worker 
preEnroll()57*4d7e907cSAndroid Build Coastguard Worker Return<uint64_t> BiometricsFingerprint::preEnroll()  {
58*4d7e907cSAndroid Build Coastguard Worker     // On a real implementation, this must be generated and stored in the TEE or its equivalent.
59*4d7e907cSAndroid Build Coastguard Worker     return rand();
60*4d7e907cSAndroid Build Coastguard Worker }
61*4d7e907cSAndroid Build Coastguard Worker 
enroll(const hidl_array<uint8_t,69> &,uint32_t,uint32_t)62*4d7e907cSAndroid Build Coastguard Worker Return<RequestStatus> BiometricsFingerprint::enroll(const hidl_array<uint8_t, 69>&  /* hat */,
63*4d7e907cSAndroid Build Coastguard Worker         uint32_t /* gid */, uint32_t /* timeoutSec */) {
64*4d7e907cSAndroid Build Coastguard Worker     // On a real implementation, the HAT must be checked in the TEE or its equivalent.
65*4d7e907cSAndroid Build Coastguard Worker     mClientCallback->onError(kDeviceId, FingerprintError::ERROR_UNABLE_TO_PROCESS,
66*4d7e907cSAndroid Build Coastguard Worker             0 /* vendorCode */);
67*4d7e907cSAndroid Build Coastguard Worker     return RequestStatus::SYS_OK;
68*4d7e907cSAndroid Build Coastguard Worker }
69*4d7e907cSAndroid Build Coastguard Worker 
postEnroll()70*4d7e907cSAndroid Build Coastguard Worker Return<RequestStatus> BiometricsFingerprint::postEnroll() {
71*4d7e907cSAndroid Build Coastguard Worker     return RequestStatus::SYS_OK;
72*4d7e907cSAndroid Build Coastguard Worker }
73*4d7e907cSAndroid Build Coastguard Worker 
getAuthenticatorId()74*4d7e907cSAndroid Build Coastguard Worker Return<uint64_t> BiometricsFingerprint::getAuthenticatorId() {
75*4d7e907cSAndroid Build Coastguard Worker     return 1;
76*4d7e907cSAndroid Build Coastguard Worker }
77*4d7e907cSAndroid Build Coastguard Worker 
cancel()78*4d7e907cSAndroid Build Coastguard Worker Return<RequestStatus> BiometricsFingerprint::cancel() {
79*4d7e907cSAndroid Build Coastguard Worker     mClientCallback->onError(kDeviceId, FingerprintError::ERROR_CANCELED, 0 /* vendorCode */);
80*4d7e907cSAndroid Build Coastguard Worker     return RequestStatus::SYS_OK;
81*4d7e907cSAndroid Build Coastguard Worker }
82*4d7e907cSAndroid Build Coastguard Worker 
enumerate()83*4d7e907cSAndroid Build Coastguard Worker Return<RequestStatus> BiometricsFingerprint::enumerate()  {
84*4d7e907cSAndroid Build Coastguard Worker     mClientCallback->onEnumerate(kDeviceId, 0 /* fingerId */, 0 /* groupId */,
85*4d7e907cSAndroid Build Coastguard Worker             0 /* remaining */);
86*4d7e907cSAndroid Build Coastguard Worker     return RequestStatus::SYS_OK;
87*4d7e907cSAndroid Build Coastguard Worker }
88*4d7e907cSAndroid Build Coastguard Worker 
remove(uint32_t gid,uint32_t fid)89*4d7e907cSAndroid Build Coastguard Worker Return<RequestStatus> BiometricsFingerprint::remove(uint32_t gid, uint32_t fid) {
90*4d7e907cSAndroid Build Coastguard Worker     mClientCallback->onRemoved(kDeviceId, fid, gid, 0 /* remaining */);
91*4d7e907cSAndroid Build Coastguard Worker     return RequestStatus::SYS_OK;
92*4d7e907cSAndroid Build Coastguard Worker }
93*4d7e907cSAndroid Build Coastguard Worker 
setActiveGroup(uint32_t,const hidl_string & storePath)94*4d7e907cSAndroid Build Coastguard Worker Return<RequestStatus> BiometricsFingerprint::setActiveGroup(uint32_t /* gid */,
95*4d7e907cSAndroid Build Coastguard Worker         const hidl_string& storePath) {
96*4d7e907cSAndroid Build Coastguard Worker     // Return invalid for paths that the HAL is unable to write to.
97*4d7e907cSAndroid Build Coastguard Worker     std::string path = storePath.c_str();
98*4d7e907cSAndroid Build Coastguard Worker     if (path.compare("") == 0 || path.compare("/") == 0) {
99*4d7e907cSAndroid Build Coastguard Worker         return RequestStatus::SYS_EINVAL;
100*4d7e907cSAndroid Build Coastguard Worker     }
101*4d7e907cSAndroid Build Coastguard Worker     return RequestStatus::SYS_OK;
102*4d7e907cSAndroid Build Coastguard Worker }
103*4d7e907cSAndroid Build Coastguard Worker 
authenticate(uint64_t,uint32_t)104*4d7e907cSAndroid Build Coastguard Worker Return<RequestStatus> BiometricsFingerprint::authenticate(uint64_t /* operationId */,
105*4d7e907cSAndroid Build Coastguard Worker         uint32_t /* gid */) {
106*4d7e907cSAndroid Build Coastguard Worker     return RequestStatus::SYS_OK;
107*4d7e907cSAndroid Build Coastguard Worker }
108*4d7e907cSAndroid Build Coastguard Worker 
109*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation
110*4d7e907cSAndroid Build Coastguard Worker }  // namespace V2_2
111*4d7e907cSAndroid Build Coastguard Worker }  // namespace fingerprint
112*4d7e907cSAndroid Build Coastguard Worker }  // namespace biometrics
113*4d7e907cSAndroid Build Coastguard Worker }  // namespace hardware
114*4d7e907cSAndroid Build Coastguard Worker }  // namespace android
115