1 /*
2 * Copyright (C) 2020 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #define LOG_TAG "android.hardware.biometrics.fingerprint@2.2-service"
17 #define LOG_VERBOSE "android.hardware.biometrics.fingerprint@2.2-service"
18
19 #include <hardware/hw_auth_token.h>
20
21 #include <android/log.h>
22 #include <hardware/hardware.h>
23 #include <hardware/fingerprint.h>
24 #include "BiometricsFingerprint.h"
25
26 #include <inttypes.h>
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <unistd.h>
30
31 namespace android {
32 namespace hardware {
33 namespace biometrics {
34 namespace fingerprint {
35 namespace V2_2 {
36 namespace implementation {
37
38 using RequestStatus = android::hardware::biometrics::fingerprint::V2_1::RequestStatus;
39 using FingerprintError = android::hardware::biometrics::fingerprint::V2_1::FingerprintError;
40
41 constexpr uint64_t kDeviceId = 1;
42
BiometricsFingerprint()43 BiometricsFingerprint::BiometricsFingerprint() {
44
45 }
46
~BiometricsFingerprint()47 BiometricsFingerprint::~BiometricsFingerprint() {
48
49 }
50
setNotify(const sp<IBiometricsFingerprintClientCallback> & clientCallback)51 Return<uint64_t> BiometricsFingerprint::setNotify(
52 const sp<IBiometricsFingerprintClientCallback>& clientCallback) {
53 mClientCallback = clientCallback;
54 return kDeviceId;
55 }
56
preEnroll()57 Return<uint64_t> BiometricsFingerprint::preEnroll() {
58 // On a real implementation, this must be generated and stored in the TEE or its equivalent.
59 return rand();
60 }
61
enroll(const hidl_array<uint8_t,69> &,uint32_t,uint32_t)62 Return<RequestStatus> BiometricsFingerprint::enroll(const hidl_array<uint8_t, 69>& /* hat */,
63 uint32_t /* gid */, uint32_t /* timeoutSec */) {
64 // On a real implementation, the HAT must be checked in the TEE or its equivalent.
65 mClientCallback->onError(kDeviceId, FingerprintError::ERROR_UNABLE_TO_PROCESS,
66 0 /* vendorCode */);
67 return RequestStatus::SYS_OK;
68 }
69
postEnroll()70 Return<RequestStatus> BiometricsFingerprint::postEnroll() {
71 return RequestStatus::SYS_OK;
72 }
73
getAuthenticatorId()74 Return<uint64_t> BiometricsFingerprint::getAuthenticatorId() {
75 return 1;
76 }
77
cancel()78 Return<RequestStatus> BiometricsFingerprint::cancel() {
79 mClientCallback->onError(kDeviceId, FingerprintError::ERROR_CANCELED, 0 /* vendorCode */);
80 return RequestStatus::SYS_OK;
81 }
82
enumerate()83 Return<RequestStatus> BiometricsFingerprint::enumerate() {
84 mClientCallback->onEnumerate(kDeviceId, 0 /* fingerId */, 0 /* groupId */,
85 0 /* remaining */);
86 return RequestStatus::SYS_OK;
87 }
88
remove(uint32_t gid,uint32_t fid)89 Return<RequestStatus> BiometricsFingerprint::remove(uint32_t gid, uint32_t fid) {
90 mClientCallback->onRemoved(kDeviceId, fid, gid, 0 /* remaining */);
91 return RequestStatus::SYS_OK;
92 }
93
setActiveGroup(uint32_t,const hidl_string & storePath)94 Return<RequestStatus> BiometricsFingerprint::setActiveGroup(uint32_t /* gid */,
95 const hidl_string& storePath) {
96 // Return invalid for paths that the HAL is unable to write to.
97 std::string path = storePath.c_str();
98 if (path.compare("") == 0 || path.compare("/") == 0) {
99 return RequestStatus::SYS_EINVAL;
100 }
101 return RequestStatus::SYS_OK;
102 }
103
authenticate(uint64_t,uint32_t)104 Return<RequestStatus> BiometricsFingerprint::authenticate(uint64_t /* operationId */,
105 uint32_t /* gid */) {
106 return RequestStatus::SYS_OK;
107 }
108
109 } // namespace implementation
110 } // namespace V2_2
111 } // namespace fingerprint
112 } // namespace biometrics
113 } // namespace hardware
114 } // namespace android
115