• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 "face_auth_executor_hdi.h"
17 
18 #include <cstdint>
19 #include <functional>
20 #include <map>
21 #include <memory>
22 #include <new>
23 #include <utility>
24 #include <vector>
25 
26 #include "hdf_base.h"
27 #include "refbase.h"
28 
29 #include "iam_check.h"
30 #include "iam_executor_framework_types.h"
31 #include "iam_logger.h"
32 
33 #include "buffer_producer_sequenceable.h"
34 #include "face_auth_defines.h"
35 #include "face_auth_executor_callback_hdi.h"
36 #include "face_auth_hdi.h"
37 #include "sa_command_manager.h"
38 
39 #define LOG_LABEL UserIam::Common::LABEL_FACE_AUTH_SA
40 
41 namespace OHOS {
42 namespace UserIam {
43 namespace FaceAuth {
44 using IamResultCode = UserAuth::ResultCode;
45 using IamExecutorRole = UserAuth::ExecutorRole;
46 using IamExecutorInfo = UserAuth::ExecutorInfo;
47 using BufferProducerSequenceable = OHOS::HDI::Camera::V1_0::BufferProducerSequenceable;
48 namespace UserAuth = OHOS::UserIam::UserAuth;
FaceAuthExecutorHdi(sptr<IExecutor> executorProxy)49 FaceAuthExecutorHdi::FaceAuthExecutorHdi(sptr<IExecutor> executorProxy) : executorProxy_(executorProxy) {};
50 
GetExecutorInfo(IamExecutorInfo & info)51 IamResultCode FaceAuthExecutorHdi::GetExecutorInfo(IamExecutorInfo &info)
52 {
53     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
54     ExecutorInfo localInfo = {};
55     int32_t status = executorProxy_->GetExecutorInfo(localInfo);
56     IamResultCode result = ConvertResultCode(status);
57     if (result != IamResultCode::SUCCESS) {
58         IAM_LOGE("GetExecutorInfo fail result %{public}d", result);
59         return result;
60     }
61     result = MoveHdiExecutorInfo(localInfo, info);
62     if (result != IamResultCode::SUCCESS) {
63         IAM_LOGE("MoveHdiExecutorInfo fail result %{public}d", result);
64         return result;
65     }
66     return IamResultCode::SUCCESS;
67 }
68 
OnRegisterFinish(const std::vector<uint64_t> & templateIdList,const std::vector<uint8_t> & frameworkPublicKey,const std::vector<uint8_t> & extraInfo)69 IamResultCode FaceAuthExecutorHdi::OnRegisterFinish(const std::vector<uint64_t> &templateIdList,
70     const std::vector<uint8_t> &frameworkPublicKey, const std::vector<uint8_t> &extraInfo)
71 {
72     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
73     int32_t status = executorProxy_->OnRegisterFinish(templateIdList, frameworkPublicKey, extraInfo);
74     IamResultCode result = ConvertResultCode(status);
75     if (result != IamResultCode::SUCCESS) {
76         IAM_LOGE("OnRegisterFinish fail result %{public}d", result);
77         return result;
78     }
79 
80     result = RegisterSaCommandCallback();
81     if (result != IamResultCode::SUCCESS) {
82         IAM_LOGE("RegisterSaCommandCallback fail");
83         return result;
84     }
85     return IamResultCode::SUCCESS;
86 }
87 
Enroll(uint64_t scheduleId,const UserAuth::EnrollParam & param,const std::shared_ptr<UserAuth::IExecuteCallback> & callbackObj)88 IamResultCode FaceAuthExecutorHdi::Enroll(uint64_t scheduleId, const UserAuth::EnrollParam &param,
89     const std::shared_ptr<UserAuth::IExecuteCallback> &callbackObj)
90 {
91     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
92     IF_FALSE_LOGE_AND_RETURN_VAL(callbackObj != nullptr, IamResultCode::GENERAL_ERROR);
93     sptr<IExecutorCallback> callback(new (std::nothrow) FaceAuthExecutorCallbackHdi(callbackObj));
94     IF_FALSE_LOGE_AND_RETURN_VAL(callback != nullptr, IamResultCode::GENERAL_ERROR);
95     int32_t status = executorProxy_->Enroll(scheduleId, param.extraInfo, callback);
96     IamResultCode result = ConvertResultCode(status);
97     if (result != IamResultCode::SUCCESS) {
98         IAM_LOGE("Enroll fail result %{public}d", result);
99         return result;
100     }
101     return IamResultCode::SUCCESS;
102 }
103 
Authenticate(uint64_t scheduleId,const UserAuth::AuthenticateParam & param,const std::shared_ptr<UserAuth::IExecuteCallback> & callbackObj)104 IamResultCode FaceAuthExecutorHdi::Authenticate(uint64_t scheduleId, const UserAuth::AuthenticateParam &param,
105     const std::shared_ptr<UserAuth::IExecuteCallback> &callbackObj)
106 {
107     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
108     IF_FALSE_LOGE_AND_RETURN_VAL(callbackObj != nullptr, IamResultCode::GENERAL_ERROR);
109     sptr<IExecutorCallback> callback(new (std::nothrow) FaceAuthExecutorCallbackHdi(callbackObj));
110     IF_FALSE_LOGE_AND_RETURN_VAL(callback != nullptr, IamResultCode::GENERAL_ERROR);
111     int32_t status = executorProxy_->Authenticate(scheduleId, param.templateIdList, param.extraInfo, callback);
112     IamResultCode result = ConvertResultCode(status);
113     if (result != IamResultCode::SUCCESS) {
114         IAM_LOGE("Authenticate fail result %{public}d", result);
115         return result;
116     }
117     return IamResultCode::SUCCESS;
118 }
119 
Identify(uint64_t scheduleId,const UserAuth::IdentifyParam & param,const std::shared_ptr<UserAuth::IExecuteCallback> & callbackObj)120 IamResultCode FaceAuthExecutorHdi::Identify(uint64_t scheduleId, const UserAuth::IdentifyParam &param,
121     const std::shared_ptr<UserAuth::IExecuteCallback> &callbackObj)
122 {
123     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
124     IF_FALSE_LOGE_AND_RETURN_VAL(callbackObj != nullptr, IamResultCode::GENERAL_ERROR);
125     sptr<IExecutorCallback> callback(new (std::nothrow) FaceAuthExecutorCallbackHdi(callbackObj));
126     IF_FALSE_LOGE_AND_RETURN_VAL(callback != nullptr, IamResultCode::GENERAL_ERROR);
127     int32_t status = executorProxy_->Identify(scheduleId, param.extraInfo, callback);
128     IamResultCode result = ConvertResultCode(status);
129     if (result != IamResultCode::SUCCESS) {
130         IAM_LOGE("Identify fail result %{public}d", result);
131         return result;
132     }
133     return IamResultCode::SUCCESS;
134 }
135 
Delete(const std::vector<uint64_t> & templateIdList)136 IamResultCode FaceAuthExecutorHdi::Delete(const std::vector<uint64_t> &templateIdList)
137 {
138     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
139     int32_t status = executorProxy_->Delete(templateIdList);
140     IamResultCode result = ConvertResultCode(status);
141     if (result != IamResultCode::SUCCESS) {
142         IAM_LOGE("Delete fail result %{public}d", result);
143         return result;
144     }
145     return IamResultCode::SUCCESS;
146 }
147 
Cancel(uint64_t scheduleId)148 IamResultCode FaceAuthExecutorHdi::Cancel(uint64_t scheduleId)
149 {
150     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
151     int32_t status = executorProxy_->Cancel(scheduleId);
152     IamResultCode result = ConvertResultCode(status);
153     if (result != IamResultCode::SUCCESS) {
154         IAM_LOGE("Cancel fail result %{public}d", result);
155         return result;
156     }
157     return IamResultCode::SUCCESS;
158 }
159 
SendCommand(UserAuth::PropertyMode commandId,const std::vector<uint8_t> & extraInfo,const std::shared_ptr<UserAuth::IExecuteCallback> & callbackObj)160 IamResultCode FaceAuthExecutorHdi::SendCommand(UserAuth::PropertyMode commandId, const std::vector<uint8_t> &extraInfo,
161     const std::shared_ptr<UserAuth::IExecuteCallback> &callbackObj)
162 {
163     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
164     IF_FALSE_LOGE_AND_RETURN_VAL(callbackObj != nullptr, IamResultCode::GENERAL_ERROR);
165     CommandId hdiCommandId;
166     IamResultCode result = ConvertCommandId(commandId, hdiCommandId);
167     if (result != IamResultCode::SUCCESS) {
168         IAM_LOGE("ConvertCommandId fail result %{public}d", result);
169         return result;
170     }
171     sptr<IExecutorCallback> callback(new (std::nothrow) FaceAuthExecutorCallbackHdi(callbackObj));
172     IF_FALSE_LOGE_AND_RETURN_VAL(callback != nullptr, IamResultCode::GENERAL_ERROR);
173     int32_t status = executorProxy_->SendCommand(hdiCommandId, extraInfo, callback);
174     result = ConvertResultCode(status);
175     if (result != IamResultCode::SUCCESS) {
176         IAM_LOGE("SendCommand fail result %{public}d", result);
177         return result;
178     }
179     return IamResultCode::SUCCESS;
180 }
181 
GetProperty(const std::vector<uint64_t> & templateIdList,const std::vector<UserAuth::Attributes::AttributeKey> & keys,UserAuth::Property & property)182 UserAuth::ResultCode FaceAuthExecutorHdi::GetProperty(const std::vector<uint64_t> &templateIdList,
183     const std::vector<UserAuth::Attributes::AttributeKey> &keys, UserAuth::Property &property)
184 {
185     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
186 
187     std::vector<GetPropertyType> propertyTypes;
188     IamResultCode result = ConvertAttributeKeyVectorToPropertyType(keys, propertyTypes);
189     IF_FALSE_LOGE_AND_RETURN_VAL(result == IamResultCode::SUCCESS, IamResultCode::GENERAL_ERROR);
190 
191     Property hdiProperty;
192     int32_t status = executorProxy_->GetProperty(templateIdList, propertyTypes, hdiProperty);
193     result = ConvertResultCode(status);
194     if (result != IamResultCode::SUCCESS) {
195         IAM_LOGE("SendCommand fail result %{public}d", result);
196         return result;
197     }
198     MoveHdiProperty(hdiProperty, property);
199     return IamResultCode::SUCCESS;
200 }
201 
SetCachedTemplates(const std::vector<uint64_t> & templateIdList)202 UserAuth::ResultCode FaceAuthExecutorHdi::SetCachedTemplates(const std::vector<uint64_t> &templateIdList)
203 {
204     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
205 
206     int32_t status = executorProxy_->SetCachedTemplates(templateIdList);
207     IamResultCode result = ConvertResultCode(status);
208     if (result != IamResultCode::SUCCESS) {
209         IAM_LOGE("SendCommand fail result %{public}d", result);
210         return result;
211     }
212     return IamResultCode::SUCCESS;
213 }
214 
SetBufferProducer(sptr<IBufferProducer> & producer)215 int32_t FaceAuthExecutorHdi::SetBufferProducer(sptr<IBufferProducer> &producer)
216 {
217     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
218     OHOS::sptr<BufferProducerSequenceable> producerSequenceable(nullptr);
219     if (producer != nullptr) {
220         producerSequenceable =
221             sptr<BufferProducerSequenceable>(new (std::nothrow) BufferProducerSequenceable(producer));
222         IF_FALSE_LOGE_AND_RETURN_VAL(producerSequenceable != nullptr, FACE_AUTH_ERROR);
223     }
224 
225     int32_t status = executorProxy_->SetBufferProducer(producerSequenceable);
226     IamResultCode result = ConvertResultCode(status);
227     if (result != IamResultCode::SUCCESS) {
228         IAM_LOGE("SetBufferProducer fail result %{public}d", result);
229         return FACE_AUTH_ERROR;
230     }
231     return FACE_AUTH_SUCCESS;
232 }
233 
OnHdiDisconnect()234 void FaceAuthExecutorHdi::OnHdiDisconnect()
235 {
236     IAM_LOGE("start");
237     SaCommandManager::GetInstance().OnHdiDisconnect(shared_from_this());
238 }
239 
MoveHdiExecutorInfo(ExecutorInfo & in,IamExecutorInfo & out)240 IamResultCode FaceAuthExecutorHdi::MoveHdiExecutorInfo(ExecutorInfo &in, IamExecutorInfo &out)
241 {
242     out.executorSensorHint = static_cast<uint32_t>(in.sensorId);
243     out.executorMatcher = in.executorType;
244     IamResultCode result = ConvertExecutorRole(in.executorRole, out.executorRole);
245     if (result != IamResultCode::SUCCESS) {
246         IAM_LOGE("ConvertExecutorRole fail result %{public}d", result);
247         return result;
248     }
249     result = ConvertAuthType(in.authType, out.authType);
250     if (result != IamResultCode::SUCCESS) {
251         IAM_LOGE("ConvertAuthType fail result %{public}d", result);
252         return result;
253     }
254     result = ConvertExecutorSecureLevel(in.esl, out.esl);
255     if (result != IamResultCode::SUCCESS) {
256         IAM_LOGE("ConvertExecutorSecureLevel fail result %{public}d", result);
257         return result;
258     }
259     in.publicKey.swap(out.publicKey);
260     return IamResultCode::SUCCESS;
261 }
262 
MoveHdiProperty(Property & in,UserAuth::Property & out)263 void FaceAuthExecutorHdi::MoveHdiProperty(Property &in, UserAuth::Property &out)
264 {
265     out.authSubType = in.authSubType;
266     out.lockoutDuration = in.lockoutDuration;
267     out.remainAttempts = in.remainAttempts;
268     out.enrollmentProgress.swap(in.enrollmentProgress);
269     out.sensorInfo.swap(in.sensorInfo);
270 }
271 
MoveHdiTemplateInfo(TemplateInfo & in,UserAuth::TemplateInfo & out)272 void FaceAuthExecutorHdi::MoveHdiTemplateInfo(TemplateInfo &in, UserAuth::TemplateInfo &out)
273 {
274     out.executorType = in.executorType;
275     out.freezingTime = in.lockoutDuration;
276     out.remainTimes = in.remainAttempts;
277     in.extraInfo.swap(out.extraInfo);
278 }
279 
ConvertCommandId(const UserAuth::PropertyMode in,CommandId & out)280 IamResultCode FaceAuthExecutorHdi::ConvertCommandId(const UserAuth::PropertyMode in, CommandId &out)
281 {
282     if (static_cast<CommandId>(in) > CommandId::VENDOR_COMMAND_BEGIN) {
283         out = static_cast<CommandId>(in);
284         IAM_LOGI("vendor command id %{public}d, no covert", out);
285         return IamResultCode::SUCCESS;
286     }
287 
288     static const std::map<UserAuth::PropertyMode, CommandId> data = {
289         { UserAuth::PropertyMode::PROPERTY_INIT_ALGORITHM, CommandId::INIT_ALGORITHM },
290         { UserAuth::PropertyMode::PROPERTY_MODE_FREEZE, CommandId::LOCK_TEMPLATE },
291         { UserAuth::PropertyMode::PROPERTY_MODE_UNFREEZE, CommandId::UNLOCK_TEMPLATE } };
292     auto iter = data.find(in);
293     if (iter == data.end()) {
294         IAM_LOGE("command id %{public}d is invalid", in);
295         return IamResultCode::INVALID_PARAMETERS;
296     }
297     out = iter->second;
298     IAM_LOGI("covert command id %{public}d to idl command is %{public}d", in, out);
299     return IamResultCode::SUCCESS;
300 }
301 
ConvertAuthType(const AuthType in,UserAuth::AuthType & out)302 IamResultCode FaceAuthExecutorHdi::ConvertAuthType(const AuthType in, UserAuth::AuthType &out)
303 {
304     static const std::map<AuthType, UserAuth::AuthType> data = {
305         { AuthType::FACE, UserAuth::AuthType::FACE },
306     };
307     auto iter = data.find(in);
308     if (iter == data.end()) {
309         IAM_LOGE("authType %{public}d is invalid", in);
310         return IamResultCode::GENERAL_ERROR;
311     }
312     out = iter->second;
313     return IamResultCode::SUCCESS;
314 }
315 
ConvertExecutorRole(const ExecutorRole in,IamExecutorRole & out)316 IamResultCode FaceAuthExecutorHdi::ConvertExecutorRole(const ExecutorRole in, IamExecutorRole &out)
317 {
318     static const std::map<ExecutorRole, IamExecutorRole> data = {
319         { ExecutorRole::COLLECTOR, IamExecutorRole::COLLECTOR },
320         { ExecutorRole::VERIFIER, IamExecutorRole::VERIFIER },
321         { ExecutorRole::ALL_IN_ONE, IamExecutorRole::ALL_IN_ONE },
322     };
323     auto iter = data.find(in);
324     if (iter == data.end()) {
325         IAM_LOGE("executorRole %{public}d is invalid", in);
326         return IamResultCode::GENERAL_ERROR;
327     }
328     out = iter->second;
329     return IamResultCode::SUCCESS;
330 }
331 
ConvertExecutorSecureLevel(const ExecutorSecureLevel in,UserAuth::ExecutorSecureLevel & out)332 IamResultCode FaceAuthExecutorHdi::ConvertExecutorSecureLevel(const ExecutorSecureLevel in,
333     UserAuth::ExecutorSecureLevel &out)
334 {
335     static const std::map<ExecutorSecureLevel, UserAuth::ExecutorSecureLevel> data = {
336         { ExecutorSecureLevel::ESL0, UserAuth::ExecutorSecureLevel::ESL0 },
337         { ExecutorSecureLevel::ESL1, UserAuth::ExecutorSecureLevel::ESL1 },
338         { ExecutorSecureLevel::ESL2, UserAuth::ExecutorSecureLevel::ESL2 },
339         { ExecutorSecureLevel::ESL3, UserAuth::ExecutorSecureLevel::ESL3 },
340     };
341     auto iter = data.find(in);
342     if (iter == data.end()) {
343         IAM_LOGE("executorSecureLevel %{public}d is invalid", in);
344         return IamResultCode::GENERAL_ERROR;
345     }
346     out = iter->second;
347     return IamResultCode::SUCCESS;
348 }
349 
ConvertResultCode(const int32_t in)350 IamResultCode FaceAuthExecutorHdi::ConvertResultCode(const int32_t in)
351 {
352     HDF_STATUS hdfIn = static_cast<HDF_STATUS>(in);
353     static const std::map<HDF_STATUS, IamResultCode> data = {
354         { HDF_SUCCESS, IamResultCode::SUCCESS },
355         { HDF_FAILURE, IamResultCode::GENERAL_ERROR },
356         { HDF_ERR_TIMEOUT, IamResultCode::TIMEOUT },
357         { HDF_ERR_QUEUE_FULL, IamResultCode::BUSY },
358         { HDF_ERR_DEVICE_BUSY, IamResultCode::BUSY },
359     };
360 
361     IamResultCode out;
362     auto iter = data.find(hdfIn);
363     if (iter == data.end()) {
364         out = IamResultCode::GENERAL_ERROR;
365     } else {
366         out = iter->second;
367     }
368     IAM_LOGI("covert hdi result code %{public}d to framework result code %{public}d", in, out);
369     return out;
370 }
371 
ConvertAttributeKeyVectorToPropertyType(const std::vector<UserAuth::Attributes::AttributeKey> inItems,std::vector<GetPropertyType> & outItems)372 IamResultCode FaceAuthExecutorHdi::ConvertAttributeKeyVectorToPropertyType(
373     const std::vector<UserAuth::Attributes::AttributeKey> inItems, std::vector<GetPropertyType> &outItems)
374 {
375     outItems.clear();
376     for (auto &inItem : inItems) {
377         GetPropertyType outItem;
378         IamResultCode result = ConvertAttributeKeyToPropertyType(inItem, outItem);
379         IF_FALSE_LOGE_AND_RETURN_VAL(result == IamResultCode::SUCCESS, IamResultCode::GENERAL_ERROR);
380         outItems.push_back(outItem);
381     }
382 
383     return IamResultCode::SUCCESS;
384 }
385 
ConvertAttributeKeyToPropertyType(const UserAuth::Attributes::AttributeKey in,GetPropertyType & out)386 IamResultCode FaceAuthExecutorHdi::ConvertAttributeKeyToPropertyType(const UserAuth::Attributes::AttributeKey in,
387     GetPropertyType &out)
388 {
389     static const std::map<UserAuth::Attributes::AttributeKey, GetPropertyType> data = {
390         { UserAuth::Attributes::ATTR_PIN_SUB_TYPE, GetPropertyType::AUTH_SUB_TYPE },
391         { UserAuth::Attributes::ATTR_FREEZING_TIME, GetPropertyType::LOCKOUT_DURATION },
392         { UserAuth::Attributes::ATTR_REMAIN_TIMES, GetPropertyType::REMAIN_ATTEMPTS },
393         { UserAuth::Attributes::ATTR_ENROLL_PROGRESS, GetPropertyType::ENROLL_PROGRESS },
394         { UserAuth::Attributes::ATTR_SENSOR_INFO, GetPropertyType::SENSOR_INFO },
395     };
396 
397     auto iter = data.find(in);
398     if (iter == data.end()) {
399         IAM_LOGE("attribute %{public}d is invalid", in);
400         return IamResultCode::GENERAL_ERROR;
401     } else {
402         out = iter->second;
403     }
404     IAM_LOGI("covert hdi result code %{public}d to framework result code %{public}d", in, out);
405     return IamResultCode::SUCCESS;
406 }
407 
RegisterSaCommandCallback()408 UserAuth::ResultCode FaceAuthExecutorHdi::RegisterSaCommandCallback()
409 {
410     IF_FALSE_LOGE_AND_RETURN_VAL(executorProxy_ != nullptr, IamResultCode::GENERAL_ERROR);
411 
412     sptr<SaCommandCallback> callback(new (std::nothrow) SaCommandCallback(shared_from_this()));
413     IF_FALSE_LOGE_AND_RETURN_VAL(callback != nullptr, IamResultCode::GENERAL_ERROR);
414 
415     int32_t status = executorProxy_->RegisterSaCommandCallback(callback);
416     IamResultCode result = ConvertResultCode(status);
417     if (result != IamResultCode::SUCCESS) {
418         IAM_LOGE("RegisterSaCommandCallback fail result %{public}d", result);
419         return result;
420     }
421 
422     return IamResultCode::SUCCESS;
423 }
424 
OnSaCommands(const std::vector<SaCommand> & commands)425 int32_t FaceAuthExecutorHdi::SaCommandCallback::OnSaCommands(const std::vector<SaCommand> &commands)
426 {
427     IAM_LOGI("start");
428     IamResultCode result = SaCommandManager::GetInstance().ProcessSaCommands(executorHdi_, commands);
429     if (result != IamResultCode::SUCCESS) {
430         IAM_LOGE("ProcessSaCommands fail");
431         return HDF_FAILURE;
432     }
433     IAM_LOGI("success");
434     return HDF_SUCCESS;
435 };
436 } // namespace FaceAuth
437 } // namespace UserIam
438 } // namespace OHOS
439