1# CryptoAsymKeyApi 2 3 4## 概述 5 6为应用提供非对称密钥相关接口功能。 7 8**起始版本:** 12 9 10 11## 汇总 12 13 14### 文件 15 16| 名称 | 描述 | 17| -------- | -------- | 18| [crypto_asym_key.h](crypto__asym__key_8h.md) | 声明非对称密钥接口。 | 19 20 21### 类型定义 22 23| 名称 | 描述 | 24| -------- | -------- | 25| typedef struct [OH_CryptoKeyPair](#oh_cryptokeypair) [OH_CryptoKeyPair](#oh_cryptokeypair) | 定义密钥对结构体。 | 26| typedef struct [OH_CryptoPubKey](#oh_cryptopubkey) [OH_CryptoPubKey](#oh_cryptopubkey) | 定义公钥结构体。 | 27| typedef struct [OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) [OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) | 定义非对称密钥生成器结构体。 | 28 29 30### 枚举 31 32| 名称 | 描述 | 33| -------- | -------- | 34| [CryptoAsymKey_ParamType](#cryptoasymkey_paramtype) {<br/>CRYPTO_DSA_P_DATABLOB = 101, CRYPTO_DSA_Q_DATABLOB = 102,<br/>CRYPTO_DSA_G_DATABLOB = 103, CRYPTO_DSA_SK_DATABLOB = 104,<br/>CRYPTO_DSA_PK_DATABLOB = 105, CRYPTO_ECC_FP_P_DATABLOB = 201,<br/>CRYPTO_ECC_A_DATABLOB = 202, CRYPTO_ECC_B_DATABLOB = 203,<br/>CRYPTO_ECC_G_X_DATABLOB = 204, CRYPTO_ECC_G_Y_DATABLOB = 205,<br/>CRYPTO_ECC_N_DATABLOB = 206, CRYPTO_ECC_H_INT = 207,<br/>CRYPTO_ECC_SK_DATABLOB = 208, CRYPTO_ECC_PK_X_DATABLOB = 209,<br/>CRYPTO_ECC_PK_Y_DATABLOB = 210, CRYPTO_ECC_FIELD_TYPE_STR = 211,<br/>CRYPTO_ECC_FIELD_SIZE_INT = 212, CRYPTO_ECC_CURVE_NAME_STR = 213,<br/>CRYPTO_RSA_N_DATABLOB = 301, CRYPTO_RSA_D_DATABLOB = 302,<br/>CRYPTO_RSA_E_DATABLOB = 303, CRYPTO_DH_P_DATABLOB = 401,<br/>CRYPTO_DH_G_DATABLOB = 402, CRYPTO_DH_L_NUM = 403,<br/>CRYPTO_DH_SK_DATABLOB = 404, CRYPTO_DH_PK_DATABLOB = 405,<br/>CRYPTO_ED25519_SK_DATABLOB = 501, CRYPTO_ED25519_PK_DATABLOB = 502,<br/>CRYPTO_X25519_SK_DATABLOB = 601, CRYPTO_X25519_PK_DATABLOB = 602<br/>} | 定义非对称密钥参数类型。 | 35| [Crypto_EncodingType](#crypto_encodingtype) { CRYPTO_PEM = 0, CRYPTO_DER = 1 } | 定义编码格式。 | 36 37 38### 函数 39 40| 名称 | 描述 | 41| -------- | -------- | 42| [OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode) [OH_CryptoAsymKeyGenerator_Create](#oh_cryptoasymkeygenerator_create) (const char \*algoName, [OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) \*\*ctx) | 通过指定算法名称的字符串,获取相应的非对称密钥生成器实例。 | 43| [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) | 随机生成非对称密钥(密钥对)。 | 44| [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) | 转换非对称密钥数据为密钥对。 | 45| const char \* [OH_CryptoAsymKeyGenerator_GetAlgoName](#oh_cryptoasymkeygenerator_getalgoname) ([OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) \*ctx) | 获取非对称密钥算法名称。 | 46| void [OH_CryptoAsymKeyGenerator_Destroy](#oh_cryptoasymkeygenerator_destroy) ([OH_CryptoAsymKeyGenerator](#oh_cryptoasymkeygenerator) \*ctx) | 销毁非对称密钥生成器实例。 | 47| void [OH_CryptoKeyPair_Destroy](#oh_cryptokeypair_destroy) ([OH_CryptoKeyPair](#oh_cryptokeypair) \*keyCtx) | 销毁非对称密钥对实例。 | 48| [OH_CryptoPubKey](#oh_cryptopubkey) \* [OH_CryptoKeyPair_GetPubKey](#oh_cryptokeypair_getpubkey) ([OH_CryptoKeyPair](#oh_cryptokeypair) \*keyCtx) | 从密钥对中获取公钥实例。 | 49| [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) | 根据指定的编码格式输出公钥数据。 | 50| [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) | 从公钥实例获取指定参数。 | 51 52 53## 类型定义说明 54 55 56### OH_CryptoAsymKeyGenerator 57 58``` 59typedef struct OH_CryptoAsymKeyGenerator OH_CryptoAsymKeyGenerator 60``` 61 62**描述** 63 64定义非对称密钥生成器结构体。 65 66**起始版本:** 12 67 68 69### OH_CryptoKeyPair 70 71``` 72typedef struct OH_CryptoKeyPair OH_CryptoKeyPair 73``` 74 75**描述** 76 77定义密钥对结构体。 78 79**起始版本:** 12 80 81 82### OH_CryptoPubKey 83 84``` 85typedef struct OH_CryptoPubKey OH_CryptoPubKey 86``` 87 88**描述** 89 90定义公钥结构体。 91 92**起始版本:** 12 93 94 95## 枚举类型说明 96 97 98### Crypto_EncodingType 99 100``` 101enum Crypto_EncodingType 102``` 103 104**描述** 105 106定义编码格式。 107 108**起始版本:** 12 109 110| 枚举值 | 描述 | 111| -------- | -------- | 112| CRYPTO_PEM | PEM格式密钥类型。 | 113| CRYPTO_DER | DER格式密钥类型。 | 114 115 116### CryptoAsymKey_ParamType 117 118``` 119enum CryptoAsymKey_ParamType 120``` 121 122**描述** 123 124定义非对称密钥参数类型。 125 126**起始版本:** 12 127 128| 枚举值 | 描述 | 129| -------- | -------- | 130| CRYPTO_DSA_P_DATABLOB | DSA算法的素模数p。 | 131| CRYPTO_DSA_Q_DATABLOB | DSA算法中密钥参数q(p-1的素因子)。 | 132| CRYPTO_DSA_G_DATABLOB | DSA算法的参数g。 | 133| CRYPTO_DSA_SK_DATABLOB | DSA算法的私钥sk。 | 134| CRYPTO_DSA_PK_DATABLOB | DSA算法的公钥pk。 | 135| CRYPTO_ECC_FP_P_DATABLOB | ECC算法中表示椭圆曲线Fp域的素数p。 | 136| CRYPTO_ECC_A_DATABLOB | ECC算法中椭圆曲线的第一个系数a。 | 137| CRYPTO_ECC_B_DATABLOB | ECC算法中椭圆曲线的第二个系数b。 | 138| CRYPTO_ECC_G_X_DATABLOB | ECC算法中基点g的x坐标。 | 139| CRYPTO_ECC_G_Y_DATABLOB | ECC算法中基点g的y坐标。 | 140| CRYPTO_ECC_N_DATABLOB | ECC算法中基点g的阶n。 | 141| CRYPTO_ECC_H_INT | ECC算法中的余因子h。 | 142| CRYPTO_ECC_SK_DATABLOB | ECC算法中的私钥sk。 | 143| CRYPTO_ECC_PK_X_DATABLOB | ECC算法中,公钥pk(椭圆曲线上的一个点)的x坐标。 | 144| CRYPTO_ECC_PK_Y_DATABLOB | ECC算法中,公钥pk(椭圆曲线上的一个点)的y坐标。 | 145| CRYPTO_ECC_FIELD_TYPE_STR | ECC算法中,椭圆曲线的域类型(当前只支持Fp域)。 | 146| CRYPTO_ECC_FIELD_SIZE_INT | ECC算法中域的大小,单位为bits(注:对于Fp域,域的大小为素数p的bits长度)。 | 147| CRYPTO_ECC_CURVE_NAME_STR | ECC算法中的SECG(Standards for Efficient Cryptography Group)曲线名称。 | 148| CRYPTO_RSA_N_DATABLOB | RSA算法中的模数n。 | 149| CRYPTO_RSA_D_DATABLOB | RSA算法中的私钥sk(即私钥指数d)。 | 150| CRYPTO_RSA_E_DATABLOB | RSA算法中的公钥pk(即公钥指数e)。 | 151| CRYPTO_DH_P_DATABLOB | DH算法中的素数p。 | 152| CRYPTO_DH_G_DATABLOB | DH算法中的参数g。 | 153| CRYPTO_DH_L_NUM | DH算法中私钥长度,单位为bit。 | 154| CRYPTO_DH_SK_DATABLOB | DH算法中的私钥sk。 | 155| CRYPTO_DH_PK_DATABLOB | DH算法中的公钥pk。 | 156| CRYPTO_ED25519_SK_DATABLOB | ED25519算法中的私钥sk。 | 157| CRYPTO_ED25519_PK_DATABLOB | ED25519算法中的公钥pk。 | 158| CRYPTO_X25519_SK_DATABLOB | X25519算法中的私钥sk。 | 159| CRYPTO_X25519_PK_DATABLOB | X25519算法中的公钥pk。 | 160 161 162## 函数说明 163 164 165### OH_CryptoAsymKeyGenerator_Convert() 166 167``` 168OH_Crypto_ErrCode OH_CryptoAsymKeyGenerator_Convert (OH_CryptoAsymKeyGenerator *ctx, Crypto_EncodingType type, Crypto_DataBlob *pubKeyData, Crypto_DataBlob *priKeyData, OH_CryptoKeyPair **keyCtx ) 169``` 170 171**描述** 172 173转换非对称密钥数据为密钥对。 174 175**起始版本:** 12 176 177**参数:** 178 179| 名称 | 描述 | 180| -------- | -------- | 181| ctx | 非对称密钥生成器实例。 | 182| type | 编码格式。 | 183| pubKeyData | 公钥数据。 | 184| priKeyData | 私钥数据。 | 185| keyCtx | 指向非对称密钥对实例的指针。 | 186 187**返回:** 188 189[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode): 190 1910 - 成功。 192 193401 - 参数无效。 194 195801 - 操作不支持。 196 19717620001 - 内存错误。 198 19917630001 - 调用三方算法库API出错。 200 201 202### OH_CryptoAsymKeyGenerator_Create() 203 204``` 205OH_Crypto_ErrCode OH_CryptoAsymKeyGenerator_Create (const char *algoName, OH_CryptoAsymKeyGenerator **ctx ) 206``` 207 208**描述** 209 210通过指定算法名称的字符串,获取相应的非对称密钥生成器实例。 211 212**起始版本:** 12 213 214**参数:** 215 216| 名称 | 描述 | 217| -------- | -------- | 218| algoName | 指定生成对称密钥生成器的算法名称。例如:"RSA1024\|PRIMES_2" | 219| ctx | 指向非对称密钥生成器实例的指针。 | 220 221**返回:** 222 223[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode): 224 2250 - 成功。 226 227401 - 参数无效。 228 229801 - 操作不支持。 230 23117620001 - 内存错误。 232 23317630001 - 调用三方算法库API出错。 234 235 236### OH_CryptoAsymKeyGenerator_Destroy() 237 238``` 239void OH_CryptoAsymKeyGenerator_Destroy (OH_CryptoAsymKeyGenerator *ctx) 240``` 241 242**描述** 243 244销毁非对称密钥生成器实例。 245 246**起始版本:** 12 247 248**参数:** 249 250| 名称 | 描述 | 251| -------- | -------- | 252| ctx | 非对称密钥生成器实例。 | 253 254 255### OH_CryptoAsymKeyGenerator_Generate() 256 257``` 258OH_Crypto_ErrCode OH_CryptoAsymKeyGenerator_Generate (OH_CryptoAsymKeyGenerator *ctx, OH_CryptoKeyPair **keyCtx ) 259``` 260 261**描述** 262 263随机生成非对称密钥(密钥对)。 264 265**起始版本:** 12 266 267**参数:** 268 269| 名称 | 描述 | 270| -------- | -------- | 271| ctx | 非对称密钥生成器实例。 | 272| keyCtx | 指向非对称密钥对实例的指针。 | 273 274**返回:** 275 276[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode): 277 2780 - 成功。 279 280401 - 参数无效。 281 282801 - 操作不支持。 283 28417620001 - 内存错误。 285 28617630001 - 调用三方算法库API出错。 287 288 289### OH_CryptoAsymKeyGenerator_GetAlgoName() 290 291``` 292const char* OH_CryptoAsymKeyGenerator_GetAlgoName (OH_CryptoAsymKeyGenerator *ctx) 293``` 294 295**描述** 296 297获取非对称密钥算法名称。 298 299**起始版本:** 12 300 301**参数:** 302 303| 名称 | 描述 | 304| -------- | -------- | 305| ctx | 非对称密钥生成器实例。 | 306 307**返回:** 308 309返回非对称密钥算法名称。 310 311 312### OH_CryptoKeyPair_Destroy() 313 314``` 315void OH_CryptoKeyPair_Destroy (OH_CryptoKeyPair *keyCtx) 316``` 317 318**描述** 319 320销毁非对称密钥对实例。 321 322**起始版本:** 12 323 324**参数:** 325 326| 名称 | 描述 | 327| -------- | -------- | 328| keyCtx | 非对称密钥对实例。 | 329 330 331### OH_CryptoKeyPair_GetPubKey() 332 333``` 334OH_CryptoPubKey* OH_CryptoKeyPair_GetPubKey (OH_CryptoKeyPair *keyCtx) 335``` 336 337**描述** 338 339从密钥对中获取公钥实例。 340 341**起始版本:** 12 342 343**参数:** 344 345| 名称 | 描述 | 346| -------- | -------- | 347| keyCtx | 密钥对实例。 | 348 349**返回:** 350 351返回从密钥对中得到的公钥实例。 352 353 354### OH_CryptoPubKey_Encode() 355 356``` 357OH_Crypto_ErrCode OH_CryptoPubKey_Encode (OH_CryptoPubKey *key, Crypto_EncodingType type, const char *encodingStandard, Crypto_DataBlob *out ) 358``` 359 360**描述** 361 362根据指定的编码格式输出公钥数据。 363 364**起始版本:** 12 365 366**参数:** 367 368| 名称 | 描述 | 369| -------- | -------- | 370| key | 公钥实例。 | 371| type | 编码类型。 | 372| encodingStandard | 编码格式。 | 373| out | 输出的公钥结果。 | 374 375**返回:** 376 377[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode): 378 3790 - 成功。 380 381401 - 参数无效。 382 383801 - 操作不支持。 384 38517620001 - 内存错误。 386 38717630001 - 调用三方算法库API出错。 388 389 390### OH_CryptoPubKey_GetParam() 391 392``` 393OH_Crypto_ErrCode OH_CryptoPubKey_GetParam (OH_CryptoPubKey *key, CryptoAsymKey_ParamType item, Crypto_DataBlob *value ) 394``` 395 396**描述** 397 398从公钥实例获取指定参数。 399 400**起始版本:** 12 401 402**参数:** 403 404| 名称 | 描述 | 405| -------- | -------- | 406| key | 公钥实例。 | 407| item | 非对称密钥参数类型。 | 408| value | 参数输出值。 | 409 410**返回:** 411 412[OH_Crypto_ErrCode](_crypto_common_api.md#oh_crypto_errcode): 0 - 成功。 413 414401 - 参数无效。 415 416801 - 操作不支持。 417 41817620001 - 内存错误。 419 42017630001 - 调用三方算法库API出错。 421