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