1 /*
2 * Copyright (c) 2022-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_driver_hdi.h"
17
18 #include <vector>
19
20 #include "refbase.h"
21
22 #include "iam_check.h"
23 #include "iam_logger.h"
24 #include "iam_ptr.h"
25
26 #include "load_mode_handler.h"
27 #include "pin_auth_all_in_one_hdi.h"
28 #include "pin_auth_collector_hdi.h"
29 #include "pin_auth_verifier_hdi.h"
30
31 #define LOG_TAG "PIN_AUTH_SA"
32
33 namespace OHOS {
34 namespace UserIam {
35 namespace PinAuth {
PinAuthDriverHdi(const std::shared_ptr<PinAuthInterfaceAdapter> & pinAuthInterfaceAdapter)36 PinAuthDriverHdi::PinAuthDriverHdi(const std::shared_ptr<PinAuthInterfaceAdapter> &pinAuthInterfaceAdapter)
37 : pinAuthInterfaceAdapter_(pinAuthInterfaceAdapter)
38 {
39 }
40
GetAllInOneExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> & executorList,std::vector<sptr<IAllInOneExecutor>> & iAllInOneExecutorList)41 void PinAuthDriverHdi::GetAllInOneExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> &executorList,
42 std::vector<sptr<IAllInOneExecutor>> &iAllInOneExecutorList)
43 {
44 IAM_LOGI("get all in one size %{public}zu", iAllInOneExecutorList.size());
45 for (const auto &iAllInOne : iAllInOneExecutorList) {
46 if (iAllInOne == nullptr) {
47 IAM_LOGE("iAllInOne is nullptr");
48 continue;
49 }
50 auto executor = Common::MakeShared<PinAuthAllInOneHdi>(iAllInOne);
51 if (executor == nullptr) {
52 IAM_LOGE("make share failed");
53 continue;
54 }
55 executorList.push_back(executor);
56 }
57 }
58
GetCollectorExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> & executorList,std::vector<sptr<ICollector>> & iCollectorList)59 void PinAuthDriverHdi::GetCollectorExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> &executorList,
60 std::vector<sptr<ICollector>> &iCollectorList)
61 {
62 IAM_LOGI("get collector size %{public}zu", iCollectorList.size());
63 for (const auto &iCollector : iCollectorList) {
64 if (iCollector == nullptr) {
65 IAM_LOGE("iCollector is nullptr");
66 continue;
67 }
68 auto executor = Common::MakeShared<PinAuthCollectorHdi>(iCollector);
69 if (executor == nullptr) {
70 IAM_LOGE("make share failed");
71 continue;
72 }
73 executorList.push_back(executor);
74 }
75 }
76
GetVerifierExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> & executorList,std::vector<sptr<IVerifier>> & iVerifierList)77 void PinAuthDriverHdi::GetVerifierExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> &executorList,
78 std::vector<sptr<IVerifier>> &iVerifierList)
79 {
80 IAM_LOGI("get verifier size %{public}zu", iVerifierList.size());
81 for (const auto &iVerifier : iVerifierList) {
82 if (iVerifier == nullptr) {
83 IAM_LOGE("iVerifier is nullptr");
84 continue;
85 }
86 auto executor = Common::MakeShared<PinAuthVerifierHdi>(iVerifier);
87 if (executor == nullptr) {
88 IAM_LOGE("make share failed");
89 continue;
90 }
91 executorList.push_back(executor);
92 }
93 }
94
GetExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> & executorList)95 void PinAuthDriverHdi::GetExecutorList(std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> &executorList)
96 {
97 IAM_LOGI("start");
98 if (pinAuthInterfaceAdapter_ == nullptr) {
99 IAM_LOGE("pinAuthInterfaceAdapter_ is null");
100 return;
101 }
102 auto pinInterface = pinAuthInterfaceAdapter_->Get();
103 if (pinInterface == nullptr) {
104 IAM_LOGE("IPinAuthInterface is null");
105 return;
106 }
107
108 std::vector<sptr<ICollector>> iCollectorList;
109 std::vector<sptr<IVerifier>> iVerifierList;
110 std::vector<sptr<IAllInOneExecutor>> iAllInOneExecutorList;
111 auto ret = pinInterface->GetExecutorList(iAllInOneExecutorList, iVerifierList, iCollectorList);
112 if (ret != HDF_SUCCESS) {
113 IAM_LOGE("GetExecutorList fail");
114 return;
115 }
116 GetAllInOneExecutorList(executorList, iAllInOneExecutorList);
117 GetCollectorExecutorList(executorList, iCollectorList);
118 GetVerifierExecutorList(executorList, iVerifierList);
119 IAM_LOGI("get executor size %{public}zu", executorList.size());
120 }
121
OnHdiDisconnect()122 void PinAuthDriverHdi::OnHdiDisconnect()
123 {
124 IAM_LOGI("start");
125 }
126
OnFrameworkDown()127 void PinAuthDriverHdi::OnFrameworkDown()
128 {
129 IAM_LOGI("start");
130 LoadModeHandler::GetInstance().OnFrameworkDown();
131 }
132 } // namespace PinAuth
133 } // namespace UserIam
134 } // namespace OHOS