# CryptoSignatureApi
## Overview
Provides APIs for signature verification.
**Since**: 12
## Summary
### Files
| Name | Description |
| -------- | -------- |
| [crypto_signature.h](crypto__signature_8h.md) | Defines APIs for signature verification. |
### Types
| Name | Description |
| -------- | -------- |
| typedef struct [OH_CryptoVerify](#oh_cryptoverify) [OH_CryptoVerify](#oh_cryptoverify) | Defines the data used for signature verification. |
### Enums
| Name | Description |
| -------- | -------- |
| [CryptoSignature_ParamType](#cryptosignature_paramtype) {
CRYPTO_PSS_MD_NAME_STR = 100, CRYPTO_PSS_MGF_NAME_STR = 101,
CRYPTO_PSS_MGF1_NAME_STR = 102, CRYPTO_PSS_SALT_LEN_INT = 103,
CRYPTO_PSS_TRAILER_FIELD_INT = 104, CRYPTO_SM2_USER_ID_DATABLOB = 105
} | Enumerates the types of signature verification parameters. |
### Functions
| Name | Description |
| -------- | -------- |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoVerify_Create](#oh_cryptoverify_create) (const char \*algoName, [OH_CryptoVerify](#oh_cryptoverify) \*\*verify) | Creates a **Verify** instance for signature verification. |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoVerify_Init](#oh_cryptoverify_init) ([OH_CryptoVerify](#oh_cryptoverify) \*ctx, [OH_CryptoPubKey](_crypto_asym_key_api.md#oh_cryptopubkey) \*pubKey) | Initializes a **Verify** instance by using the public key. |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoVerify_Update](#oh_cryptoverify_update) ([OH_CryptoVerify](#oh_cryptoverify) \*ctx, [Crypto_DataBlob](_crypto___data_blob.md) \*in) | Updates the data to be verified. |
| bool [OH_CryptoVerify_Final](#oh_cryptoverify_final) ([OH_CryptoVerify](#oh_cryptoverify) \*ctx, [Crypto_DataBlob](_crypto___data_blob.md) \*in, [Crypto_DataBlob](_crypto___data_blob.md) \*signData) | Verifies the signature of the data. |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoVerify_Recover](#oh_cryptoverify_recover) ([OH_CryptoVerify](#oh_cryptoverify) \*ctx, [Crypto_DataBlob](_crypto___data_blob.md) \*signData, [Crypto_DataBlob](_crypto___data_blob.md) \*rawSignData) | Restores the raw signature data. |
| const char \* [OH_CryptoVerify_GetAlgoName](#oh_cryptoverify_getalgoname) ([OH_CryptoVerify](#oh_cryptoverify) \*ctx) | Obtains the signature verification algorithm. |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoVerify_SetParam](#oh_cryptoverify_setparam) ([OH_CryptoVerify](#oh_cryptoverify) \*ctx, [CryptoSignature_ParamType](#cryptosignature_paramtype) type, [Crypto_DataBlob](_crypto___data_blob.md) \*value) | Sets a signature verification parameter. |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoVerify_GetParam](#oh_cryptoverify_getparam) ([OH_CryptoVerify](#oh_cryptoverify) \*ctx, [CryptoSignature_ParamType](#cryptosignature_paramtype) type, [Crypto_DataBlob](_crypto___data_blob.md) \*value) | Obtains a signature verification parameter. |
| void [OH_CryptoVerify_Destroy](#oh_cryptoverify_destroy) ([OH_CryptoVerify](#oh_cryptoverify) \*ctx) | Destroys a **Verify** instance. |
## Type Description
### OH_CryptoVerify
```
typedef struct OH_CryptoVerifyOH_CryptoVerify
```
**Description**
Defines the data used for signature verification.
**Since**: 12
## Enum Description
### CryptoSignature_ParamType
```
enum CryptoSignature_ParamType
```
**Description**
Enumerates the types of signature verification parameters.
**Since**: 12
| Enum | Description |
| -------- | -------- |
| CRYPTO_PSS_MD_NAME_STR | MD algorithm used with the PSS padding mode in RSA. |
| CRYPTO_PSS_MGF_NAME_STR | Mask generation algorithm used with the PSS padding mode in RSA. Currently, only MGF1 is supported. |
| CRYPTO_PSS_MGF1_NAME_STR | MD parameters for the MGF1 mask generation used with the PSS padding mode in RSA. |
| CRYPTO_PSS_SALT_LEN_INT | Length of the salt in bytes used with the PSS padding mode in RSA. |
| CRYPTO_PSS_TRAILER_FIELD_INT | Trailer field used in the encoding operation when PSS padding mode is used in RSA. The value is **1**. |
| CRYPTO_SM2_USER_ID_DATABLOB | User ID field in SM2. |
## Function Description
### OH_CryptoVerify_Create()
```
OH_Crypto_ErrCode OH_CryptoVerify_Create (const char *algoName, OH_CryptoVerify **verify )
```
**Description**
Creates a **Verify** instance for signature verification.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| algoName | Pointer to the algorithm used to generate the **Verify** instance. For example, **'RSA1024\|PKCS1\|SHA256'**.| | |
| verify | Pointer to the **Verify** instance created. |
**Returns**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
**0**: The operation is successful.
**401**: Invalid parameters are detected.
**801**: The operation is not supported.
**17620001**: A memory error occurred.
**17630001**: Failed to call an API of a third-party algorithm library.
### OH_CryptoVerify_Destroy()
```
void OH_CryptoVerify_Destroy (OH_CryptoVerify *ctx)
```
**Description**
Destroys a **Verify** instance.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| ctx | Pointer to the **Verify** instance to destroy. |
### OH_CryptoVerify_Final()
```
bool OH_CryptoVerify_Final (OH_CryptoVerify *ctx, Crypto_DataBlob *in, Crypto_DataBlob *signData )
```
**Description**
Verifies the signature of the data.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| ctx | Pointer to the **Verify** instance. |
| in | Pointer to the data passed in. |
| out | Pointer to the signature data. |
**Returns**
Returns a boolean value, indicating whether the signature verification is successful.
**See**
[OH_CryptoVerify_Init](#oh_cryptoverify_init)
[OH_CryptoVerify_Update](#oh_cryptoverify_update)
### OH_CryptoVerify_GetAlgoName()
```
const char* OH_CryptoVerify_GetAlgoName (OH_CryptoVerify *ctx)
```
**Description**
Obtains the signature verification algorithm.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| ctx | Pointer to the **Verify** instance. |
**Returns**
Signature verification algorithm obtained.
### OH_CryptoVerify_GetParam()
```
OH_Crypto_ErrCode OH_CryptoVerify_GetParam (OH_CryptoVerify *ctx, CryptoSignature_ParamType type, Crypto_DataBlob *value )
```
**Description**
Obtains a signature verification parameter.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| ctx | Pointer to the **Verify** instance. |
| type | Name of the signature verification parameter to obtain. |
| value | Pointer to the parameter value obtained. |
**Returns**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
**0**: The operation is successful.
**401**: Invalid parameters are detected.
**801**: The operation is not supported.
**17620001**: A memory error occurred.
**17630001**: Failed to call an API of a third-party algorithm library.
### OH_CryptoVerify_Init()
```
OH_Crypto_ErrCode OH_CryptoVerify_Init (OH_CryptoVerify *ctx, OH_CryptoPubKey *pubKey )
```
**Description**
Initializes a **Verify** instance by using the public key.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| ctx | Pointer to the **Verify** instance. |
| pubKey | Pointer to the public key. |
**Returns**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
**0**: The operation is successful.
**401**: Invalid parameters are detected.
**801**: The operation is not supported.
**17620001**: A memory error occurred.
**17630001**: Failed to call an API of a third-party algorithm library.
**See**
[OH_CryptoVerify_Update](#oh_cryptoverify_update)
[OH_CryptoVerify_Final](#oh_cryptoverify_final)
### OH_CryptoVerify_Recover()
```
OH_Crypto_ErrCode OH_CryptoVerify_Recover (OH_CryptoVerify *ctx, Crypto_DataBlob *signData, Crypto_DataBlob *rawSignData )
```
**Description**
Restores the signature data.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| ctx | Pointer to the **Verify** instance. |
| signData | Pointer to the signature data to be restored. |
| rawSignData | Pointer to the raw data restored. |
**Returns**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
**0**: The operation is successful.
**401**: Invalid parameters are detected.
**801**: The operation is not supported.
**17620001**: A memory error occurred.
**17630001**: Failed to call an API of a third-party algorithm library.
### OH_CryptoVerify_SetParam()
```
OH_Crypto_ErrCode OH_CryptoVerify_SetParam (OH_CryptoVerify *ctx, CryptoSignature_ParamType type, Crypto_DataBlob *value )
```
**Description**
Sets a signature verification parameter.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| ctx | Pointer to the **Verify** instance. |
| type | Name of the signature verification parameter to set. |
| value | Pointer to the value of the signature verification parameter to set. |
**Returns**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
**0**: The operation is successful.
**401**: Invalid parameters are detected.
**801**: The operation is not supported.
**17620001**: A memory error occurred.
**17630001**: Failed to call an API of a third-party algorithm library.
### OH_CryptoVerify_Update()
```
OH_Crypto_ErrCode OH_CryptoVerify_Update (OH_CryptoVerify *ctx, Crypto_DataBlob *in )
```
**Description**
Updates the data to be verified.
**Since**: 12
**Parameters**
| Name | Description |
| -------- | -------- |
| ctx | Pointer to the **Verify** instance. |
| in | Pointer to the data to pass in. |
**Returns**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
**0**: The operation is successful.
**401**: Invalid parameters are detected.
**801**: The operation is not supported.
**17620001**: A memory error occurred.
**17630001**: Failed to call an API of a third-party algorithm library.
**See**
[OH_CryptoVerify_Init](#oh_cryptoverify_init)
[OH_CryptoVerify_Final](#oh_cryptoverify_final)