1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "pin_auth_executor_hdi_common.h"
17
18 #include <map>
19
20 #include "iam_logger.h"
21
22 #define LOG_TAG "PIN_AUTH_SA"
23
24 namespace OHOS {
25 namespace UserIam {
26 namespace PinAuth {
ConvertAuthType(AuthType in,UserAuth::AuthType & out)27 UserAuth::ResultCode ConvertAuthType(AuthType in, UserAuth::AuthType &out)
28 {
29 static const std::map<AuthType, UserAuth::AuthType> data = {
30 {AuthType::PIN, UserAuth::AuthType::PIN},
31 {AuthType::PRIVATE_PIN, UserAuth::AuthType::PRIVATE_PIN},
32 };
33 auto it = data.find(in);
34 if (it == data.end()) {
35 IAM_LOGE("authType %{public}d is invalid", in);
36 return UserAuth::ResultCode::GENERAL_ERROR;
37 }
38 out = it->second;
39 return UserAuth::ResultCode::SUCCESS;
40 }
41
ConvertExecutorRole(ExecutorRole in,UserAuth::ExecutorRole & out)42 UserAuth::ResultCode ConvertExecutorRole(ExecutorRole in, UserAuth::ExecutorRole &out)
43 {
44 static const std::map<ExecutorRole, UserAuth::ExecutorRole> data = {
45 {ExecutorRole::COLLECTOR, UserAuth::ExecutorRole::COLLECTOR},
46 {ExecutorRole::VERIFIER, UserAuth::ExecutorRole::VERIFIER},
47 {ExecutorRole::ALL_IN_ONE, UserAuth::ExecutorRole::ALL_IN_ONE},
48 };
49 auto it = data.find(in);
50 if (it == data.end()) {
51 IAM_LOGE("executorRole %{public}d is invalid", in);
52 return UserAuth::ResultCode::GENERAL_ERROR;
53 }
54 out = it->second;
55 return UserAuth::ResultCode::SUCCESS;
56 }
57
ConvertExecutorSecureLevel(ExecutorSecureLevel in,UserAuth::ExecutorSecureLevel & out)58 UserAuth::ResultCode ConvertExecutorSecureLevel(ExecutorSecureLevel in, UserAuth::ExecutorSecureLevel &out)
59 {
60 static const std::map<ExecutorSecureLevel, UserAuth::ExecutorSecureLevel> data = {
61 {ExecutorSecureLevel::ESL0, UserAuth::ExecutorSecureLevel::ESL0},
62 {ExecutorSecureLevel::ESL1, UserAuth::ExecutorSecureLevel::ESL1},
63 {ExecutorSecureLevel::ESL2, UserAuth::ExecutorSecureLevel::ESL2},
64 {ExecutorSecureLevel::ESL3, UserAuth::ExecutorSecureLevel::ESL3},
65 };
66 auto it = data.find(in);
67 if (it == data.end()) {
68 IAM_LOGE("executorSecureLevel %{public}d is invalid", in);
69 return UserAuth::ResultCode::GENERAL_ERROR;
70 }
71 out = it->second;
72 return UserAuth::ResultCode::SUCCESS;
73 }
74
MoveHdiExecutorInfo(ExecutorInfo & in,UserAuth::ExecutorInfo & out)75 UserAuth::ResultCode MoveHdiExecutorInfo(ExecutorInfo &in, UserAuth::ExecutorInfo &out)
76 {
77 out.executorSensorHint = static_cast<uint32_t>(in.sensorId);
78 out.executorMatcher = in.executorMatcher;
79 int32_t ret = ConvertExecutorRole(static_cast<ExecutorRole>(in.executorRole), out.executorRole);
80 if (ret != UserAuth::ResultCode::SUCCESS) {
81 IAM_LOGE("executorProxy is null");
82 return UserAuth::ResultCode::GENERAL_ERROR;
83 }
84 ret = ConvertAuthType(static_cast<AuthType>(in.authType), out.authType);
85 if (ret != UserAuth::ResultCode::SUCCESS) {
86 IAM_LOGE("ConvertAuthType fail ret=%{public}d", ret);
87 return UserAuth::ResultCode::GENERAL_ERROR;
88 }
89 ret = ConvertExecutorSecureLevel(static_cast<ExecutorSecureLevel>(in.esl), out.esl);
90 if (ret != UserAuth::ResultCode::SUCCESS) {
91 IAM_LOGE("ConvertExecutorSecureLevel fail ret=%{public}d", ret);
92 return UserAuth::ResultCode::GENERAL_ERROR;
93 }
94 out.maxTemplateAcl = in.maxTemplateAcl;
95 in.publicKey.swap(out.publicKey);
96 return UserAuth::ResultCode::SUCCESS;
97 }
98
ConvertHdiResultCode(int32_t in)99 UserAuth::ResultCode ConvertHdiResultCode(int32_t in)
100 {
101 HDF_STATUS hdfIn = static_cast<HDF_STATUS>(in);
102 static const std::map<HDF_STATUS, UserAuth::ResultCode> data = {
103 {HDF_SUCCESS, UserAuth::ResultCode::SUCCESS},
104 {HDF_FAILURE, UserAuth::ResultCode::GENERAL_ERROR},
105 {HDF_ERR_TIMEOUT, UserAuth::ResultCode::TIMEOUT},
106 {HDF_ERR_QUEUE_FULL, UserAuth::ResultCode::BUSY},
107 {HDF_ERR_DEVICE_BUSY, UserAuth::ResultCode::BUSY},
108 {HDF_ERR_INVALID_PARAM, UserAuth::ResultCode::INVALID_PARAMETERS},
109 };
110
111 UserAuth::ResultCode out;
112 auto it = data.find(hdfIn);
113 if (it == data.end()) {
114 out = UserAuth::ResultCode::GENERAL_ERROR;
115 } else {
116 out = it->second;
117 }
118 IAM_LOGI("covert hdi result code %{public}d to framework result code %{public}d", in, out);
119 return out;
120 }
121 } // namespace PinAuth
122 } // namespace UserIam
123 } // namespace OHOS
124