# CryptoAsymKeyApi
## 概述
为应用提供非对称密钥相关接口功能。
**起始版本:** 12
## 汇总
### 文件
| 名称 | 描述 |
| -------- | -------- |
| [crypto_asym_key.h](crypto__asym__key_8h.md) | 声明非对称密钥接口。 |
### 类型定义
| 名称 | 描述 |
| -------- | -------- |
| typedef struct [OH_CryptoKeyPair](#oh_cryptokeypair) [OH_CryptoKeyPair](#oh_cryptokeypair) | 定义密钥对结构体。 |
| typedef struct [OH_CryptoPubKey](#oh_cryptopubkey) [OH_CryptoPubKey](#oh_cryptopubkey) | 定义公钥结构体。 |
| typedef struct [OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) [OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) | 定义非对称密钥生成器结构体。 |
### 枚举
| 名称 | 描述 |
| -------- | -------- |
| [CryptoAsymKey_ParamType](#cryptoasymkey_paramtype) {
CRYPTO_DSA_P_DATABLOB = 101, CRYPTO_DSA_Q_DATABLOB = 102,
CRYPTO_DSA_G_DATABLOB = 103, CRYPTO_DSA_SK_DATABLOB = 104,
CRYPTO_DSA_PK_DATABLOB = 105, CRYPTO_ECC_FP_P_DATABLOB = 201,
CRYPTO_ECC_A_DATABLOB = 202, CRYPTO_ECC_B_DATABLOB = 203,
CRYPTO_ECC_G_X_DATABLOB = 204, CRYPTO_ECC_G_Y_DATABLOB = 205,
CRYPTO_ECC_N_DATABLOB = 206, CRYPTO_ECC_H_INT = 207,
CRYPTO_ECC_SK_DATABLOB = 208, CRYPTO_ECC_PK_X_DATABLOB = 209,
CRYPTO_ECC_PK_Y_DATABLOB = 210, CRYPTO_ECC_FIELD_TYPE_STR = 211,
CRYPTO_ECC_FIELD_SIZE_INT = 212, CRYPTO_ECC_CURVE_NAME_STR = 213,
CRYPTO_RSA_N_DATABLOB = 301, CRYPTO_RSA_D_DATABLOB = 302,
CRYPTO_RSA_E_DATABLOB = 303, CRYPTO_DH_P_DATABLOB = 401,
CRYPTO_DH_G_DATABLOB = 402, CRYPTO_DH_L_NUM = 403,
CRYPTO_DH_SK_DATABLOB = 404, CRYPTO_DH_PK_DATABLOB = 405,
CRYPTO_ED25519_SK_DATABLOB = 501, CRYPTO_ED25519_PK_DATABLOB = 502,
CRYPTO_X25519_SK_DATABLOB = 601, CRYPTO_X25519_PK_DATABLOB = 602
} | 定义非对称密钥参数类型。 |
| [Crypto_EncodingType](#crypto_encodingtype) { CRYPTO_PEM = 0, CRYPTO_DER = 1 } | 定义编码格式。 |
### 函数
| 名称 | 描述 |
| -------- | -------- |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoAsymKeyGenerator_Create](#oh_cryptoasymkeygenerator_create) (const char \*algoName, [OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) \*\*ctx) | 通过指定算法名称的字符串,获取相应的非对称密钥生成器实例。 |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoAsymKeyGenerator_Generate](#oh_cryptoasymkeygenerator_generate) ([OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) \*ctx, [OH_CryptoKeyPair](#oh_cryptokeypair) \*\*keyCtx) | 随机生成非对称密钥(密钥对)。 |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoAsymKeyGenerator_Convert](#oh_cryptoasymkeygenerator_convert) ([OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) \*ctx, [Crypto_EncodingType](#crypto_encodingtype) type, [Crypto_DataBlob](_crypto___data_blob.md) \*pubKeyData, [Crypto_DataBlob](_crypto___data_blob.md) \*priKeyData, [OH_CryptoKeyPair](#oh_cryptokeypair) \*\*keyCtx) | 转换非对称密钥数据为密钥对。 |
| const char \* [OH_CryptoAsymKeyGenerator_GetAlgoName](#oh_cryptoasymkeygenerator_getalgoname) ([OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) \*ctx) | 获取非对称密钥算法名称。 |
| void [OH_CryptoAsymKeyGenerator_Destroy](#oh_cryptoasymkeygenerator_destroy) ([OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) \*ctx) | 销毁非对称密钥生成器实例。 |
| void [OH_CryptoKeyPair_Destroy](#oh_cryptokeypair_destroy) ([OH_CryptoKeyPair](#oh_cryptokeypair) \*keyCtx) | 销毁非对称密钥对实例。 |
| [OH_CryptoPubKey](#oh_cryptopubkey) \* [OH_CryptoKeyPair_GetPubKey](#oh_cryptokeypair_getpubkey) ([OH_CryptoKeyPair](#oh_cryptokeypair) \*keyCtx) | 从密钥对中获取公钥实例。 |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoPubKey_Encode](#oh_cryptopubkey_encode) ([OH_CryptoPubKey](#oh_cryptopubkey) \*key, [Crypto_EncodingType](#crypto_encodingtype) type, const char \*encodingStandard, [Crypto_DataBlob](_crypto___data_blob.md) \*out) | 根据指定的编码格式输出公钥数据。 |
| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoPubKey_GetParam](#oh_cryptopubkey_getparam) ([OH_CryptoPubKey](#oh_cryptopubkey) \*key, [CryptoAsymKey_ParamType](#cryptoasymkey_paramtype) item, [Crypto_DataBlob](_crypto___data_blob.md) \*value) | 从公钥实例获取指定参数。 |
## 类型定义说明
### OH_CryptoAsymKeyGenerator
```
typedef struct OH_CryptoAsymKeyGenerator OH_CryptoAsymKeyGenerator
```
**描述**
定义非对称密钥生成器结构体。
**起始版本:** 12
### OH_CryptoKeyPair
```
typedef struct OH_CryptoKeyPair OH_CryptoKeyPair
```
**描述**
定义密钥对结构体。
**起始版本:** 12
### OH_CryptoPubKey
```
typedef struct OH_CryptoPubKey OH_CryptoPubKey
```
**描述**
定义公钥结构体。
**起始版本:** 12
## 枚举类型说明
### Crypto_EncodingType
```
enum Crypto_EncodingType
```
**描述**
定义编码格式。
**起始版本:** 12
| 枚举值 | 描述 |
| -------- | -------- |
| CRYPTO_PEM | PEM格式密钥类型。 |
| CRYPTO_DER | DER格式密钥类型。 |
### CryptoAsymKey_ParamType
```
enum CryptoAsymKey_ParamType
```
**描述**
定义非对称密钥参数类型。
**起始版本:** 12
| 枚举值 | 描述 |
| -------- | -------- |
| CRYPTO_DSA_P_DATABLOB | DSA算法的素模数p。 |
| CRYPTO_DSA_Q_DATABLOB | DSA算法中密钥参数q(p-1的素因子)。 |
| CRYPTO_DSA_G_DATABLOB | DSA算法的参数g。 |
| CRYPTO_DSA_SK_DATABLOB | DSA算法的私钥sk。 |
| CRYPTO_DSA_PK_DATABLOB | DSA算法的公钥pk。 |
| CRYPTO_ECC_FP_P_DATABLOB | ECC算法中表示椭圆曲线Fp域的素数p。 |
| CRYPTO_ECC_A_DATABLOB | ECC算法中椭圆曲线的第一个系数a。 |
| CRYPTO_ECC_B_DATABLOB | ECC算法中椭圆曲线的第二个系数b。 |
| CRYPTO_ECC_G_X_DATABLOB | ECC算法中基点g的x坐标。 |
| CRYPTO_ECC_G_Y_DATABLOB | ECC算法中基点g的y坐标。 |
| CRYPTO_ECC_N_DATABLOB | ECC算法中基点g的阶n。 |
| CRYPTO_ECC_H_INT | ECC算法中的余因子h。 |
| CRYPTO_ECC_SK_DATABLOB | ECC算法中的私钥sk。 |
| CRYPTO_ECC_PK_X_DATABLOB | ECC算法中,公钥pk(椭圆曲线上的一个点)的x坐标。 |
| CRYPTO_ECC_PK_Y_DATABLOB | ECC算法中,公钥pk(椭圆曲线上的一个点)的y坐标。 |
| CRYPTO_ECC_FIELD_TYPE_STR | ECC算法中,椭圆曲线的域类型(当前只支持Fp域)。 |
| CRYPTO_ECC_FIELD_SIZE_INT | ECC算法中域的大小,单位为bits(注:对于Fp域,域的大小为素数p的bits长度)。 |
| CRYPTO_ECC_CURVE_NAME_STR | ECC算法中的SECG(Standards for Efficient Cryptography Group)曲线名称。 |
| CRYPTO_RSA_N_DATABLOB | RSA算法中的模数n。 |
| CRYPTO_RSA_D_DATABLOB | RSA算法中的私钥sk(即私钥指数d)。 |
| CRYPTO_RSA_E_DATABLOB | RSA算法中的公钥pk(即公钥指数e)。 |
| CRYPTO_DH_P_DATABLOB | DH算法中的素数p。 |
| CRYPTO_DH_G_DATABLOB | DH算法中的参数g。 |
| CRYPTO_DH_L_NUM | DH算法中私钥长度,单位为bit。 |
| CRYPTO_DH_SK_DATABLOB | DH算法中的私钥sk。 |
| CRYPTO_DH_PK_DATABLOB | DH算法中的公钥pk。 |
| CRYPTO_ED25519_SK_DATABLOB | ED25519算法中的私钥sk。 |
| CRYPTO_ED25519_PK_DATABLOB | ED25519算法中的公钥pk。 |
| CRYPTO_X25519_SK_DATABLOB | X25519算法中的私钥sk。 |
| CRYPTO_X25519_PK_DATABLOB | X25519算法中的公钥pk。 |
## 函数说明
### OH_CryptoAsymKeyGenerator_Convert()
```
OH_Crypto_ErrCode OH_CryptoAsymKeyGenerator_Convert (OH_CryptoAsymKeyGenerator *ctx, Crypto_EncodingType type, Crypto_DataBlob *pubKeyData, Crypto_DataBlob *priKeyData, OH_CryptoKeyPair **keyCtx )
```
**描述**
转换非对称密钥数据为密钥对。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| ctx | 非对称密钥生成器实例。 |
| type | 编码格式。 |
| pubKeyData | 公钥数据。 |
| priKeyData | 私钥数据。 |
| keyCtx | 指向非对称密钥对实例的指针。 |
**返回:**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
0 - 成功。
401 - 参数无效。
801 - 操作不支持。
17620001 - 内存错误。
17630001 - 调用三方算法库API出错。
### OH_CryptoAsymKeyGenerator_Create()
```
OH_Crypto_ErrCode OH_CryptoAsymKeyGenerator_Create (const char *algoName, OH_CryptoAsymKeyGenerator **ctx )
```
**描述**
通过指定算法名称的字符串,获取相应的非对称密钥生成器实例。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| algoName | 指定生成对称密钥生成器的算法名称。例如:"RSA1024\|PRIMES_2" |
| ctx | 指向非对称密钥生成器实例的指针。 |
**返回:**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
0 - 成功。
401 - 参数无效。
801 - 操作不支持。
17620001 - 内存错误。
17630001 - 调用三方算法库API出错。
### OH_CryptoAsymKeyGenerator_Destroy()
```
void OH_CryptoAsymKeyGenerator_Destroy (OH_CryptoAsymKeyGenerator *ctx)
```
**描述**
销毁非对称密钥生成器实例。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| ctx | 非对称密钥生成器实例。 |
### OH_CryptoAsymKeyGenerator_Generate()
```
OH_Crypto_ErrCode OH_CryptoAsymKeyGenerator_Generate (OH_CryptoAsymKeyGenerator *ctx, OH_CryptoKeyPair **keyCtx )
```
**描述**
随机生成非对称密钥(密钥对)。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| ctx | 非对称密钥生成器实例。 |
| keyCtx | 指向非对称密钥对实例的指针。 |
**返回:**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
0 - 成功。
401 - 参数无效。
801 - 操作不支持。
17620001 - 内存错误。
17630001 - 调用三方算法库API出错。
### OH_CryptoAsymKeyGenerator_GetAlgoName()
```
const char* OH_CryptoAsymKeyGenerator_GetAlgoName (OH_CryptoAsymKeyGenerator *ctx)
```
**描述**
获取非对称密钥算法名称。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| ctx | 非对称密钥生成器实例。 |
**返回:**
返回非对称密钥算法名称。
### OH_CryptoKeyPair_Destroy()
```
void OH_CryptoKeyPair_Destroy (OH_CryptoKeyPair *keyCtx)
```
**描述**
销毁非对称密钥对实例。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| keyCtx | 非对称密钥对实例。 |
### OH_CryptoKeyPair_GetPubKey()
```
OH_CryptoPubKey* OH_CryptoKeyPair_GetPubKey (OH_CryptoKeyPair *keyCtx)
```
**描述**
从密钥对中获取公钥实例。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| keyCtx | 密钥对实例。 |
**返回:**
返回从密钥对中得到的公钥实例。
### OH_CryptoPubKey_Encode()
```
OH_Crypto_ErrCode OH_CryptoPubKey_Encode (OH_CryptoPubKey *key, Crypto_EncodingType type, const char *encodingStandard, Crypto_DataBlob *out )
```
**描述**
根据指定的编码格式输出公钥数据。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| key | 公钥实例。 |
| type | 编码类型。 |
| encodingStandard | 编码格式。 |
| out | 输出的公钥结果。 |
**返回:**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode):
0 - 成功。
401 - 参数无效。
801 - 操作不支持。
17620001 - 内存错误。
17630001 - 调用三方算法库API出错。
### OH_CryptoPubKey_GetParam()
```
OH_Crypto_ErrCode OH_CryptoPubKey_GetParam (OH_CryptoPubKey *key, CryptoAsymKey_ParamType item, Crypto_DataBlob *value )
```
**描述**
从公钥实例获取指定参数。
**起始版本:** 12
**参数:**
| 名称 | 描述 |
| -------- | -------- |
| key | 公钥实例。 |
| item | 非对称密钥参数类型。 |
| value | 参数输出值。 |
**返回:**
[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode): 0 - 成功。
401 - 参数无效。
801 - 操作不支持。
17620001 - 内存错误。
17630001 - 调用三方算法库API出错。