提交 e190f722 编写于 作者: A Annie_wang

update docs

Signed-off-by: NAnnie_wang <annie.wangli@huawei.com>
上级 54f28001
...@@ -61,7 +61,7 @@ The identity authentication consists of User_auth and basic authentication servi ...@@ -61,7 +61,7 @@ The identity authentication consists of User_auth and basic authentication servi
- IPC - IPC
Inter-Process Communication (IPC) is a mechanism that allows processes to communicate with each other. For details, see [IPC](https://gitee.com/openharmony/communication_ipc/blob/master/README.md). Inter-process communication (IPC) is a mechanism that allows processes to communicate with each other. For details, see [IPC](https://gitee.com/openharmony/communication_ipc/blob/master/README.md).
- HDI - HDI
...@@ -90,7 +90,7 @@ The Face_auth driver provides basic facial authentication capabilities for the U ...@@ -90,7 +90,7 @@ The Face_auth driver provides basic facial authentication capabilities for the U
### Available APIs ### Available APIs
The following table describes the C++ APIs generated from the Interface Definition Language (IDL) interface description. For details about the interface declaration, see the .idl file in **/drivers/interface/face_auth/v1_0/**. The following table describes the C++ APIs generated from the Interface Definition Language (IDL) interface description. For details about the interface declaration, see the .idl file in **/drivers/interface/face_auth/**.
**Table 1** describes the HDI APIs for face credential enrollment, authentication, recognition, and deletion. **Table 2** describes the callbacks used to return the executor operation result to the framework or return the authentication tip information to upper-layer applications. **Table 1** describes the HDI APIs for face credential enrollment, authentication, recognition, and deletion. **Table 2** describes the callbacks used to return the executor operation result to the framework or return the authentication tip information to upper-layer applications.
...@@ -98,23 +98,29 @@ The following table describes the C++ APIs generated from the Interface Definiti ...@@ -98,23 +98,29 @@ The following table describes the C++ APIs generated from the Interface Definiti
| API | Description | | API | Description |
| ----------------------------------- | ---------------------------------- | | ----------------------------------- | ---------------------------------- |
| GetExecutorList(std::vector<sptr<IExecutor>>& executorList) | Obtains the executor list. | | GetExecutorList(std::vector\<sptr\<V1_0::IExecutor>>& executorList) | Obtains the executor list (version V1_0).|
| GetExecutorListV1_1(std::vector\<sptr\<V1_1::IExecutor>>& executorList) | Obtains the executor list (version V1_1). |
| GetExecutorInfo(ExecutorInfo& info) | Obtains the executor information, including the executor type, executor role, authentication type, security level, and executor public key.| | GetExecutorInfo(ExecutorInfo& info) | Obtains the executor information, including the executor type, executor role, authentication type, security level, and executor public key.|
| GetTemplateInfo(uint64_t templateId, TemplateInfo& info) | Obtains information about a face image template based on the specified template ID. | | GetTemplateInfo(uint64_t templateId, TemplateInfo& info) | Obtains information about a face image template based on the specified template ID. |
| OnRegisterFinish(const std::vector<uint64_t>& templateIdList,<br> const std::vector<uint8_t>& frameworkPublicKey, const std::vector<uint8_t>& extraInfo) | Obtains the public key and template ID list from User_auth after the executor is registered successfully.| | OnRegisterFinish(const std::vector\<uint64_t>& templateIdList,<br> const std::vector\<uint8_t>& frameworkPublicKey, const std::vector\<uint8_t>& extraInfo) | Obtains the public key and template ID list from User_auth after the executor is registered successfully.|
| Enroll(uint64_t scheduleId, const std::vector<uint8_t>& extraInfo,<br> const sptr<IExecutorCallback>& callbackObj) | Enrolls a face image. | | Enroll(uint64_t scheduleId, const std::vector\<uint8_t>& extraInfo,<br> const sptr\<IExecutorCallback>& callbackObj) | Enrolls a face image template. |
| Authenticate(uint64_t scheduleId, const std::vector<uint64_t>& templateIdList,<br> const std::vector<uint8_t>& extraInfo, const sptr<IExecutorCallback>& callbackObj) | Performs facial authentication. | | Authenticate(uint64_t scheduleId, const std::vector\<uint64_t>& templateIdList,<br> const std::vector\<uint8_t>& extraInfo, const sptr\<IExecutorCallback>& callbackObj) | Performs facial authentication. |
| Identify(uint64_t scheduleId, const std::vector<uint8_t>& extraInfo,<br> const sptr<IExecutorCallback>& callbackObj) | Performs facial identification. | | Identify(uint64_t scheduleId, const std::vector\<uint8_t>& extraInfo,<br> const sptr\<IExecutorCallback>& callbackObj) | Performs facial identification. |
| Delete(const std::vector<uint64_t>& templateIdList) | Deletes a face image. | | Delete(const std::vector\<uint64_t>& templateIdList) | Deletes a face image template. |
| Cancel(uint64_t scheduleId) | Cancels a face enrollment, authentication, or identification operation based on the **scheduleId**. | | Cancel(uint64_t scheduleId) | Cancels a face enrollment, authentication, or identification operation based on the **scheduleId**. |
| SendCommand(int32_t commandId, const std::vector<uint8_t>& extraInfo,<br> const sptr<IExecutorCallback>& callbackObj) | Sends commands to the Face_auth service. | | SendCommand(int32_t commandId, const std::vector\<uint8_t>& extraInfo,<br> const sptr\<IExecutorCallback>& callbackObj) | Sends commands to the Face_auth service. |
| SetBufferProducer(const sptr\<BufferProducerSequenceable> &bufferProducer) | Sets the preview stream buffer.|
| GetProperty(const std::vector\<uint64_t>& templateIdList,<br>const std::vector\<GetPropertyType>& propertyTypes, Property& property) | Obtains executor property information.|
| SetCachedTemplates(const std::vector\<uint64_t> &templateIdList) | Sets a list of templates to be cached.|
| RegisterSaCommandCallback(const sptr\<ISaCommandCallback> &callbackObj) | Registers a callback to be invoked when an SA command is executed.|
**Table 2** Callbacks **Table 2** Callbacks
| API | Description | | API | Description |
| ------------------------------------------------------------ | ------------------------ | | ------------------------------------------------------------ | ------------------------ |
| IExecutorCallback::OnResult(int32_t code, const std::vector<uint8_t>& extraInfo) | Called to return the operation result. | | IExecutorCallback::OnResult(int32_t code, const std::vector\<uint8_t>& extraInfo) | Called to return the operation result. |
| IExecutorCallback::OnTip(int32_t code, const std::vector<uint8_t>& extraInfo) | Called to return the interaction information about the operation process.| | IExecutorCallback::OnTip(int32_t code, const std::vector\<uint8_t>& extraInfo) | Called to return the interaction information about the operation process.|
| ISaCommandCallback::OnSaCommands(const std::vector\<SaCommand>& commands) | Called to send the command list.|
### How to Develop ### How to Develop
...@@ -185,7 +191,7 @@ The development procedure is as follows: ...@@ -185,7 +191,7 @@ The development procedure is as follows:
IAM_LOGI("start"); IAM_LOGI("start");
auto *hdfFaceAuthInterfaceHost = new (std::nothrow) HdfFaceAuthInterfaceHost; auto *hdfFaceAuthInterfaceHost = new (std::nothrow) HdfFaceAuthInterfaceHost;
if (hdfFaceAuthInterfaceHost == nullptr) { if (hdfFaceAuthInterfaceHost == nullptr) {
IAM_LOGE("%{public}s: Failed to create HdfFaceAuthInterfaceHost object", __func__); IAM_LOGE("%{public}s: failed to create HdfFaceAuthInterfaceHost object", __func__);
return HDF_FAILURE; return HDF_FAILURE;
} }
...@@ -195,7 +201,7 @@ The development procedure is as follows: ...@@ -195,7 +201,7 @@ The development procedure is as follows:
auto serviceImpl = IFaceAuthInterface::Get(true); auto serviceImpl = IFaceAuthInterface::Get(true);
if (serviceImpl == nullptr) { if (serviceImpl == nullptr) {
IAM_LOGE("%{public}s: Failed to implement service", __func__); IAM_LOGE("%{public}s: failed to implement service", __func__);
return HDF_FAILURE; return HDF_FAILURE;
} }
...@@ -238,7 +244,7 @@ The development procedure is as follows: ...@@ -238,7 +244,7 @@ The development procedure is as follows:
```c++ ```c++
// Executor implementation class // Executor implementation class
class ExecutorImpl : public IExecutor { class ExecutorImpl : public V1_1::IExecutor {
public: public:
ExecutorImpl(struct ExecutorInfo executorInfo); ExecutorImpl(struct ExecutorInfo executorInfo);
virtual ~ExecutorImpl() {} virtual ~ExecutorImpl() {}
...@@ -263,7 +269,7 @@ The development procedure is as follows: ...@@ -263,7 +269,7 @@ The development procedure is as follows:
} }
// Obtain the executor list and create an executor. // Obtain the executor list and create an executor.
int32_t GetExecutorList(std::vector<sptr<IExecutor>>& executorList) int32_t GetExecutorListV1_1(std::vector<sptr<V1_1::IExecutor>>& executorList)
{ {
IAM_LOGI("interface mock start"); IAM_LOGI("interface mock start");
executorList.clear(); executorList.clear();
...@@ -281,13 +287,24 @@ The development procedure is as follows: ...@@ -281,13 +287,24 @@ The development procedure is as follows:
IAM_LOGE("executor is nullptr"); IAM_LOGE("executor is nullptr");
return HDF_FAILURE; return HDF_FAILURE;
} }
executorList.push_back(sptr<IExecutor>(executor)); executorList.push_back(sptr<V1_1::IExecutor>(executor));
IAM_LOGI("interface mock success"); IAM_LOGI("interface mock success");
return HDF_SUCCESS; return HDF_SUCCESS;
} }
// Obtain the executor list. The method of V1_0 is called to invoke the method of V1_1 through parameter conversion.
int32_t GetExecutorList(std::vector<sptr<V1_0::IExecutor>> &executorList)
{
std::vector<sptr<V1_1::IExecutor>> executorListV1_1;
int32_t result = GetExecutorListV1_1(executorListV1_1);
for (auto &executor : executorListV1_1) {
executorList.push_back(executor);
}
return result;
}
``` ```
3. Implement the functions of the executor. For details about the code, see [executor_impl.cpp](https://gitee.com/openharmony/drivers_peripheral/blob/master/face_auth/hdi_service/src/executor_impl.cpp). 3. Implement each function of the executor. For details about the code, see [executor_impl.cpp](https://gitee.com/openharmony/drivers_peripheral/blob/master/face_auth/hdi_service/src/executor_impl.cpp).
```c++ ```c++
// Obtain the executor information. // Obtain the executor information.
...@@ -317,7 +334,7 @@ The development procedure is as follows: ...@@ -317,7 +334,7 @@ The development procedure is as follows:
static_cast<void>(templateIdList); static_cast<void>(templateIdList);
static_cast<void>(extraInfo); static_cast<void>(extraInfo);
static_cast<void>(frameworkPublicKey); static_cast<void>(frameworkPublicKey);
IAM_LOGI("Registration finished"); IAM_LOGI("registration finished");
return HDF_SUCCESS; return HDF_SUCCESS;
} }
...@@ -422,6 +439,40 @@ The development procedure is as follows: ...@@ -422,6 +439,40 @@ The development procedure is as follows:
} }
return HDF_SUCCESS; return HDF_SUCCESS;
} }
// Set the preview stream buffer.
int32_t ExecutorImpl::SetBufferProducer(const sptr<BufferProducerSequenceable> &bufferProducer)
{
IAM_LOGI("interface mock start set buffer producer %{public}s",
UserIam::Common::GetPointerNullStateString(bufferProducer.GetRefPtr()).c_str());
return HDF_SUCCESS;
}
// Obtaining executor properties.
int32_t ExecutorImpl::GetProperty(
const std::vector<uint64_t> &templateIdList, const std::vector<GetPropertyType> &propertyTypes, Property &property)
{
IAM_LOGI("interface mock start");
property = {};
IAM_LOGI("get property success");
return HDF_SUCCESS;
}
// Set a list of templates to be cached.
int32_t ExecutorImpl::SetCachedTemplates(const std::vector<uint64_t> &templateIdList)
{
IAM_LOGI("interface mock start");
IAM_LOGI("set cached templates success");
return HDF_SUCCESS;
}
// Register the callback to be invoked when the SA command is executed.
int32_t ExecutorImpl::RegisterSaCommandCallback(const sptr<ISaCommandCallback> &callbackObj)
{
IAM_LOGI("interface mock start");
IAM_LOGI("register sa command callback success");
return HDF_SUCCESS;
}
``` ```
4. Modify **serviceName2Config** in the **face_auth_service.cpp** file if you need to add a driver or modify driver information. 4. Modify **serviceName2Config** in the **face_auth_service.cpp** file if you need to add a driver or modify driver information.
......
...@@ -61,7 +61,7 @@ The identity authentication consists of the User_auth framework and basic authen ...@@ -61,7 +61,7 @@ The identity authentication consists of the User_auth framework and basic authen
- IPC - IPC
Inter-Process Communication (IPC) is a mechanism that allows processes to communicate with each other. For details, see [IPC](https://gitee.com/openharmony/communication_ipc/blob/master/README.md). Inter-process communication (IPC) is a mechanism that allows processes to communicate with each other. For details, see [IPC](https://gitee.com/openharmony/communication_ipc/blob/master/README.md).
- HDI - HDI
...@@ -88,30 +88,36 @@ The fingerprint_auth driver provides stable basic fingerprint authentication cap ...@@ -88,30 +88,36 @@ The fingerprint_auth driver provides stable basic fingerprint authentication cap
### Available APIs ### Available APIs
The following table describes the C++ APIs generated from the Interface Definition Language (IDL) interface description. For details about the interface declaration, see the .idl file in **/drivers/interface/fingerprint_auth/v1_0/**. The following table describes the C++ APIs generated from the Interface Definition Language (IDL) interface description. For details about the interface declaration, see the .idl file in **/drivers/interface/fingerprint_auth/**.
**Table 1** describes the HDI APIs for fingerprint credential enrollment, authentication, recognition, and deletion. **Table 2** describes the callbacks used to return the executor operation result to the framework or return the authentication tip information to upper-layer applications. **Table 1** describes the HDI APIs for fingerprint credential enrollment, authentication, recognition, and deletion. **Table 2** describes the callbacks used to return the executor operation result to the framework or return the authentication tip information to upper-layer applications.
**Table 1** Available APIs **Table 1** Available APIs
| API | Description | | API | Description |
| -------------------------------- | ----------------------------------- | | -------------------------------- | ----------------------------------- |
| GetExecutorList(std::vector<sptr<IExecutor>>& executorList) | Obtains the executor list. | | GetExecutorList(std::vector\<sptr\<V1_0::IExecutor>>& executorList) | Obtains the executor list (version V1_0).|
| GetExecutorListV1_1(std::vector\<sptr\<V1_1::IExecutor>>& executorList) | Obtains the executor list (version V1_1). |
| GetExecutorInfo(ExecutorInfo& info) | Obtains the executor information, including the executor type, executor role, authentication type, security level, and executor public key.| | GetExecutorInfo(ExecutorInfo& info) | Obtains the executor information, including the executor type, executor role, authentication type, security level, and executor public key.|
| GetTemplateInfo(uint64_t templateId, TemplateInfo& info) | Obtains information about the template based on the specified ID. | | GetTemplateInfo(uint64_t templateId, TemplateInfo& info) | Obtains information about the template based on the specified ID. |
| OnRegisterFinish(const std::vector<uint64_t>& templateIdList,<br> const std::vector<uint8_t>& frameworkPublicKey, const std::vector<uint8_t>& extraInfo) | Obtains the public key and template ID list from User_auth after the executor is registered successfully.| | OnRegisterFinish(const std::vector\<uint64_t>& templateIdList,<br> const std::vector\<uint8_t>& frameworkPublicKey, const std::vector\<uint8_t>& extraInfo) | Obtains the public key and template ID list from User_auth after the executor is registered successfully.|
| Enroll(uint64_t scheduleId, const std::vector<uint8_t>& extraInfo,<br> const sptr<IExecutorCallback>& callbackObj) | Enrolls a fingerprint. | | Enroll(uint64_t scheduleId, const std::vector\<uint8_t>& extraInfo,<br> const sptr\<IExecutorCallback>& callbackObj) | Enrolls a fingerprint. |
| Authenticate(uint64_t scheduleId, const std::vector<uint64_t>& templateIdList,<br> const std::vector<uint8_t>& extraInfo, const sptr<IExecutorCallback>& callbackObj) | Authenticates a fingerprint. | | Authenticate(uint64_t scheduleId, const std::vector\<uint64_t>& templateIdList,<br> const std::vector\<uint8_t>& extraInfo, const sptr\<IExecutorCallback>& callbackObj) | Authenticates a fingerprint (version V1_0). |
| Identify(uint64_t scheduleId, const std::vector<uint8_t>& extraInfo,<br> const sptr<IExecutorCallback>& callbackObj) | Identifies a fingerprint. | | AuthenticateV1_1(uint64_t scheduleId, const std::vector\<uint64_t>& templateIdList,<br> bool endAfterFirstFail, const std::vector\<uint8_t>& extraInfo, const sptr\<IExecutorCallback>& callbackObj) | Authenticates a fingerprint (version V1_1). |
| Delete(const std::vector<uint64_t>& templateIdList) | Deletes a fingerprint. | | Identify(uint64_t scheduleId, const std::vector\<uint8_t>& extraInfo,<br> const sptr\<IExecutorCallback>& callbackObj) | Identifies a fingerprint. |
| Delete(const std::vector\<uint64_t>& templateIdList) | Deletes a fingerprint. |
| Cancel(uint64_t scheduleId) | Cancels a fingerprint enrollment, authentication, or identification operation based on the **scheduleId**. | | Cancel(uint64_t scheduleId) | Cancels a fingerprint enrollment, authentication, or identification operation based on the **scheduleId**. |
| SendCommand(int32_t commandId, const std::vector<uint8_t>& extraInfo,<br> const sptr<IExecutorCallback>& callbackObj) | Sends commands to the Fingerprint_auth driver. | | SendCommand(int32_t commandId, const std::vector\<uint8_t>& extraInfo,<br> const sptr\<IExecutorCallback>& callbackObj) | Sends commands to the Fingerprint_auth driver. |
| GetProperty(const std::vector\<uint64_t>& templateIdList,<br>const std::vector\<GetPropertyType>& propertyTypes, Property& property) | Obtains executor property information.|
| SetCachedTemplates(const std::vector\<uint64_t> &templateIdList) | Sets a list of templates to be cached.|
| RegisterSaCommandCallback(const sptr\<ISaCommandCallback> &callbackObj) | Registers a callback to be invoked when an SA command is executed.|
**Table 2** Callbacks **Table 2** Callbacks
| API | Description | | API | Description |
| ------------------------------------------------------------ | ------------------------ | | ------------------------------------------------------------ | ------------------------ |
| IExecutorCallback::OnResult(int32_t code, const std::vector<uint8_t>& extraInfo) | Called to return the operation result. | | IExecutorCallback::OnResult(int32_t code, const std::vector\<uint8_t>& extraInfo) | Called to return the operation result. |
| IExecutorCallback::OnTip(int32_t code, const std::vector<uint8_t>& extraInfo) | Called to return the interaction information about the operation process.| | IExecutorCallback::OnTip(int32_t code, const std::vector\<uint8_t>& extraInfo) | Called to return the interaction information about the operation process.|
| ISaCommandCallback::OnSaCommands(const std::vector\<SaCommand>& commands) | Called to send the command list.|
### How to Develop ### How to Develop
...@@ -260,7 +266,7 @@ The development procedure is as follows: ...@@ -260,7 +266,7 @@ The development procedure is as follows:
} }
// Obtain the executor list and create an executor. // Obtain the executor list and create an executor.
int32_t GetExecutorList(std::vector<sptr<IExecutor>>& executorList) int32_t GetExecutorListV1_1(std::vector<sptr<V1_1::IExecutor>>& executorList)
{ {
IAM_LOGI("interface mock start"); IAM_LOGI("interface mock start");
executorList.clear(); executorList.clear();
...@@ -278,13 +284,24 @@ The development procedure is as follows: ...@@ -278,13 +284,24 @@ The development procedure is as follows:
IAM_LOGE("executor is nullptr"); IAM_LOGE("executor is nullptr");
return HDF_FAILURE; return HDF_FAILURE;
} }
executorList.push_back(sptr<IExecutor>(executor)); executorList.push_back(sptr<V1_1::IExecutor>(executor));
IAM_LOGI("interface mock success"); IAM_LOGI("interface mock success");
return HDF_SUCCESS; return HDF_SUCCESS;
} }
// Obtain the executor list. The method of V1_0 is called to invoke the method of V1_1 through parameter conversion.
int32_t GetExecutorList(std::vector<sptr<V1_0::IExecutor>> &executorList)
{
std::vector<sptr<V1_1::IExecutor>> executorListV1_1;
int32_t result = GetExecutorListV1_1(executorListV1_1);
for (auto &executor : executorListV1_1) {
executorList.push_back(executor);
}
return result;
}
``` ```
3. Implement functions of the executor. For details about the code, see [executor_impl.cpp](https://gitee.com/openharmony/drivers_peripheral/blob/master/fingerprint_auth/hdi_service/src/executor_impl.cpp).<br>The sample code is as follows: 3. Implement each function of the executor. For details about the code, see [executor_impl.cpp](https://gitee.com/openharmony/drivers_peripheral/blob/master/fingerprint_auth/hdi_service/src/executor_impl.cpp).<br>The sample code is as follows:
```c++ ```c++
// Obtain the executor information. // Obtain the executor information.
...@@ -334,15 +351,24 @@ The development procedure is as follows: ...@@ -334,15 +351,24 @@ The development procedure is as follows:
return HDF_SUCCESS; return HDF_SUCCESS;
} }
// Authenticate fingerprints. // Call Authenticate() of V1_0 to invoke authenticate() of V1_1.
int32_t Authenticate(uint64_t scheduleId, const std::vector<uint64_t>& templateIdList, int32_t Authenticate(uint64_t scheduleId, const std::vector<uint64_t> &templateIdList,
const std::vector<uint8_t> &extraInfo, const sptr<IExecutorCallback> &callbackObj)
{
IAM_LOGI("interface mock start");
return AuthenticateV1_1(scheduleId, templateIdList, true, extraInfo, callbackObj);
}
// Call Authenticate() of V1_1 to implement fingerprint authentication.
int32_t AuthenticateV1_1(uint64_t scheduleId, const std::vector<uint64_t>& templateIdList, bool endAfterFirstFail,
const std::vector<uint8_t>& extraInfo, const sptr<IExecutorCallback>& callbackObj) const std::vector<uint8_t>& extraInfo, const sptr<IExecutorCallback>& callbackObj)
{ {
IAM_LOGI("interface mock start"); IAM_LOGI("interface mock start");
static_cast<void>(scheduleId); static_cast<void>(scheduleId);
static_cast<void>(templateIdList); static_cast<void>(templateIdList);
static_cast<void>(endAfterFirstFail);
static_cast<void>(extraInfo); static_cast<void>(extraInfo);
IAM_LOGI("authenticate, result is %{public}d", ResultCode::NOT_ENROLLED); IAM_LOGI("authenticateV1_1, result is %{public}d", ResultCode::NOT_ENROLLED);
int32_t ret = callbackObj->OnResult(ResultCode::NOT_ENROLLED, {}); int32_t ret = callbackObj->OnResult(ResultCode::NOT_ENROLLED, {});
if (ret != ResultCode::SUCCESS) { if (ret != ResultCode::SUCCESS) {
IAM_LOGE("callback result is %{public}d", ret); IAM_LOGE("callback result is %{public}d", ret);
...@@ -419,6 +445,32 @@ The development procedure is as follows: ...@@ -419,6 +445,32 @@ The development procedure is as follows:
} }
return HDF_SUCCESS; return HDF_SUCCESS;
} }
// Obtain executor properties.
int32_t ExecutorImpl::GetProperty(
const std::vector<uint64_t> &templateIdList, const std::vector<GetPropertyType> &propertyTypes, Property &property)
{
IAM_LOGI("interface mock start");
property = {};
IAM_LOGI("get property success");
return HDF_SUCCESS;
}
// Set a list of templates to be cached.
int32_t ExecutorImpl::SetCachedTemplates(const std::vector<uint64_t> &templateIdList)
{
IAM_LOGI("interface mock start");
IAM_LOGI("set cached templates success");
return HDF_SUCCESS;
}
// Register the callback to be invoked when the SA command is executed.
int32_t ExecutorImpl::RegisterSaCommandCallback(const sptr<ISaCommandCallback> &callbackObj)
{
IAM_LOGI("interface mock start");
IAM_LOGI("register sa command callback success");
return HDF_SUCCESS;
}
``` ```
4. Modify **serviceName2Config** in the **fingerprint_auth_service.cpp** file if you need to add a driver or modify driver information. 4. Modify **serviceName2Config** in the **fingerprint_auth_service.cpp** file if you need to add a driver or modify driver information.
......
...@@ -74,7 +74,6 @@ The Pin_auth driver provides basic PIN authentication capabilities for the upper ...@@ -74,7 +74,6 @@ The Pin_auth driver provides basic PIN authentication capabilities for the upper
### Constraints ### Constraints
PIN authentication must be implemented in a Trusted Execution Environment (TEE), and the confidential information, such as PINs and credentials, must be encrypted and stored in a TEE. PIN authentication must be implemented in a Trusted Execution Environment (TEE), and the confidential information, such as PINs and credentials, must be encrypted and stored in a TEE.
## Development Guidelines ## Development Guidelines
### When to Use ### When to Use
...@@ -82,30 +81,32 @@ The Pin_auth driver provides basic PIN authentication capabilities for the User_ ...@@ -82,30 +81,32 @@ The Pin_auth driver provides basic PIN authentication capabilities for the User_
### Available APIs ### Available APIs
The following table describes the C++ APIs generated from the Interface Definition Language (IDL) interface description. For details about the interface declaration, see the .idl file in **/drivers/interface/pin_auth/v1_0/**. The following table describes the C++ APIs generated from the Interface Definition Language (IDL) interface description. For details about the interface declaration, see the .idl file in **/drivers/interface/pin_auth**.
**Table 1** describes the HDI APIs for PIN credential enrollment, authentication, and deletion. **Table 2** describes the callbacks used to return the executor operation result to the framework or return the PIN entered by the user. **Table 1** describes the HDI APIs for PIN credential enrollment, authentication, and deletion. **Table 2** describes the callbacks used to return the executor operation result to the framework or return the PIN entered by the user.
**Table 1** Available APIs **Table 1** Available APIs
| API | Description | | API | Description |
| ------------------------------- | ------------------------------------------- | | ------------------------------- | ------------------------------------------- |
| GetExecutorList(std::vector<sptr<IExecutor>>& executorList) | Obtains the executor list.| | GetExecutorList(std::vector\<sptr\<V1_0::IExecutor>>& executorList) | Obtains the executor list (version V1_0).|
| GetExecutorInfo(ExecutorInfo& info) | Obtains information about an executor. | | GetExecutorListV1_1(std::vector\<sptr\<V1_1::IExecutor>>& executorList) | Obtains the executor list (version V1_1). |
| GetTemplateInfo(uint64_t templateId, TemplateInfo& info) | Obtains information about a template. | | GetTemplateInfo(uint64_t templateId, TemplateInfo& info) | Obtains information about a template. |
| OnRegisterFinish(const std::vector<uint64_t>& templateIdList,<br>const std::vector<uint8_t>& frameworkPublicKey,<br>const std::vector<uint8_t>& extraInfo) | Obtains the public key and template ID list from User_auth after the executor is registered successfully.| | OnRegisterFinish(const std::vector\<uint64_t>& templateIdList,<br>const std::vector\<uint8_t>& frameworkPublicKey,<br>const std::vector\<uint8_t>& extraInfo) | Obtains the public key and template ID list from User_auth after the executor is registered successfully.|
| OnSetData(uint64_t scheduleId, uint64_t authSubType, <br>const std::vector<uint8_t> &data) | Called to return the subtype of the PIN enrolled by the user and the anonymization PIN data. | | OnSetData(uint64_t scheduleId, uint64_t authSubType, <br>const std::vector\<uint8_t> &data) | Called to return the subtype of the PIN enrolled by the user and the anonymization PIN data. |
| Enroll(uint64_t scheduleId, const std::vector<uint8_t>& extraInfo,<br>const sptr<IExecutorCallback>& callbackObj) | Enrolls a PIN. | | Enroll(uint64_t scheduleId, const std::vector\<uint8_t>& extraInfo,<br>const sptr\<IExecutorCallback>& callbackObj) | Enrolls a PIN. |
| Authenticate(uint64_t scheduleId, uint64_t templateId, const std::vector<uint8_t>& extraInfo, const sptr<IExecutorCallback>& callbackObj) | Starts PIN authentication. | | Authenticate(uint64_t scheduleId, uint64_t templateId, const std::vector\<uint8_t>& extraInfo, const sptr\<IExecutorCallback>& callbackObj) | Starts PIN authentication. |
| Delete(uint64_t templateId) | Deletes a PIN template. | | Delete(uint64_t templateId) | Deletes a PIN template. |
| Cancel(uint64_t scheduleId) | Cancels an operation. | | Cancel(uint64_t scheduleId) | Cancels an operation. |
| SendCommand(int32_t commandId, const std::vector<uint8_t>& extraInfo,<br>const sptr<IExecutorCallback>& callbackObj) | Reserved. | | SendCommand(int32_t commandId, const std::vector\<uint8_t>& extraInfo,<br>const sptr\<IExecutorCallback>& callbackObj) | Reserved. |
| GetProperty(const std::vector\<uint64_t>& templateIdList,<br>const std::vector\<GetPropertyType>& propertyTypes, Property& property) | Obtains executor property information.|
**Table 2** Callbacks **Table 2** Callbacks
| API | Description | | API | Description |
| ------------------------------------------------------------ | -------------------- | | ------------------------------------------------------------ | -------------------- |
| IExecutorCallback::OnResult(int32_t code, const std::vector<uint8_t>& extraInfo) | Called to return the operation result.| | IExecutorCallback::OnResult(int32_t code, const std::vector\<uint8_t>& extraInfo) | Called to return the operation result.|
| IExecutorCallback::OnGetData(uint64_t scheduleId, const std::vector<uint8_t>& salt,<br> uint64_t authSubType)| Called to return the PIN information obtained. | | IExecutorCallback::OnGetData(uint64_t scheduleId, const std::vector\<uint8_t>& salt,<br> uint64_t authSubType)| Called to return the PIN information obtained. |
### How to Develop ### How to Develop
...@@ -238,7 +239,7 @@ The development procedure is as follows: ...@@ -238,7 +239,7 @@ The development procedure is as follows:
```c++ ```c++
// Executor implementation class // Executor implementation class
class ExecutorImpl : public IExecutor, public NoCopyable { class ExecutorImpl : public V1_1::IExecutor, public NoCopyable {
public: public:
explicit ExecutorImpl(std::shared_ptr<OHOS::UserIAM::PinAuth::PinAuth> pinHdi); explicit ExecutorImpl(std::shared_ptr<OHOS::UserIAM::PinAuth::PinAuth> pinHdi);
virtual ~ExecutorImpl() {} virtual ~ExecutorImpl() {}
...@@ -255,6 +256,8 @@ The development procedure is as follows: ...@@ -255,6 +256,8 @@ The development procedure is as follows:
int32_t Cancel(uint64_t scheduleId) override; int32_t Cancel(uint64_t scheduleId) override;
int32_t SendCommand(int32_t commandId, const std::vector<uint8_t> &extraInfo, int32_t SendCommand(int32_t commandId, const std::vector<uint8_t> &extraInfo,
const sptr<IExecutorCallback> &callbackObj) override; const sptr<IExecutorCallback> &callbackObj) override;
int32_t GetProperty(const std::vector<uint64_t> &templateIdList, const std::vector<GetPropertyType> &propertyTypes,
Property &property) override;
private: private:
class ScheduleMap { class ScheduleMap {
...@@ -284,8 +287,8 @@ The development procedure is as follows: ...@@ -284,8 +287,8 @@ The development procedure is as follows:
ScheduleMap scheduleMap_; ScheduleMap scheduleMap_;
}; };
// Obtain the executor list and create an executor (example only). // Obtain the executor list (using the method of version V1_1) and create an executor (example only).
int32_t PinAuthInterfaceService::GetExecutorList(std::vector<sptr<IExecutor>> &executorList) int32_t PinAuthInterfaceService::GetExecutorListV1_1(std::vector<sptr<V1_1::IExecutor>> &executorList)
{ {
IAM_LOGI("start"); IAM_LOGI("start");
std::shared_ptr<OHOS::UserIAM::PinAuth::PinAuth> pinHdi = std::shared_ptr<OHOS::UserIAM::PinAuth::PinAuth> pinHdi =
...@@ -303,11 +306,22 @@ The development procedure is as follows: ...@@ -303,11 +306,22 @@ The development procedure is as follows:
IAM_LOGI("end"); IAM_LOGI("end");
return HDF_SUCCESS; return HDF_SUCCESS;
} }
// Obtain the executor list. The method of V1_0 is called to invoke the API of V1_1 through parameter conversion.
int32_t PinAuthInterfaceService::GetExecutorList(std::vector<sptr<V1_0::IExecutor>> &executorList)
{
std::vector<sptr<V1_1::IExecutor>> executorListV1_1;
int32_t result = GetExecutorListV1_1(executorListV1_1);
for (auto &executor : executorListV1_1) {
executorList.push_back(executor);
}
return result;
}
``` ```
1. Implement functions of the executor. For details about the code, see [executor_impl.cpp](https://gitee.com/openharmony/drivers_peripheral/blob/master/pin_auth/hdi_service/service/src/executor_impl.cpp). 1. Implement each function of the executor. For details about the code, see [executor_impl.cpp](https://gitee.com/openharmony/drivers_peripheral/blob/master/pin_auth/hdi_service/service/src/executor_impl.cpp).
```c++ ```c++
// Obtain executor information (example only). // Obtain executor information (example only).
...@@ -542,6 +556,35 @@ The development procedure is as follows: ...@@ -542,6 +556,35 @@ The development procedure is as follows:
static_cast<void>(callbackObj); static_cast<void>(callbackObj);
return HDF_SUCCESS; return HDF_SUCCESS;
} }
// Obtain the executor property information.
int32_t ExecutorImpl::GetProperty(
const std::vector<uint64_t> &templateIdList, const std::vector<GetPropertyType> &propertyTypes, Property &property)
{
IAM_LOGI("start");
if (pinHdi_ == nullptr) {
IAM_LOGE("pinHdi_ is nullptr");
return HDF_FAILURE;
}
if (templateIdList.size() != 1) {
IAM_LOGE("templateIdList size is not 1");
return HDF_FAILURE;
}
uint64_t templateId = templateIdList[0];
OHOS::UserIam::PinAuth::PinCredentialInfo infoRet = {};
int32_t result = pinHdi_->QueryPinInfo(templateId, infoRet);
if (result != SUCCESS) {
IAM_LOGE("Failed to get TemplateInfo, error code : %{public}d", result);
return HDF_FAILURE;
}
property.authSubType = infoRet.subType;
property.remainAttempts = infoRet.remainTimes;
property.lockoutDuration = infoRet.freezingTime;
return HDF_SUCCESS;
}
``` ```
......
...@@ -95,7 +95,7 @@ You can develop drivers to call Hardware Device Interface (HDI) APIs based on th ...@@ -95,7 +95,7 @@ You can develop drivers to call Hardware Device Interface (HDI) APIs based on th
**Figure 2** User_auth service and User_auth driver APIs **Figure 2** User_auth service and User_auth driver APIs
![image](figures/user_auth_service_and_driver_api.png "interaction between the user_auth service and driver") ![image](figures/user_auth_service_and_driver_api.png "Interaction")
### Constraints ### Constraints
...@@ -109,7 +109,7 @@ The User_auth driver provides stable user credential management, authentication ...@@ -109,7 +109,7 @@ The User_auth driver provides stable user credential management, authentication
### Available APIs ### Available APIs
The following table describes the C++ APIs generated from the Interface Definition Language (IDL) interface description. For details about the interface declaration, see the .idl file in **/drivers/interface/user_auth/v1_0/**. The following table describes the C++ APIs generated from the Interface Definition Language (IDL) interface description. For details about the interface declaration, see the .idl file in **/drivers/interface/user_auth**.
**Table 1** describes the HDI APIs for executor registration, credential enrollment and deletion, user authentication, and user identification. **Table 1** describes the HDI APIs for executor registration, credential enrollment and deletion, user authentication, and user identification.
**Table 1** Available APIs **Table 1** Available APIs
...@@ -117,27 +117,29 @@ The following table describes the C++ APIs generated from the Interface Definiti ...@@ -117,27 +117,29 @@ The following table describes the C++ APIs generated from the Interface Definiti
| API | Description | | API | Description |
| --------------------------- | --------------------------- | | --------------------------- | --------------------------- |
| Init() | Initializes cached information. | | Init() | Initializes cached information. |
| AddExecutor(const ExecutorRegisterInfo& info, uint64_t& index, std::vector<uint8_t>& publicKey,<br> std::vector<uint64_t>& templateIds) | Adds an executor to obtain the authentication capability. | | AddExecutor(const ExecutorRegisterInfo& info, uint64_t& index, std::vector\<uint8_t>& publicKey,<br> std::vector\<uint64_t>& templateIds) | Adds an executor to obtain the authentication capability. |
| DeleteExecutor(uint64_t index) | Deletes an executor. | | DeleteExecutor(uint64_t index) | Deletes an executor. |
| OpenSession(int32_t userId, std::vector<uint8_t>& challenge) | Opens a session for authentication credential management. | | OpenSession(int32_t userId, std::vector\<uint8_t>& challenge) | Opens a session for authentication credential management. |
| CloseSession(int32_t userId) | Closes a session for authentication credential management. | | CloseSession(int32_t userId) | Closes a session for authentication credential management. |
| BeginEnrollment(int32_t userId, const std::vector<uint8_t>& authToken, const EnrollParam& param,<br> ScheduleInfo& info) | Enrolls the user authentication credential. If a user has enrolled a PIN, the old PIN will be overwritten.| | BeginEnrollment(int32_t userId, const std::vector\<uint8_t>& authToken, const EnrollParam& param,<br> ScheduleInfo& info) | Enrolls the user authentication credential (version V1_0). If a user has enrolled a PIN, the old PIN will be overwritten .|
| UpdateEnrollmentResult(int32_t userId, const std::vector<uint8_t>& scheduleResult, uint64_t& credentialId,<br> CredentialInfo& oldInfo) | Updates the data to complete this enrollment. | | UpdateEnrollmentResult(int32_t userId, const std::vector\<uint8_t>& scheduleResult, uint64_t& credentialId,<br> CredentialInfo& oldInfo) | Updates the data to complete this enrollment. |
| CancelEnrollment(int32_t userId) | Cancels an enrollment operation. | | CancelEnrollment(int32_t userId) | Cancels an enrollment operation. |
| DeleteCredential(int32_t userId, uint64_t credentialId, const std::vector<uint8_t>& authToken,<br> CredentialInfo& info) | Deletes credential information based on the specified **credentialId**. | | DeleteCredential(int32_t userId, uint64_t credentialId, const std::vector\<uint8_t>& authToken,<br> CredentialInfo& info) | Deletes credential information based on the specified **credentialId**. |
| DeleteUser(int32_t userId, const std::vector<uint8_t>& authToken,<br> std::vector<CredentialInfo>& deletedInfos) | Deletes a user PIN from User_auth. | | DeleteUser(int32_t userId, const std::vector\<uint8_t>& authToken,<br> std::vector\<CredentialInfo>& deletedInfos) | Deletes a user PIN from User_auth. |
| EnforceDeleteUser(int32_t userId, std::vector<CredentialInfo>& deletedInfos) | Forcibly deletes a user. This API will be called when a user is deleted from the system. | | EnforceDeleteUser(int32_t userId, std::vector\<CredentialInfo>& deletedInfos) | Forcibly deletes a user. This API will be called when a user is deleted from the system. |
| GetCredential(int32_t userId, AuthType authType, std::vector<CredentialInfo>& infos) | Obtains user credential information by authentication type. | | GetCredential(int32_t userId, AuthType authType, std::vector\<CredentialInfo>& infos) | Obtains user credential information by authentication type. |
| GetSecureInfo(int32_t userId, uint64_t& secureUid, std::vector<EnrolledInfo>& infos) | Obtains the secure user ID and the enrolled tag ID of each authentication type. | | GetSecureInfo(int32_t userId, uint64_t& secureUid, std::vector\<EnrolledInfo>& infos) | Obtains the secure user ID and the enrolled tag ID of each authentication type. |
| BeginAuthentication(uint64_t contextId, const AuthSolution& param,<br> std::vector<ScheduleInfo>& scheduleInfos) | Starts an authentication to generate the authentication scheme and scheduling information. | | BeginAuthentication(uint64_t contextId, const AuthSolution& param,<br> std::vector\<ScheduleInfo>& scheduleInfos) | Starts authentication and generates the authentication scheme and scheduling information (version V1_0). |
| UpdateAuthenticationResult(uint64_t contextId, const std::vector<uint8_t>& scheduleResult,<br> AuthResultInfo& info) | Updates the authentication result to evaluate the authentication scheme. | | UpdateAuthenticationResult(uint64_t contextId, const std::vector\<uint8_t>& scheduleResult,<br> AuthResultInfo& info) | Updates the authentication result to evaluate the authentication scheme. |
| CancelAuthentication(uint64_t contextId) | Cancels an authentication. | | CancelAuthentication(uint64_t contextId) | Cancels an authentication. |
| BeginIdentification(uint64_t contextId, AuthType authType, const std::vector<int8_t>& challenge,<br> uint32_t executorId, ScheduleInfo& scheduleInfo) | Starts an identification to generate the identification scheme and scheduling information. | | BeginIdentification(uint64_t contextId, AuthType authType, const std::vector\<int8_t>& challenge,<br> uint32_t executorId, ScheduleInfo& scheduleInfo) | Starts identification and generates the identification scheme and scheduling information (version V1_0). |
| UpdateIdentificationResult(uint64_t contextId, const std::vector<uint8_t>& scheduleResult,<br> IdentifyResultInfo& info) | Updates the identification result to evaluate the identification scheme. | | UpdateIdentificationResult(uint64_t contextId, const std::vector\<uint8_t>& scheduleResult,<br> IdentifyResultInfo& info) | Updates the identification result to evaluate the identification scheme. |
| CancelIdentification(uint64_t contextId) | Cancels an identification. | | CancelIdentification(uint64_t contextId) | Cancels an identification. |
| GetAuthTrustLevel(int32_t userId, AuthType authType, uint32_t& authTrustLevel) | Obtains the authentication trust level of the specified authentication type. | | GetAuthTrustLevel(int32_t userId, AuthType authType, uint32_t& authTrustLevel) | Obtains the authentication trust level of the specified authentication type. |
| GetValidSolution(int32_t userId, const std::vector<AuthType>& authTypes, uint32_t authTrustLevel,<br> std::vector<AuthType>& validTypes) | Obtains the valid authentication scheme based on the authentication trust level for a user. | | GetValidSolution(int32_t userId, const std::vector\<AuthType>& authTypes, uint32_t authTrustLevel,<br> std::vector\<AuthType>& validTypes) | Obtains the valid authentication scheme based on the authentication trust level for a user. |
| BeginEnrollmentV1_1(int32_t userId, const std::vector\<uint8_t>& authToken, const EnrollParam& param, ScheduleInfoV1_1& info) | Enrolls the user authentication credential (version V1_1). If a user has enrolled a PIN, the old PIN will be overwritten.|
| BeginAuthenticationV1_1(uint64_t contextId, const AuthSolution& param, std::vector\<ScheduleInfoV1_1>& scheduleInfos) | Starts authentication and generates the authentication scheme and scheduling information (version V1_1). |
| BeginIdentificationV1_1(uint64_t contextId, AuthType authType,<br/> const std::vector\<uint8_t>& challenge, uint32_t executorSensorHint, ScheduleInfoV1_1& scheduleInfo) | Starts identification and generates the identification scheme and scheduling information (version V1_1). |
### How to Develop ### How to Develop
The following uses the Hi3516D V300 development board as an example to demonstrate how to develop the User_auth driver. <br/>The directory structure is as follows: The following uses the Hi3516D V300 development board as an example to demonstrate how to develop the User_auth driver. <br/>The directory structure is as follows:
...@@ -202,7 +204,7 @@ The development procedure is as follows: ...@@ -202,7 +204,7 @@ The development procedure is as follows:
auto *hdfUserAuthInterfaceHost = new (std::nothrow) HdfUserAuthInterfaceHost; auto *hdfUserAuthInterfaceHost = new (std::nothrow) HdfUserAuthInterfaceHost;
if (hdfUserAuthInterfaceHost == nullptr) { if (hdfUserAuthInterfaceHost == nullptr) {
HDF_LOGE("%{public}s: Failed to create HdfUserAuthInterfaceHost object", __func__); HDF_LOGE("%{public}s: failed to create HdfUserAuthInterfaceHost object", __func__);
return HDF_FAILURE; return HDF_FAILURE;
} }
...@@ -212,7 +214,7 @@ The development procedure is as follows: ...@@ -212,7 +214,7 @@ The development procedure is as follows:
auto serviceImpl = IUserAuthInterface::Get(true); auto serviceImpl = IUserAuthInterface::Get(true);
if (serviceImpl == nullptr) { if (serviceImpl == nullptr) {
HDF_LOGE("%{public}s: Failed to obtain service", __func__); HDF_LOGE("%{public}s: failed to implement service", __func__);
return HDF_FAILURE; return HDF_FAILURE;
} }
...@@ -286,7 +288,7 @@ The development procedure is as follows: ...@@ -286,7 +288,7 @@ The development procedure is as follows:
int32_t ret = OpenEditSession(userId, &challengeU64); int32_t ret = OpenEditSession(userId, &challengeU64);
challenge.resize(sizeof(uint64_t)); challenge.resize(sizeof(uint64_t));
if (memcpy_s(&challenge[0], challenge.size(), &challengeU64, sizeof(uint64_t)) != EOK) { if (memcpy_s(&challenge[0], challenge.size(), &challengeU64, sizeof(uint64_t)) != EOK) {
IAM_LOGE("Failed to copy challengeU64"); IAM_LOGE("failed to copy challengeU64");
return RESULT_BAD_COPY; return RESULT_BAD_COPY;
} }
GlobalUnLock(); GlobalUnLock();
...@@ -302,9 +304,9 @@ The development procedure is as follows: ...@@ -302,9 +304,9 @@ The development procedure is as follows:
return ret; return ret;
} }
// Start an authentication to generate enrollment and scheduling information. // Start enrollment and generate scheduling information (V1_1).
int32_t UserAuthInterfaceService::BeginEnrollment(int32_t userId, const std::vector<uint8_t>& authToken, int32_t UserAuthInterfaceService::BeginEnrollmentV1_1(int32_t userId, const std::vector<uint8_t>& authToken,
const EnrollParam& param, ScheduleInfo& info) const EnrollParam& param, ScheduleInfoV1_1& info)
{ {
IAM_LOGI("start"); IAM_LOGI("start");
GlobalLock(); GlobalLock();
...@@ -343,6 +345,17 @@ The development procedure is as follows: ...@@ -343,6 +345,17 @@ The development procedure is as follows:
return ret; return ret;
} }
// Start enrollment and generate scheduling information (V1_0 version). The method of V1_0 is called to invoke the method of V1_1 through parameter conversion.
int32_t UserAuthInterfaceService::BeginEnrollment(int32_t userId, const std::vector<uint8_t> &authToken,
const EnrollParam &param, ScheduleInfo &info)
{
IAM_LOGI("start");
ScheduleInfoV1_1 infoV1_1;
int32_t ret = BeginEnrollmentV1_1(userId, authToken, param, infoV1_1);
CopyScheduleInfoV1_1ToV1_0(infoV1_1, info);
return ret;
}
// Cancel the enrollment operation. // Cancel the enrollment operation.
int32_t UserAuthInterfaceService::CancelEnrollment(int32_t userId) int32_t UserAuthInterfaceService::CancelEnrollment(int32_t userId)
{ {
...@@ -407,12 +420,12 @@ The development procedure is as follows: ...@@ -407,12 +420,12 @@ The development procedure is as follows:
} }
// Start an authentication to generate the authentication scheme and scheduling information. // Start an authentication to generate the authentication scheme and scheduling information.
int32_t UserAuthInterfaceService::BeginAuthentication(uint64_t contextId, const AuthSolution& param, int32_t UserAuthInterfaceService::BeginAuthenticationV1_1(uint64_t contextId, const AuthSolution& param,
std::vector<ScheduleInfo>& infos) std::vector<ScheduleInfoV1_1>& infos)
{ {
IAM_LOGI("start"); IAM_LOGI("start");
if (param.challenge.size() != sizeof(uint64_t)) { if (param.challenge.size() != sizeof(uint64_t)) {
IAM_LOGE("Failed to copy the challenge"); IAM_LOGE("Failed to copy challenge");
return RESULT_BAD_PARAM; return RESULT_BAD_PARAM;
} }
GlobalLock(); GlobalLock();
...@@ -425,7 +438,7 @@ The development procedure is as follows: ...@@ -425,7 +438,7 @@ The development procedure is as follows:
solutionIn.authTrustLevel = param.authTrustLevel; solutionIn.authTrustLevel = param.authTrustLevel;
if (memcpy_s(&solutionIn.challenge, sizeof(uint64_t), &param.challenge[0], if (memcpy_s(&solutionIn.challenge, sizeof(uint64_t), &param.challenge[0],
param.challenge.size()) != EOK) { param.challenge.size()) != EOK) {
IAM_LOGE("Failed to copy the challenge"); IAM_LOGE("Failed to copy challenge");
GlobalUnLock(); GlobalUnLock();
return RESULT_BAD_COPY; return RESULT_BAD_COPY;
} }
...@@ -436,7 +449,7 @@ The development procedure is as follows: ...@@ -436,7 +449,7 @@ The development procedure is as follows:
return ret; return ret;
} }
for (uint32_t i = 0; i < scheduleIdNum; i++) { for (uint32_t i = 0; i < scheduleIdNum; i++) {
ScheduleInfo temp; ScheduleInfoV1_1 temp;
if (!CopyScheduleInfo(schedulesGet + i, &temp)) { if (!CopyScheduleInfo(schedulesGet + i, &temp)) {
infos.clear(); infos.clear();
ret = RESULT_GENERAL_ERROR; ret = RESULT_GENERAL_ERROR;
...@@ -449,6 +462,17 @@ The development procedure is as follows: ...@@ -449,6 +462,17 @@ The development procedure is as follows:
return ret; return ret;
} }
// Start user authentication, generate the authentication scheme and scheduling information. The method of V1_0 is called to invoke the method of V1_1 through parameter conversion.
int32_t UserAuthInterfaceService::BeginAuthentication(uint64_t contextId, const AuthSolution &param,
std::vector<ScheduleInfo> &infos)
{
IAM_LOGI("start");
std::vector<ScheduleInfoV1_1> infosV1_1;
int32_t ret = BeginAuthenticationV1_1(contextId, param, infosV1_1);
CopyScheduleInfosV1_1ToV1_0(infosV1_1, infos);
return ret;
}
// Update the authentication result to evaluate the authentication scheme. // Update the authentication result to evaluate the authentication scheme.
int32_t UserAuthInterfaceService::UpdateAuthenticationResult(uint64_t contextId, int32_t UserAuthInterfaceService::UpdateAuthenticationResult(uint64_t contextId,
const std::vector<uint8_t>& scheduleResult, AuthResultInfo& info) const std::vector<uint8_t>& scheduleResult, AuthResultInfo& info)
...@@ -471,7 +495,7 @@ The development procedure is as follows: ...@@ -471,7 +495,7 @@ The development procedure is as follows:
UserAuthTokenHal authTokenHal; UserAuthTokenHal authTokenHal;
info.result = RequestAuthResultFunc(contextId, scheduleResultBuffer, &authTokenHal); info.result = RequestAuthResultFunc(contextId, scheduleResultBuffer, &authTokenHal);
if (info.result != RESULT_SUCCESS) { if (info.result != RESULT_SUCCESS) {
IAM_LOGE("Failed to execute the function"); IAM_LOGE("Failed to execute func");
DestoryBuffer(scheduleResultBuffer); DestoryBuffer(scheduleResultBuffer);
GlobalUnLock(); GlobalUnLock();
return info.result; return info.result;
...@@ -496,7 +520,7 @@ The development procedure is as follows: ...@@ -496,7 +520,7 @@ The development procedure is as follows:
uint32_t scheduleIdNum = 0; uint32_t scheduleIdNum = 0;
int32_t ret = CancelContextFunc(contextId, nullptr, &scheduleIdNum); int32_t ret = CancelContextFunc(contextId, nullptr, &scheduleIdNum);
if (ret != RESULT_SUCCESS) { if (ret != RESULT_SUCCESS) {
IAM_LOGE("Failed to execute the function"); IAM_LOGE("Failed to execute func");
GlobalUnLock(); GlobalUnLock();
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册