• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.security.cryptoFramework (加解密算法库框架)
2
3为屏蔽底层硬件和算法库,向上提供统一的密码算法库加解密相关接口。
4
5> **说明:**
6>
7> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8
9## 导入模块
10
11```ts
12import { cryptoFramework } from '@kit.CryptoArchitectureKit';
13```
14
15## Result
16
17 表示执行结果的枚举。
18
19 **系统能力:** SystemCapability.Security.CryptoFramework
20
21| 名称                                  |    值   |   说明                         |
22| ------------------------------------- | -------- | ---------------------------- |
23| INVALID_PARAMS                        | 401      | 非法入参。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                 |
24| NOT_SUPPORT                           | 801      | 操作不支持。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                 |
25| ERR_OUT_OF_MEMORY                     | 17620001 | 内存错误。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                   |
26| ERR_RUNTIME_ERROR                     | 17620002 | 运行时外部错误。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。           |
27| ERR_CRYPTO_OPERATION                  | 17630001 | 调用三方算法库API出错。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。     |
28
29## DataBlob
30
31buffer数组,提供blob数据类型。
32
33 **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
34
35 **系统能力:** SystemCapability.Security.CryptoFramework
36
37| 名称 | 类型       | 可读 | 可写 | 说明   |
38| ---- | ---------- | ---- | ---- | ------ |
39| data | Uint8Array | 是   | 是   | 数据。 |
40
41> **说明:**
42>
43> Uint8Array类型数据表示8位无符号整数的数组。
44
45## ParamsSpec
46
47加解密参数,在进行对称加解密时需要构造其子类对象,并将子类对象传入[init()](#init-2)方法。
48
49适用于需要iv等参数的对称加解密模式(对于无iv等参数的模式如ECB模式,无需构造,在[init()](#init-2)中传入null即可)。
50
51**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
52
53**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
54
55API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
56
57| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
58| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
59| algName | string | 是   | 是   | 指明对称加解密参数的算法模式。可选值如下:<br/> - "IvParamsSpec":适用于CBC\|CTR\|OFB\|CFB模式<br/> - "GcmParamsSpec":适用于GCM模式<br/> - "CcmParamsSpec":适用于CCM模式 |
60
61> **说明:**
62>
63> 由于[init()](#init-2)的params参数是ParamsSpec类型(父类),而实际需要传入具体的子类对象(如IvParamsSpec),因此在构造子类对象时应设置其父类ParamsSpec的algName参数,使算法库在init()时知道传入的是哪种子类对象。
64
65## IvParamsSpec
66
67加解密参数[ParamsSpec](#paramsspec)的子类,用于在对称加解密时作为[init()](#init-2)方法的参数。
68
69适用于CBC、CTR、OFB、CFB这些仅使用iv作为参数的加解密模式。
70
71**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
72
73**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
74
75API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
76
77| 名称 | 类型                  | 可读 | 可写 | 说明                                                         |
78| ---- | --------------------- | ---- | ---- | ------------------------------------------------------------ |
79| iv   | [DataBlob](#datablob) | 是   | 是   | 指明加解密参数iv。常见取值如下:<br/>- AES的CBC\|CTR\|OFB\|CFB模式:iv长度为16字节<br/>- 3DES的CBC\|OFB\|CFB模式:iv长度为8字节<br/>- SM4<sup>10+</sup>的CBC\|CTR\|OFB\|CFB模式:iv长度为16字节 |
80
81> **说明:**
82>
83> 传入[init()](#init-2)方法前需要指定其algName属性(来源于父类[ParamsSpec](#paramsspec))。
84
85## GcmParamsSpec
86
87加解密参数[ParamsSpec](#paramsspec)的子类,用于在对称加解密时作为[init()](#init-2)方法的参数。
88
89适用于GCM模式。
90
91**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
92
93**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
94
95API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
96
97| 名称    | 类型                  | 可读 | 可写 | 说明                                                         |
98| ------- | --------------------- | ---- | ---- | ------------------------------------------------------------ |
99| iv      | [DataBlob](#datablob) | 是   | 是   | 指明加解密参数iv,长度为1~16字节,常用为12字节。                             |
100| aad     | [DataBlob](#datablob) | 是   | 是   | 指明加解密参数aad,长度为0~INT_MAX字节,常用为16字节。                             |
101| authTag | [DataBlob](#datablob) | 是   | 是   | 指明加解密参数authTag,长度为16字节。<br/>采用GCM模式加密时,需要获取[doFinal()](#dofinal-2)或[doFinalSync()](#dofinalsync12)输出的[DataBlob](#datablob),取出其末尾16字节作为解密时[init()](#init-2)或[initSync()](#initsync12)方法的入参GcmParamsSpec中的的authTag。 |
102
103> **说明:**
104>
105> 1. 传入[init()](#init-2)方法前需要指定其algName属性(来源于父类[ParamsSpec](#paramsspec))。
106> 2. 对于在1~16字节长度范围内的iv,加解密算法库不作额外限制,但其结果取决于底层openssl是否支持。
107> 3. 用户不需要使用aad参数或aad长度为0时,可以指定aad的data属性为空的Uint8Array,来构造GcmParamsSpec,写法为aad: { data: new Uint8Array() }。
108
109## CcmParamsSpec
110
111加解密参数[ParamsSpec](#paramsspec)的子类,用于在对称加解密时作为[init()](#init-2)方法的参数。
112
113适用于CCM模式。
114
115**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
116
117**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
118
119API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
120
121| 名称    | 类型                  | 可读 | 可写 | 说明                                                         |
122| ------- | --------------------- | ---- | ---- | ------------------------------------------------------------ |
123| iv      | [DataBlob](#datablob) | 是   | 是   | 指明加解密参数iv,长度为7字节。                              |
124| aad     | [DataBlob](#datablob) | 是   | 是   | 指明加解密参数aad,长度为8字节。                             |
125| authTag | [DataBlob](#datablob) | 是   | 是   | 指明加解密参数authTag,长度为12字节。<br/>采用CCM模式加密时,需要获取[doFinal()](#dofinal-2)或[doFinalSync()](#dofinalsync12)输出的[DataBlob](#datablob),取出其末尾12字节作为解密时[init()](#init-2)或[initSync()](#initsync12)方法的入参[CcmParamsSpec](#ccmparamsspec)中的authTag。 |
126
127> **说明:**
128>
129> 传入[init()](#init-2)方法前需要指定其algName属性(来源于父类[ParamsSpec](#paramsspec))。
130
131## CryptoMode
132
133表示加解密操作的枚举。
134
135**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
136
137**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
138
139API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
140
141| 名称         | 值   | 说明               |
142| ------------ | ---- | ------------------ |
143| ENCRYPT_MODE | 0    | 表示进行加密操作。 |
144| DECRYPT_MODE | 1    | 表示进行解密操作。 |
145
146## AsyKeySpecItem<sup>10+</sup>
147
148表示密钥参数的枚举。
149
150**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
151
152**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
153
154API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
155
156| 名称         | 值   | 说明             |
157| ------------ | ---- | ---------------- |
158| DSA_P_BN | 101 | DSA算法的素模数p。 |
159| DSA_Q_BN | 102 | DSA算法中密钥参数q(p-1的素因子)。 |
160| DSA_G_BN | 103 | DSA算法的参数g。 |
161| DSA_SK_BN | 104 | DSA算法的私钥sk。 |
162| DSA_PK_BN | 105 | DSA算法的公钥pk。 |
163| ECC_FP_P_BN | 201 | ECC算法中表示椭圆曲线Fp域的素数p。 |
164| ECC_A_BN | 202 | ECC算法中椭圆曲线的第一个系数a。 |
165| ECC_B_BN | 203 | ECC算法中椭圆曲线的第二个系数b。 |
166| ECC_G_X_BN | 204 | ECC算法中基点g的x坐标。 |
167| ECC_G_Y_BN | 205 | ECC算法中基点g的y坐标。 |
168| ECC_N_BN | 206 | ECC算法中基点g的阶n。 |
169| ECC_H_NUM | 207 | ECC算法中的余因子h。 |
170| ECC_SK_BN | 208 | ECC算法中的私钥sk。 |
171| ECC_PK_X_BN | 209 | ECC算法中,公钥pk(椭圆曲线上的一个点)的x坐标。 |
172| ECC_PK_Y_BN | 210 | ECC算法中,公钥pk(椭圆曲线上的一个点)的y坐标。 |
173| ECC_FIELD_TYPE_STR | 211 | ECC算法中,椭圆曲线的域类型(当前只支持Fp域)。 |
174| ECC_FIELD_SIZE_NUM | 212 | ECC算法中域的大小,单位为bits(注:对于Fp域,域的大小为素数p的bits长度)。 |
175| ECC_CURVE_NAME_STR | 213 | ECC算法中的SECG(Standards for Efficient Cryptography Group)曲线名称。 |
176| RSA_N_BN | 301 | RSA算法中的模数n。 |
177| RSA_SK_BN | 302 | RSA算法中的私钥sk(即私钥指数d)。 |
178| RSA_PK_BN | 303 | RSA算法中的公钥pk(即公钥指数e)。 |
179| DH_P_BN<sup>11+</sup> | 401 | DH算法中的素数p。 |
180| DH_G_BN<sup>11+</sup> | 402 | DH算法中的参数g。 |
181| DH_L_NUM<sup>11+</sup> | 403 | DH算法中私钥长度,单位为bit。 |
182| DH_SK_BN<sup>11+</sup> | 404 | DH算法中的私钥sk。 |
183| DH_PK_BN<sup>11+</sup> | 405 | DH算法中的公钥pk。 |
184| ED25519_SK_BN<sup>11+</sup> | 501 | ED25519算法中的私钥sk。 |
185| ED25519_PK_BN<sup>11+</sup> | 502 | ED25519算法中的公钥pk。 |
186| X25519_SK_BN<sup>11+</sup> | 601 | X25519算法中的私钥sk。 |
187| X25519_PK_BN<sup>11+</sup> | 602 | X25519算法中的公钥pk。 |
188
189## AsyKeySpecType<sup>10+</sup>
190
191表示密钥参数类型的枚举。
192
193**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
194
195**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
196
197API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
198
199| 名称         | 值   | 说明             |
200| ------------ | ---- | ---------------- |
201| COMMON_PARAMS_SPEC | 0 | 表示公私钥中包含的公共参数。使用此类型的参数可以调用[generateKeyPair](#generatekeypair-2)随机生成密钥对。 |
202| PRIVATE_KEY_SPEC | 1 | 表示私钥中包含的参数。使用此类型的参数可以调用[generatePriKey](#generateprikey)生成指定的私钥。 |
203| PUBLIC_KEY_SPEC | 2 | 表示公钥中包含的参数。使用此类型的参数可以调用[generatePubKey](#generatepubkey)生成指定的公钥。 |
204| KEY_PAIR_SPEC | 3 | 表示公私钥中包含的全量参数。使用此类型的参数可以调用[generateKeyPair](#generatekeypair-2)生成指定的密钥对。 |
205
206## CipherSpecItem<sup>10+</sup>
207
208表示加解密参数的枚举,这些加解密参数支持通过[setCipherSpec](#setcipherspec10)接口设置/通过[getCipherSpec](#getcipherspec10)接口获取。
209
210当前只支持RSA算法和SM2算法,从API version 11开始,增加对SM2_MD_NAME_STR参数的支持,详细规格请参考[加解密规格](../../security/CryptoArchitectureKit/crypto-asym-encrypt-decrypt-spec.md)。
211
212**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
213
214**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
215
216API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
217
218| 名称         | 值   | 说明             |
219| ------------ | ---- | ---------------- |
220| OAEP_MD_NAME_STR | 100 | 表示RSA算法中,使用PKCS1_OAEP模式时,消息摘要功能的算法名。 |
221| OAEP_MGF_NAME_STR | 101 | 表示RSA算法中,使用PKCS1_OAEP模式时,掩码生成算法(目前仅支持MGF1)。 |
222| OAEP_MGF1_MD_STR | 102 | 表示RSA算法中,使用PKCS1_OAEP模式时,MGF1掩码生成功能的消息摘要算法。 |
223| OAEP_MGF1_PSRC_UINT8ARR | 103 | 表示RSA算法中,使用PKCS1_OAEP模式时,pSource的字节流。 |
224| SM2_MD_NAME_STR<sup>11+</sup> | 104 | 表示SM2算法中,使用的摘要算法名。 |
225
226## SignSpecItem<sup>10+</sup>
227
228表示签名验签参数的枚举,这些签名验签参数支持通过[setSignSpec](#setsignspec10)、[setVerifySpec](#setverifyspec10)接口设置/通过[getSignSpec](#getsignspec10)、[getVerifySpec](#getverifyspec10)接口获取。
229
230当前只支持RSA算法和SM2算法,从API version 11开始,增加对SM2_USER_ID_UINT8ARR参数的支持,详细规格请参考[签名验签规格](../../security/CryptoArchitectureKit/crypto-sign-sig-verify-overview.md)。
231
232**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
233
234**系统能力:** SystemCapability.Security.CryptoFramework.Signature
235
236API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
237
238| 名称         | 值   | 说明             |
239| ------------ | ---- | ---------------- |
240| PSS_MD_NAME_STR | 100 | 表示RSA算法中,使用PSS模式时,消息摘要功能的算法名。 |
241| PSS_MGF_NAME_STR | 101 | 表示RSA算法中,使用PSS模式时,掩码生成算法(目前仅支持MGF1)。 |
242| PSS_MGF1_MD_STR | 102 | 表示RSA算法中,使用PSS模式时,MGF1掩码生成功能的消息摘要参数。 |
243| PSS_SALT_LEN_NUM | 103 | 表示RSA算法中,使用PSS模式时,盐值的长度,长度以字节为单位。 |
244| PSS_TRAILER_FIELD_NUM | 104 | 表示RSA算法中,使用PSS模式时,用于编码操作的整数。 |
245| SM2_USER_ID_UINT8ARR<sup>11+</sup> | 105 | 表示SM2算法中,用户身份标识字段。 |
246
247## AsyKeySpec<sup>10+</sup>
248
249指定非对称密钥参数的基本接口,用于创建密钥生成器。在指定非对称密钥参数时需要构造其子类对象,并将子类对象传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。构造子类对象时,除了RSA密钥采用小端写法外,其他bigint类型的密钥参数均采用大端写法,并使用正数。
250
251**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
252
253**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
254
255API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
256
257| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
258| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
259| algName | string | 是   | 是   | 指定非对称密钥的算法名称,比如"RSA"、"DSA"、"ECC"、"SM2"、"Ed25519"、"X25519"、"DH"。 |
260| specType | [AsyKeySpecType](#asykeyspectype10) | 是   | 是 | 指定密钥参数类型,用于区分公/私钥参数。 |
261
262## DSACommonParamsSpec<sup>10+</sup>
263
264密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定DSA算法中公私钥包含的公共参数,随机生成公/私钥。
265
266在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
267
268**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
269
270**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
271
272API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
273
274| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
275| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
276| p | bigint | 是   | 是   | 指定DSA算法的素模数p。 |
277| q | bigint | 是   | 是   | 指定DSA算法中密钥参数q(p-1的素因子)。 |
278| g | bigint | 是   | 是   | 指定DSA算法的参数g。 |
279
280## DSAPubKeySpec<sup>10+</sup>
281
282密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定DSA算法中公钥包含的参数。
283
284在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
285
286**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
287
288**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
289
290API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
291
292| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
293| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
294| params | [DSACommonParamsSpec](#dsacommonparamsspec10) | 是   | 是   | 指定DSA算法中公私钥都包含的公共参数。 |
295| pk | bigint | 是   | 是   | 指定DSA算法的公钥。 |
296
297## DSAKeyPairSpec<sup>10+</sup>
298
299密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定DSA算法中公私钥包含的全量参数。
300
301在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
302
303**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
304
305**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
306
307API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
308
309| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
310| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
311| params | [DSACommonParamsSpec](#dsacommonparamsspec10) | 是   | 是   | 指定DSA算法中公私钥都包含的公共参数。 |
312| sk | bigint | 是   | 是   | 指定DSA算法的私钥sk。 |
313| pk | bigint | 是   | 是   | 指定DSA算法的公钥pk。 |
314
315## ECField<sup>10+</sup>
316
317指定椭圆曲线的域。当前只支持Fp域。
318
319**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
320
321**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
322
323API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
324
325| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
326| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
327| fieldType | string | 是   | 是   | 指定椭圆曲线域的类型,当前只支持"Fp"。 |
328
329## ECFieldFp<sup>10+</sup>
330
331指定椭圆曲线素数域。是[ECField](#ecfield10)的子类。
332
333**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
334
335**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
336
337API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
338
339| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
340| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
341| p | bigint | 是   | 是   | 指定素数p。 |
342
343## Point<sup>10+</sup>
344
345指定椭圆曲线上的一个点。
346
347**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
348
349**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
350
351API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
352
353| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
354| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
355| x | bigint | 是   | 是   | 指定椭圆曲线上,点的x坐标。 |
356| y | bigint | 是   | 是   | 指定椭圆曲线上,点的y坐标。 |
357
358## ECCCommonParamsSpec<sup>10+</sup>
359
360密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定ECC算法中公私钥包含的公共参数,随机生成公/私钥。
361
362在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
363
364**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
365
366**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
367
368API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
369
370| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
371| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
372| field | [ECField](#ecfield10) | 是   | 是   | 指定椭圆曲线的域(当前只支持Fp域)。 |
373| a | bigint | 是   | 是   | 指定椭圆曲线的第一个系数a。 |
374| b | bigint | 是   | 是   | 指定椭圆曲线的第二个系数b。 |
375| g | [Point](#point10) | 是   | 是   | 指定基点g。 |
376| n | bigint | 是   | 是   | 指定基点g的阶数n。 |
377| h | number | 是   | 是   | 指定余因子h。 |
378
379## ECCPriKeySpec<sup>10+</sup>
380
381密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定ECC算法中私钥包含的参数。
382
383在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
384
385**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
386
387**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
388
389API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
390
391| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
392| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
393| params | [ECCCommonParamsSpec](#ecccommonparamsspec10) | 是   | 是   | 指定ECC算法中公私钥都包含的公共参数。 |
394| sk | bigint | 是   | 是   | 指定ECC算法的私钥sk。 |
395
396## ECCPubKeySpec<sup>10+</sup>
397
398密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定ECC算法中公钥包含的参数。
399
400在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
401
402**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
403
404**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
405
406API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
407
408| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
409| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
410| params | [ECCCommonParamsSpec](#ecccommonparamsspec10) | 是   | 是   | 指定ECC算法中公私钥都包含的公共参数。 |
411| pk | [Point](#point10) | 是   | 是   | 指定ECC算法的公钥pk。 |
412
413## ECCKeyPairSpec<sup>10+</sup>
414
415密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定ECC算法中公私钥包含的全量参数。
416
417在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
418
419**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
420
421**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
422
423API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
424
425| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
426| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
427| params | [ECCCommonParamsSpec](#ecccommonparamsspec10) | 是   | 是   | 指定ECC算法中公私钥都包含的公共参数。 |
428| sk | bigint | 是   | 是   | 指定ECC算法的私钥sk。 |
429| pk | [Point](#point10) | 是   | 是   | 指定ECC算法的公钥pk。 |
430
431## RSACommonParamsSpec<sup>10+</sup>
432
433密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定RSA算法中公私钥包含的公共参数,随机生成公/私钥。
434
435在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
436
437**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
438
439**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
440
441API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
442
443| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
444| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
445| n | bigint | 是   | 是   | 指定模数n。 |
446
447## RSAPubKeySpec<sup>10+</sup>
448
449密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定RSA算法中公钥包含的参数。
450
451在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
452
453**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
454
455**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
456
457API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
458
459| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
460| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
461| params | [RSACommonParamsSpec](#rsacommonparamsspec10) | 是   | 是   | 指定RSA算法中公私钥都包含的公共参数。 |
462| pk | bigint | 是   | 是   | 指定RSA算法的公钥pk。 |
463
464## RSAKeyPairSpec<sup>10+</sup>
465
466密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定RSA算法中公私钥包含的全量参数。
467
468在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
469
470**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
471
472**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
473
474API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
475
476| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
477| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
478| params | [RSACommonParamsSpec](#rsacommonparamsspec10) | 是   | 是   | 指定RSA算法中公私钥都包含的公共参数。 |
479| sk | bigint | 是   | 是   | 指定RSA算法的私钥sk。 |
480| pk | bigint | 是   | 是   | 指定RSA算法的公钥pk。 |
481
482## ED25519PriKeySpec<sup>11+</sup>
483
484密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定ED25519算法中私钥包含的参数。
485
486在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
487
488**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
489
490**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
491
492API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
493
494| 名称 | 类型   | 可读 | 可写 | 说明                      |
495| ---- | ------ | ---- | ---- | ------------------------- |
496| sk   | bigint | 是   | 是   | 指定ED25519算法的私钥sk。 |
497
498## ED25519PubKeySpec<sup>11+</sup>
499
500密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定ED25519算法中公钥包含的参数。
501
502在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
503
504**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
505
506**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
507
508API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
509
510| 名称 | 类型   | 可读 | 可写 | 说明                      |
511| ---- | ------ | ---- | ---- | ------------------------- |
512| pk   | bigint | 是   | 是   | 指定ED25519算法的公钥pk。 |
513
514## ED25519KeyPairSpec<sup>11+</sup>
515
516密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定ED25519算法中公私钥包含的全量参数。
517
518在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
519
520**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
521
522**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
523
524API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
525
526| 名称 | 类型   | 可读 | 可写 | 说明                      |
527| ---- | ------ | ---- | ---- | ------------------------- |
528| sk   | bigint | 是   | 是   | 指定ED25519算法的私钥sk。 |
529| pk   | bigint | 是   | 是   | 指定ED25519算法的公钥pk。 |
530
531## X25519PriKeySpec<sup>11+</sup>
532
533密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定X25519算法中私钥包含的参数。
534
535在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
536
537**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
538
539**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
540
541API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
542
543| 名称 | 类型   | 可读 | 可写 | 说明                     |
544| ---- | ------ | ---- | ---- | ------------------------ |
545| sk   | bigint | 是   | 是   | 指定X25519算法的私钥sk。 |
546
547## X25519PubKeySpec<sup>11+</sup>
548
549密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定X25519算法中公钥包含的参数。
550
551在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
552
553**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
554
555**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
556
557API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
558
559| 名称 | 类型   | 可读 | 可写 | 说明                     |
560| ---- | ------ | ---- | ---- | ------------------------ |
561| pk   | bigint | 是   | 是   | 指定X25519算法的公钥pk。 |
562
563## X25519KeyPairSpec<sup>11+</sup>
564
565密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定X25519算法中公私钥包含的全量参数。
566
567在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
568
569**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
570
571**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
572
573API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
574
575| 名称 | 类型   | 可读 | 可写 | 说明                     |
576| ---- | ------ | ---- | ---- | ------------------------ |
577| sk   | bigint | 是   | 是   | 指定X25519算法的私钥sk。 |
578| pk   | bigint | 是   | 是   | 指定X25519算法的公钥pk。 |
579
580## DHCommonParamsSpec<sup>11+</sup>
581
582密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定DH算法中公私钥包含的参数。
583
584在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
585
586**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
587
588**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
589
590API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
591
592| 名称 | 类型   | 可读 | 可写 | 说明                                |
593| ---- | ------ | ---- | ---- | ----------------------------------- |
594| p    | bigint | 是   | 是   | 指定DH算法中大素数p。               |
595| g    | bigint | 是   | 是   | 指定DH算法中参数g。                 |
596| l    | number | 是   | 是   | 指定DH算法中私钥的长度,单位为bit。 |
597
598## DHPriKeySpec<sup>11+</sup>
599
600密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定DH算法中私钥包含的参数。
601
602在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
603
604**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
605
606**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
607
608API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
609
610| 名称   | 类型               | 可读 | 可写 | 说明                                 |
611| ------ | ------------------ | ---- | ---- | ------------------------------------ |
612| params | [DHCommonParamsSpec](#dhcommonparamsspec11) | 是   | 是   | 指定DH算法中公私钥都包含的公共参数。 |
613| sk     | bigint             | 是   | 是   | 指定DH算法的私钥sk。                 |
614
615## DHPubKeySpec<sup>11+</sup>
616
617密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定DH算法中公钥包含的参数。
618
619在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
620
621**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
622
623**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
624
625API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
626
627| 名称   | 类型               | 可读 | 可写 | 说明                                 |
628| ------ | ------------------ | ---- | ---- | ------------------------------------ |
629| params | [DHCommonParamsSpec](#dhcommonparamsspec11) | 是   | 是   | 指定DH算法中公私钥都包含的公共参数。 |
630| pk     | bigint             | 是   | 是   | 指定DH算法的公钥pk。                 |
631
632## DHKeyPairSpec<sup>11+</sup>
633
634密钥参数[AsyKeySpec](#asykeyspec10)的子类,用于指定DH算法中公私钥包含的全量参数。
635
636在使用密钥参数生成密钥时,将其传入[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法创建密钥生成器。
637
638**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
639
640**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
641
642API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
643
644| 名称   | 类型               | 可读 | 可写 | 说明                                 |
645| ------ | ------------------ | ---- | ---- | ------------------------------------ |
646| params | [DHCommonParamsSpec](#dhcommonparamsspec11) | 是   | 是   | 指定DH算法中公私钥都包含的公共参数。 |
647| sk     | bigint             | 是   | 是   | 指定DH算法的私钥sk。                 |
648| pk     | bigint             | 是   | 是   | 指定DH算法的公钥pk。                 |
649
650## KdfSpec<sup>11+</sup>
651
652密钥派生函数参数,使用密钥派生函数进行密钥派生时,需要构建其子类对象并作为输入。
653
654**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
655
656**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
657
658API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Kdf
659
660| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
661| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
662| algName | string | 是   | 是   | 指明密钥派生函数的算法名,如"PBKDF2"。 |
663
664## PBKDF2Spec<sup>11+</sup>
665
666密钥派生函数参数[KdfSpec](#kdfspec11)的子类,作为PBKDF2密钥派生函数进行密钥派生时的输入。
667
668**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
669
670**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
671
672API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Kdf
673
674| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
675| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
676| password | string \| Uint8Array | 是   | 是   | 用户输入的原始密码。|
677| salt | Uint8Array | 是   | 是   | 盐值。 |
678| iterations | number | 是   | 是   | 迭代次数,需要为正整数。 |
679| keySize | number | 是   | 是   | 派生得到的密钥字节长度。 |
680
681> **说明:**
682>
683> password指的是原始密码,如果使用string类型,需要直接传入用于密钥派生的数据,而不是HexString、base64等字符串类型,同时需要确保该字符串为utf-8编码,否则派生结果会有差异。
684
685## HKDFSpec<sup>12+</sup>
686
687密钥派生函数参数[KdfSpec](#kdfspec11)的子类,作为HKDF密钥派生函数进行密钥派生时的输入。
688
689**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
690
691**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
692
693| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
694| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
695| key | string \| Uint8Array | 是   | 是   | 密钥材料。|
696| salt | Uint8Array | 是   | 是   | 盐值。 |
697| info | Uint8Array | 是   | 是   | 拓展信息。 |
698| keySize | number | 是   | 是   | 派生得到的密钥字节长度。 |
699
700> **说明:**
701>
702> key指的是用户输入的最初的密钥材料。info与salt是可选参数,根据模式的不同可以传空,但是不可不传。
703>
704> 例如:EXTRACT_AND_EXPAND模式需要输入全部的值,EXTRACT_ONLY模式info可以为空,在构建HKDFspec的时候,info传入null值。
705>
706> 默认的模式为EXTRACT_AND_EXPAND,"HKDF|SHA256|EXTRACT_AND_EXPAND"等价于"HKDF|SHA256"。
707
708## ScryptSpec<sup>18+</sup>
709
710密钥派生函数参数[KdfSpec](#kdfspec11)的子类,作为SCRYPT密钥派生函数进行密钥派生时的输入。
711
712**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
713
714**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
715
716| 名称    | 类型   | 只读 | 可选 | 说明                                                         |
717| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
718| passphrase | string \| Uint8Array | 是   | 否   | 用户输入的原始密码。|
719| salt | Uint8Array | 是   | 否   | 盐值。 |
720| n | number | 是   | 否   | 迭代次数,需要为正整数。 |
721| p | number | 是   | 否   | 并行化参数,需要为正整数。 |
722| r | number | 是   | 否   | 块大小参数,需要为正整数。 |
723| maxMemory | number | 是   | 否   | 最大内存限制参数,需要为正整数。 |
724| keySize | number | 是   | 否   | 派生得到的密钥字节长度,需要为正整数。 |
725
726> **说明:**
727>
728> passphrase指的是原始密码,如果使用string类型,需要直接传入用于密钥派生的数据,而不是HexString、base64等字符串类型,同时需要确保该字符串为utf-8编码,否则派生结果会有差异。
729
730## SM2CipherTextSpec<sup>12+</sup>
731
732SM2密文参数,使用SM2密文格式转换函数进行格式转换时,需要用到此对象。可以通过指定此参数,生成符合国密标准的ASN.1格式的SM2密文,反之,也可以从ASN.1格式的SM2密文中获取具体参数。
733
734**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
735
736**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
737
738| 名称    | 类型   | 可读 | 可写 | 说明                                                         |
739| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
740| xCoordinate | bigint | 是   | 是   | x分量。|
741| yCoordinate | bigint | 是   | 是   | y分量。 |
742| cipherTextData | Uint8Array | 是   | 是   | 密文。|
743| hashData | Uint8Array | 是   | 是   | 杂凑值。 |
744
745> **说明:**
746>
747> - hashData为使用SM3算法对明文数据运算得到的杂凑值,其长度固定为256位。
748>
749> - cipherTextData是与明文等长的密文。
750>
751> - 在拼接生成C1C3C2格式的密文时,如果x分量(C1_X)或y分量(C1_Y)的长度不足32字节,需要在高位补0,使得x分量和y分量的长度均为32字节。
752
753## KeyEncodingConfig<sup>18+</sup>
754RSA私钥编码参数,使用获取私钥字符串时,可以添加此参数,生成指定算法、密码的编码后的私钥字符串。
755
756**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
757
758**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
759
760| 名称    | 类型   | 只读 | 可选 | 说明                                                         |
761| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
762| password | string | 是   | 否   | 密码。|
763| cipherName | string | 是   | 否   | 算法名。 |
764
765> **说明:**
766>
767> - password是必选参数,表示编码用到的密码。
768>
769> - cipherName是必选参数,可以指定编码用到的算法。当前仅支持AES-128-CBC、AES-192-CBC、AES-256-CBC、DES-EDE3-CBC。
770
771## MacSpec<sup>18+</sup>
772消息认证码参数,计算HMAC、CMAC消息认证码时,需要构建其子类对象并作为输入。
773
774**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
775
776**系统能力:** SystemCapability.Security.CryptoFramework.Mac
777
778| 名称    | 类型   | 只读 | 可选 | 说明                                                         |
779| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
780| algName | string | 是   | 否   | 消息验证码算法名。|
781
782> **说明:**
783>
784> algName是必选参数,表示消息验证码使用的算法。
785
786## HmacSpec<sup>18+</sup>
787密钥派生函数参数[MacSpec](#macspec18)的子类,作为HMAC消息验证码计算的输入。
788
789**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
790
791**系统能力:** SystemCapability.Security.CryptoFramework.Mac
792
793| 名称    | 类型   | 只读 | 可选 | 说明                                                         |
794| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
795| mdName | string | 是   | 否   | 摘要算法名。|
796
797> **说明:**
798>
799> mdName是必选参数,表示HMAC消息验证码使用的摘要算法名。
800
801## CmacSpec<sup>18+</sup>
802密钥派生函数参数[MacSpec](#macspec18)的子类,作为CMAC消息验证码计算的输入。
803
804**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
805
806**系统能力:** SystemCapability.Security.CryptoFramework.Mac
807
808| 名称    | 类型   | 只读 | 可选 | 说明                                                         |
809| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
810| cipherName | string | 是   | 否   | 对称加密算法名。 |
811
812> **说明:**
813>
814> cipherName是必选参数,表示CMAC消息验证码使用的对称加密算法名。
815
816## Key
817
818密钥(父类),在运行密码算法(如加解密)时需要提前生成其子类对象,并传入[Cipher](#cipher)实例的[init()](#init-2)方法。
819
820密钥可以通过密钥生成器来生成。
821
822### 属性
823
824**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
825
826**系统能力:** SystemCapability.Security.CryptoFramework.Key
827
828API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key
829
830| 名称    | 类型   | 可读 | 可写 | 说明                         |
831| ------- | ------ | ---- | ---- | ---------------------------- |
832| format  | string | 是   | 否   | 密钥的格式。                 |
833| algName | string | 是   | 否   | 密钥对应的算法名(如果是对称密钥,则含密钥长度,否则不含密钥长度)。 |
834
835### getEncoded
836
837getEncoded(): DataBlob
838
839同步方法,获取密钥数据的字节流。密钥可以为对称密钥,公钥或者私钥。其中,公钥格式满足ASN.1语法、X.509规范、DER编码格式;私钥格式满足ASN.1语法,PKCS#8规范、DER编码方式。
840
841> **说明:**
842>
843> RSA算法使用密钥参数生成私钥时,私钥对象不支持getEncoded。
844
845**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
846
847**系统能力:** SystemCapability.Security.CryptoFramework.Key
848
849API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key
850
851**返回值:**
852
853| 类型                  | 说明                     |
854| --------------------- | ------------------------ |
855| [DataBlob](#datablob) | 用于查看密钥的具体内容。 |
856
857**错误码:**
858以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
859
860| 错误码ID | 错误信息               |
861| -------- | ---------------------- |
862| 801 | this operation is not supported. |
863| 17620001 | memory error. |
864| 17630001 | crypto operation error. |
865
866**示例:**
867
868```ts
869import { cryptoFramework } from '@kit.CryptoArchitectureKit';
870
871async function testGenerateAesKey() {
872  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
873  let symKey = await symKeyGenerator.generateSymKey();
874  let encodedKey = symKey.getEncoded();
875  console.info('key hex:' + encodedKey.data);
876}
877```
878
879## SymKey
880
881对称密钥,是[Key](#key)的子类,在对称加解密时需要将其对象传入[Cipher](#cipher)实例的[init()](#init-2)方法使用。
882
883对称密钥可以通过对称密钥生成器[SymKeyGenerator](#symkeygenerator)来生成。
884
885### clearMem
886
887clearMem(): void
888
889同步方法,将系统底层内存中的的密钥内容清零。建议在不再使用对称密钥实例时,调用本函数,避免内存中密钥数据存留过久。
890
891**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
892
893**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
894
895API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.SymKey
896
897**示例:**
898
899<!--code_no_check-->
900```ts
901let key: cryptoFramework.SymKey;    // The key is generated by a symKeyGenerator. The generation process is omitted here.
902let encodedKey = key.getEncoded();
903console.info('key blob: '+ encodedKey.data);    // Display key content.
904key.clearMem();
905encodedKey = key.getEncoded();
906console.info('key blob:' + encodedKey.data);    // Display all 0s.
907```
908
909## PubKey
910
911公钥,是[Key](#key)的子类,在非对称加解密、验签、密钥协商时需要将其对象作为输入使用。
912
913公钥可以通过非对称密钥生成器[AsyKeyGenerator](#asykeygenerator)、[AsyKeyGeneratorBySpec](#asykeygeneratorbyspec10)来生成。
914
915### getAsyKeySpec<sup>10+</sup>
916
917getAsyKeySpec(itemType: AsyKeySpecItem): bigint | string | number
918
919同步方法,获取密钥参数。
920
921**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
922
923**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
924
925API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
926
927**参数:**
928
929| 参数名 | 类型                  | 必填 | 说明                 |
930| ---- | --------------------- | ---- | -------------------- |
931| itemType  | [AsyKeySpecItem](#asykeyspecitem10) | 是   | 指定的密钥参数。 |
932
933**返回值:**
934
935| 类型                        | 说明                              |
936| --------------------------- | --------------------------------- |
937| bigint \| string \| number | 用于查看密钥参数的具体内容。 |
938
939**错误码:**
940以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
941
942| 错误码ID | 错误信息               |
943| -------- | ---------------------- |
944| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
945| 801 | this operation is not supported.          |
946| 17620001 | memory error. |
947| 17630001 | crypto operation error. |
948
949**示例:**
950
951<!--code_no_check-->
952```ts
953let key: cryptoFramework.PubKey; // key is a public key object. The generation process is omitted here.
954let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN);
955console.info('ecc item --- p: ' + p.toString(16));
956```
957
958### getEncodedDer<sup>12+</sup>
959
960getEncodedDer(format: string): DataBlob
961
962支持根据指定的密钥格式(如采用哪个规范、是否压缩等),获取满足ASN.1语法、DER编码的公钥数据。当前仅支持获取ECC压缩/非压缩格式的公钥数据。
963
964> **说明:**
965>
966> 本接口和[Key.getEncoded()](#getencoded)的区别是:<br/>
967> 1. 本接口可根据入参决定数据的输出格式。
968> 2. [Key.getEncoded()](#getencoded)接口,不支持指定密钥格式,生成的数据格式与原始数据格式保持一致。(原始数据格式,指通过[convertKey](#convertkey-3)接口生成密钥对象时的数据格式)。
969
970**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
971
972**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
973
974**参数:**
975
976| 参数名 | 类型                  | 必填 | 说明                 |
977| ---- | --------------------- | ---- | -------------------- |
978| format  | string | 是   | 用于指定当前密钥格式,取值仅支持"X509\|COMPRESSED"和"X509\|UNCOMPRESSED"。 |
979
980**返回值:**
981
982| 类型                        | 说明                              |
983| --------------------------- | --------------------------------- |
984| [DataBlob](#datablob) | 返回指定密钥格式的,满足ASN.1语法、DER编码的公钥数据。 |
985
986**错误码:**
987以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
988
989| 错误码ID | 错误信息               |
990| -------- | ---------------------- |
991| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
992| 17620001 | memory error. |
993| 17630001 | crypto operation error. |
994
995**示例:**
996
997<!--code_no_check-->
998```ts
999let key: cryptoFramework.PubKey; // Key is a public key object. The generation process is omitted here.
1000let returnBlob = key.getEncodedDer('X509|UNCOMPRESSED');
1001console.info('returnBlob data:' + returnBlob.data);
1002```
1003
1004### getEncodedPem<sup>12+</sup>
1005
1006getEncodedPem(format: string): string
1007
1008同步方法,获取密钥数据的字符串。密钥可以为RSA公钥或者私钥。其中,公钥格式满足X.509规范、PKCS#1规范和PEM编码格式。
1009
1010**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1011
1012**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1013
1014**参数:**
1015
1016| 参数名 | 类型                  | 必填 | 说明                 |
1017| ---- | --------------------- | ---- | -------------------- |
1018| format  | string | 是   | 指定的获取密钥字符串的编码格式。其中,公钥可为'PKCS1' 或'X509'格式。|
1019
1020**返回值:**
1021
1022| 类型                        | 说明                              |
1023| --------------------------- | --------------------------------- |
1024| string | 用于获取指定密钥格式的具体内容。 |
1025
1026**错误码:**
1027以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1028
1029| 错误码ID | 错误信息               |
1030| -------- | ---------------------- |
1031| 401 | invalid parameters.  Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1032| 17620001 | memory error. |
1033| 17630001 | crypto operation error. |
1034
1035**示例:**
1036
1037```ts
1038import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1039
1040let publicPkcs1Str1024: string  =
1041  "-----BEGIN RSA PUBLIC KEY-----\n"
1042  + "MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n"
1043  + "h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n"
1044  + "SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n"
1045  + "-----END RSA PUBLIC KEY-----\n";
1046
1047function TestPubKeyPkcs1ToX509BySync1024() {
1048  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
1049  let keyPair = rsaGenerator.convertPemKeySync(publicPkcs1Str1024, null);
1050  let pubPemKey = keyPair.pubKey;
1051  let pubString = pubPemKey.getEncodedPem('X509');
1052  console.info("[sync]TestPubKeyPkcs1ToX509BySync1024 pubString output is " + pubString);
1053}
1054```
1055
1056## PriKey
1057
1058私钥,是[Key](#key)的子类,在非对称加解密、签名、密钥协商时需要将其作为输入使用。
1059
1060私钥可以通过非对称密钥生成器[AsyKeyGenerator](#asykeygenerator)、[AsyKeyGeneratorBySpec](#asykeygeneratorbyspec10)来生成。
1061
1062### clearMem
1063
1064clearMem(): void
1065
1066同步方法,将系统底层内存中的的密钥内容清零。
1067
1068**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1069
1070**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1071
1072API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1073
1074**示例:**
1075
1076<!--code_no_check-->
1077```ts
1078let key: cryptoFramework.PriKey; // The key is a private key generated by the asymmetric key generator. The generation process is omitted here.
1079key.clearMem(); // For the asymmetric private key, clearMem() releases the internal key struct. After clearMem is executed, getEncoded() is not supported.
1080```
1081
1082### getAsyKeySpec<sup>10+</sup>
1083
1084getAsyKeySpec(itemType: AsyKeySpecItem): bigint | string | number
1085
1086同步方法,获取密钥参数。
1087
1088**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1089
1090**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1091
1092API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1093
1094**参数:**
1095
1096| 参数名 | 类型                  | 必填 | 说明                 |
1097| ---- | --------------------- | ---- | -------------------- |
1098| itemType  | [AsyKeySpecItem](#asykeyspecitem10) | 是   | 指定的密钥参数类型。 |
1099
1100**返回值:**
1101
1102| 类型                        | 说明                              |
1103| --------------------------- | --------------------------------- |
1104| bigint \| string \| number | 用于查看密钥参数的具体内容。 |
1105
1106**错误码:**
1107以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1108
1109| 错误码ID | 错误信息               |
1110| -------- | ---------------------- |
1111| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1112| 801 | this operation is not supported.          |
1113| 17620001 | memory error. |
1114| 17630001 | crypto operation error. |
1115
1116**示例:**
1117
1118<!--code_no_check-->
1119```ts
1120let key: cryptoFramework.PriKey; // key is a private key object. The generation process is omitted here.
1121let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN);
1122console.info('ecc item --- p: ' + p.toString(16));
1123```
1124### getEncodedDer<sup>12+</sup>
1125
1126getEncodedDer(format: string): DataBlob
1127
1128支持根据指定的密钥格式(如采用哪个规范),获取满足ASN.1语法、DER编码的私钥数据。当前仅支持获取PKCS8格式的ecc私钥数据。
1129
1130> **说明:**
1131>
1132> 本接口和[Key.getEncoded()](#getencoded)的区别是:<br/>
1133> 1. 本接口可根据入参决定数据的输出格式,当前支持获取PKCS8格式的ecc私钥数据。
1134> 2. [Key.getEncoded()](#getencoded)接口,不支持指定密钥格式。
1135
1136**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1137
1138**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1139
1140**参数:**
1141
1142| 参数名 | 类型                  | 必填 | 说明                 |
1143| ---- | --------------------- | ---- | -------------------- |
1144| format  | string | 是   | 用于指定当前密钥格式,取值当前仅支持"PKCS8"。 |
1145
1146**返回值:**
1147
1148| 类型                        | 说明                              |
1149| --------------------------- | --------------------------------- |
1150| [DataBlob](#datablob) | 返回指定密钥格式的,满足ASN.1语法、DER编码的ecc私钥数据。 |
1151
1152**错误码:**
1153以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1154
1155| 错误码ID | 错误信息               |
1156| -------- | ---------------------- |
1157| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1158| 17620001 | memory error. |
1159| 17630001 | crypto operation error. |
1160
1161**示例:**
1162
1163<!--code_no_check-->
1164```ts
1165let key: cryptoFramework.PriKey; // key is a private key object. The generation process is omitted here.
1166let returnBlob = key.getEncodedDer('PKCS8');
1167console.info('returnBlob data:' + returnBlob.data);
1168```
1169
1170### getEncodedPem<sup>12+</sup>
1171
1172getEncodedPem(format: string): string
1173
1174同步方法,获取密钥数据的字符串。密钥可以为RSA公钥或者私钥。其中,私钥格式满足PKCS#8规范、PKCS#1规范和PEM编码方式。
1175
1176**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1177
1178**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1179
1180**参数:**
1181
1182| 参数名 | 类型                  | 必填 | 说明                 |
1183| ---- | --------------------- | ---- | -------------------- |
1184| format  | string | 是   | 指定的获取密钥字符串的编码格式。其中,私钥可为'PKCS1' 或'PKCS8'格式。|
1185
1186**返回值:**
1187
1188| 类型                        | 说明                              |
1189| --------------------------- | --------------------------------- |
1190| string | 用于获取指定密钥格式的具体内容。 |
1191
1192**错误码:**
1193以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1194
1195| 错误码ID | 错误信息               |
1196| -------- | ---------------------- |
1197| 401 | invalid parameters.  Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1198| 17620001 | memory error. |
1199| 17630001 | crypto operation error. |
1200
1201**示例:**
1202
1203```ts
1204import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1205
1206let priKeyPkcs1Str1024: string  =
1207  "-----BEGIN RSA PRIVATE KEY-----\n"
1208  + "MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n"
1209  + "Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n"
1210  + "YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n"
1211  + "AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n"
1212  + "LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n"
1213  + "7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n"
1214  + "D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n"
1215  + "e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n"
1216  + "a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n"
1217  + "MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n"
1218  + "DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n"
1219  + "qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n"
1220  + "akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n"
1221  + "-----END RSA PRIVATE KEY-----\n";
1222
1223function TestPriKeyPkcs1ToPkcs8BySync1024() {
1224  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
1225  let keyPair = rsaGenerator.convertPemKeySync(null, priKeyPkcs1Str1024);
1226  let priPemKey = keyPair.priKey;
1227  let priString = priPemKey.getEncodedPem('PKCS8');
1228  console.info("[sync]TestPriKeyPkcs1ToPkcs8BySync1024 priString output is " + priString);
1229}
1230```
1231
1232### getEncodedPem<sup>18+</sup>
1233
1234getEncodedPem(format: string, config: KeyEncodingConfig): string
1235
1236同步方法,获取密钥数据的字符串。密钥可以为RSA公钥或者私钥。其中,私钥格式满足PKCS#8规范、PKCS#1规范和PEM编码方式。
1237
1238**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1239
1240**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1241
1242**参数:**
1243
1244| 参数名 | 类型                  | 必填 | 说明                 |
1245| ---- | --------------------- | ---- | -------------------- |
1246| format  | string | 是   | 指定的获取密钥字符串的编码格式。其中,私钥可为'PKCS1' 或'PKCS8'格式。|
1247| config | [KeyEncodingConfig](#keyencodingconfig18) | 是 | 指定编码的算法跟口令,对私钥进行编码操作。 |
1248
1249**返回值:**
1250
1251| 类型                        | 说明                              |
1252| --------------------------- | --------------------------------- |
1253| string | 用于获取指定密钥格式的具体内容。如果填了config参数,则获取编码后的内容。 |
1254
1255**错误码:**
1256以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1257
1258| 错误码ID | 错误信息               |
1259| -------- | ---------------------- |
1260| 401 | invalid parameters.  Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1261| 801 | this operation is not supported.          |
1262| 17620001 | memory error. |
1263| 17630001 | crypto operation error. |
1264
1265**示例:**
1266
1267```ts
1268import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1269
1270let priKeyPkcs1Str1024: string  =
1271  "-----BEGIN RSA PRIVATE KEY-----\n"
1272    + "MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n"
1273    + "Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n"
1274    + "YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n"
1275    + "AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n"
1276    + "LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n"
1277    + "7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n"
1278    + "D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n"
1279    + "e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n"
1280    + "a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n"
1281    + "MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n"
1282    + "DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n"
1283    + "qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n"
1284    + "akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n"
1285    + "-----END RSA PRIVATE KEY-----\n";
1286
1287function TestPriKeyPkcs1Encoded() {
1288  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
1289  let keyPair = rsaGenerator.convertPemKeySync(null, priKeyPkcs1Str1024);
1290  let options : cryptoFramework.KeyEncodingConfig = {
1291    password: "123456",
1292    cipherName: "AES-128-CBC"
1293  }
1294  let priPemKey = keyPair.priKey;
1295  let priString = priPemKey.getEncodedPem('PKCS1', options);
1296  console.info("[sync]TestPriKeyPkcs1Encoded priString output is " + priString);
1297}
1298```
1299
1300## KeyPair
1301
1302非对称密钥对,包含:公钥与私钥。
1303
1304可以通过非对称密钥生成器[AsyKeyGenerator](#asykeygenerator)、[AsyKeyGeneratorBySpec](#asykeygeneratorbyspec10)来生成。
1305
1306> **说明:**
1307>
1308> KeyPair对象中的pubKey对象和priKey对象,作为KeyPair对象中的一个参数存在,当离开KeyPair对象作用域时,其内部对象可能被析构。
1309>
1310> 业务方使用时应持有KeyPair对象的引用,而非内部pubKey或priKey对象的引用。
1311
1312### 属性
1313
1314**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1315
1316**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1317
1318API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1319
1320| 名称    | 类型   | 可读 | 可写 | 说明           |
1321| ------- | ------ | ---- | ---- | ------------ |
1322| priKey  | [PriKey](#prikey) | 是   | 否   | 私钥。      |
1323| pubKey | [PubKey](#pubkey) | 是   | 否   | 公钥。       |
1324
1325## cryptoFramework.createSymKeyGenerator
1326
1327createSymKeyGenerator(algName: string): SymKeyGenerator
1328
1329通过指定算法名称的字符串,获取相应的对称密钥生成器实例。
1330
1331支持的规格详见[对称密钥生成和转换规格](../../security/CryptoArchitectureKit/crypto-sym-key-generation-conversion-spec.md)。
1332
1333**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1334
1335**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
1336
1337API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.SymKey
1338
1339**参数:**
1340
1341| 参数名  | 类型   | 必填 | 说明                                                         |
1342| ------- | ------ | ---- | ------------------------------------------------------------ |
1343| algName | string | 是   | 待生成对称密钥生成器的算法名称。<br/>具体取值详见[对称密钥生成和转换规格](../../security/CryptoArchitectureKit/crypto-sym-key-generation-conversion-spec.md)一节中的“字符串参数”。 |
1344
1345**返回值:**
1346
1347| 类型                                | 说明                       |
1348| ----------------------------------- | -------------------------- |
1349| [SymKeyGenerator](#symkeygenerator) | 返回对称密钥生成器的对象。 |
1350
1351**错误码:**
1352以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1353
1354| 错误码ID | 错误信息               |
1355| -------- | ---------------------- |
1356| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1357| 801 | this operation is not supported. |
1358
1359**示例:**
1360
1361```ts
1362import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1363
1364let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
1365```
1366
1367## SymKeyGenerator
1368
1369对称密钥生成器。
1370
1371在使用该类的方法前,需要先使用[createSymKeyGenerator](#cryptoframeworkcreatesymkeygenerator)方法构建一个SymKeyGenerator实例。
1372
1373### 属性
1374
1375**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1376
1377**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
1378
1379API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.SymKey
1380
1381| 名称    | 类型   | 可读 | 可写 | 说明                           |
1382| ------- | ------ | ---- | ---- | ------------------------------ |
1383| algName | string | 是   | 否   | 对称密钥生成器指定的算法名称。 |
1384
1385### generateSymKey
1386
1387generateSymKey(callback: AsyncCallback\<SymKey>): void
1388
1389异步获取对称密钥生成器随机生成的密钥,通过注册回调函数获取结果。
1390
1391必须在使用[createSymKeyGenerator](#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后,才能使用本函数。
1392
1393目前支持使用OpenSSL的RAND_priv_bytes()作为底层能力生成随机密钥。
1394
1395> **说明:**
1396>
1397> 对于HMAC算法的对称密钥,如果已经在创建对称密钥生成器时指定了具体哈希算法(如指定“HMAC|SHA256”),则会随机生成与哈希长度一致的二进制密钥数据(如指定“HMAC|SHA256”会随机生成256位的密钥数据)。<br/>如果在创建对称密钥生成器时没有指定具体哈希算法,如仅指定“HMAC”,则不支持随机生成对称密钥数据,可通过[convertKey](#convertkey)方式生成对称密钥数据。
1398
1399**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1400
1401**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
1402
1403API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.SymKey
1404
1405**参数:**
1406
1407| 参数名     | 类型                              | 必填 | 说明                                                         |
1408| -------- | --------------------------------- | ---- | ------------------------------------------------------------ |
1409| callback | AsyncCallback\<[SymKey](#symkey)> | 是   | 回调函数。当生成对称密钥成功,err为undefined,data为获取到的SymKey;否则为错误对象。 |
1410
1411**错误码:**
1412以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1413
1414| 错误码ID | 错误信息      |
1415| -------- | ------------- |
1416| 17620001 | memory error. |
1417
1418**示例:**
1419
1420```ts
1421import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1422
1423let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
1424  symKeyGenerator.generateSymKey((err, symKey) => {
1425    console.info('Generate symKey success, algName:' + symKey.algName);
1426  });
1427```
1428
1429### generateSymKey
1430
1431generateSymKey(): Promise\<SymKey>
1432
1433异步获取该对称密钥生成器随机生成的密钥,通过Promise获取结果。
1434
1435必须在使用[createSymKeyGenerator](#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后,才能使用本函数。
1436
1437目前支持使用OpenSSL的RAND_priv_bytes()作为底层能力生成随机密钥。
1438
1439**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1440
1441**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
1442
1443API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.SymKey
1444
1445**返回值:**
1446
1447| 类型                        | 说明                              |
1448| --------------------------- | --------------------------------- |
1449| Promise\<[SymKey](#symkey)> | Promise对象,返回对称密钥SymKey。 |
1450
1451**错误码:**
1452以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1453
1454| 错误码ID | 错误信息      |
1455| -------- | ------------- |
1456| 17620001 | memory error. |
1457
1458**示例:**
1459
1460```ts
1461import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1462import { BusinessError } from '@kit.BasicServicesKit';
1463
1464let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
1465  symKeyGenerator.generateSymKey()
1466    .then(symKey => {
1467      console.info('Generate symKey success, algName: ' + symKey.algName);
1468    }).catch((error: BusinessError) => {
1469      console.error(`Generate symKey failed, ${error.code}, ${error.message}`);
1470    });
1471```
1472
1473### generateSymKeySync<sup>12+</sup>
1474
1475generateSymKeySync(): SymKey
1476
1477同步获取对称密钥生成器随机生成的密钥。
1478
1479必须在使用[createSymKeyGenerator](#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后,才能使用本函数。
1480
1481目前支持使用OpenSSL的RAND_priv_bytes()作为底层能力生成随机密钥。
1482
1483> **说明:**
1484>
1485> 对于HMAC算法的对称密钥,如果已经在创建对称密钥生成器时指定了具体哈希算法(如指定“HMAC|SHA256”),则会随机生成与哈希长度一致的二进制密钥数据(如指定“HMAC|SHA256”会随机生成256位的密钥数据)。<br/>如果在创建对称密钥生成器时没有指定具体哈希算法,如仅指定“HMAC”,则不支持随机生成对称密钥数据,可通过[convertKeySync](#convertkeysync12)方式生成对称密钥数据。
1486
1487**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1488
1489**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
1490
1491**错误码:**
1492以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1493
1494| 错误码ID | 错误信息      |
1495| -------- | ------------- |
1496| 17620001 | memory error. |
1497
1498**示例:**
1499
1500```ts
1501import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1502
1503function testGenerateSymKeySync() {
1504  // 创建SymKeyGenerator实例。
1505  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
1506  // 使用密钥生成器随机生成对称密钥。
1507  let key = symKeyGenerator.generateSymKeySync();
1508  let encodedKey = key.getEncoded();
1509  console.info('key hex:' + encodedKey.data);
1510}
1511```
1512
1513### convertKey
1514
1515convertKey(key: DataBlob, callback: AsyncCallback\<SymKey>): void
1516
1517异步根据指定数据生成对称密钥,通过注册回调函数获取结果。
1518
1519必须在使用[createSymKeyGenerator](#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后,才能使用本函数。
1520
1521> **说明:**
1522>
1523> 对于HMAC算法的对称密钥,如果已经在创建对称密钥生成器时指定了具体哈希算法(如指定“HMAC|SHA256”),则需要传入与哈希长度一致的二进制密钥数据(如传入SHA256对应256位的密钥数据)。<br/>如果在创建对称密钥生成器时没有指定具体哈希算法,如仅指定“HMAC”,则支持传入长度在[1,4096]范围内(单位为byte)的任意二进制密钥数据。
1524
1525**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1526
1527**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
1528
1529API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.SymKey
1530
1531**参数:**
1532
1533| 参数名     | 类型          | 必填 | 说明                       |
1534| -------- | ------------------- | ---- | ---------------------|
1535| key      | [DataBlob](#datablob)             | 是   | 指定的对称密钥材料。                                         |
1536| callback | AsyncCallback\<[SymKey](#symkey)> | 是   | 回调函数。当生成对称密钥成功,err为undefined,data为获取到的SymKey;否则为错误对象。 |
1537
1538**错误码:**
1539以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1540
1541| 错误码ID | 错误信息                                               |
1542| -------- | --------------------------------------------------- |
1543| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1544| 17620001 | memory error.                                       |
1545
1546**示例:**
1547
1548```ts
1549import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1550
1551function genKeyMaterialBlob(): cryptoFramework.DataBlob {
1552  let arr = [
1553    0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56,
1554    0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0x7c,
1555    0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72]; // keyLen = 192 (24 bytes)
1556  let keyMaterial = new Uint8Array(arr);
1557  return { data: keyMaterial };
1558}
1559
1560function testConvertKey() {
1561  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
1562  let keyMaterialBlob = genKeyMaterialBlob();
1563  symKeyGenerator.convertKey(keyMaterialBlob, (err, symKey) => {
1564    console.info('Convert symKey success, algName: ' + symKey.algName);
1565  });
1566}
1567```
1568
1569### convertKey
1570
1571convertKey(key: DataBlob): Promise\<SymKey>
1572
1573异步根据指定数据生成对称密钥,通过Promise获取结果。
1574
1575必须在使用[createSymKeyGenerator](#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后,才能使用本函数。
1576
1577**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1578
1579**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
1580
1581API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.SymKey
1582
1583**参数:**
1584
1585| 参数名 | 类型                  | 必填 | 说明                 |
1586| ---- | --------------------- | ---- | -------------------- |
1587| key  | [DataBlob](#datablob) | 是   | 指定的密钥材料数据。 |
1588
1589**返回值:**
1590
1591| 类型                        | 说明                              |
1592| --------------------------- | --------------------------------- |
1593| Promise\<[SymKey](#symkey)> | Promise对象,返回对称密钥SymKey。 |
1594
1595**错误码:**
1596以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1597
1598| 错误码ID | 错误信息                                          |
1599| -------- | --------------------------------------------- |
1600| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1601| 17620001 | memory error.                                |
1602
1603**示例:**
1604
1605```ts
1606import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1607import { BusinessError } from '@kit.BasicServicesKit';
1608
1609function genKeyMaterialBlob(): cryptoFramework.DataBlob {
1610  let arr = [
1611    0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56,
1612    0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0x7c,
1613    0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72]; // keyLen = 192 (24 bytes)
1614  let keyMaterial = new Uint8Array(arr);
1615  return { data: keyMaterial };
1616}
1617
1618function testConvertKey() {
1619  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
1620  let keyMaterialBlob = genKeyMaterialBlob();
1621  symKeyGenerator.convertKey(keyMaterialBlob)
1622    .then(symKey => {
1623      console.info('Convert symKey success, algName:' + symKey.algName);
1624    }).catch((error: BusinessError) => {
1625      console.error(`Convert symKey failed, ${error.code}, ${error.message}`);
1626    });
1627}
1628```
1629
1630### convertKeySync<sup>12+</sup>
1631
1632convertKeySync(key: DataBlob): SymKey
1633
1634同步根据指定数据生成对称密钥。
1635
1636必须在使用[createSymKeyGenerator](#cryptoframeworkcreatesymkeygenerator)创建对称密钥生成器后,才能使用本函数。
1637
1638> **说明:**
1639>
1640> 对于HMAC算法的对称密钥,如果已经在创建对称密钥生成器时指定了具体哈希算法(如指定“HMAC|SHA256”),则需要传入与哈希长度一致的二进制密钥数据(如传入SHA256对应256位的密钥数据)。<br/>如果在创建对称密钥生成器时没有指定具体哈希算法,如仅指定“HMAC”,则支持传入长度在[1,4096]范围内(单位为byte)的任意二进制密钥数据。
1641
1642**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1643
1644**系统能力:** SystemCapability.Security.CryptoFramework.Key.SymKey
1645
1646**参数:**
1647
1648| 参数名     | 类型          | 必填 | 说明                       |
1649| -------- | ------------------- | ---- | ---------------------|
1650| key      | [DataBlob](#datablob)             | 是   | 指定的对称密钥材料。                                         |
1651
1652**错误码:**
1653以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1654
1655| 错误码ID | 错误信息                                               |
1656| -------- | --------------------------------------------------- |
1657| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1658| 17620001 | memory error.                                       |
1659
1660**示例:**
1661
1662```ts
1663import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1664import { buffer } from '@kit.ArkTS';
1665
1666function testConvertKeySync() {
1667  // 对称密钥长度为64字节,512比特。
1668  let keyMessage = '87654321abcdefgh87654321abcdefgh87654321abcdefgh87654321abcdefgh';
1669  let keyBlob: cryptoFramework.DataBlob = {
1670    data : new Uint8Array(buffer.from(keyMessage, 'utf-8').buffer)
1671  }
1672  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('HMAC');
1673  let key = symKeyGenerator.convertKeySync(keyBlob);
1674  let encodedKey = key.getEncoded();
1675  console.info('key encoded data:' + encodedKey.data);
1676}
1677```
1678
1679## cryptoFramework.createAsyKeyGenerator
1680
1681createAsyKeyGenerator(algName: string): AsyKeyGenerator
1682
1683通过指定算法名称的字符串,获取相应的非对称密钥生成器实例。
1684
1685支持的规格详见[非对称密钥生成和转换规格](../../security/CryptoArchitectureKit/crypto-asym-key-generation-conversion-spec.md)。
1686
1687**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1688
1689**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1690
1691API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1692
1693**参数:**
1694
1695| 参数名  | 类型   | 必填 | 说明                             |
1696| ------- | ------ | ---- | -------------------------------- |
1697| algName | string | 是   | [非对称密钥生成支持的算法名](../../security/CryptoArchitectureKit/crypto-asym-key-generation-conversion-spec.md)。 |
1698
1699**返回值:**
1700
1701| 类型            | 说明                         |
1702| --------------- | ---------------------------- |
1703| [AsyKeyGenerator](#asykeygenerator) | 返回非对称密钥生成器的对象。 |
1704
1705**错误码:**
1706以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1707
1708| 错误码ID | 错误信息               |
1709| -------- | ---------------------- |
1710| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1711| 801 | this operation is not supported. |
1712| 17620001 | memory error. |
1713
1714**示例:**
1715
1716```ts
1717import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1718
1719let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
1720```
1721
1722## AsyKeyGenerator
1723
1724非对称密钥生成器。在使用该类的方法前,需要先使用createAsyKeyGenerator()方法构建一个AsyKeyGenerator实例。
1725
1726### 属性
1727
1728**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1729
1730**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1731
1732API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1733
1734| 名称    | 类型   | 可读 | 可写 | 说明                             |
1735| ------- | ------ | ---- | ---- | -------------------------------- |
1736| algName | string | 是   | 否   | 非对称密钥生成器指定的算法名称。 |
1737
1738### generateKeyPair
1739
1740generateKeyPair(callback: AsyncCallback\<KeyPair>): void
1741
1742异步获取非对称密钥生成器随机生成的密钥,通过注册回调函数获取结果。
1743
1744**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1745
1746**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1747
1748API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1749
1750**参数:**
1751
1752| 参数名     | 类型                    | 必填 | 说明                           |
1753| -------- | ----------------------- | ---- | ------------------------------ |
1754| callback | AsyncCallback\<[KeyPair](#keypair)> | 是   | 回调函数,用于获取非对称密钥。 |
1755
1756**错误码:**
1757以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1758
1759| 错误码ID | 错误信息               |
1760| -------- | ---------------------- |
1761| 401 | invalid parameters. Possible causes: <br>Incorrect parameter types;|
1762| 17620001 | memory error.          |
1763| 17630001 | crypto operation error.          |
1764
1765**示例:**
1766
1767```ts
1768import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1769
1770let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
1771asyKeyGenerator.generateKeyPair((err, keyPair) => {
1772  if (err) {
1773    console.error("generateKeyPair: error.");
1774    return;
1775  }
1776  console.info('generateKeyPair: success.');
1777})
1778```
1779
1780### generateKeyPair
1781
1782generateKeyPair(): Promise\<KeyPair>
1783
1784异步获取该非对称密钥生成器随机生成的密钥,通过Promise获取结果。
1785
1786**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1787
1788**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1789
1790API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1791
1792**返回值:**
1793
1794| 类型              | 说明                              |
1795| ----------------- | --------------------------------- |
1796| Promise\<[KeyPair](#keypair)> | 使用Promise的方式获取非对称密钥。 |
1797
1798**错误码:**
1799以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1800
1801| 错误码ID | 错误信息               |
1802| -------- | ---------------------- |
1803| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
1804| 17620001 | memory error.          |
1805| 17630001 | crypto operation error.          |
1806
1807**示例:**
1808
1809```ts
1810import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1811import { BusinessError } from '@kit.BasicServicesKit';
1812
1813let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
1814let keyGenPromise = asyKeyGenerator.generateKeyPair();
1815keyGenPromise.then(keyPair => {
1816  console.info('generateKeyPair success.');
1817}).catch((error: BusinessError) => {
1818  console.error("generateKeyPair error.");
1819});
1820```
1821
1822### generateKeyPairSync<sup>12+</sup>
1823
1824generateKeyPairSync(): KeyPair
1825
1826同步获取该非对称密钥生成器随机生成的密钥。
1827
1828**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1829
1830**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1831
1832**返回值:**
1833
1834| 类型              | 说明                              |
1835| ----------------- | --------------------------------- |
1836| [KeyPair](#keypair) | 非对称密钥。 |
1837
1838**错误码:**
1839以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1840
1841| 错误码ID | 错误信息               |
1842| -------- | ---------------------- |
1843| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.          |
1844| 17620001 | memory error.          |
1845| 17630001 | crypto operation error.          |
1846
1847**示例:**
1848
1849```ts
1850import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1851
1852let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
1853try {
1854  let keyPairData = asyKeyGenerator.generateKeyPairSync();
1855  if (keyPairData != null) {
1856    console.info('[Sync]: key pair success');
1857  } else {
1858    console.error("[Sync]: get key pair result fail!");
1859  }
1860} catch (e) {
1861  console.error(`sync error, ${e.code}, ${e.message}`);
1862}
1863```
1864
1865### convertKey
1866
1867convertKey(pubKey: DataBlob | null, priKey: DataBlob | null, callback: AsyncCallback\<KeyPair\>): void
1868
1869异步获取指定数据生成非对称密钥,通过注册回调函数获取结果。详情请看下方**密钥转换说明**。
1870
1871**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1872
1873**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1874
1875API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1876
1877**参数:**
1878
1879| 参数名     | 类型       | 必填 | 说明                           |
1880| -------- | ----------- | ---- | ------------------------------ |
1881| pubKey   | [DataBlob](#datablob) \| null<sup>10+</sup>    | 是   | 指定的公钥材料。如果公钥不需要转换,可直接传入null。API 10之前只支持DataBlob, API 10之后增加支持null。        |
1882| priKey   | [DataBlob](#datablob) \| null<sup>10+</sup>   | 是   | 指定的私钥材料。如果私钥不需要转换,可直接传入null。API 10之前只支持DataBlob, API 10之后增加支持null。        |
1883| callback | AsyncCallback\<[KeyPair](#keypair)> | 是   | 回调函数,用于获取非对称密钥。 |
1884
1885**错误码:**
1886以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1887
1888| 错误码ID | 错误信息               |
1889| -------- | ---------------------- |
1890| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1891| 17620001 | memory error.          |
1892| 17630001 | crypto operation error.          |
1893
1894**示例:**
1895
1896```ts
1897import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1898
1899let pubKeyArray = new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26, 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, 235, 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]);
1900let priKeyArray = new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, 57, 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]);
1901let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; // 公钥二进制数据。
1902let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; // 私钥二进制数据。
1903let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
1904asyKeyGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
1905  if (err) {
1906    console.error("convertKey: error.");
1907    return;
1908  }
1909  console.info('convertKey: success.');
1910});
1911```
1912
1913### convertKey
1914
1915convertKey(pubKey: DataBlob | null, priKey: DataBlob | null): Promise\<KeyPair>
1916
1917异步获取指定数据生成非对称密钥,通过Promise获取结果。详情请看下方**密钥转换说明**。
1918
1919**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1920
1921**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1922
1923API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
1924
1925**参数:**
1926
1927| 参数名   | 类型    | 必填 | 说明             |
1928| ------ | -------- | ---- | ---------------- |
1929| pubKey | [DataBlob](#datablob) \| null<sup>10+</sup> | 是   | 指定的公钥材料。如果公钥不需要转换,可直接传入null。API 10之前只支持DataBlob, API 10之后增加支持null。 |
1930| priKey | [DataBlob](#datablob) \| null<sup>10+</sup> | 是   | 指定的私钥材料。如果私钥不需要转换,可直接传入null。API 10之前只支持DataBlob, API 10之后增加支持null。 |
1931
1932**返回值:**
1933
1934| 类型              | 说明                              |
1935| ----------------- | --------------------------------- |
1936| Promise\<[KeyPair](#keypair)> | 使用Promise的方式获取非对称密钥。 |
1937
1938**错误码:**
1939以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1940
1941| 错误码ID | 错误信息               |
1942| -------- | ---------------------- |
1943| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1944| 17620001 | memory error.          |
1945| 17630001 | crypto operation error.          |
1946
1947**示例:**
1948
1949```ts
1950import { cryptoFramework } from '@kit.CryptoArchitectureKit';
1951import { BusinessError } from '@kit.BasicServicesKit';
1952
1953let pubKeyArray = new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26, 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, 235, 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]);
1954let priKeyArray = new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, 57, 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]);
1955let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; // 公钥二进制数据。
1956let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; // 私钥二进制数据。
1957let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
1958let keyGenPromise = asyKeyGenerator.convertKey(pubKeyBlob, priKeyBlob);
1959keyGenPromise.then(keyPair => {
1960  console.info('convertKey success.');
1961}).catch((error: BusinessError) => {
1962  console.error("convertKey error.");
1963});
1964```
1965
1966### convertKeySync<sup>12+</sup>
1967
1968convertKeySync(pubKey: DataBlob | null, priKey: DataBlob | null): KeyPair
1969
1970同步获取指定数据生成非对称密钥。详情请看下方**密钥转换说明**。
1971
1972**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1973
1974**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
1975
1976**参数:**
1977
1978| 参数名   | 类型    | 必填 | 说明             |
1979| ------ | -------- | ---- | ---------------- |
1980| pubKey | [DataBlob](#datablob) \| null<sup>10+</sup> | 是   | 指定的公钥材料。如果公钥不需要转换,可直接传入null。API 10之前只支持DataBlob, API 10之后增加支持null。 |
1981| priKey | [DataBlob](#datablob) \| null<sup>10+</sup> | 是   | 指定的私钥材料。如果私钥不需要转换,可直接传入null。API 10之前只支持DataBlob, API 10之后增加支持null。 |
1982
1983**返回值:**
1984
1985| 类型              | 说明                              |
1986| ----------------- | --------------------------------- |
1987| [KeyPair](#keypair) | 非对称密钥。 |
1988
1989**错误码:**
1990以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
1991
1992| 错误码ID | 错误信息               |
1993| -------- | ---------------------- |
1994| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
1995| 17620001 | memory error.          |
1996| 17630001 | crypto operation error.          |
1997
1998**示例:**
1999
2000```ts
2001import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2002
2003let pubKeyArray = new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26, 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, 235, 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]);
2004let priKeyArray = new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, 57, 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]);
2005let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; // 公钥二进制数据。
2006let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; // 私钥二进制数据。
2007let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('ECC256');
2008try {
2009  let keyPairData = asyKeyGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
2010  if (keyPairData != null) {
2011    console.info('[Sync]: key pair success');
2012  } else {
2013    console.error("[Sync]: convert key pair result fail!");
2014  }
2015} catch (e) {
2016  console.error(`sync error, ${e.code}, ${e.message}`);
2017}
2018```
2019
2020**密钥转换说明**
2021
20221. 非对称密钥(RSA、ECC、DSA)的公钥和私钥调用getEncoded()方法后,分别返回X.509格式和PKCS#8格式的二进制数据,其中对于ecc私钥,返回的是RFC5915定义格式。上述数据可用于跨应用传输或持久化存储。
20232. 当调用convertKey方法将外来二进制数据转换为算法库非对称密钥对象时,公钥应满足ASN.1语法、X.509规范、DER编码格式,私钥应满足ASN.1语法、PKCS#8规范、DER编码格式。
20243. convertKey方法中,公钥和私钥二进制数据非必选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。
20254. convertKey或convertKeySync方法将外来二进制数据转换为算法库非对称密钥对象时,不会校验生成的密钥对象的规格与创建非对称密钥生成器时指定的密钥规格是否一致。
2026
2027### convertPemKey<sup>12+</sup>
2028
2029convertPemKey(pubKey: string | null, priKey: string | null): Promise\<KeyPair>
2030
2031异步获取指定数据生成非对称密钥,通过Promise获取结果。
2032
2033> **说明:**
2034> 1. 当调用convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,公钥应满足ASN.1语法、X.509规范、PEM编码格式,私钥应满足ASN.1语法、PKCS#8规范、PEM编码格式。
2035> 2. convertPemKey方法中,公钥和私钥字符串数据为非必选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。
2036> 3. convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,不会校验生成的密钥对象的规格与创建非对称密钥生成器时指定的密钥规格是否一致。
2037
2038**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2039
2040**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2041
2042**参数:**
2043
2044| 参数名   | 类型    | 必填 | 说明             |
2045| ------ | -------- | ---- | ---------------- |
2046| pubKey | string \| null | 是  | 指定的公钥材料。如果公钥不需要转换,可直接传入null。|
2047| priKey | string \| null | 是  | 指定的私钥材料。如果私钥不需要转换,可直接传入null。注:公钥和私钥材料不能同时为null。|
2048
2049**返回值:**
2050
2051| 类型              | 说明                              |
2052| ----------------- | --------------------------------- |
2053| Promise\<[KeyPair](#keypair)> | 使用Promise的方式获取非对称密钥。 |
2054
2055**错误码:**
2056以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2057
2058| 错误码ID | 错误信息               |
2059| -------- | ---------------------- |
2060| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
2061| 17620001 | memory error.          |
2062| 17630001 | crypto operation error.          |
2063
2064**示例:**
2065
2066```ts
2067import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2068import { BusinessError } from '@kit.BasicServicesKit';
2069
2070let priKeyPkcs1Str1024: string  =
2071  "-----BEGIN RSA PRIVATE KEY-----\n"
2072    + "MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n"
2073    + "Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n"
2074    + "YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n"
2075    + "AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n"
2076    + "LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n"
2077    + "7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n"
2078    + "D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n"
2079    + "e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n"
2080    + "a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n"
2081    + "MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n"
2082    + "DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n"
2083    + "qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n"
2084    + "akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n"
2085    + "-----END RSA PRIVATE KEY-----\n";
2086let publicPkcs1Str1024: string  =
2087  "-----BEGIN RSA PUBLIC KEY-----\n"
2088    + "MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n"
2089    + "h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n"
2090    + "SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n"
2091    + "-----END RSA PUBLIC KEY-----\n";
2092async function TestConvertPemKeyByPromise() {
2093  let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
2094  asyKeyGenerator.convertPemKey(publicPkcs1Str1024, priKeyPkcs1Str1024)
2095    .then(keyPair => {
2096    console.info('convertPemKey success.');
2097  }).catch((error: BusinessError) => {
2098    console.error("convertPemKey error.");
2099  });
2100}
2101```
2102
2103### convertPemKey<sup>18+</sup>
2104
2105convertPemKey(pubKey: string | null, priKey: string | null, password: string): Promise\<KeyPair>
2106
2107异步获取指定数据生成非对称密钥,通过Promise获取结果。
2108
2109> **说明:**
2110> 1. 当调用convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,公钥应满足ASN.1语法、X.509规范、PEM编码格式,私钥应满足ASN.1语法、PKCS#8规范、PEM编码格式。
2111> 2. convertPemKey方法中,公钥和私钥字符串数据为非必选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。
2112> 3. convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,不会校验生成的密钥对象的规格与创建非对称密钥生成器时指定的密钥规格是否一致。
2113> 4. password为口令,传入后可以解密加密后的私钥。
2114
2115**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
2116
2117**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2118
2119**参数:**
2120
2121| 参数名   | 类型    | 必填 | 说明             |
2122| ------ | -------- | ---- | ---------------- |
2123| pubKey | string \| null | 是  | 指定的公钥材料。如果公钥不需要转换,可直接传入null。|
2124| priKey | string \| null | 是  | 指定的私钥材料。如果私钥不需要转换,可直接传入null。注:公钥和私钥材料不能同时为null。|
2125| password | string | 是 | 指定口令,用于解密私钥可以传入。|
2126
2127**返回值:**
2128
2129| 类型              | 说明                              |
2130| ----------------- | --------------------------------- |
2131| Promise\<[KeyPair](#keypair)> | 使用Promise的方式获取非对称密钥。 |
2132
2133**错误码:**
2134以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2135
2136| 错误码ID | 错误信息               |
2137| -------- | ---------------------- |
2138| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
2139| 17620001 | memory error.          |
2140| 17630001 | crypto operation error.          |
2141
2142**示例:**
2143
2144```ts
2145import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2146import { BusinessError } from '@kit.BasicServicesKit';
2147
2148let priKeyPkcs1EncodingStr : string =
2149  "-----BEGIN RSA PRIVATE KEY-----\n"
2150    +"Proc-Type: 4,ENCRYPTED\n"
2151    +"DEK-Info: AES-128-CBC,815A066131BF05CF87CE610A59CC69AE\n\n"
2152    +"7Jd0vmOmYGFZ2yRY8fqRl3+6rQlFtNcMILvcb5KWHDSrxA0ULmJE7CW0DSRikHoA\n"
2153    +"t0KgafhYXeQXh0dRy9lvVRAFSLHCLJVjchx90V7ZSivBFEq7+iTozVp4AlbgYsJP\n"
2154    +"vx/1sfZD2WAcyMJ7IDmJyft7xnpVSXsyWGTT4f3eaHJIh1dqjwrso7ucAW0FK6rp\n"
2155    +"/TONyOoXNfXtRbVtxNyCWBxt4HCSclDZFvS9y8fz9ZwmCUV7jei/YdzyQI2wnE13\n"
2156    +"W8cKlpzRFL6BWi8XPrUtAw5MWeHBAPUgPWMfcmiaeyi5BJFhQCrHLi+Gj4EEJvp7\n"
2157    +"mP5cbnQAx6+paV5z9m71SKrI/WSc4ixsYYdVmlL/qwAK9YliFfoPl030YJWW6rFf\n"
2158    +"T7J9BUlHGUJ0RB2lURNNLakM+UZRkeE9TByzCzgTxuQtyv5Lwsh2mAk3ia5x0kUO\n"
2159    +"LHg3Eoabhdh+YZA5hHaxnpF7VjspB78E0F9Btq+A41rSJ6zDOdToHey4MJ2nxdey\n"
2160    +"Z3bi81TZ6Fp4IuROrvZ2B/Xl3uNKR7n+AHRKnaAO87ywzyltvjwSh2y3xhJueiRs\n"
2161    +"BiYkyL3/fnocD3pexTdN6h3JgQGgO5GV8zw/NrxA85mw8o9im0HreuFObmNj36T9\n"
2162    +"k5N+R/QIXW83cIQOLaWK1ThYcluytf0tDRiMoKqULiaA6HvDMigExLxuhCtnoF8I\n"
2163    +"iOLN1cPdEVQjzwDHLqXP2DbWW1z9iRepLZlEm1hLRLEmOrTGKezYupVv306SSa6J\n"
2164    +"OA55lAeXMbyjFaYCr54HWrpt4NwNBX1efMUURc+1LcHpzFrBTTLbfjIyq6as49pH\n"
2165    +"-----END RSA PRIVATE KEY-----\n"
2166
2167async function TestConvertPemKeyByPromise() {
2168  let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
2169  asyKeyGenerator.convertPemKey(null, priKeyPkcs1EncodingStr, "123456")
2170    .then(keyPair => {
2171    console.info('convertPemKey success.');
2172  }).catch((error: BusinessError) => {
2173    console.error("convertPemKey error.");
2174  });
2175}
2176```
2177
2178### convertPemKey<sup>18+</sup>
2179
2180convertPemKey(pubKey: string | null, priKey: string | null, password: string): Promise\<KeyPair>
2181
2182异步获取指定数据生成非对称密钥,通过Promise获取结果。
2183
2184> **说明:**
2185> 1. 当调用convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,公钥应满足ASN.1语法、X.509规范、PEM编码格式,私钥应满足ASN.1语法、PKCS#8规范、PEM编码格式。
2186> 2. convertPemKey方法中,公钥和私钥字符串数据为非必选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。
2187> 3. convertPemKey方法将外来字符串数据转换为算法库非对称密钥对象时,不会校验生成的密钥对象的规格与创建非对称密钥生成器时指定的密钥规格是否一致。
2188> 4. password为口令,传入后可以解密加密后的私钥。
2189
2190**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
2191
2192**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2193
2194**参数:**
2195
2196| 参数名   | 类型    | 必填 | 说明             |
2197| ------ | -------- | ---- | ---------------- |
2198| pubKey | string \| null | 是  | 指定的公钥材料。如果公钥不需要转换,可直接传入null。|
2199| priKey | string \| null | 是  | 指定的私钥材料。如果私钥不需要转换,可直接传入null。注:公钥和私钥材料不能同时为null。|
2200| password | string | 是 | 指定口令,用于解密私钥可以传入。|
2201
2202**返回值:**
2203
2204| 类型              | 说明                              |
2205| ----------------- | --------------------------------- |
2206| Promise\<[KeyPair](#keypair)> | 使用Promise的方式获取非对称密钥。 |
2207
2208**错误码:**
2209以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2210
2211| 错误码ID | 错误信息               |
2212| -------- | ---------------------- |
2213| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
2214| 17620001 | memory error.          |
2215| 17630001 | crypto operation error.          |
2216
2217**示例:**
2218
2219```ts
2220import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2221import { BusinessError } from '@kit.BasicServicesKit';
2222
2223let priKeyPkcs1EncodingStr : string =
2224  "-----BEGIN RSA PRIVATE KEY-----\n"
2225    +"Proc-Type: 4,ENCRYPTED\n"
2226    +"DEK-Info: AES-128-CBC,815A066131BF05CF87CE610A59CC69AE\n\n"
2227    +"7Jd0vmOmYGFZ2yRY8fqRl3+6rQlFtNcMILvcb5KWHDSrxA0ULmJE7CW0DSRikHoA\n"
2228    +"t0KgafhYXeQXh0dRy9lvVRAFSLHCLJVjchx90V7ZSivBFEq7+iTozVp4AlbgYsJP\n"
2229    +"vx/1sfZD2WAcyMJ7IDmJyft7xnpVSXsyWGTT4f3eaHJIh1dqjwrso7ucAW0FK6rp\n"
2230    +"/TONyOoXNfXtRbVtxNyCWBxt4HCSclDZFvS9y8fz9ZwmCUV7jei/YdzyQI2wnE13\n"
2231    +"W8cKlpzRFL6BWi8XPrUtAw5MWeHBAPUgPWMfcmiaeyi5BJFhQCrHLi+Gj4EEJvp7\n"
2232    +"mP5cbnQAx6+paV5z9m71SKrI/WSc4ixsYYdVmlL/qwAK9YliFfoPl030YJWW6rFf\n"
2233    +"T7J9BUlHGUJ0RB2lURNNLakM+UZRkeE9TByzCzgTxuQtyv5Lwsh2mAk3ia5x0kUO\n"
2234    +"LHg3Eoabhdh+YZA5hHaxnpF7VjspB78E0F9Btq+A41rSJ6zDOdToHey4MJ2nxdey\n"
2235    +"Z3bi81TZ6Fp4IuROrvZ2B/Xl3uNKR7n+AHRKnaAO87ywzyltvjwSh2y3xhJueiRs\n"
2236    +"BiYkyL3/fnocD3pexTdN6h3JgQGgO5GV8zw/NrxA85mw8o9im0HreuFObmNj36T9\n"
2237    +"k5N+R/QIXW83cIQOLaWK1ThYcluytf0tDRiMoKqULiaA6HvDMigExLxuhCtnoF8I\n"
2238    +"iOLN1cPdEVQjzwDHLqXP2DbWW1z9iRepLZlEm1hLRLEmOrTGKezYupVv306SSa6J\n"
2239    +"OA55lAeXMbyjFaYCr54HWrpt4NwNBX1efMUURc+1LcHpzFrBTTLbfjIyq6as49pH\n"
2240    +"-----END RSA PRIVATE KEY-----\n"
2241
2242async function TestConvertPemKeyByPromise() {
2243  let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
2244  let keyGenPromise = asyKeyGenerator.convertPemKey(null, priKeyPkcs1EncodingStr, "123456");
2245  keyGenPromise.then(keyPair => {
2246    console.info('convertPemKey success.');
2247  }).catch((error: BusinessError) => {
2248    console.error("convertPemKey error.");
2249  });
2250}
2251```
2252
2253### convertPemKeySync<sup>12+</sup>
2254
2255convertPemKeySync(pubKey: string | null, priKey: string | null): KeyPair
2256
2257同步获取指定数据生成非对称密钥。
2258
2259> **说明:**
2260> convertPemKeySync接口与convertPemKey接口注意事项相同,见[convertPemKey](#convertpemkey12)接口说明。
2261
2262**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2263
2264**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2265
2266**参数:**
2267
2268| 参数名   | 类型    | 必填 | 说明             |
2269| ------ | -------- | ---- | ---------------- |
2270| pubKey | string \| null| 是   | 指定的公钥材料。如果公钥不需要转换,可直接传入null。|
2271| priKey | string \| null| 是   | 指定的私钥材料。如果私钥不需要转换,可直接传入null。注:公钥和私钥材料不能同时为null。|
2272
2273**返回值:**
2274
2275| 类型              | 说明                              |
2276| ----------------- | --------------------------------- |
2277| [KeyPair](#keypair) | 非对称密钥。 |
2278
2279**错误码:**
2280以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2281
2282| 错误码ID | 错误信息               |
2283| -------- | ---------------------- |
2284| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
2285| 17620001 | memory error.          |
2286| 17630001 | crypto operation error.          |
2287
2288**示例:**
2289
2290```ts
2291import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2292import { BusinessError } from '@kit.BasicServicesKit';
2293
2294let priKeyPkcs1Str1024: string  =
2295  "-----BEGIN RSA PRIVATE KEY-----\n"
2296  + "MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n"
2297  + "Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n"
2298  + "YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n"
2299  + "AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n"
2300  + "LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n"
2301  + "7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n"
2302  + "D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n"
2303  + "e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n"
2304  + "a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n"
2305  + "MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n"
2306  + "DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n"
2307  + "qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n"
2308  + "akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n"
2309  + "-----END RSA PRIVATE KEY-----\n";
2310  let publicPkcs1Str1024: string  =
2311  "-----BEGIN RSA PUBLIC KEY-----\n"
2312  + "MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n"
2313  + "h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n"
2314  + "SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n"
2315  + "-----END RSA PUBLIC KEY-----\n";
2316function TestConvertPemKeyBySync() {
2317  let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
2318  try {
2319    let keyPairData = asyKeyGenerator.convertPemKeySync(publicPkcs1Str1024, priKeyPkcs1Str1024);
2320    if (keyPairData != null) {
2321      console.info('[Sync]: convert pem key pair success');
2322    } else {
2323      console.error("[Sync]: convert pem key pair result fail!");
2324    }
2325  } catch (e) {
2326    console.error(`Sync error, ${e.code}, ${e.message}`);
2327  }
2328}
2329```
2330
2331### convertPemKeySync<sup>18+</sup>
2332
2333convertPemKeySync(pubKey: string | null, priKey: string | null, password: string): KeyPair
2334
2335同步获取指定数据生成非对称密钥。
2336
2337> **说明:**
2338> convertPemKeySync接口与convertPemKey接口注意事项相同,见[convertPemKey](#convertpemkey18)接口说明。
2339
2340**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
2341
2342**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2343
2344**参数:**
2345
2346| 参数名   | 类型    | 必填 | 说明             |
2347| ------ | -------- | ---- | ---------------- |
2348| pubKey | string \| null| 是   | 指定的公钥材料。如果公钥不需要转换,可直接传入null。|
2349| priKey | string \| null| 是   | 指定的私钥材料。如果私钥不需要转换,可直接传入null。注:公钥和私钥材料不能同时为null。|
2350| password | string | 是 | 指定口令,用于解密私钥。|
2351
2352**返回值:**
2353
2354| 类型              | 说明                              |
2355| ----------------- | --------------------------------- |
2356| [KeyPair](#keypair) | 非对称密钥。 |
2357
2358**错误码:**
2359以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2360
2361| 错误码ID | 错误信息               |
2362| -------- | ---------------------- |
2363| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
2364| 17620001 | memory error.          |
2365| 17630001 | crypto operation error.          |
2366
2367**示例:**
2368
2369```ts
2370import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2371import { BusinessError } from '@kit.BasicServicesKit';
2372
2373let priKeyPkcs1EncodingStr : string =
2374  "-----BEGIN RSA PRIVATE KEY-----\n"
2375    +"Proc-Type: 4,ENCRYPTED\n"
2376    +"DEK-Info: AES-128-CBC,815A066131BF05CF87CE610A59CC69AE\n\n"
2377    +"7Jd0vmOmYGFZ2yRY8fqRl3+6rQlFtNcMILvcb5KWHDSrxA0ULmJE7CW0DSRikHoA\n"
2378    +"t0KgafhYXeQXh0dRy9lvVRAFSLHCLJVjchx90V7ZSivBFEq7+iTozVp4AlbgYsJP\n"
2379    +"vx/1sfZD2WAcyMJ7IDmJyft7xnpVSXsyWGTT4f3eaHJIh1dqjwrso7ucAW0FK6rp\n"
2380    +"/TONyOoXNfXtRbVtxNyCWBxt4HCSclDZFvS9y8fz9ZwmCUV7jei/YdzyQI2wnE13\n"
2381    +"W8cKlpzRFL6BWi8XPrUtAw5MWeHBAPUgPWMfcmiaeyi5BJFhQCrHLi+Gj4EEJvp7\n"
2382    +"mP5cbnQAx6+paV5z9m71SKrI/WSc4ixsYYdVmlL/qwAK9YliFfoPl030YJWW6rFf\n"
2383    +"T7J9BUlHGUJ0RB2lURNNLakM+UZRkeE9TByzCzgTxuQtyv5Lwsh2mAk3ia5x0kUO\n"
2384    +"LHg3Eoabhdh+YZA5hHaxnpF7VjspB78E0F9Btq+A41rSJ6zDOdToHey4MJ2nxdey\n"
2385    +"Z3bi81TZ6Fp4IuROrvZ2B/Xl3uNKR7n+AHRKnaAO87ywzyltvjwSh2y3xhJueiRs\n"
2386    +"BiYkyL3/fnocD3pexTdN6h3JgQGgO5GV8zw/NrxA85mw8o9im0HreuFObmNj36T9\n"
2387    +"k5N+R/QIXW83cIQOLaWK1ThYcluytf0tDRiMoKqULiaA6HvDMigExLxuhCtnoF8I\n"
2388    +"iOLN1cPdEVQjzwDHLqXP2DbWW1z9iRepLZlEm1hLRLEmOrTGKezYupVv306SSa6J\n"
2389    +"OA55lAeXMbyjFaYCr54HWrpt4NwNBX1efMUURc+1LcHpzFrBTTLbfjIyq6as49pH\n"
2390    +"-----END RSA PRIVATE KEY-----\n"
2391function TestConvertPemKeyBySync() {
2392  let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
2393  try {
2394    let keyPairData = asyKeyGenerator.convertPemKeySync(null, priKeyPkcs1EncodingStr, "123456");
2395    if (keyPairData != null) {
2396      console.info('[Sync]: convert pem key pair success');
2397    } else {
2398      console.error("[Sync]: convert pem key pair result fail!");
2399    }
2400  } catch (e) {
2401    console.error(`Sync error, ${e.code}, ${e.message}`);
2402  }
2403}
2404```
2405
2406## cryptoFramework.createAsyKeyGeneratorBySpec<sup>10+</sup>
2407
2408createAsyKeyGeneratorBySpec(asyKeySpec: AsyKeySpec): AsyKeyGeneratorBySpec
2409
2410通过指定密钥参数,获取相应的非对称密钥生成器实例。
2411
2412支持的规格详见[非对称密钥生成和转换规格](../../security/CryptoArchitectureKit/crypto-asym-key-generation-conversion-spec.md)。
2413
2414**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2415
2416**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2417
2418API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2419
2420**参数:**
2421
2422| 参数名  | 类型   | 必填 | 说明                             |
2423| ------- | ------ | ---- | -------------------------------- |
2424| asyKeySpec | [AsyKeySpec](#asykeyspec10) | 是   | 密钥参数。非对称密钥生成器根据指定的这些参数生成公/私钥。 |
2425
2426**返回值:**
2427
2428| 类型                                            | 说明                       |
2429| ----------------------------------------------- | -------------------------- |
2430| [AsyKeyGeneratorBySpec](#asykeygeneratorbyspec10) | 返回非对称密钥生成器实例。 |
2431
2432**错误码:**
2433以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2434
2435| 错误码ID | 错误信息               |
2436| -------- | ---------------------- |
2437| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
2438| 801 | this operation is not supported. |
2439| 17620001 | memory error. |
2440
2441**示例:**
2442
2443```ts
2444import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2445
2446// 配置DSA1024公钥和私钥中包含的公共参数。
2447function genDsa1024CommonSpecBigE() {
2448  let dsaCommonSpec: cryptoFramework.DSACommonParamsSpec = {
2449    algName: "DSA",
2450    specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
2451    p: BigInt("0xed1501551b8ab3547f6355ffdc2913856ddeca198833dbd04f020e5f25e47c50e0b3894f7690a0d2ea5ed3a7be25c54292a698e1f086eb3a97deb4dbf04fcad2dafd94a9f35c3ae338ab35477e16981ded6a5b13d5ff20bf55f1b262303ad3a80af71aa6aa2354d20e9c82647664bdb6b333b7bea0a5f49d55ca40bc312a1729"),
2452    q: BigInt("0xd23304044019d5d382cfeabf351636c7ab219694ac845051f60b047b"),
2453    g: BigInt("0x2cc266d8bd33c3009bd67f285a257ba74f0c3a7e12b722864632a0ac3f2c17c91c2f3f67eb2d57071ef47aaa8f8e17a21ad2c1072ee1ce281362aad01dcbcd3876455cd17e1dd55d4ed36fa011db40f0bbb8cba01d066f392b5eaa9404bfcb775f2196a6bc20eeec3db32d54e94d87ecdb7a0310a5a017c5cdb8ac78597778bd"),
2454  }
2455  return dsaCommonSpec;
2456}
2457
2458// 设置DSA1024密钥对中包含的全参数。
2459function genDsa1024KeyPairSpecBigE() {
2460  let dsaCommonSpec = genDsa1024CommonSpecBigE();
2461  let dsaKeyPairSpec: cryptoFramework.DSAKeyPairSpec = {
2462    algName: "DSA",
2463    specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC,
2464    params: dsaCommonSpec,
2465    sk: BigInt("0xa2dd2adb2d11392c2541930f61f1165c370aabd2d78d00342e0a2fd9"),
2466    pk: BigInt("0xae6b5d5042e758f3fc9a02d009d896df115811a75b5f7b382d8526270dbb3c029403fafb8573ba4ef0314ea86f09d01e82a14d1ebb67b0c331f41049bd6b1842658b0592e706a5e4d20c14b67977e17df7bdd464cce14b5f13bae6607760fcdf394e0b73ac70aaf141fa4dafd736bd0364b1d6e6c0d7683a5de6b9221e7f2d6b"),
2467  }
2468  return dsaKeyPairSpec;
2469}
2470
2471let asyKeyPairSpec = genDsa1024KeyPairSpecBigE(); // The JS input must be a positive number in big-endian format.
2472let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2473```
2474
2475## AsyKeyGeneratorBySpec<sup>10+</sup>
2476
2477非对称密钥生成器。在使用该类的方法前,需要先使用[createAsyKeyGeneratorBySpec()](#cryptoframeworkcreateasykeygeneratorbyspec10)方法构建一个AsyKeyGeneratorBySpec实例。
2478
2479### 属性
2480
2481**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2482
2483**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2484
2485API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2486
2487| 名称    | 类型   | 可读 | 可写 | 说明                       |
2488| ------- | ------ | ---- | ---- | -------------------------- |
2489| algName | string | 是   | 否   | 非对称密钥生成器的算法名。 |
2490
2491### generateKeyPair
2492
2493generateKeyPair(callback: AsyncCallback\<KeyPair>): void
2494
2495异步获取非对称密钥生成器生成的密钥,通过注册回调函数获取结果。
2496
2497当使用[COMMON_PARAMS_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到随机生成的密钥对;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到各项数据与密钥参数一致的密钥对。
2498
2499**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2500
2501**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2502
2503API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2504
2505**参数:**
2506
2507| 参数名     | 类型                    | 必填 | 说明                           |
2508| -------- | ----------------------- | ---- | ------------------------------ |
2509| callback | AsyncCallback\<[KeyPair](#keypair)> | 是   | 回调函数,用于获取非对称密钥。 |
2510
2511**错误码:**
2512以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2513
2514| 错误码ID | 错误信息                |
2515| -------- | ----------------------- |
2516| 401 | invalid parameters. Possible causes: <br>Incorrect parameter types;         |
2517| 17620001 | memory error.           |
2518| 17630001 | crypto operation error. |
2519
2520**示例:**
2521
2522<!--code_no_check-->
2523```ts
2524let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2525let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2526asyKeyGeneratorBySpec.generateKeyPair((err, keyPair) => {
2527  if (err) {
2528    console.error("generateKeyPair: error.");
2529    return;
2530  }
2531  console.info('generateKeyPair: success.');
2532})
2533```
2534
2535### generateKeyPair
2536
2537generateKeyPair(): Promise\<KeyPair>
2538
2539异步获取该非对称密钥生成器生成的密钥,通过Promise获取结果。
2540
2541当使用[COMMON_PARAMS_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到随机生成的密钥对;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到各项数据与密钥参数一致的密钥对。
2542
2543**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2544
2545**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2546
2547API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2548
2549**返回值:**
2550
2551| 类型              | 说明                              |
2552| ----------------- | --------------------------------- |
2553| Promise\<[KeyPair](#keypair)> | 使用Promise的方式获取非对称密钥。 |
2554
2555**错误码:**
2556以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2557
2558| 错误码ID | 错误信息               |
2559| -------- | ---------------------- |
2560| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.        |
2561| 17620001 | memory error.          |
2562| 17630001 | crypto operation error. |
2563
2564**示例:**
2565
2566<!--code_no_check-->
2567```ts
2568import { BusinessError } from '@kit.BasicServicesKit';
2569
2570let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2571let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2572let keyGenPromise = asyKeyGeneratorBySpec.generateKeyPair();
2573keyGenPromise.then(keyPair => {
2574  console.info('generateKeyPair success.');
2575}).catch((error: BusinessError) => {
2576  console.error("generateKeyPair error.");
2577});
2578```
2579
2580### generateKeyPairSync<sup>12+</sup>
2581
2582generateKeyPairSync(): KeyPair
2583
2584同步获取该非对称密钥生成器生成的密钥。
2585
2586当使用[COMMON_PARAMS_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到随机生成的密钥对;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到各项数据与密钥参数一致的密钥对。
2587
2588**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2589
2590**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2591
2592**返回值:**
2593
2594| 类型              | 说明                              |
2595| ----------------- | --------------------------------- |
2596| [KeyPair](#keypair) | 非对称密钥。 |
2597
2598**错误码:**
2599以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2600
2601| 错误码ID | 错误信息               |
2602| -------- | ---------------------- |
2603| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
2604| 17620001 | memory error.          |
2605| 17630001 | crypto operation error. |
2606
2607**示例:**
2608
2609<!--code_no_check-->
2610```ts
2611import { BusinessError } from '@kit.BasicServicesKit';
2612
2613let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2614let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2615try {
2616  let keyPairData = asyKeyGeneratorBySpec.generateKeyPairSync();
2617  if (keyPairData != null) {
2618    console.info('[Sync]: key pair success');
2619  } else {
2620    console.error("[Sync]: get key pair result fail!");
2621  }
2622} catch (error) {
2623  let e: BusinessError = error as BusinessError;
2624  console.error(`sync error, ${e.code}, ${e.message}`);
2625}
2626```
2627
2628### generatePriKey
2629
2630generatePriKey(callback: AsyncCallback\<PriKey>): void
2631
2632异步获取非对称密钥生成器生成的密钥,通过注册回调函数获取结果。
2633
2634当使用[PRIVATE_KEY_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到指定的私钥;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的私钥。
2635
2636**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2637
2638**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2639
2640API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2641
2642**参数:**
2643
2644| 参数名     | 类型                    | 必填 | 说明                           |
2645| -------- | ----------------------- | ---- | ------------------------------ |
2646| callback | AsyncCallback\<[PriKey](#prikey)> | 是   | 回调函数,用于获取非对称密钥。 |
2647
2648**错误码:**
2649以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2650
2651| 错误码ID | 错误信息               |
2652| -------- | ---------------------- |
2653| 401 | invalid parameters. Possible causes: <br>Mandatory parameters are left unspecified;         |
2654| 17620001 | memory error.          |
2655| 17630001 | crypto operation error. |
2656
2657**示例:**
2658
2659<!--code_no_check-->
2660```ts
2661let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2662let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2663asyKeyGeneratorBySpec.generatePriKey((err, prikey) => {
2664  if (err) {
2665    console.error("generatePriKey: error.");
2666    return;
2667  }
2668  console.info('generatePriKey: success.');
2669})
2670```
2671
2672### generatePriKey
2673
2674generatePriKey(): Promise\<PriKey>
2675
2676异步获取该非对称密钥生成器生成的密钥,通过Promise获取结果。
2677
2678当使用[PRIVATE_KEY_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到指定的私钥;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的私钥。
2679
2680**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2681
2682**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2683
2684API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2685
2686**返回值:**
2687
2688| 类型              | 说明                              |
2689| ----------------- | --------------------------------- |
2690| Promise\<[PriKey](#prikey)> | 使用Promise的方式获取非对称密钥。 |
2691
2692**错误码:**
2693以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2694
2695| 错误码ID | 错误信息               |
2696| -------- | ---------------------- |
2697| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
2698| 17620001 | memory error.          |
2699| 17630001 | crypto operation error. |
2700
2701**示例:**
2702
2703<!--code_no_check-->
2704```ts
2705import { BusinessError } from '@kit.BasicServicesKit';
2706
2707let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2708let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2709let keyGenPromise = asyKeyGeneratorBySpec.generatePriKey();
2710keyGenPromise.then(priKey => {
2711  console.info('generatePriKey success.');
2712}).catch((error: BusinessError) => {
2713  console.error("generatePriKey error.");
2714});
2715```
2716
2717### generatePriKeySync<sup>12+</sup>
2718
2719generatePriKeySync(): PriKey
2720
2721同步获取该非对称密钥生成器生成的密钥。
2722
2723当使用[PRIVATE_KEY_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到指定的私钥;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的私钥。
2724
2725**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2726
2727**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2728
2729**返回值:**
2730
2731| 类型              | 说明                              |
2732| ----------------- | --------------------------------- |
2733| [PriKey](#prikey) | 非对称密钥。 |
2734
2735**错误码:**
2736以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2737
2738| 错误码ID | 错误信息               |
2739| -------- | ---------------------- |
2740| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.        |
2741| 17620001 | memory error.          |
2742| 17630001 | crypto operation error. |
2743
2744**示例:**
2745
2746<!--code_no_check-->
2747```ts
2748let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2749let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2750try {
2751  let priKeyData = asyKeyGeneratorBySpec.generatePriKeySync();
2752  if (priKeyData != null) {
2753    console.info('[Sync]: pri key success');
2754  } else {
2755    console.error("[Sync]: get pri key result fail!");
2756  }
2757} catch (e) {
2758  console.error(`sync error, ${e.code}, ${e.message}`);
2759}
2760```
2761
2762### generatePubKey
2763
2764generatePubKey(callback: AsyncCallback\<PubKey>): void
2765
2766异步获取非对称密钥生成器生成的密钥,通过注册回调函数获取结果。
2767
2768当使用[PUBLIC_KEY_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到指定的公钥;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的公钥。
2769
2770**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2771
2772**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2773
2774API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2775
2776**参数:**
2777
2778| 参数名     | 类型                    | 必填 | 说明                           |
2779| -------- | ----------------------- | ---- | ------------------------------ |
2780| callback | AsyncCallback\<[PubKey](#pubkey)> | 是   | 回调函数,用于获取非对称密钥。 |
2781
2782**错误码:**
2783以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2784
2785| 错误码ID | 错误信息               |
2786| -------- | ---------------------- |
2787| 401 | invalid parameters. Possible causes:<br> Incorrect parameter types;        |
2788| 17620001 | memory error.          |
2789| 17630001 | crypto operation error. |
2790
2791**示例:**
2792
2793<!--code_no_check-->
2794```ts
2795let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2796let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2797asyKeyGeneratorBySpec.generatePubKey((err, pubKey) => {
2798  if (err) {
2799    console.error("generatePubKey: error.");
2800    return;
2801  }
2802  console.info('generatePubKey: success.');
2803})
2804```
2805
2806### generatePubKey
2807
2808generatePubKey(): Promise\<PubKey>
2809
2810异步获取该非对称密钥生成器生成的密钥,通过Promise获取结果。
2811
2812当使用[PUBLIC_KEY_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到指定的公钥;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的公钥。
2813
2814**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2815
2816**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2817
2818API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2819
2820**返回值:**
2821
2822| 类型              | 说明                              |
2823| ----------------- | --------------------------------- |
2824| Promise\<[PubKey](#pubkey)> | 使用Promise的方式获取非对称密钥。 |
2825
2826**错误码:**
2827以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2828
2829| 错误码ID | 错误信息               |
2830| -------- | ---------------------- |
2831| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
2832| 17620001 | memory error.          |
2833| 17630001 | crypto operation error. |
2834
2835**示例:**
2836
2837<!--code_no_check-->
2838```ts
2839import { BusinessError } from '@kit.BasicServicesKit';
2840
2841let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2842let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2843let keyGenPromise = asyKeyGeneratorBySpec.generatePubKey();
2844keyGenPromise.then(pubKey => {
2845  console.info('generatePubKey success.');
2846}).catch((error: BusinessError) => {
2847  console.error("generatePubKey error.");
2848});
2849```
2850
2851### generatePubKeySync<sup>12+</sup>
2852
2853generatePubKeySync(): PubKey
2854
2855同步获取该非对称密钥生成器生成的密钥。
2856
2857当使用[PUBLIC_KEY_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以得到指定的公钥;当使用[KEY_PAIR_SPEC](#asykeyspectype10)类型的密钥参数来创建密钥生成器时,可以从生成的密钥对中获取指定的公钥。
2858
2859**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2860
2861**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2862
2863**返回值:**
2864
2865| 类型              | 说明                              |
2866| ----------------- | --------------------------------- |
2867| [PubKey](#pubkey) | 非对称密钥。 |
2868
2869**错误码:**
2870以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2871
2872| 错误码ID | 错误信息               |
2873| -------- | ---------------------- |
2874| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.        |
2875| 17620001 | memory error.          |
2876| 17630001 | crypto operation error. |
2877
2878**示例:**
2879
2880<!--code_no_check-->
2881```ts
2882let asyKeyPairSpec: cryptoFramework.DSAKeyPairSpec; // dsa as example, asyKeyPairSpec specifies full parameters contained in the private and public keys. The generation process is omitted here.
2883let asyKeyGeneratorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(asyKeyPairSpec);
2884try {
2885  let pubKeyData = asyKeyGeneratorBySpec.generatePubKeySync();
2886  if (pubKeyData != null) {
2887    console.info('[Sync]: pub key success');
2888  } else {
2889    console.error("[Sync]: get pub key result fail!");
2890  }
2891} catch (e) {
2892  console.error(`sync error, ${e.code}, ${e.message}`);
2893}
2894```
2895
2896## ECCKeyUtil<sup>11+</sup>
2897
2898根据椭圆曲线名生成相应的非对称公共密钥参数。
2899
2900### genECCCommonParamsSpec<sup>11+</sup>
2901
2902static genECCCommonParamsSpec(curveName: string): ECCCommonParamsSpec
2903
2904根据椭圆曲线相应的NID(Name IDentifier)字符串名称生成相应的非对称公共密钥参数。详见[ECC密钥生成规格](../../security/CryptoArchitectureKit/crypto-asym-key-generation-conversion-spec.md#ecc)和[SM2密钥生成规格](../../security/CryptoArchitectureKit/crypto-asym-key-generation-conversion-spec.md#sm2)。
2905
2906**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2907
2908**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2909
2910API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
2911
2912**参数:**
2913
2914| 参数名  | 类型   | 必填 | 说明                                           |
2915| ------- | ------ | ---- | ---------------------------------------------- |
2916| curveName | string | 是   | 椭圆曲线相应的NID(Name IDentifier)字符串名称。 |
2917
2918**返回值:**
2919
2920| 类型              | 说明                              |
2921| ----------------- | --------------------------------- |
2922| [ECCCommonParamsSpec](#ecccommonparamsspec10) | 返回ECC公共密钥参数。 |
2923
2924**错误码:**
2925以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2926
2927| 错误码ID | 错误信息                         |
2928| -------- | -------------------------------- |
2929| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
2930| 801      | this operation is not supported. |
2931| 17620001 | memory error.                    |
2932
2933**示例:**
2934
2935```ts
2936import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2937import { BusinessError } from '@kit.BasicServicesKit';
2938try {
2939    let ECCCommonParamsSpec = cryptoFramework.ECCKeyUtil.genECCCommonParamsSpec('NID_brainpoolP160r1');
2940    console.info('genECCCommonParamsSpec success');
2941} catch (err) {
2942    let e: BusinessError = err as BusinessError;
2943    console.error(`genECCCommonParamsSpec error, ${e.code}, ${e.message}`);
2944}
2945```
2946
2947### convertPoint<sup>12+</sup>
2948
2949static convertPoint(curveName: string, encodedPoint: Uint8Array): Point
2950
2951根据椭圆曲线的曲线名,即相应的NID(Name IDentifier),将指定的点数据转换为Point对象。当前支持压缩/非压缩格式的点数据。
2952
2953> **说明:**
2954>
2955> 根据RFC5480规范中第2.2节的描述:<br/>
2956> 1. 非压缩的点数据,表示为:前缀0x04\|x坐标\|y坐标;
2957> 2. 压缩的点数据,对于Fp素数域上的点(当前暂不支持F2m域),表示为:前缀0x03\|x坐标 (坐标y是奇数时),前缀0x02\|x坐标 (坐标y是偶数时)。
2958
2959**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2960
2961**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
2962
2963**参数:**
2964
2965| 参数名       | 类型        | 必填 | 说明                                           |
2966| ------------ | ---------- | ---- | ---------------------------------------------- |
2967| curveName    | string     | 是   | 椭圆曲线的曲线名,即相应的NID(Name IDentifier)。 |
2968| encodedPoint | Uint8Array | 是   | 指定的ECC椭圆曲线上的点的数据。 |
2969
2970**返回值:**
2971
2972| 类型              | 说明                 |
2973| ----------------- | ------------------- |
2974| [Point](#point10) | 返回ECC的Point对象。 |
2975
2976**错误码:**
2977以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
2978
2979| 错误码ID | 错误信息               |
2980| -------- | ---------------------- |
2981| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
2982| 17620001 | memory error. |
2983| 17630001 | crypto operation error. |
2984
2985**示例:**
2986
2987```ts
2988import { cryptoFramework } from '@kit.CryptoArchitectureKit';
2989
2990// 随机生成的非压缩点数据。
2991let pkData = new Uint8Array([4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]);
2992let returnPoint = cryptoFramework.ECCKeyUtil.convertPoint('NID_brainpoolP256r1', pkData);
2993console.info('returnPoint: ' + returnPoint.x.toString(16));
2994```
2995
2996### getEncodedPoint<sup>12+</sup>
2997
2998static getEncodedPoint(curveName: string, point: Point, format: string): Uint8Array
2999
3000根据椭圆曲线的曲线名,即相应的NID(Name IDentifier),按照指定的点数据格式,将Point对象转换为点数据。当前支持压缩/非压缩格式的点数据。
3001
3002**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3003
3004**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
3005
3006**参数:**
3007
3008| 参数名       | 类型               | 必填 | 说明                                           |
3009| ------------ | ----------------- | ---- | ---------------------------------------------- |
3010| curveName    | string            | 是   | 椭圆曲线的曲线名,即相应的NID(Name IDentifier)。 |
3011| point        | [Point](#point10) | 是   | 椭圆曲线上的Point点对象。 |
3012| format       | string            | 是   | 需要获取的点数据格式,当前支持"COMPRESSED"或"UNCOMPRESSED"。 |
3013
3014**返回值:**
3015
3016| 类型              | 说明                              |
3017| ----------------- | --------------------------------- |
3018| Uint8Array | 返回指定格式的点数据。 |
3019
3020**错误码:**
3021以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3022
3023| 错误码ID | 错误信息               |
3024| -------- | ---------------------- |
3025| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3026| 17620001 | memory error. |
3027| 17630001 | crypto operation error. |
3028
3029**示例:**
3030
3031```ts
3032import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3033
3034async function doTest() {
3035  let generator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
3036  let keyPair = await generator.generateKeyPair();
3037  let eccPkX = keyPair.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN);
3038  let eccPkY = keyPair.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_Y_BN);
3039  console.info('ECC_PK_X_BN 16:' + eccPkX.toString(16));
3040  console.info('ECC_PK_Y_BN 16:' + eccPkY.toString(16));
3041  // 将eccPkX.toString(16)结果放入x,eccPkY.toString(16)结果放入y。
3042  let returnPoint: cryptoFramework.Point = {
3043    x: BigInt('0x' + eccPkX.toString(16)),
3044    y: BigInt('0x' + eccPkY.toString(16))
3045  };
3046  let returnData = cryptoFramework.ECCKeyUtil.getEncodedPoint('NID_brainpoolP256r1', returnPoint, 'UNCOMPRESSED');
3047  console.info('returnData: ' + returnData);
3048}
3049```
3050
3051## DHKeyUtil<sup>11+</sup>
3052
3053根据素数P的长度和私钥长度(bit位数)生成DH公共密钥参数。
3054
3055### genDHCommonParamsSpec<sup>11+</sup>
3056
3057static genDHCommonParamsSpec(pLen: number, skLen?: number): DHCommonParamsSpec
3058
3059根据素数P的长度和私钥长度(bit位数)生成DH公共密钥参数。详见[DH密钥生成规格](../../security/CryptoArchitectureKit/crypto-asym-key-generation-conversion-spec.md#dh)。
3060
3061**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3062
3063**系统能力:** SystemCapability.Security.CryptoFramework.Key.AsymKey
3064
3065API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Key.AsymKey
3066
3067**参数:**
3068
3069| 参数名 | 类型   | 必填 | 说明                                             |
3070| ------ | ------ | ---- | ------------------------------------------------ |
3071| pLen   | number | 是   | 用于指定DH公共密钥参数中素数P的长度,单位为bit。 |
3072| skLen  | number | 否   | 用于指定DH公共密钥参数中私钥的长度,单位为bit。  |
3073
3074**返回值:**
3075
3076| 类型              | 说明                              |
3077| ----------------- | --------------------------------- |
3078| [DHCommonParamsSpec](#dhcommonparamsspec11) | 返回DH公共密钥参数。 |
3079
3080**错误码:**
3081以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3082
3083| 错误码ID | 错误信息                         |
3084| -------- | -------------------------------- |
3085| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3086| 801      | this operation is not supported. |
3087| 17620001 | memory error.                    |
3088| 17630001 | crypto operation error.          |
3089
3090**示例:**
3091
3092```ts
3093import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3094import { BusinessError } from '@kit.BasicServicesKit';
3095try {
3096    let DHCommonParamsSpec = cryptoFramework.DHKeyUtil.genDHCommonParamsSpec(2048);
3097    console.info('genDHCommonParamsSpec success');
3098} catch (err) {
3099    let e: BusinessError = err as BusinessError;
3100    console.error(`genDHCommonParamsSpec error, ${e.code}, ${e.message}`);
3101}
3102```
3103
3104## SM2CryptoUtil<sup>12+</sup>
3105
3106用于SM2密码学运算的工具类。
3107
3108### genCipherTextBySpec<sup>12+</sup>
3109
3110static genCipherTextBySpec(spec: SM2CipherTextSpec, mode?: string): DataBlob
3111
3112根据指定的SM2密文参数,生成符合国密标准的ASN.1格式的SM2密文。
3113
3114**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3115
3116**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3117
3118**参数:**
3119
3120| 参数名 | 类型   | 必填 | 说明                                             |
3121| ------ | ------ | ---- | ------------------------------------------------ |
3122| spec   | [SM2CipherTextSpec](#sm2ciphertextspec12) | 是   | 指定的SM2密文参数。 |
3123| mode  | string | 否   | 可选的密文转换模式,可用于指定密文参数的拼接顺序,当前仅支持默认值"C1C3C2"。  |
3124
3125**返回值:**
3126
3127| 类型              | 说明                              |
3128| ----------------- | --------------------------------- |
3129| [DataBlob](#datablob) | 返回符合国密标准的ASN.1格式的SM2密文。 |
3130
3131**错误码:**
3132以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3133
3134| 错误码ID | 错误信息                         |
3135| -------- | -------------------------------- |
3136| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3137| 17620001 | memory error.                    |
3138| 17630001 | crypto operation error.          |
3139
3140**示例:**
3141
3142```ts
3143import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3144import { BusinessError } from '@kit.BasicServicesKit';
3145try {
3146  let spec : cryptoFramework.SM2CipherTextSpec = {
3147    xCoordinate: BigInt('20625015362595980457695435345498579729138244358573902431560627260141789922999'),
3148    yCoordinate: BigInt('48563164792857017065725892921053777369510340820930241057309844352421738767712'),
3149    cipherTextData: new Uint8Array([100,227,78,195,249,179,43,70,242,69,169,10,65,123]),
3150    hashData: new Uint8Array([87,167,167,247,88,146,203,234,83,126,117,129,52,142,82,54,152,226,201,111,143,115,169,125,128,42,157,31,114,198,109,244]),
3151  }
3152  let data = cryptoFramework.SM2CryptoUtil.genCipherTextBySpec(spec, 'C1C3C2');
3153  console.info('genCipherTextBySpec success');
3154} catch (err) {
3155  let e: BusinessError = err as BusinessError;
3156  console.error(`genCipherTextBySpec error, ${e.code}, ${e.message}`);
3157}
3158```
3159
3160### getCipherTextSpec<sup>12+</sup>
3161
3162static getCipherTextSpec(cipherText: DataBlob, mode?: string): SM2CipherTextSpec
3163
3164从符合国密标准的ASN.1格式的SM2密文中,获取具体的SM2密文参数。
3165
3166**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3167
3168**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3169
3170**参数:**
3171
3172| 参数名 | 类型   | 必填 | 说明                                             |
3173| ------ | ------ | ---- | ------------------------------------------------ |
3174| cipherText     | [DataBlob](#datablob)                 | 是   | 符合国密标准的ASN.1格式的SM2密文。
3175| mode  | string | 否   | 可选的密文转换模式,可用于指定密文参数的拼接顺序,当前仅支持默认值"C1C3C2"。  |
3176
3177**返回值:**
3178
3179| 类型              | 说明                              |
3180| ----------------- | --------------------------------- |
3181| [SM2CipherTextSpec](#sm2ciphertextspec12) | 返回具体的SM2密文参数。 |
3182
3183**错误码:**
3184以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3185
3186| 错误码ID | 错误信息                         |
3187| -------- | -------------------------------- |
3188| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3189| 17620001 | memory error.                    |
3190| 17630001 | crypto operation error.          |
3191
3192```ts
3193import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3194import { BusinessError } from '@kit.BasicServicesKit';
3195try {
3196    let cipherTextArray = new Uint8Array([48,118,2,32,45,153,88,82,104,221,226,43,174,21,122,248,5,232,105,41,92,95,102,224,216,149,85,236,110,6,64,188,149,70,70,183,2,32,107,93,198,247,119,18,40,110,90,156,193,158,205,113,170,128,146,109,75,17,181,109,110,91,149,5,110,233,209,78,229,96,4,32,87,167,167,247,88,146,203,234,83,126,117,129,52,142,82,54,152,226,201,111,143,115,169,125,128,42,157,31,114,198,109,244,4,14,100,227,78,195,249,179,43,70,242,69,169,10,65,123]);
3197    let cipherText : cryptoFramework.DataBlob = {data : cipherTextArray};
3198    let spec : cryptoFramework.SM2CipherTextSpec = cryptoFramework.SM2CryptoUtil.getCipherTextSpec(cipherText, 'C1C3C2');
3199    console.info('getCipherTextSpec success');
3200} catch (err) {
3201    let e: BusinessError = err as BusinessError;
3202    console.error(`getCipherTextSpec error, ${e.code}, ${e.message}`);
3203}
3204```
3205
3206## cryptoFramework.createCipher
3207
3208createCipher(transformation: string): Cipher
3209
3210通过指定算法名称,获取相应的[Cipher](#cipher)实例。
3211
3212支持的规格详见[对称密钥加解密算法规格](../../security/CryptoArchitectureKit/crypto-sym-encrypt-decrypt-spec.md)和[非对称密钥加解密算法规格](../../security/CryptoArchitectureKit/crypto-asym-encrypt-decrypt-spec.md)。
3213
3214**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3215
3216**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3217
3218API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3219
3220**参数:**
3221
3222| 参数名         | 类型   | 必填 | 说明                                                         |
3223| -------------- | ------ | ---- | ------------------------------------------------------------ |
3224| transformation | string | 是   | 待生成Cipher的算法名称(含密钥长度)、加密模式以及填充方法的组合。 |
3225
3226> **说明:**
3227>
3228> 1. 目前对称加解密中,PKCS5和PKCS7的实现相同,其padding长度和分组长度保持一致(即PKCS5和PKCS7在3DES中均按照8字节填充,在AES中均按照16字节填充),另有NoPadding表示不填充。
3229> <br/>开发者需要自行了解密码学不同分组模式的差异,以便选择合适的参数规格。例如选择ECB和CBC模式时,建议启用填充,否则必须确保明文长度是分组大小的整数倍;选择其他模式时,可以不启用填充,此时密文长度和明文长度一致(即可能不是分组大小的整数倍)。
3230> 2. 使用RSA、SM2进行非对称加解密时,必须创建两个Cipher对象分别进行加密和解密操作,而不能对同一个Cipher对象进行加解密。对称加解密没有此要求(即只要算法规格一样,可以对同一个Cipher对象进行加解密操作)。
3231
3232**返回值:**
3233
3234| 类型              | 说明                     |
3235| ----------------- | ------------------------ |
3236| [Cipher](#cipher) | 返回加解密生成器的对象。 |
3237
3238**错误码:**
3239以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3240
3241| 错误码ID | 错误信息               |
3242| -------- | ---------------------- |
3243| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3244| 801 | this operation is not supported. |
3245| 17620001 | memory error.          |
3246
3247**示例:**
3248
3249```ts
3250import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3251import { BusinessError } from '@kit.BasicServicesKit';
3252
3253let cipherAlgName = '3DES192|ECB|PKCS7';
3254try {
3255  let cipher = cryptoFramework.createCipher(cipherAlgName);
3256  console.info('cipher algName:' + cipher.algName);
3257} catch (error) {
3258  let e: BusinessError = error as BusinessError;
3259  console.error(`sync error, ${e.code}, ${e.message}`);
3260}
3261```
3262
3263## Cipher
3264
3265提供加解密的算法操作功能,按序调用本类中的[init()](#init-1)、[update()](#update)、[doFinal()](#dofinal)方法,可以实现对称加密/对称解密/非对称加密/非对称解密。
3266
3267完整的加解密流程示例可参考开发指导中的[加解密开发指导](../../security/CryptoArchitectureKit/crypto-encryption-decryption-overview.md)。
3268
3269一次完整的加/解密流程在对称加密和非对称加密中略有不同:
3270
3271- 对称加解密:init为必选,update为可选(且允许多次update加/解密大数据),doFinal为必选;doFinal结束后可以重新init开始新一轮加/解密流程。
3272- RSA、SM2非对称加解密:init为必选,不支持update操作,doFinal为必选(允许连续多次doFinal加/解密大数据);RSA不支持重复init,切换加解密模式或填充方式时,需要重新创建Cipher对象。
3273
3274### 属性
3275
3276**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3277
3278**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3279
3280API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3281
3282| 名称    | 类型   | 可读 | 可写 | 说明                         |
3283| ------- | ------ | ---- | ---- | ---------------------------- |
3284| algName | string | 是   | 否   | 加解密生成器指定的算法名称。 |
3285
3286### init
3287
3288init(opMode: CryptoMode, key: Key, params: ParamsSpec | null, callback: AsyncCallback\<void>): void
3289
3290初始化加解密的[cipher](#cipher)对象,通过注册回调函数获取结果。init、update、doFinal为三段式接口,需要成组使用。其中init和doFinal必选,update可选。
3291
3292必须在使用[createCipher](#cryptoframeworkcreatecipher)创建[Cipher](#cipher)实例后,才能使用本函数。
3293
3294**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3295
3296**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3297
3298API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3299
3300**参数:**
3301
3302| 参数名     | 类型                      | 必填 | 说明                                                         |
3303| -------- | ------------------------- | ---- | ------------------------------------------------------------ |
3304| opMode   | [CryptoMode](#cryptomode) | 是   | 加密或者解密模式。                                           |
3305| key      | [Key](#key)               | 是   | 指定加密或解密的密钥。                                       |
3306| params   | [ParamsSpec](#paramsspec) \| null<sup>10+</sup> | 是   | 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。 |
3307| callback | AsyncCallback\<void>      | 是   | 回调函数。当加解密初始化成功,err为undefined,否则为错误对象。     |
3308
3309**错误码:**
3310以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3311
3312| 错误码ID | 错误信息                                                 |
3313| -------- | --------------------------------------------------------- |
3314| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3315| 17620001 | memory error.                                            |
3316| 17620002 | runtime error.                                           |
3317| 17630001 | crypto operation error.|
3318
3319### init
3320
3321init(opMode: CryptoMode, key: Key, params: ParamsSpec | null): Promise\<void>
3322
3323初始化加解密的cipher对象,通过Promise获取结果。init、update、doFinal为三段式接口,需要成组使用。其中init和doFinal必选,update可选。
3324
3325必须在使用[createCipher](#cryptoframeworkcreatecipher)创建[Cipher](#cipher)实例后,才能使用本函数。
3326
3327**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3328
3329**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3330
3331API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3332
3333**参数:**
3334
3335| 参数名   | 类型                      | 必填 | 说明                                                         |
3336| ------ | ------------------------- | ---- | ------------------------------------------------------------ |
3337| opMode | [CryptoMode](#cryptomode) | 是   | 加密或者解密模式。                                           |
3338| key    | [Key](#key)               | 是   | 指定加密或解密的密钥。                                       |
3339| params | [ParamsSpec](#paramsspec) \| null<sup>10+</sup> | 是   | 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。API 10之前只支持ParamsSpec, API 10之后增加支持null。 |
3340
3341**返回值:**
3342
3343| 类型           | 说明                                   |
3344| -------------- | -------------------------------------- |
3345| Promise\<void> | 无返回结果的Promise对象。 |
3346
3347**错误码:**
3348以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3349
3350| 错误码ID | 错误信息                                          |
3351| -------- | ------------------------------------------------- |
3352| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3353| 17620001 | memory error.                                     |
3354| 17620002 | runtime error.                                    |
3355| 17630001 | crypto operation error.|
3356
3357### initSync<sup>12+</sup>
3358
3359initSync(opMode: CryptoMode, key: Key, params: ParamsSpec | null): void
3360
3361初始化加解密的[cipher](#cipher)对象,通过注册回调函数获取结果。initSync、updateSync、doFinalSync为三段式接口,需要成组使用。其中initSync和doFinalSync必选,updateSync可选。
3362
3363必须在使用[createCipher](#cryptoframeworkcreatecipher)创建[Cipher](#cipher)实例后,才能使用本函数。
3364
3365**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3366
3367**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3368
3369**参数:**
3370
3371| 参数名 | 类型                                            | 必填 | 说明                                                         |
3372| ------ | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
3373| opMode | [CryptoMode](#cryptomode)                       | 是   | 加密或者解密模式。                                           |
3374| key    | [Key](#key)                                     | 是   | 指定加密或解密的密钥。                                       |
3375| params | [ParamsSpec](#paramsspec)  | 是   | 指定加密或解密的参数,对于ECB等没有参数的算法模式,可以传入null。 |
3376
3377**错误码:**
3378以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3379
3380| 错误码ID | 错误信息                |
3381| -------- | ----------------------- |
3382| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3383| 17620001 | memory error.           |
3384| 17620002 | runtime error.          |
3385| 17630001 | crypto operation error. |
3386
3387### update
3388
3389update(data: DataBlob, callback: AsyncCallback\<DataBlob>): void
3390
3391分段更新加密或者解密数据操作,通过注册回调函数获取加/解密数据。
3392
3393必须在对[Cipher](#cipher)实例使用[init()](#init-1)初始化后,才能使用本函数。
3394
3395> **说明:**
3396>
3397> 1. 在进行对称加解密操作的时候,如果开发者对各个分组模式不够熟悉,建议对每次update和doFinal的结果都判断是否为null,并在结果不为null时取出其中的数据进行拼接,形成完整的密文/明文。这是因为选择的分组模式等各项规格都可能对update和doFinal结果产生影响。<br/>(例如对于ECB和CBC模式,不论update传入的数据是否为分组长度的整数倍,都会以分组作为基本单位进行加/解密,并输出本次update新产生的加/解密分组结果。<br/>可以理解为,update只要凑满一个新的分组就会有输出,如果没有凑满则此次update输出为null,把当前还没被加/解密的数据留着,等下一次update/doFinal传入数据的时候,拼接起来继续凑分组。<br/>最后doFinal的时候,会把剩下的还没加/解密的数据,根据[createCipher](#cryptoframeworkcreatecipher)时设置的padding模式进行填充,补齐到分组的整数倍长度,再输出剩余加解密结果。<br/>而对于可以将分组密码转化为流模式实现的模式,还可能出现密文长度和明文长度相同的情况等。)
3398> 2. 根据数据量,可以不调用update(即init完成后直接调用doFinal)或多次调用update。<br/>
3399>    算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的对称加解密,采用多次update的方式传入数据。<br/>
3400>    AES使用多次update操作的示例代码详见[使用AES对称密钥分段加解密](../../security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm-by-segment.md)。
3401> 3. RSA、SM2非对称加解密不支持update操作。
3402> 4. 对于CCM模式的对称加解密算法,加密时只能调用1次update接口加密数据并调用doFinal接口获取tag,或直接调用doFinal接口加密数据并获取tag,解密时只能调用1次update接口或调用1次doFinal接口解密数据并验证tag。
3403
3404**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3405
3406**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3407
3408API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3409
3410**参数:**
3411
3412| 参数名     | 类型                                  | 必填 | 说明                                                         |
3413| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
3414| data     | [DataBlob](#datablob)                 | 是   | 加密或者解密的数据。data不能为null。           |
3415| callback | AsyncCallback\<[DataBlob](#datablob)> | 是   | 回调函数。当更新加/解密数据成功,err为undefined,data为此次更新的加/解密结果DataBlob;否则为错误对象。 |
3416
3417**错误码:**
3418以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3419
3420| 错误码ID | 错误信息                                    |
3421| -------- | ------------------------------------------- |
3422| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3423| 17620001 | memory error.                               |
3424| 17620002 | runtime error.                              |
3425| 17630001 | crypto operation error.                     |
3426
3427### update
3428
3429update(data: DataBlob): Promise\<DataBlob>
3430
3431分段更新加密或者解密数据操作,通过Promise获取加/解密数据。
3432
3433必须在对[Cipher](#cipher)实例使用[init()](#init-2)初始化后,才能使用本函数。
3434
3435> **说明:**
3436>
3437> 1. 在进行对称加解密操作的时候,如果开发者对各个分组模式不够熟悉,建议对每次update和doFinal的结果都判断是否为null,并在结果不为null时取出其中的数据进行拼接,形成完整的密文/明文。这是因为选择的分组模式等各项规格都可能对update和doFinal结果产生影响。
3438> <br/>(例如对于ECB和CBC模式,不论update传入的数据是否为分组长度的整数倍,都会以分组作为基本单位进行加/解密,并输出本次update新产生的加/解密分组结果。<br/>可以理解为,update只要凑满一个新的分组就会有输出,如果没有凑满则此次update输出为null,把当前还没被加/解密的数据留着,等下一次update/doFinal传入数据的时候,拼接起来继续凑分组。<br/>最后doFinal的时候,会把剩下的还没加/解密的数据,根据[createCipher](#cryptoframeworkcreatecipher)时设置的padding模式进行填充,补齐到分组的整数倍长度,再输出剩余加解密结果。<br/>而对于可以将分组密码转化为流模式实现的模式,还可能出现密文长度和明文长度相同的情况等。)
3439> 2. 根据数据量,可以不调用update(即init完成后直接调用doFinal)或多次调用update。<br/>
3440>    算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的对称加解密,可以采用多次update的方式传入数据。<br/>
3441>    AES使用多次update操作的示例代码详见[使用AES对称密钥分段加解密](../../security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm-by-segment.md)。
3442> 3. RSA、SM2非对称加解密不支持update操作。
3443> 4. 对于CCM模式的对称加解密算法,加密时只能调用1次update接口加密数据并调用doFinal接口获取tag,或直接调用doFinal接口加密数据并获取tag,解密时只能调用1次update接口或调用1次doFinal接口解密数据并验证tag。
3444
3445**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3446
3447**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3448
3449API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3450
3451**参数:**
3452
3453| 参数名 | 类型                  | 必填 | 说明                 |
3454| ---- | --------------------- | ---- | -------------------- |
3455| data | [DataBlob](#datablob) | 是   | 加密或者解密的数据。data不能为null。 |
3456
3457**返回值:**
3458
3459| 类型                            | 说明                                             |
3460| ------------------------------- | ------------------------------------------------ |
3461| Promise\<[DataBlob](#datablob)> | Promise对象,返回此次更新的加/解密结果DataBlob。 |
3462
3463**错误码:**
3464以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3465
3466| 错误码ID | 错误信息                                     |
3467| -------- | -------------------------------------------- |
3468| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3469| 17620001 | memory error.                                |
3470| 17620002 | runtime error.                               |
3471| 17630001 | crypto operation error.                      |
3472
3473### updateSync<sup>12+</sup>
3474
3475updateSync(data: DataBlob): DataBlob
3476
3477分段更新加密或者解密数据操作,通过注册回调函数获取加/解密数据。
3478
3479必须在对[Cipher](#cipher)实例使用[initSync()](#initsync12)初始化后,才能使用本函数。
3480
3481其他注意事项同上异步接口说明。
3482
3483**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3484
3485**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3486
3487**参数:**
3488
3489| 参数名 | 类型                  | 必填 | 说明                                                         |
3490| ------ | --------------------- | ---- | ------------------------------------------------------------ |
3491| data   | [DataBlob](#datablob) | 是   | 加密或者解密的数据。data不能为null。 |
3492
3493**错误码:**
3494以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3495
3496| 错误码ID | 错误信息                |
3497| -------- | ----------------------- |
3498| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3499| 17620001 | memory error.           |
3500| 17620002 | runtime error.          |
3501| 17630001 | crypto operation error. |
3502
3503### doFinal
3504
3505doFinal(data: DataBlob | null, callback: AsyncCallback\<DataBlob>): void
3506
3507(1)在对称加解密中,doFinal加/解密(分组模式产生的)剩余数据和本次传入的数据,最后结束加密或者解密数据操作,通过注册回调函数获取加密或者解密数据。<br/>如果数据量较小,可以在doFinal中一次性传入数据,而不使用update;如果在本次加解密流程中,已经使用[update](#update-4)传入过数据,可以在doFinal的data参数处传入null。<br/>根据对称加解密的模式不同,doFinal的输出有如下区别:
3508
3509- 对于GCM和CCM模式的对称加密:一次加密流程中,如果将每一次update和doFinal的结果拼接起来,会得到“密文+authTag”,即末尾的16字节(GCM模式)或12字节(CCM模式)是authTag,而其余部分均为密文。(也就是说,如果doFinal的data参数传入null,则doFinal的结果就是authTag)authTag需要填入解密时的[GcmParamsSpec](#gcmparamsspec)或[CcmParamsSpec](#ccmparamsspec);密文则作为解密时的入参data。
3510- 对于其他模式的对称加解密、GCM和CCM模式的对称解密:一次加/解密流程中,每一次update和doFinal的结果拼接起来,得到完整的明文/密文。
3511
3512(2)在RSA、SM2非对称加解密中,doFinal加/解密本次传入的数据,通过注册回调函数获取加密或者解密数据。如果数据量较大,可以多次调用doFinal,拼接结果得到完整的明文/密文。
3513
3514> **说明:**
3515>
3516>  1. 对称加解密中,调用doFinal标志着一次加解密流程已经完成,即[Cipher](#cipher)实例的状态被清除,因此当后续开启新一轮加解密流程时,需要重新调用init()并传入完整的参数列表进行初始化<br/>(比如即使是对同一个Cipher实例,采用同样的对称密钥,进行加密然后解密,则解密中调用init的时候仍需填写params参数,而不能直接省略为null)。
3517>  2. 如果遇到解密失败,需检查加解密数据和init时的参数是否匹配,包括GCM模式下加密得到的authTag是否填入解密时的GcmParamsSpec等。
3518>  3. doFinal的结果可能为null,因此使用.data字段访问doFinal结果的具体数据前,请记得先判断结果是否为null,避免产生异常。<br/>
3519>    对于加密,CFB、OFB和CTR模式,如果doFinal传null, 则返回结果为null。<br/>
3520>    对于解密,GCM、CCM、CFB、OFB和CTR模式,如果doFinal传null,则返回结果为null;对于解密,其他模式,如果明文是加密块大小的整倍数,调用update传入所有密文,调用doFinal传null, 则返回结果为null。<br/>
3521>  4. 非对称加解密时多次doFinal操作的示例代码详见[使用RSA非对称密钥分段加解密](../../security/CryptoArchitectureKit/crypto-rsa-asym-encrypt-decrypt-by-segment.md),SM2和RSA的操作类似。
3522
3523**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3524
3525**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3526
3527API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3528
3529**参数:**
3530
3531| 参数名     | 类型                                  | 必填 | 说明                                                         |
3532| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
3533| data     | [DataBlob](#datablob) \| null<sup>10+</sup>                 | 是   | 加密或者解密的数据。在对称加解密中允许为null,但不允许传入{data: Uint8Array(空) }。API 10之前只支持DataBlob, API 10之后增加支持null。       |
3534| callback | AsyncCallback\<[DataBlob](#datablob)> | 是   | 回调函数。当最终加/解密数据成功,err为undefined,data为剩余数据的加/解密结果DataBlob;否则为错误对象。 |
3535
3536**错误码:**
3537以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3538
3539| 错误码ID | 错误信息                |
3540| -------- | ----------------------- |
3541| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3542| 17620001 | memory error.           |
3543| 17620002 | runtime error.          |
3544| 17630001 | crypto operation error. |
3545
3546**以AES GCM模式加密为例:**
3547
3548此外,更多加解密流程的完整示例可参考[加解密开发指导](../../security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm.md)。
3549
3550```ts
3551import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3552import { buffer } from '@kit.ArkTS';
3553
3554function generateRandom(len: number) {
3555  let rand = cryptoFramework.createRandom();
3556  let generateRandSync = rand.generateRandomSync(len);
3557  return generateRandSync;
3558}
3559
3560function genGcmParamsSpec() {
3561  let ivBlob = generateRandom(12);
3562  let arr = [1, 2, 3, 4, 5, 6, 7, 8];
3563  let dataAad = new Uint8Array(arr);
3564  let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
3565  arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
3566  let dataTag = new Uint8Array(arr);
3567  let tagBlob: cryptoFramework.DataBlob = {
3568    data: dataTag
3569  };
3570  let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
3571    iv: ivBlob,
3572    aad: aadBlob,
3573    authTag: tagBlob,
3574    algName: "GcmParamsSpec"
3575  };
3576  return gcmParamsSpec;
3577}
3578
3579function cipherByCallback() {
3580  let gcmParams = genGcmParamsSpec();
3581  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
3582  let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
3583  symKeyGenerator.generateSymKey((err, symKey) => {
3584    cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams, (err,) => {
3585      let message = "This is a test";
3586      let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
3587      cipher.update(plainText, (err, encryptUpdate) => {
3588        cipher.doFinal(null, (err, tag) => {
3589          gcmParams.authTag = tag;
3590          console.info('encryptUpdate plainText:' + encryptUpdate.data);
3591        });
3592      });
3593    });
3594  });
3595}
3596```
3597
3598### doFinal
3599
3600doFinal(data: DataBlob | null): Promise\<DataBlob>
3601
3602(1)在对称加解密中,doFinal加/解密(分组模式产生的)剩余数据和本次传入的数据,最后结束加密或者解密数据操作,通过Promise获取加密或者解密数据。<br/>如果数据量较小,可以在doFinal中一次性传入数据,而不使用update;如果在本次加解密流程中,已经使用update传入过数据,可以在doFinal的data参数处传入null。<br/>根据对称加解密的模式不同,doFinal的输出有如下区别:
3603
3604- 对于GCM和CCM模式的对称加密:一次加密流程中,如果将每一次update和doFinal的结果拼接起来,会得到“密文+authTag”,即末尾的16字节(GCM模式)或12字节(CCM模式)是authTag,而其余部分均为密文。(也就是说,如果doFinal的data参数传入null,则doFinal的结果就是authTag)<br/>authTag需要填入解密时的[GcmParamsSpec](#gcmparamsspec)或[CcmParamsSpec](#ccmparamsspec);密文则作为解密时的入参data。
3605- 对于其他模式的对称加解密、GCM和CCM模式的对称解密:一次加/解密流程中,每一次update和doFinal的结果拼接起来,得到完整的明文/密文。
3606
3607(2)在RSA、SM2非对称加解密中,doFinal加/解密本次传入的数据,通过Promise获取加密或者解密数据。如果数据量较大,可以多次调用doFinal,拼接结果得到完整的明文/密文。
3608
3609> **说明:**
3610>
3611>  1. 对称加解密中,调用doFinal标志着一次加解密流程已经完成,即[Cipher](#cipher)实例的状态被清除,因此当后续开启新一轮加解密流程时,需要重新调用init()并传入完整的参数列表进行初始化<br/>(比如即使是对同一个Cipher实例,采用同样的对称密钥,进行加密然后解密,则解密中调用init的时候仍需填写params参数,而不能直接省略为null)。
3612>  2. 如果遇到解密失败,需检查加解密数据和init时的参数是否匹配,包括GCM模式下加密得到的authTag是否填入解密时的GcmParamsSpec等。
3613>  3. doFinal的结果可能为null,因此使用.data字段访问doFinal结果的具体数据前,请记得先判断结果是否为null,避免产生异常。
3614>    对于加密,CFB、OFB和CTR模式,如果doFinal传null, 则返回结果为null。<br/>
3615>    对于解密,GCM、CCM、CFB、OFB和CTR模式,如果doFinal传null,则返回结果为null;对于解密,其他模式,如果明文是加密块大小的整倍数,调用update传入所有密文,调用doFinal传null, 则返回结果为null。<br/>
3616>  4. 非对称加解密时多次doFinal操作的示例代码详见[使用RSA非对称密钥分段加解密](../../security/CryptoArchitectureKit/crypto-rsa-asym-encrypt-decrypt-by-segment.md),SM2和RSA的操作类似。
3617
3618**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3619
3620**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3621
3622API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3623
3624**参数:**
3625
3626| 参数名 | 类型                  | 必填 | 说明                 |
3627| ---- | --------------------- | ---- | -------------------- |
3628| data | [DataBlob](#datablob) \| null<sup>10+</sup> | 是   | 加密或者解密的数据。data参数允许为null,但不允许传入{data: Uint8Array(空) }。API 10之前只支持DataBlob, API 10之后增加支持null。 |
3629
3630**返回值:**
3631
3632| 类型                            | 说明                                             |
3633| ------------------------------- | ------------------------------------------------ |
3634| Promise\<[DataBlob](#datablob)> | Promise对象,返回剩余数据的加/解密结果DataBlob。 |
3635
3636**错误码:**
3637以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3638
3639| 错误码ID | 错误信息                                     |
3640| -------- | -------------------------------------------- |
3641| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3642| 17620001 | memory error.                                |
3643| 17620002 | runtime error.                               |
3644| 17630001 | crypto operation error.                      |
3645
3646**以AES GCM模式加密为例:**
3647
3648此外,更多加解密流程的完整示例可参考[加解密开发指导](../../security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm.md)。
3649
3650```ts
3651import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3652import { buffer } from '@kit.ArkTS';
3653
3654function generateRandom(len: number) {
3655  let rand = cryptoFramework.createRandom();
3656  let generateRandSync = rand.generateRandomSync(len);
3657  return generateRandSync;
3658}
3659
3660function genGcmParamsSpec() {
3661  let ivBlob = generateRandom(12);
3662  let arr = [1, 2, 3, 4, 5, 6, 7, 8];
3663  let dataAad = new Uint8Array(arr);
3664  let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
3665  arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
3666  let dataTag = new Uint8Array(arr);
3667  let tagBlob: cryptoFramework.DataBlob = {
3668    data: dataTag
3669  };
3670  let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
3671    iv: ivBlob,
3672    aad: aadBlob,
3673    authTag: tagBlob,
3674    algName: "GcmParamsSpec"
3675  };
3676  return gcmParamsSpec;
3677}
3678
3679async function cipherByPromise() {
3680  let gcmParams = genGcmParamsSpec();
3681  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
3682  let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
3683  let symKey = await symKeyGenerator.generateSymKey();
3684  await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
3685  let message = "This is a test";
3686  let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
3687  let encryptUpdate = await cipher.update(plainText);
3688  gcmParams.authTag = await cipher.doFinal(null);
3689  console.info('encryptUpdate plainText: ' + encryptUpdate.data);
3690}
3691```
3692
3693### doFinalSync<sup>12+</sup>
3694
3695doFinalSync(data: DataBlob | null): DataBlob
3696
3697(1)在对称加解密中,doFinalSync加/解密(分组模式产生的)剩余数据和本次传入的数据,最后结束加密或者解密数据操作,通过注册回调函数获取加密或者解密数据。<br/>如果数据量较小,可以在doFinalSync中一次性传入数据,而不使用updateSync;如果在本次加解密流程中,已经使用[updateSync](#updatesync12)传入过数据,可以在doFinalSync的data参数处传入null。<br/>根据对称加解密的模式不同,doFinalSync的输出有如下区别:
3698
3699- 对于GCM和CCM模式的对称加密:一次加密流程中,如果将每一次updateSync和doFinalSync的结果拼接起来,会得到“密文+authTag”,即末尾的16字节(GCM模式)或12字节(CCM模式)是authTag,而其余部分均为密文。(也就是说,如果doFinalSync的data参数传入null,则doFinalSync的结果就是authTag)<br/>authTag需要填入解密时的[GcmParamsSpec](#gcmparamsspec)或[CcmParamsSpec](#ccmparamsspec);密文则作为解密时的入参data。
3700- 对于其他模式的对称加解密、GCM和CCM模式的对称解密:一次加/解密流程中,每一次updateSync和doFinalSync的结果拼接起来,得到完整的明文/密文。
3701
3702(2)在RSA、SM2非对称加解密中,doFinalSync加/解密本次传入的数据,通过注册回调函数获取加密或者解密数据。如果数据量较大,可以多次调用doFinalSync,拼接结果得到完整的明文/密文。
3703
3704其他注意事项同接口[doFinal()](#dofinal)说明。
3705
3706**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3707
3708**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3709
3710**参数:**
3711
3712| 参数名 | 类型                                        | 必填 | 说明                                                         |
3713| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
3714| data   | [DataBlob](#datablob)  | 是   | 加密或者解密的数据。在对称加解密中允许为null,但不允许传入{data: Uint8Array(空) }。 |
3715
3716**错误码:**
3717以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3718
3719| 错误码ID | 错误信息                |
3720| -------- | ----------------------- |
3721| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3722| 17620001 | memory error.           |
3723| 17620002 | runtime error.          |
3724| 17630001 | crypto operation error. |
3725
3726**以AES GCM模式加密为例:**
3727
3728此外,更多加解密流程的完整示例可参考[加解密开发指导](../../security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm.md)。
3729
3730```ts
3731import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3732import { buffer } from '@kit.ArkTS';
3733
3734function generateRandom(len: number) {
3735  let rand = cryptoFramework.createRandom();
3736  let generateRandSync = rand.generateRandomSync(len);
3737  return generateRandSync;
3738}
3739
3740function genGcmParamsSpec() {
3741  let ivBlob = generateRandom(12);
3742  let arr = [1, 2, 3, 4, 5, 6, 7, 8];
3743  let dataAad = new Uint8Array(arr);
3744  let aadBlob: cryptoFramework.DataBlob = { data: dataAad };
3745  arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
3746  let dataTag = new Uint8Array(arr);
3747  let tagBlob: cryptoFramework.DataBlob = {
3748    data: dataTag
3749  };
3750  let gcmParamsSpec: cryptoFramework.GcmParamsSpec = {
3751    iv: ivBlob,
3752    aad: aadBlob,
3753    authTag: tagBlob,
3754    algName: "GcmParamsSpec"
3755  };
3756  return gcmParamsSpec;
3757}
3758
3759async function cipherBySync() {
3760  let gcmParams = genGcmParamsSpec();
3761  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
3762  let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7');
3763  let symKey = await symKeyGenerator.generateSymKey();
3764  await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
3765  let message = "This is a test";
3766  let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
3767  let encryptUpdate = cipher.updateSync(plainText);
3768  gcmParams.authTag = cipher.doFinalSync(null);
3769  console.info('encryptUpdate plainText: ' + encryptUpdate.data);
3770}
3771
3772```
3773
3774### setCipherSpec<sup>10+</sup>
3775
3776setCipherSpec(itemType: CipherSpecItem, itemValue: Uint8Array): void
3777
3778设置加解密参数。常用的加解密参数可以直接通过[createCipher](#cryptoframeworkcreatecipher) 来指定,剩余参数可以通过本接口指定。当前只支持RSA算法。
3779
3780**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3781
3782**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3783
3784API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3785
3786**参数:**
3787
3788| 参数名   | 类型                 | 必填 | 说明       |
3789| -------- | -------------------- | ---- | ---------- |
3790| itemType     | [CipherSpecItem](#cipherspecitem10)           | 是   | 用于指定需要设置的加解密参数。 |
3791| itemValue | Uint8Array | 是   | 用于指定加解密参数的具体值。 |
3792
3793**错误码:**
3794以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3795
3796| 错误码ID | 错误信息               |
3797| -------- | ---------------------- |
3798| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3799| 801 | this operation is not supported.          |
3800| 17620001 | memory error.          |
3801| 17630001 | crypto operation error. |
3802
3803**示例:**
3804
3805<!--code_no_check-->
3806```ts
3807let cipher: cryptoFramework.Cipher; // The process of generating the Cipher instance is omitted here.
3808let pSource = new Uint8Array([1,2,3,4]);
3809cipher.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource);
3810```
3811
3812### getCipherSpec<sup>10+</sup>
3813
3814getCipherSpec(itemType: CipherSpecItem): string | Uint8Array
3815
3816获取加解密参数。当前只支持RSA算法和SM2算法,从API version 11开始,支持SM2算法获取加解密参数。
3817
3818**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3819
3820**系统能力:** SystemCapability.Security.CryptoFramework.Cipher
3821
3822API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Cipher
3823
3824**参数:**
3825
3826| 参数名 | 类型     | 必填 | 说明       |
3827| ------ | -------- | ---- | ---------- |
3828| itemType   | [CipherSpecItem](#cipherspecitem10) | 是   | 用于指定需要获取的加解密参数。 |
3829
3830**返回值:**
3831
3832| 类型           | 说明        |
3833| -------------- | ----------- |
3834| string \| Uint8Array | 获取的加解密参数的具体值。 |
3835
3836**错误码:**
3837以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3838
3839| 错误码ID | 错误信息               |
3840| -------- | ---------------------- |
3841| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3842| 801 | this operation is not supported.          |
3843| 17620001 | memory error.          |
3844| 17630001 | crypto operation error. |
3845
3846**示例:**
3847
3848<!--code_no_check-->
3849```ts
3850let cipher: cryptoFramework.Cipher; // The process of generating the Cipher instance is omitted here.
3851let mdName = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR);
3852```
3853
3854## cryptoFramework.createSign
3855
3856createSign(algName: string): Sign
3857
3858Sign实例生成。
3859
3860支持的规格详见[签名验签规格](../../security/CryptoArchitectureKit/crypto-sign-sig-verify-overview.md)。
3861
3862**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3863
3864**系统能力:** SystemCapability.Security.CryptoFramework.Signature
3865
3866API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
3867
3868**参数:**
3869
3870| 参数名  | 类型   | 必填 | 说明                                                         |
3871| ------- | ------ | ---- | ------------------------------------------------------------ |
3872| algName | string | 是   | 指定签名算法:RSA,ECC,DSA,SM2<sup>10+</sup>或ED25519<sup>11+</sup>。使用RSA PKCS1模式时需要设置摘要,使用RSA PSS模式时需要设置摘要和掩码摘要。<br/>使用RSA算法签名时,通过设置OnlySign参数可支持传入数据摘要仅作签名。 |
3873
3874**返回值**:
3875
3876| 类型 | 说明                               |
3877| ---- | ---------------------------------- |
3878| Sign | 返回由输入算法指定生成的Sign对象。 |
3879
3880**错误码:**
3881以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3882
3883| 错误码ID | 错误信息               |
3884| -------- | ---------------------- |
3885| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3886| 801 | this operation is not supported.          |
3887| 17620001 | memory error.          |
3888
3889**示例:**
3890
3891```ts
3892import { cryptoFramework } from '@kit.CryptoArchitectureKit';
3893
3894let signer1 = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
3895
3896let signer2 = cryptoFramework.createSign('RSA1024|PSS|SHA256|MGF1_SHA256');
3897
3898let signer3 = cryptoFramework.createSign('ECC224|SHA256');
3899
3900let signer4 = cryptoFramework.createSign('DSA2048|SHA256');
3901
3902let signer5 = cryptoFramework.createSign('RSA1024|PKCS1|SHA256|OnlySign');
3903```
3904
3905## Sign
3906
3907Sign类,使用Sign方法之前需要创建该类的实例进行操作,通过[createSign(algName: string): Sign](#cryptoframeworkcreatesign)方法构造此实例。按序调用本类中的init、update、sign方法完成签名操作。签名操作的示例代码详见[签名验签开发指导](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md)。
3908
3909Sign类不支持重复初始化,当业务方需要使用新密钥签名时,需要重新创建新Sign对象并调用init初始化。
3910
3911业务方使用时,在createSign时确定签名的模式,调用init接口设置密钥。
3912
3913当待签名数据较短时,可在init初始化后,(无需update)直接调用sign接口传入原文数据进行签名。
3914
3915当待签名数据较长时,可通过update接口分段传入切分后的原文数据,最后调用sign接口对整体原文数据进行签名。
3916
3917当使用update分段传入原文时,sign接口API 10之前只支持传入DataBlob, API 10之后增加支持null。业务方可在循环中调用update接口,循环结束后调用sign进行签名。
3918
3919当使用DSA算法进行签名,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。
3920
3921### 属性
3922
3923**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3924
3925**系统能力:** SystemCapability.Security.CryptoFramework.Signature
3926
3927API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
3928
3929| 名称    | 类型   | 可读 | 可写 | 说明                         |
3930| ------- | ------ | ---- | ---- | ---------------------------- |
3931| algName | string | 是   | 否   | 签名指定的算法名称。 |
3932
3933### init
3934
3935init(priKey: PriKey, callback: AsyncCallback\<void>): void
3936
3937使用私钥初始化Sign对象,通过注册回调函数获取结果。init、update、sign为三段式接口,需要成组使用。其中init和sign必选,update可选。
3938
3939Sign类暂不支持重复init。
3940
3941**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3942
3943**系统能力:** SystemCapability.Security.CryptoFramework.Signature
3944
3945API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
3946
3947**参数:**
3948
3949| 参数名   | 类型                 | 必填 | 说明             |
3950| -------- | -------------------- | ---- | ---------------- |
3951| priKey   | [PriKey](#prikey)    | 是   | 用于Sign的初始化。 |
3952| callback | AsyncCallback\<void> | 是   | 回调函数。当签名初始化成功,err为undefined,否则为错误对象。 |
3953
3954**错误码:**
3955以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3956
3957| 错误码ID | 错误信息               |
3958| -------- | ---------------------- |
3959| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3960| 17620001 | memory error.          |
3961| 17620002 | runtime error.          |
3962| 17630001 | crypto operation error. |
3963
3964### init
3965
3966init(priKey: PriKey): Promise\<void>
3967
3968使用私钥初始化Sign对象,通过Promise获取结果。init、update、sign为三段式接口,需要成组使用。其中init和sign必选,update可选。
3969
3970Sign类暂不支持重复init。
3971
3972**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3973
3974**系统能力:** SystemCapability.Security.CryptoFramework.Signature
3975
3976API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
3977
3978**参数:**
3979
3980| 参数名 | 类型 | 必填 | 说明             |
3981| ------ | ---- | ---- | ---------------- |
3982| priKey | [PriKey](#prikey)  | 是   | 用于Sign的初始化。 |
3983
3984**返回值:**
3985
3986| 类型           | 说明          |
3987| -------------- | ------------- |
3988| Promise\<void> | 无返回结果的Promise对象。 |
3989
3990**错误码:**
3991以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
3992
3993| 错误码ID | 错误信息               |
3994| -------- | ---------------------- |
3995| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
3996| 17620001 | memory error.          |
3997| 17620002 | runtime error.          |
3998| 17630001 | crypto operation error. |
3999
4000### initSync<sup>12+</sup>
4001
4002initSync(priKey: PriKey): void
4003
4004使用私钥初始化Sign对象,通过同步方式获取结果。initSync、updateSync、signSync为三段式接口,需要成组使用。其中initSync和signSync必选,updateSync可选。
4005
4006Sign类暂不支持重复initSync。
4007
4008**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4009
4010**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4011
4012**参数:**
4013
4014| 参数名 | 类型 | 必填 | 说明             |
4015| ------ | ---- | ---- | ---------------- |
4016| priKey | [PriKey](#prikey)  | 是   | 用于Sign的初始化。 |
4017
4018**错误码:**
4019以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4020
4021| 错误码ID | 错误信息               |
4022| -------- | ---------------------- |
4023| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4024| 17620001 | memory error.          |
4025| 17620002 | runtime error.          |
4026| 17630001 | crypto operation error. |
4027
4028### update
4029
4030update(data: DataBlob, callback: AsyncCallback\<void>): void
4031
4032追加待签名数据,通过注册回调函数完成更新。
4033
4034必须在对[Sign](#sign)实例使用[init()](#init-2)初始化后,才能使用本函数。
4035
4036> **说明:**
4037>
4038> 根据数据量,可以不调用update(即[init](#init-2)完成后直接调用[sign](#sign-1))或多次调用update。<br/>
4039> 算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的签名操作,采用多次update的方式传入数据,避免一次性申请过大内存。<br/>
4040> 签名使用多次update操作的示例代码详见[使用RSA密钥对分段签名验签](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-by-segment.md),其余算法操作类似。<br/>
4041> OnlySign模式下,不支持update操作,需要直接使用sign传入数据。<br/>
4042> 当使用DSA算法进行签名,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。
4043
4044**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4045
4046**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4047
4048API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4049
4050**参数:**
4051
4052| 参数名   | 类型                  | 必填 | 说明         |
4053| -------- | --------------------- | ---- | ------------ |
4054| data     | [DataBlob](#datablob) | 是   | 传入的消息。 |
4055| callback | AsyncCallback\<void>  | 是   | 回调函数。当签名更新成功,err为undefined,否则为错误对象。|
4056
4057**错误码:**
4058以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4059
4060| 错误码ID | 错误信息               |
4061| -------- | ---------------------- |
4062| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4063| 17620001 | memory error.          |
4064| 17620002 | runtime error.          |
4065| 17630001 | crypto operation error. |
4066
4067### update
4068
4069update(data: DataBlob): Promise\<void>
4070
4071追加待签名数据,通过Promise方式完成更新。
4072
4073必须在对[Sign](#sign)实例使用[init()](#init-3)初始化后,才能使用本函数。
4074
4075> **说明:**
4076>
4077> 根据数据量,可以不调用update(即[init](#init-3)完成后直接调用[sign](#sign-2))或多次调用update。<br/>
4078> 算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的签名操作,采用多次update的方式传入数据,避免一次性申请过大内存。<br/>
4079> 签名使用多次update操作的示例代码详见[使用RSA密钥对分段签名验签](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-by-segment.md),其余算法操作类似。<br/>
4080> OnlySign模式下,不支持update操作,需要直接使用sign传入数据。<br/>
4081> 当使用DSA算法进行签名,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。
4082
4083**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4084
4085**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4086
4087API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4088
4089**参数:**
4090
4091| 参数名 | 类型     | 必填 | 说明       |
4092| ------ | -------- | ---- | ---------- |
4093| data   | [DataBlob](#datablob)  | 是   | 传入的消息。 |
4094
4095**返回值:**
4096
4097| 类型           | 说明          |
4098| -------------- | ------------- |
4099| Promise\<void> | 无返回结果的Promise对象。 |
4100
4101**错误码:**
4102以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4103
4104| 错误码ID | 错误信息               |
4105| -------- | ---------------------- |
4106| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4107| 17620001 | memory error.          |
4108| 17620002 | runtime error.          |
4109| 17630001 | crypto operation error. |
4110
4111### updateSync<sup>12+</sup>
4112
4113updateSync(data: DataBlob): void
4114
4115追加待签名数据,通过同步方式完成更新。
4116
4117必须在对[Sign](#sign)实例使用[initSync()](#initsync12-1)初始化后,才能使用本函数。
4118
4119> **说明:**
4120>
4121> 根据数据量,可以不调用updateSync(即[initSync](#initsync12-1)完成后直接调用[signSync](#signsync12))或多次调用updateSync。<br/>
4122> 算法库目前没有对updateSync(单次或累计)的数据量设置大小限制,建议对于大数据量的签名操作,采用多次updateSync的方式传入数据,避免一次性申请过大内存。<br/>
4123> 签名使用多次updateSync操作的示例代码详见[使用RSA密钥对分段签名验签](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-by-segment.md),其余算法操作类似。<br/>
4124> OnlySign模式下,不支持updateSync操作,需要直接使用signSync传入数据。<br/>
4125> 当使用DSA算法进行签名,并设置了摘要算法为NoHash时,则不支持updateSync操作,updateSync接口会返回错误码ERR_CRYPTO_OPERATION。
4126
4127**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4128
4129**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4130
4131**参数:**
4132
4133| 参数名 | 类型     | 必填 | 说明       |
4134| ------ | -------- | ---- | ---------- |
4135| data   | [DataBlob](#datablob)  | 是   | 传入的消息。 |
4136
4137**返回值:**
4138
4139| 类型           | 说明          |
4140| -------------- | ------------- |
4141| void | 无返回结果。 |
4142
4143**错误码:**
4144以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4145
4146| 错误码ID | 错误信息               |
4147| -------- | ---------------------- |
4148| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4149| 17620001 | memory error.          |
4150| 17620002 | runtime error.          |
4151| 17630001 | crypto operation error. |
4152
4153### sign
4154
4155sign(data: DataBlob | null, callback: AsyncCallback\<DataBlob>): void
4156
4157对数据进行签名,通过注册回调函数获取签名结果。
4158
4159**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4160
4161**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4162
4163API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4164
4165**参数:**
4166
4167| 参数名   | 类型                 | 必填 | 说明       |
4168| -------- | -------------------- | ---- | ---------- |
4169| data     | [DataBlob](#datablob) \| null<sup>10+</sup>              | 是   | 传入的消息。API 10之前只支持DataBlob, API 10之后增加支持null。 |
4170| callback | AsyncCallback\<[DataBlob](#datablob)> | 是   | 回调函数,用于获取DataBlob数据。 |
4171
4172**错误码:**
4173以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4174
4175| 错误码ID | 错误信息               |
4176| -------- | ---------------------- |
4177| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4178| 17620001 | memory error.          |
4179| 17620002 | runtime error.          |
4180| 17630001 | crypto operation error. |
4181
4182### sign
4183
4184sign(data: DataBlob | null): Promise\<DataBlob>
4185
4186对数据进行签名,通过Promise方式返回签名结果。
4187
4188**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4189
4190**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4191
4192API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4193
4194**参数:**
4195
4196| 参数名 | 类型     | 必填 | 说明       |
4197| ------ | -------- | ---- | ---------- |
4198| data   | [DataBlob](#datablob) \| null<sup>10+</sup>  | 是   | 传入的消息。 |
4199
4200**返回值:**
4201
4202| 类型           | 说明          |
4203| -------------- | ------------- |
4204| Promise\<[DataBlob](#datablob)> | 返回签名结果。 |
4205
4206**错误码:**
4207以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4208
4209| 错误码ID | 错误信息               |
4210| -------- | ---------------------- |
4211| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4212| 17620001 | memory error.          |
4213| 17620002 | runtime error.          |
4214| 17630001 | crypto operation error. |
4215
4216### signSync<sup>12+</sup>
4217
4218signSync(data: DataBlob | null): DataBlob
4219
4220对数据进行签名,通过同步方式返回签名结果。
4221
4222**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4223
4224**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4225
4226**参数:**
4227
4228| 参数名 | 类型     | 必填 | 说明       |
4229| ------ | -------- | ---- | ---------- |
4230| data   | [DataBlob](#datablob) \| null  | 是   | 传入的消息。 |
4231
4232**返回值:**
4233
4234| 类型           | 说明          |
4235| -------------- | ------------- |
4236| [DataBlob](#datablob) | 返回签名结果。 |
4237
4238**错误码:**
4239以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4240
4241| 错误码ID | 错误信息               |
4242| -------- | ---------------------- |
4243| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4244| 17620001 | memory error.          |
4245| 17620002 | runtime error.          |
4246| 17630001 | crypto operation error. |
4247
4248**callback示例:**
4249
4250此外,更多签名验签的完整示例可参考[签名验签开发指导](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md)。
4251
4252```ts
4253import { cryptoFramework } from '@kit.CryptoArchitectureKit';
4254import { buffer } from '@kit.ArkTS';
4255
4256function signByCallback() {
4257  let inputUpdate: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan1", 'utf-8').buffer) };
4258  let inputVerify: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan2", 'utf-8').buffer) };
4259  let pkData = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
4260  let skData = new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48, 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10, 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5, 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224, 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48, 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23, 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0, 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200, 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198, 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224, 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133, 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71, 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144, 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30, 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2, 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222, 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191, 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246, 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55, 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182, 207, 254, 61, 71, 184, 167, 184]);
4261  let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };
4262  let priKeyBlob: cryptoFramework.DataBlob = { data: skData };
4263  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
4264  let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
4265  rsaGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
4266    signer.init(keyPair.priKey, err => {
4267      signer.update(inputUpdate, err => {
4268        signer.sign(inputVerify, (err, signData) => {
4269          console.info('sign output is ' + signData.data);
4270        });
4271      });
4272    });
4273  });
4274}
4275```
4276
4277**Promise示例:**
4278
4279此外,更多签名验签的完整示例可参考[签名验签开发指导](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md)。
4280
4281```ts
4282import { cryptoFramework } from '@kit.CryptoArchitectureKit';
4283import { buffer } from '@kit.ArkTS';
4284
4285async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
4286  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
4287  let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
4288  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
4289  let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
4290  console.info('convertKey success');
4291  return keyPair;
4292}
4293
4294async function signByPromise() {
4295  let pkData = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
4296  let skData = new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48, 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10, 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5, 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224, 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48, 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23, 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0, 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200, 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198, 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224, 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133, 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71, 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144, 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30, 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2, 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222, 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191, 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246, 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55, 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182, 207, 254, 61, 71, 184, 167, 184]);
4297  let keyPair = await genKeyPairByData(pkData, skData);
4298  let inputUpdate: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan1", 'utf-8').buffer) };
4299  let inputSign: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan2", 'utf-8').buffer) };
4300  let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
4301  await signer.init(keyPair.priKey);
4302  await signer.update(inputUpdate);
4303  let signData = await signer.sign(inputSign);
4304  console.info('signData result: ' + signData.data);
4305}
4306```
4307
4308**Sync示例:**
4309
4310此外,更多签名验签的完整示例可参考[签名验签开发指导](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md)。
4311
4312```ts
4313import { cryptoFramework } from '@kit.CryptoArchitectureKit';
4314import { buffer } from '@kit.ArkTS';
4315
4316function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
4317  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
4318  let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
4319  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
4320  let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
4321  console.info('convertKeySync success');
4322  return keyPair;
4323}
4324
4325function signBySync() {
4326  let pkData = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
4327  let skData = new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48, 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10, 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5, 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224, 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48, 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23, 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0, 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200, 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198, 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224, 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133, 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71, 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144, 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30, 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2, 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222, 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191, 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246, 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55, 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182, 207, 254, 61, 71, 184, 167, 184]);
4328  let keyPair =  genKeyPairByData(pkData, skData);
4329  let inputUpdate: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan1", 'utf-8').buffer) };
4330  let inputSign: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan2", 'utf-8').buffer) };
4331  let signer = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
4332  signer.initSync(keyPair.priKey);
4333  signer.updateSync(inputUpdate);
4334  let signData = signer.signSync(inputSign);
4335  console.info('signData result: ' + signData.data);
4336}
4337```
4338
4339### setSignSpec<sup>10+</sup>
4340
4341setSignSpec(itemType: SignSpecItem, itemValue: number): void
4342
4343setSignSpec(itemType: SignSpecItem, itemValue: number \| Uint8Array): void
4344
4345设置签名参数。常用的签名参数可以直接通过[createSign](#cryptoframeworkcreatesign) 来指定,剩余参数可以通过本接口指定。
4346
4347只支持RSA算法、SM2算法,从API version11开始,支持SM2算法设置签名参数。
4348
4349**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4350
4351**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4352
4353API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4354
4355**参数:**
4356
4357| 参数名   | 类型                 | 必填 | 说明       |
4358| -------- | -------------------- | ---- | ---------- |
4359| itemType     | [SignSpecItem](#signspecitem10)              | 是   | 用于指定需要设置的签名参数。 |
4360| itemValue | number \| Uint8Array<sup>11+</sup> | 是   | 用于指定签名参数的具体值。 |
4361
4362**错误码:**
4363以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4364
4365| 错误码ID | 错误信息               |
4366| -------- | ---------------------- |
4367| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4368| 801 | this operation is not supported.          |
4369| 17620001 | memory error.          |
4370| 17630001 | crypto operation error. |
4371
4372**示例:**
4373
4374<!--code_no_check-->
4375```ts
4376let signer: cryptoFramework.Sign; // The process of generating the Sign instance is omitted here.
4377let setN = 20;
4378signer.setSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
4379```
4380
4381### getSignSpec<sup>10+</sup>
4382
4383getSignSpec(itemType: SignSpecItem): string | number
4384
4385获取签名参数。当前只支持RSA算法。
4386
4387**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4388
4389**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4390
4391API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4392
4393**参数:**
4394
4395| 参数名 | 类型     | 必填 | 说明       |
4396| ------ | -------- | ---- | ---------- |
4397| itemType | [SignSpecItem](#signspecitem10)  | 是   | 用于指定需要获取的签名参数。 |
4398
4399**返回值:**
4400
4401| 类型           | 说明        |
4402| -------------- | ----------- |
4403| string \| number | 获取的签名参数的具体值。 |
4404
4405**错误码:**
4406以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4407
4408| 错误码ID | 错误信息               |
4409| -------- | ---------------------- |
4410| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4411| 801 | this operation is not supported.          |
4412| 17620001 | memory error.          |
4413| 17630001 | crypto operation error. |
4414
4415**示例:**
4416
4417<!--code_no_check-->
4418```ts
4419let signer: cryptoFramework.Sign; // The process of generating the Sign instance is omitted here.
4420let saltLen = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM);
4421```
4422
4423## cryptoFramework.createVerify
4424
4425createVerify(algName: string): Verify
4426
4427Verify实例生成。
4428
4429支持的规格详见[签名验签规格](../../security/CryptoArchitectureKit/crypto-sign-sig-verify-overview.md)。
4430
4431**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4432
4433**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4434
4435API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4436
4437**参数:**
4438
4439| 参数名  | 类型   | 必填 | 说明                                                         |
4440| ------- | ------ | ---- | ------------------------------------------------------------ |
4441| algName | string | 是   | 指定签名算法:RSA,ECC,DSA,SM2<sup>10+</sup>或ED25519<sup>11+</sup>。使用RSA PKCS1模式时需要设置摘要,使用RSA PSS模式时需要设置摘要和掩码摘要。<br/>使用RSA算法验签时,通过设置Recover参数可支持对签名后数据进行验签恢复。 |
4442
4443**返回值**:
4444
4445| 类型   | 说明                                 |
4446| ------ | ------------------------------------ |
4447| Verify | 返回由输入算法指定生成的Verify对象。 |
4448
4449**错误码:**
4450以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4451
4452| 错误码ID | 错误信息               |
4453| -------- | ---------------------- |
4454| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4455| 801 | this operation is not supported.          |
4456| 17620001 | memory error.          |
4457
4458**示例:**
4459
4460```ts
4461import { cryptoFramework } from '@kit.CryptoArchitectureKit';
4462
4463let verifyer1 = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
4464
4465let verifyer2 = cryptoFramework.createVerify('RSA1024|PSS|SHA256|MGF1_SHA256');
4466
4467let verifyer3 = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256|Recover');
4468```
4469
4470## Verify
4471
4472Verify类,使用Verify方法之前需要创建该类的实例进行操作,通过[createVerify(algName: string): Verify](#cryptoframeworkcreateverify)方法构造此实例。按序调用本类中的init、update、verify方法完成签名操作。验签操作的示例代码详见[签名验签开发指导](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md)。
4473
4474Verify类不支持重复初始化,当业务方需要使用新密钥验签时,需要重新创建新Verify对象并调用init初始化。
4475
4476业务方使用时,在createVerify时确定验签的模式,调用init接口设置密钥。
4477
4478当被签名的消息较短时,可在init初始化后,(无需update)直接调用verify接口传入被签名的消息和签名(signatureData)进行验签。
4479
4480当被签名的消息较长时,可通过update接口分段传入被签名的消息,最后调用verify接口对消息全文进行验签。verify接口的data入参在API 10之前只支持DataBlob, API 10之后增加支持null。业务方可在循环中调用update接口,循环结束后调用verify传入签名(signatureData)进行验签。
4481
4482当使用DSA算法进行验签,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。
4483
4484### 属性
4485
4486**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4487
4488**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4489
4490API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4491
4492| 名称    | 类型   | 可读 | 可写 | 说明                         |
4493| ------- | ------ | ---- | ---- | ---------------------------- |
4494| algName | string | 是   | 否   | 验签指定的算法名称。 |
4495
4496### init
4497
4498init(pubKey: PubKey, callback: AsyncCallback\<void>): void
4499
4500传入公钥初始化Verify对象,通过注册回调函数获取结果。init、update、verify为三段式接口,需要成组使用。其中init和verify必选,update可选。
4501
4502**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4503
4504**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4505
4506API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4507
4508**参数:**
4509
4510| 参数名   | 类型                 | 必填 | 说明                           |
4511| -------- | -------------------- | ---- | ------------------------------ |
4512| pubKey   | [PubKey](#pubkey)    | 是   | 公钥对象,用于Verify的初始化。 |
4513| callback | AsyncCallback\<void> | 是   | 回调函数。当验签初始化成功,err为undefined,否则为错误对象。  |
4514
4515**错误码:**
4516以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4517
4518| 错误码ID | 错误信息               |
4519| -------- | ---------------------- |
4520| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4521| 17620001 | memory error.          |
4522| 17620002 | runtime error.          |
4523| 17630001 | crypto operation error. |
4524
4525### init
4526
4527init(pubKey: PubKey): Promise\<void>
4528
4529传入公钥初始化Verify对象,通过Promise获取结果。init、update、verify为三段式接口,需要成组使用。其中init和verify必选,update可选。
4530
4531**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4532
4533**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4534
4535API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4536
4537**参数:**
4538
4539| 参数名 | 类型 | 必填 | 说明                         |
4540| ------ | ---- | ---- | ---------------------------- |
4541| pubKey | [PubKey](#pubkey)  | 是   | 公钥对象,用于Verify的初始化。 |
4542
4543**返回值:**
4544
4545| 类型           | 说明          |
4546| -------------- | ------------- |
4547| Promise\<void> | 无返回结果的Promise对象。 |
4548
4549**错误码:**
4550以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4551
4552| 错误码ID | 错误信息               |
4553| -------- | ---------------------- |
4554| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4555| 17620001 | memory error.          |
4556| 17620002 | runtime error.          |
4557| 17630001 | crypto operation error. |
4558
4559### initSync<sup>12+</sup>
4560
4561initSync(pubKey: PubKey): void
4562
4563传入公钥初始化Verify对象,通过同步方式获取结果。initSync、updateSync、verifySync为三段式接口,需要成组使用。其中initSync和verifySync必选,updateSync可选。
4564
4565**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4566
4567**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4568
4569**参数:**
4570
4571| 参数名 | 类型 | 必填 | 说明                         |
4572| ------ | ---- | ---- | ---------------------------- |
4573| pubKey | [PubKey](#pubkey)  | 是   | 公钥对象,用于Verify的初始化。 |
4574
4575**返回值:**
4576
4577| 类型           | 说明          |
4578| -------------- | ------------- |
4579| void | 无返回结果。 |
4580
4581**错误码:**
4582以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4583
4584| 错误码ID | 错误信息               |
4585| -------- | ---------------------- |
4586| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4587| 17620001 | memory error.          |
4588| 17620002 | runtime error.          |
4589| 17630001 | crypto operation error. |
4590
4591### update
4592
4593update(data: DataBlob, callback: AsyncCallback\<void>): void
4594
4595追加待验签数据,通过注册回调函数完成更新。
4596
4597必须在对[Verify](#verify)实例使用[init()](#init-4)初始化后,才能使用本函数。
4598
4599> **说明:**
4600>
4601> 根据数据量,可以不调用update(即[init](#init-4)完成后直接调用[verify](#verify-1))或多次调用update。<br/>
4602> 算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的验签操作,采用多次update的方式传入数据,避免一次性申请过大内存。<br/>
4603> 验签使用多次update操作的示例代码详见[使用RSA密钥对分段签名验签](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-by-segment.md),其余算法操作类似。<br/>
4604> 当使用DSA算法进行验签,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。
4605
4606**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4607
4608**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4609
4610API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4611
4612**参数:**
4613
4614| 参数名   | 类型                  | 必填 | 说明         |
4615| -------- | --------------------- | ---- | ------------ |
4616| data     | [DataBlob](#datablob) | 是   | 传入的消息。 |
4617| callback | AsyncCallback\<void>  | 是   | 回调函数。当验签更新成功,err为undefined,否则为错误对象。|
4618
4619**错误码:**
4620以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4621
4622| 错误码ID | 错误信息               |
4623| -------- | ---------------------- |
4624| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4625| 17620001 | memory error.          |
4626| 17620002 | runtime error.          |
4627| 17630001 | crypto operation error. |
4628
4629### update
4630
4631update(data: DataBlob): Promise\<void>
4632
4633追加待验签数据,通过Promise方式完成更新。
4634
4635必须在对[Verify](#verify)实例使用[init()](#init-5)初始化后,才能使用本函数。
4636
4637> **说明:**
4638>
4639> 根据数据量,可以不调用update(即[init](#init-5)完成后直接调用[verify](#verify-2))或多次调用update。<br/>
4640> 算法库目前没有对update(单次或累计)的数据量设置大小限制,建议对于大数据量的验签操作,采用多次update的方式传入数据,避免一次性申请过大内存。<br/>
4641> 验签使用多次update操作的示例代码详见[使用RSA密钥对分段签名验签](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-by-segment.md),其余算法操作类似。<br/>
4642> 当使用DSA算法进行验签,并设置了摘要算法为NoHash时,则不支持update操作,update接口会返回错误码ERR_CRYPTO_OPERATION。
4643
4644**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4645
4646**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4647
4648API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4649
4650**参数:**
4651
4652| 参数名 | 类型     | 必填 | 说明       |
4653| ------ | -------- | ---- | ---------- |
4654| data   | [DataBlob](#datablob)  | 是   | 传入的消息。 |
4655
4656**返回值:**
4657
4658| 类型           | 说明          |
4659| -------------- | ------------- |
4660| Promise\<void> | 无返回结果的Promise对象。 |
4661
4662**错误码:**
4663以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4664
4665| 错误码ID | 错误信息               |
4666| -------- | ---------------------- |
4667| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4668| 17620001 | memory error.          |
4669| 17620002 | runtime error.          |
4670| 17630001 | crypto operation error. |
4671
4672### updateSync<sup>12+</sup>
4673
4674updateSync(data: DataBlob): void
4675
4676追加待验签数据,通过同步方式完成更新。
4677
4678必须在对[Verify](#verify)实例使用[initSync()](#initsync12-2)初始化后,才能使用本函数。
4679
4680> **说明:**
4681>
4682> 根据数据量,可以不调用updateSync(即[initSync](#initsync12-2)完成后直接调用[verifySync](#verifysync12))或多次调用updateSync。<br/>
4683> 算法库目前没有对updateSync(单次或累计)的数据量设置大小限制,建议对于大数据量的验签操作,采用多次updateSync的方式传入数据,避免一次性申请过大内存。<br/>
4684> 验签使用多次updateSync操作的示例代码详见[使用RSA密钥对分段签名验签](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-by-segment.md),其余算法操作类似。<br/>
4685> 当使用DSA算法进行验签,并设置了摘要算法为NoHash时,则不支持updateSync操作,updateSync接口会返回错误码ERR_CRYPTO_OPERATION。
4686
4687**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4688
4689**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4690
4691**参数:**
4692
4693| 参数名 | 类型     | 必填 | 说明       |
4694| ------ | -------- | ---- | ---------- |
4695| data   | [DataBlob](#datablob)  | 是   | 传入的消息。 |
4696
4697**返回值:**
4698
4699| 类型           | 说明          |
4700| -------------- | ------------- |
4701| void | 无返回结果。 |
4702
4703**错误码:**
4704以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4705
4706| 错误码ID | 错误信息               |
4707| -------- | ---------------------- |
4708| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4709| 17620001 | memory error.          |
4710| 17620002 | runtime error.          |
4711| 17630001 | crypto operation error. |
4712
4713### verify
4714
4715verify(data: DataBlob | null, signatureData: DataBlob, callback: AsyncCallback\<boolean>): void
4716
4717对数据进行验签,通过注册回调函数返回返回验签结果。
4718
4719**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4720
4721**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4722
4723API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4724
4725**参数:**
4726
4727| 参数名        | 类型                 | 必填 | 说明       |
4728| ------------- | -------------------- | ---- | ---------- |
4729| data          | [DataBlob](#datablob) \| null<sup>10+</sup>             | 是   | 传入的消息。API 10之前只支持DataBlob, API 10之后增加支持null。 |
4730| signatureData | [DataBlob](#datablob)              | 是   | 签名数据。  |
4731| callback      | AsyncCallback\<boolean> | 是   | 回调函数,用于获取以boolean值表示的验签结果。 |
4732
4733**错误码:**
4734以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4735
4736| 错误码ID | 错误信息               |
4737| -------- | ---------------------- |
4738| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4739| 17620001 | memory error.          |
4740| 17620002 | runtime error.          |
4741| 17630001 | crypto operation error. |
4742
4743### verify
4744
4745verify(data: DataBlob | null, signatureData: DataBlob): Promise\<boolean>
4746
4747对数据进行验签,通过Promise返回验签结果。
4748
4749**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4750
4751**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4752
4753API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
4754
4755**参数:**
4756
4757| 参数名        | 类型     | 必填 | 说明       |
4758| ------------- | -------- | ---- | ---------- |
4759| data          | [DataBlob](#datablob) \| null<sup>10+</sup>  | 是   | 传入的消息。API 10之前只支持DataBlob, API 10之后增加支持null。 |
4760| signatureData | [DataBlob](#datablob)  | 是   | 签名数据。  |
4761
4762**返回值:**
4763
4764| 类型              | 说明                           |
4765| ----------------- | ------------------------------ |
4766| Promise\<boolean> | 异步返回值,代表验签是否通过。 |
4767
4768**错误码:**
4769以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4770
4771| 错误码ID | 错误信息               |
4772| -------- | ---------------------- |
4773| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4774| 17620001 | memory error.          |
4775| 17620002 | runtime error.          |
4776| 17630001 | crypto operation error. |
4777
4778### verifySync<sup>12+</sup>
4779
4780verifySync(data: DataBlob | null, signatureData: DataBlob): boolean
4781
4782对数据进行验签,通过同步方式返回验签结果。
4783
4784**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4785
4786**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4787
4788**参数:**
4789
4790| 参数名        | 类型     | 必填 | 说明       |
4791| ------------- | -------- | ---- | ---------- |
4792| data          | [DataBlob](#datablob) \| null  | 是   | 传入的消息。 |
4793| signatureData | [DataBlob](#datablob)  | 是   | 签名数据。  |
4794
4795**返回值:**
4796
4797| 类型              | 说明                           |
4798| ----------------- | ------------------------------ |
4799| boolean | 同步返回值,代表验签是否通过。 |
4800
4801**错误码:**
4802以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4803
4804| 错误码ID | 错误信息               |
4805| -------- | ---------------------- |
4806| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4807| 17620001 | memory error.          |
4808| 17620002 | runtime error.          |
4809| 17630001 | crypto operation error. |
4810
4811**callback示例:**
4812
4813此外,更多签名验签的完整示例可参考[签名验签开发指导](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md)。
4814
4815```ts
4816import { cryptoFramework } from '@kit.CryptoArchitectureKit';
4817import { buffer } from '@kit.ArkTS';
4818
4819function verifyByCallback() {
4820  let inputUpdate: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan1", 'utf-8').buffer) };
4821  let inputVerify: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan2", 'utf-8').buffer) };
4822  // 根据密钥数据生成的密钥和输入的验签数据,这部分代码Verify与Sign中保持一致,保证验签通过。
4823  let pkData = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
4824  let skData = new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48, 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10, 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5, 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224, 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48, 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23, 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0, 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200, 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198, 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224, 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133, 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71, 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144, 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30, 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2, 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222, 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191, 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246, 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55, 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182, 207, 254, 61, 71, 184, 167, 184]);
4825  let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };
4826  let priKeyBlob: cryptoFramework.DataBlob = { data: skData };
4827  // 该数据取自Sign中的signData.data4828  let signMessageBlob: cryptoFramework.DataBlob = { data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173, 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119, 130, 142, 87, 183, 32, 220, 226, 28, 38, 73, 222, 172, 153, 26, 87, 58, 188, 42, 150, 67, 94, 214, 147, 64, 202, 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223, 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74, 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209]) }
4829  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
4830  let verifyer = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
4831  rsaGenerator.convertKey(pubKeyBlob, priKeyBlob, (err, keyPair) => {
4832    verifyer.init(keyPair.pubKey, err => {
4833      verifyer.update(inputUpdate, err => {
4834        verifyer.verify(inputVerify, signMessageBlob, (err, res) => {
4835          console.info('verify result is ' + res);
4836        });
4837      });
4838    });
4839  });
4840}
4841```
4842
4843**Promise示例:**
4844
4845此外,更多签名验签的完整示例可参考[签名验签开发指导](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md)。
4846
4847```ts
4848import { cryptoFramework } from '@kit.CryptoArchitectureKit';
4849import { buffer } from '@kit.ArkTS';
4850
4851async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
4852  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
4853  let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
4854  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
4855  let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
4856  console.info('convertKey success');
4857  return keyPair;
4858}
4859
4860async function verifyByPromise() {
4861  // 根据密钥数据生成的密钥和输入的验签数据,这部分代码Verify与Sign中保持一致,保证验签通过。
4862  let pkData = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
4863  let skData = new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48, 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10, 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5, 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224, 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48, 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23, 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0, 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200, 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198, 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224, 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133, 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71, 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144, 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30, 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2, 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222, 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191, 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246, 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55, 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182, 207, 254, 61, 71, 184, 167, 184]);
4864  let keyPair = await genKeyPairByData(pkData, skData);
4865  let inputUpdate: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan1", 'utf-8').buffer) };
4866  let inputVerify: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan2", 'utf-8').buffer) };
4867  // 该数据取自Sign中的signData.data4868  let signMessageBlob: cryptoFramework.DataBlob = { data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173, 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119, 130, 142, 87, 183, 32, 220, 226, 28, 38, 73, 222, 172, 153, 26, 87, 58, 188, 42, 150, 67, 94, 214, 147, 64, 202, 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223, 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74, 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209]) };
4869  let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
4870  await verifier.init(keyPair.pubKey);
4871  await verifier.update(inputUpdate);
4872  let res = await verifier.verify(inputVerify, signMessageBlob);
4873  console.info('verify result: ' + res);
4874}
4875```
4876
4877**Sync示例:**
4878
4879此外,更多签名验签的完整示例可参考[签名验签开发指导](../../security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md)。
4880
4881```ts
4882import { cryptoFramework } from '@kit.CryptoArchitectureKit';
4883import { buffer } from '@kit.ArkTS';
4884
4885function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
4886  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
4887  let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
4888  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
4889  let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
4890  console.info('convertKey success');
4891  return keyPair;
4892}
4893
4894function verifyBySync() {
4895  // 根据密钥数据生成的密钥和输入的验签数据,这部分代码Verify与Sign中保持一致,保证验签通过。
4896  let pkData = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
4897  let skData = new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48, 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10, 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5, 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224, 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48, 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23, 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0, 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200, 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198, 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224, 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133, 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71, 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144, 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30, 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2, 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222, 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191, 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246, 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55, 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182, 207, 254, 61, 71, 184, 167, 184]);
4898  let keyPair = genKeyPairByData(pkData, skData);
4899  let inputUpdate: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan1", 'utf-8').buffer) };
4900  let inputVerify: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan2", 'utf-8').buffer) };
4901  // 该数据取自Sign中的signData.data4902  let signMessageBlob: cryptoFramework.DataBlob = { data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173, 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119, 130, 142, 87, 183, 32, 220, 226, 28, 38, 73, 222, 172, 153, 26, 87, 58, 188, 42, 150, 67, 94, 214, 147, 64, 202, 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223, 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74, 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209]) };
4903  let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256');
4904  verifier.initSync(keyPair.pubKey);
4905  verifier.updateSync(inputUpdate);
4906  let res = verifier.verifySync(inputVerify, signMessageBlob);
4907  console.info('verify result: ' + res);
4908}
4909```
4910
4911### recover<sup>12+</sup>
4912
4913recover(signatureData: DataBlob): Promise\<DataBlob | null>
4914
4915对数据进行签名恢复原始数据,通过Promise返回恢复结果。
4916
4917> **说明:**
4918>
4919> - 目前仅RSA支持。
4920
4921**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4922
4923**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4924
4925**参数:**
4926
4927| 参数名        | 类型     | 必填 | 说明       |
4928| ------------- | -------- | ---- | ---------- |
4929| signatureData | [DataBlob](#datablob)  | 是   | 签名数据。  |
4930
4931**返回值:**
4932
4933| 类型              | 说明                           |
4934| ----------------- | ------------------------------ |
4935| Promise\<[DataBlob](#datablob)  \| null> | 验签恢复的数据。 |
4936
4937**错误码:**
4938以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
4939
4940| 错误码ID | 错误信息               |
4941| -------- | ---------------------- |
4942| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
4943| 17620001 | memory error.          |
4944| 17620002 | runtime error.          |
4945| 17630001 | crypto operation error. |
4946
4947**示例:**
4948
4949```ts
4950import { cryptoFramework } from '@kit.CryptoArchitectureKit';
4951import { buffer } from '@kit.ArkTS';
4952
4953async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
4954  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
4955  let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
4956  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
4957  let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
4958  console.info('convertKey success');
4959  return keyPair;
4960}
4961
4962async function recoverByPromise() {
4963  // 根据密钥数据生成的密钥和输入的验签数据,这部分代码Verify与Sign中保持一致,保证验签通过。
4964  let pkData = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1]);
4965  let skData = new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48, 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 214, 179, 23, 198, 183, 139, 148, 8, 173, 74, 56, 160, 15, 248, 244, 166, 209, 250, 142, 74, 216, 58, 117, 215, 178, 247, 254, 39, 180, 227, 85, 201, 59, 133, 209, 221, 26, 9, 116, 31, 172, 151, 252, 185, 123, 20, 25, 7, 92, 129, 5, 196, 239, 214, 126, 254, 154, 188, 239, 144, 161, 171, 65, 42, 31, 214, 93, 115, 247, 69, 94, 143, 54, 51, 25, 49, 146, 204, 205, 165, 20, 120, 35, 184, 190, 65, 106, 12, 214, 176, 57, 125, 235, 51, 88, 135, 76, 73, 109, 112, 147, 138, 198, 252, 5, 20, 245, 51, 7, 32, 108, 89, 125, 204, 50, 189, 88, 254, 255, 146, 244, 244, 149, 79, 54, 216, 45, 89, 2, 3, 1, 0, 1, 2, 129, 129, 0, 152, 111, 145, 203, 10, 88, 116, 163, 112, 126, 9, 20, 68, 34, 235, 121, 98, 14, 182, 102, 151, 125, 114, 91, 210, 122, 215, 29, 212, 5, 176, 203, 238, 146, 5, 190, 41, 21, 91, 56, 125, 239, 111, 133, 53, 200, 192, 56, 132, 202, 42, 145, 120, 3, 224, 40, 223, 46, 148, 29, 41, 92, 17, 40, 12, 72, 165, 69, 192, 211, 142, 233, 81, 202, 177, 235, 156, 27, 179, 48, 18, 85, 154, 101, 193, 45, 218, 91, 24, 143, 196, 248, 16, 83, 177, 198, 136, 77, 111, 134, 60, 219, 95, 246, 23, 5, 45, 14, 83, 29, 137, 248, 159, 28, 132, 142, 205, 99, 226, 213, 84, 232, 57, 130, 156, 81, 191, 237, 2, 65, 0, 255, 158, 212, 13, 43, 132, 244, 135, 148, 161, 232, 219, 20, 81, 196, 102, 103, 44, 110, 71, 100, 62, 73, 200, 32, 138, 114, 209, 171, 150, 179, 92, 198, 5, 190, 218, 79, 227, 227, 37, 32, 57, 159, 252, 107, 211, 139, 198, 202, 248, 137, 143, 186, 205, 106, 81, 85, 207, 134, 148, 110, 204, 243, 27, 2, 65, 0, 215, 4, 181, 121, 57, 224, 170, 168, 183, 159, 152, 8, 74, 233, 80, 244, 146, 81, 48, 159, 194, 199, 36, 187, 6, 181, 182, 223, 115, 133, 151, 171, 78, 219, 90, 161, 248, 69, 6, 207, 173, 3, 81, 161, 2, 60, 238, 204, 177, 12, 138, 17, 220, 179, 71, 113, 200, 248, 159, 153, 252, 150, 180, 155, 2, 65, 0, 190, 202, 185, 211, 170, 171, 238, 40, 84, 84, 21, 13, 144, 57, 7, 178, 183, 71, 126, 120, 98, 229, 235, 4, 40, 229, 173, 149, 185, 209, 29, 199, 29, 54, 164, 161, 38, 8, 30, 62, 83, 179, 47, 42, 165, 0, 156, 207, 160, 39, 169, 229, 81, 180, 136, 170, 116, 182, 20, 233, 45, 90, 100, 9, 2, 65, 0, 152, 255, 47, 198, 15, 201, 238, 133, 89, 11, 133, 153, 184, 252, 37, 239, 177, 65, 118, 80, 231, 190, 222, 66, 250, 118, 72, 166, 221, 67, 156, 245, 119, 138, 28, 6, 142, 107, 71, 122, 116, 200, 156, 199, 237, 152, 191, 239, 4, 184, 64, 114, 143, 81, 62, 48, 23, 233, 217, 95, 47, 221, 104, 171, 2, 64, 30, 219, 1, 230, 241, 70, 246, 243, 121, 174, 67, 66, 11, 99, 202, 17, 52, 234, 78, 29, 3, 57, 51, 123, 149, 86, 64, 192, 73, 199, 108, 101, 55, 232, 41, 114, 153, 237, 253, 52, 205, 148, 45, 86, 186, 241, 182, 183, 42, 77, 252, 195, 29, 158, 173, 3, 182, 207, 254, 61, 71, 184, 167, 184]);
4966  let keyPair = await genKeyPairByData(pkData, skData);
4967  // 该数据取自Sign中的signData.data4968  let signMessageBlob: cryptoFramework.DataBlob = { data: new Uint8Array([9, 68, 164, 161, 230, 155, 255, 153, 10, 12, 14, 22, 146, 115, 209, 167, 223, 133, 89, 173, 50, 249, 176, 104, 10, 251, 219, 104, 117, 196, 105, 65, 249, 139, 119, 41, 15, 171, 191, 11, 177, 177, 1, 119, 130, 142, 87, 183, 32, 220, 226, 28, 38, 73, 222, 172, 153, 26, 87, 58, 188, 42, 150, 67, 94, 214, 147, 64, 202, 87, 155, 125, 254, 112, 95, 176, 255, 207, 106, 43, 228, 153, 131, 240, 120, 88, 253, 179, 207, 207, 110, 223, 173, 15, 113, 11, 183, 122, 237, 205, 206, 123, 246, 33, 167, 169, 251, 237, 199, 26, 220, 152, 190, 117, 131, 74, 232, 50, 39, 172, 232, 178, 112, 73, 251, 235, 131, 209]) };
4969  let verifier = cryptoFramework.createVerify('RSA1024|PKCS1|SHA256|Recover');
4970  await verifier.init(keyPair.pubKey);
4971  try {
4972    let rawSignData = await verifier.recover(signMessageBlob);
4973    if (rawSignData != null) {
4974      console.info('[Promise]: recover result: ' + rawSignData.data);
4975    } else {
4976      console.error("[Promise]: get verify recover result fail!");
4977    }
4978  } catch (error) {
4979    let e: BusinessError = error as BusinessError;
4980    console.error(`promise error, ${e.code}, ${e.message}`);
4981  }
4982}
4983```
4984
4985### recoverSync<sup>12+</sup>
4986
4987recoverSync(signatureData: DataBlob): DataBlob | null
4988
4989对数据进行签名恢复原始数据。
4990
4991> **说明:**
4992>
4993> - 目前仅RSA支持。
4994
4995**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4996
4997**系统能力:** SystemCapability.Security.CryptoFramework.Signature
4998
4999**参数:**
5000
5001| 参数名        | 类型     | 必填 | 说明       |
5002| ------------- | -------- | ---- | ---------- |
5003| signatureData | [DataBlob](#datablob)  | 是   | 签名数据。  |
5004
5005**返回值:**
5006
5007| 类型              | 说明                           |
5008| ----------------- | ------------------------------ |
5009| [DataBlob](#datablob)  \| null | 验签恢复的数据。 |
5010
5011**错误码:**
5012以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5013
5014| 错误码ID | 错误信息               |
5015| -------- | ---------------------- |
5016| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5017| 17620001 | memory error.          |
5018| 17620002 | runtime error.          |
5019| 17630001 | crypto operation error. |
5020
5021### setVerifySpec<sup>10+</sup>
5022
5023setVerifySpec(itemType: SignSpecItem, itemValue: number): void
5024
5025setVerifySpec(itemType: SignSpecItem, itemValue: number \| Uint8Array): void
5026
5027设置验签参数。常用的签名参数可以直接通过[createVerify](#cryptoframeworkcreateverify) 来指定,剩余参数可以通过本接口指定。
5028
5029只支持RSA算法、SM2算法,从API version 11开始,支持SM2算法设置验签参数。
5030
5031验签的参数应当与签名的参数保持一致。
5032
5033**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5034
5035**系统能力:** SystemCapability.Security.CryptoFramework.Signature
5036
5037API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
5038
5039**参数:**
5040
5041| 参数名   | 类型                 | 必填 | 说明       |
5042| -------- | -------------------- | ---- | ---------- |
5043| itemType     | [SignSpecItem](#signspecitem10)              | 是   | 用于指定需要设置的验签参数。 |
5044| itemValue | number \| Uint8Array<sup>11+</sup> | 是   | 用于指定验签参数的具体值。 |
5045
5046**错误码:**
5047以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5048
5049| 错误码ID | 错误信息               |
5050| -------- | ---------------------- |
5051| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5052| 801 | this operation is not supported.          |
5053| 17620001 | memory error.          |
5054| 17630001 | crypto operation error. |
5055
5056**示例:**
5057
5058<!--code_no_check-->
5059```ts
5060let verifyer: cryptoFramework.Verify; // The process of generating the Verify instance is omitted here.
5061let setN = 20;
5062verifyer.setVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN);
5063```
5064
5065### getVerifySpec<sup>10+</sup>
5066
5067getVerifySpec(itemType: SignSpecItem): string | number
5068
5069获取验签参数。当前只支持RSA算法。
5070
5071验签的参数应当与签名的参数保持一致。
5072
5073**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5074
5075**系统能力:** SystemCapability.Security.CryptoFramework.Signature
5076
5077API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Signature
5078
5079**参数:**
5080
5081| 参数名 | 类型     | 必填 | 说明       |
5082| ------ | -------- | ---- | ---------- |
5083| itemType   | [SignSpecItem](#signspecitem10)  | 是   | 用于指定需要获取的验签参数。 |
5084
5085**返回值:**
5086
5087| 类型           | 说明        |
5088| -------------- | ----------- |
5089| string \| number | 获取的验签参数的具体值。 |
5090
5091**错误码:**
5092以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5093
5094| 错误码ID | 错误信息               |
5095| -------- | ---------------------- |
5096| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5097| 801 | this operation is not supported.          |
5098| 17620001 | memory error.          |
5099| 17630001 | crypto operation error. |
5100
5101**示例:**
5102
5103<!--code_no_check-->
5104```ts
5105let verifyer: cryptoFramework.Verify; // The process of generating the Verify instance is omitted here.
5106let saltLen = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM);
5107```
5108
5109## cryptoFramework.createKeyAgreement
5110
5111createKeyAgreement(algName: string): KeyAgreement
5112
5113KeyAgreement实例生成。
5114
5115支持的规格详见[密钥协商规格](../../security/CryptoArchitectureKit/crypto-key-agreement-overview.md)。
5116
5117**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5118
5119**系统能力:** SystemCapability.Security.CryptoFramework.KeyAgreement
5120
5121API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.KeyAgreement
5122
5123**参数:**
5124
5125| 参数名  | 类型   | 必填 | 说明                                                         |
5126| ------- | ------ | ---- | ------------------------------------------------------------ |
5127| algName | string | 是   | 指定密钥协商算法:目前仅支持ECC,从API version 11开始,增加支持X25519和DH。 |
5128
5129**返回值**:
5130
5131| 类型         | 说明                                       |
5132| ------------ | ------------------------------------------ |
5133| KeyAgreement | 返回由输入算法指定生成的KeyAgreement对象。 |
5134
5135**错误码:**
5136以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5137
5138| 错误码ID | 错误信息               |
5139| -------- | ---------------------- |
5140| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5141| 801 | this operation is not supported.          |
5142| 17620001 | memory error.          |
5143
5144**示例:**
5145
5146```ts
5147import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5148
5149let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
5150```
5151
5152## KeyAgreement
5153
5154KeyAgreement类,使用密钥协商方法之前需要创建该类的实例进行操作,通过[createKeyAgreement(algName: string): KeyAgreement](#cryptoframeworkcreatekeyagreement)方法构造此实例。
5155
5156### 属性
5157
5158**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5159
5160**系统能力:** SystemCapability.Security.CryptoFramework.KeyAgreement
5161
5162API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.KeyAgreement
5163
5164| 名称    | 类型   | 可读 | 可写 | 说明                         |
5165| ------- | ------ | ---- | ---- | ---------------------------- |
5166| algName | string | 是   | 否   | 密钥协商指定的算法名称。 |
5167
5168### generateSecret
5169
5170generateSecret(priKey: PriKey, pubKey: PubKey, callback: AsyncCallback\<DataBlob>): void
5171
5172基于传入的私钥与公钥进行密钥协商,通过注册回调函数返回共享密钥。
5173
5174**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5175
5176**系统能力:** SystemCapability.Security.CryptoFramework.KeyAgreement
5177
5178API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.KeyAgreement
5179
5180**参数:**
5181
5182| 参数名   | 类型                     | 必填 | 说明                   |
5183| -------- | ------------------------ | ---- | ---------------------- |
5184| priKey   | [PriKey](#prikey)        | 是   | 设置密钥协商的私钥输入。 |
5185| pubKey   | [PubKey](#pubkey)        | 是   | 设置密钥协商的公钥输入。 |
5186| callback | AsyncCallback\<[DataBlob](#datablob)> | 是   | 异步接受共享密钥的回调。 |
5187
5188**错误码:**
5189以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5190
5191| 错误码ID | 错误信息               |
5192| -------- | ---------------------- |
5193| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5194| 17620001 | memory error.          |
5195| 17620002 | runtime error.          |
5196| 17630001 | crypto operation error. |
5197
5198### generateSecret
5199
5200generateSecret(priKey: PriKey, pubKey: PubKey): Promise\<DataBlob>
5201
5202基于传入的私钥与公钥进行密钥协商,通过Promise返回共享密钥。
5203
5204**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5205
5206**系统能力:** SystemCapability.Security.CryptoFramework.KeyAgreement
5207
5208API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.KeyAgreement
5209
5210**参数:**
5211
5212| 参数名 | 类型   | 必填 | 说明                   |
5213| ------ | ------ | ---- | ---------------------- |
5214| priKey | [PriKey](#prikey) | 是   | 设置密钥协商的私钥输入。 |
5215| pubKey | [PubKey](#pubkey) | 是   | 设置密钥协商的公钥输入。 |
5216
5217**返回值:**
5218
5219| 类型               | 说明     |
5220| ------------------ | -------- |
5221| Promise\<[DataBlob](#datablob)> | 共享密钥。 |
5222
5223**错误码:**
5224以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5225
5226| 错误码ID | 错误信息               |
5227| -------- | ---------------------- |
5228| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5229| 17620001 | memory error.          |
5230| 17620002 | runtime error.          |
5231| 17630001 | crypto operation error. |
5232
5233### generateSecretSync<sup>12+</sup>
5234
5235generateSecretSync(priKey: PriKey, pubKey: PubKey): DataBlob
5236
5237基于传入的私钥与公钥进行密钥协商,通过同步返回共享密钥。
5238
5239**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5240
5241**系统能力:** SystemCapability.Security.CryptoFramework.KeyAgreement
5242
5243**参数:**
5244
5245| 参数名 | 类型   | 必填 | 说明                   |
5246| ------ | ------ | ---- | ---------------------- |
5247| priKey | [PriKey](#prikey) | 是   | 设置密钥协商的私钥输入。 |
5248| pubKey | [PubKey](#pubkey) | 是   | 设置密钥协商的公钥输入。 |
5249
5250**返回值:**
5251
5252| 类型               | 说明     |
5253| ------------------ | -------- |
5254|[DataBlob](#datablob) | 共享密钥。 |
5255
5256**错误码:**
5257以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5258
5259| 错误码ID | 错误信息               |
5260| -------- | ---------------------- |
5261| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5262| 17620001 | memory error.          |
5263| 17620002 | runtime error.          |
5264| 17630001 | crypto operation error. |
5265
5266**callback示例:**
5267
5268<!--code_no_check-->
5269```ts
5270import { BusinessError } from '@kit.BasicServicesKit';
5271
5272let globalKeyPair: cryptoFramework.KeyPair; // globalKeyPair is an asymmetric key object generated by the asymmetric key generator. The generation process is omitted here.
5273let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
5274keyAgreement.generateSecret(globalKeyPair.priKey, globalKeyPair.pubKey, (err, secret) => {
5275  if (err) {
5276    console.error("keyAgreement error.");
5277    return;
5278  }
5279  console.info('keyAgreement output is ' + secret.data);
5280});
5281```
5282
5283**Promise示例:**
5284
5285<!--code_no_check-->
5286```ts
5287import { BusinessError } from '@kit.BasicServicesKit';
5288
5289let globalKeyPair: cryptoFramework.KeyPair; // globalKeyPair is an asymmetric key object generated by the asymmetric key generator. The generation process is omitted here.
5290let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
5291let keyAgreementPromise = keyAgreement.generateSecret(globalKeyPair.priKey, globalKeyPair.pubKey);
5292keyAgreementPromise.then(secret => {
5293  console.info('keyAgreement output is ' + secret.data);
5294}).catch((error: BusinessError) => {
5295  console.error("keyAgreement error.");
5296});
5297```
5298
5299**Sync示例:**
5300
5301<!--code_no_check-->
5302```ts
5303let asyGenerator = cryptoFramework.CreateAsyKeyGenerator("ECC256");
5304let globalKeyPair = asyGenerator.generateKeyPairSync();
5305let keyAgreement = cryptoFramework.createKeyAgreement('ECC256');
5306let secret = keyAgreement.generateSecretSync(globalKeyPair.priKey, globalKeyPair.pubKey);
5307console.info("[Sync]keyAgreement output is " + secret.data);
5308```
5309
5310## cryptoFramework.createMd
5311
5312createMd(algName: string): Md
5313
5314生成Md实例,用于进行消息摘要的计算与操作。
5315
5316支持的规格详见[MD消息摘要算法规格](../../security/CryptoArchitectureKit/crypto-generate-message-digest-overview.md#支持的算法与规格)。
5317
5318**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5319
5320**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5321
5322API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.MessageDigest
5323
5324**参数:**
5325
5326| 参数名  | 类型   | 必填 | 说明                                                         |
5327| ------- | ------ | ---- | ------------------------------------------------------------ |
5328| algName | string | 是   | 指定摘要算法,支持算法请参考[MD消息摘要算法规格](../../security/CryptoArchitectureKit/crypto-generate-message-digest-overview.md#支持的算法与规格)。 |
5329
5330**返回值**:
5331
5332| 类型 | 说明                                    |
5333| ---- | --------------------------------------- |
5334| Md   | 返回由输入算法指定生成的[Md](#md)对象。 |
5335
5336**错误码:**
5337以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5338
5339| 错误码ID | 错误信息           |
5340| -------- | ------------------ |
5341| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5342| 17620001 | memory error.       |
5343
5344**示例:**
5345
5346```ts
5347import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5348import { BusinessError } from '@kit.BasicServicesKit';
5349
5350try {
5351  // Set algName based on the algorithm supported.
5352  let md = cryptoFramework.createMd('SHA256');
5353} catch (error) {
5354  let e: BusinessError = error as BusinessError;
5355  console.error(`sync error, ${e.code}, ${e.message}`);
5356}
5357```
5358
5359## Md
5360
5361Md类,调用Md方法可以进行MD(Message Digest)摘要计算。调用前,需要通过[createMd](#cryptoframeworkcreatemd)构造Md实例。
5362
5363### 属性
5364
5365**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5366
5367**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5368
5369API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.MessageDigest
5370
5371| 名称    | 类型   | 可读 | 可写 | 说明                   |
5372| ------- | ------ | ---- | ---- | ---------------------- |
5373| algName | string | 是   | 否   | 代表指定的摘要算法名。 |
5374
5375### update
5376
5377update(input: DataBlob, callback: AsyncCallback\<void>): void
5378
5379传入消息进行Md更新计算,通过注册回调函数更新。update和digest为两段式接口,需要成组使用。其中digest必选,update可选。
5380
5381> **说明:**
5382>
5383> - Md算法多次调用update更新的代码示例详见开发指导[消息摘要计算](../../security/CryptoArchitectureKit/crypto-generate-message-digest.md#分段摘要算法)。
5384>
5385> - 该接口不支持轻量级智能穿戴。
5386
5387**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5388
5389**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5390
5391API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.MessageDigest
5392
5393**参数:**
5394
5395| 参数名   | 类型                  | 必填 | 说明         |
5396| -------- | --------------------- | ---- | ------------ |
5397| input    | [DataBlob](#datablob) | 是   | 传入的消息。 |
5398| callback | AsyncCallback\<void>  | 是   | 回调函数。当摘要更新成功,err为undefined,否则为错误对象。  |
5399
5400**错误码:**
5401以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5402
5403| 错误码ID | 错误信息               |
5404| -------- | ---------------------- |
5405| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5406| 17620001| memory error. |
5407| 17630001 | crypto operation error. |
5408
5409### update
5410
5411update(input: DataBlob): Promise\<void>
5412
5413传入消息进行Md更新计算,通过Promise更新。update和digest为两段式接口,需要成组使用。其中digest必选,update可选。
5414
5415> **说明:**
5416>
5417> - Md算法多次调用update更新的代码示例详见开发指导[消息摘要计算](../../security/CryptoArchitectureKit/crypto-generate-message-digest.md#分段摘要算法)。
5418>
5419> - 该接口不支持轻量级智能穿戴。
5420
5421**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5422
5423**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5424
5425API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.MessageDigest
5426
5427| 参数名 | 类型     | 必填 | 说明         |
5428| ------ | -------- | ---- | ------------ |
5429| input  | [DataBlob](#datablob) | 是   | 传入的消息。 |
5430
5431**返回值:**
5432
5433| 类型           | 说明          |
5434| -------------- | ------------- |
5435| Promise\<void> | 无返回结果的Promise对象。 |
5436
5437**错误码:**
5438以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5439
5440| 错误码ID | 错误信息               |
5441| -------- | ---------------------- |
5442| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5443| 17620001| memory error. |
5444| 17630001 | crypto operation error. |
5445
5446### updateSync<sup>12+</sup>
5447
5448updateSync(input: DataBlob): void
5449
5450传入消息进行Md更新计算,通过同步方式更新。updateSync和digestSync为两段式接口,需要成组使用。其中digestSync必选,updateSync可选。
5451
5452> **说明:**
5453>
5454> Md算法多次调用updateSync更新的代码示例详见开发指导[消息摘要计算](../../security/CryptoArchitectureKit/crypto-generate-message-digest.md#分段摘要算法)。
5455
5456**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5457
5458**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5459
5460| 参数名 | 类型     | 必填 | 说明         |
5461| ------ | -------- | ---- | ------------ |
5462| input  | [DataBlob](#datablob) | 是   | 传入的消息。 |
5463
5464**返回值:**
5465
5466| 类型           | 说明          |
5467| -------------- | ------------- |
5468| void | 无返回结果。 |
5469
5470**错误码:**
5471以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5472
5473| 错误码ID | 错误信息               |
5474| -------- | ---------------------- |
5475| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.      |
5476| 17620001| memory error. |
5477| 17630001 | crypto operation error. |
5478
5479### digest
5480
5481digest(callback: AsyncCallback\<DataBlob>): void
5482
5483通过注册回调函数返回Md的计算结果。
5484
5485> **说明:**
5486>
5487> 该接口不支持轻量级智能穿戴。
5488
5489**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5490
5491**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5492
5493API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.MessageDigest
5494
5495| 参数名   | 类型                     | 必填 | 说明       |
5496| -------- | ------------------------ | ---- | ---------- |
5497| callback | AsyncCallback\<[DataBlob](#datablob)> | 是   | 回调函数,用于获取DataBlob数据。 |
5498
5499**错误码:**
5500以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5501
5502| 错误码ID | 错误信息               |
5503| -------- | ---------------------- |
5504| 17620001 | memory error.           |
5505| 17630001 | crypto operation error. |
5506
5507**示例:**
5508
5509```ts
5510import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5511import { buffer } from '@kit.ArkTS';
5512
5513function mdByCallback() {
5514  let md = cryptoFramework.createMd('SHA256');
5515  md.update({ data: new Uint8Array(buffer.from("mdTestMessage", 'utf-8').buffer) }, (err,) => {
5516    md.digest((err, digestOutput) => {
5517      console.info('[Callback]: MD result: ' + digestOutput.data);
5518      console.info('[Callback]: MD len: ' + md.getMdLength());
5519    });
5520  });
5521}
5522```
5523
5524### digest
5525
5526digest(): Promise\<DataBlob>
5527
5528通过Promise返回Md的计算结果。
5529
5530> **说明:**
5531>
5532> 该接口不支持轻量级智能穿戴。
5533
5534**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5535
5536**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5537
5538API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.MessageDigest
5539
5540**返回值:**
5541
5542| 类型               | 说明        |
5543| ------------------ | ----------- |
5544| Promise\<[DataBlob](#datablob)> | Promise对象。 |
5545
5546**错误码:**
5547以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5548
5549| 错误码ID | 错误信息               |
5550| -------- | ---------------------- |
5551| 17620001 | memory error.           |
5552| 17630001 | crypto operation error. |
5553
5554**示例:**
5555
5556```ts
5557import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5558import { buffer } from '@kit.ArkTS';
5559
5560async function mdByPromise() {
5561  let md = cryptoFramework.createMd('SHA256');
5562  await md.update({ data: new Uint8Array(buffer.from("mdTestMessage", 'utf-8').buffer) });
5563  let mdOutput = await md.digest();
5564  console.info('[Promise]: MD result: ' + mdOutput.data);
5565  console.info('[Promise]: MD len: ' + md.getMdLength());
5566}
5567```
5568
5569### digestSync<sup>12+</sup>
5570
5571digestSync(): DataBlob
5572
5573通过同步方式返回Md的计算结果。
5574
5575**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5576
5577**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5578
5579**返回值:**
5580
5581| 类型               | 说明        |
5582| ------------------ | ----------- |
5583| [DataBlob](#datablob) | 表示生成的Md计算结果。 |
5584
5585**错误码:**
5586以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5587
5588| 错误码ID | 错误信息               |
5589| -------- | ---------------------- |
5590| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.         |
5591| 17620001 | memory error. |
5592| 17620002 | runtime error. |
5593| 17630001 | crypto operation error. |
5594
5595**示例:**
5596
5597```ts
5598import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5599import { buffer } from '@kit.ArkTS';
5600
5601async function mdBySync() {
5602  let md = cryptoFramework.createMd('SHA256');
5603  md.updateSync({ data: new Uint8Array(buffer.from("mdTestMessage", 'utf-8').buffer) });
5604  let mdOutput = md.digestSync();
5605  console.info('[Sync]: MD result: ' + mdOutput.data);
5606  console.info('[Sync]: MD len: ' + md.getMdLength());
5607}
5608```
5609
5610### getMdLength
5611
5612getMdLength(): number
5613
5614获取Md消息摘要长度(字节数)。
5615
5616**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5617
5618**系统能力:** SystemCapability.Security.CryptoFramework.MessageDigest
5619
5620API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.MessageDigest
5621
5622**返回值:**
5623
5624| 类型   | 说明                       |
5625| ------ | -------------------------- |
5626| number | 返回md计算结果的字节长度。 |
5627
5628**错误码:**
5629以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5630
5631| 错误码ID | 错误信息               |
5632| -------- | ---------------------- |
5633| 17630001 | crypto operation error. |
5634
5635**示例:**
5636
5637```ts
5638import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5639
5640function getLength() {
5641  let md = cryptoFramework.createMd('SHA256');
5642  console.info('[Promise]: MD len: ' + md.getMdLength());
5643}
5644```
5645
5646## cryptoFramework.createMac
5647
5648createMac(algName: string): Mac
5649
5650生成Mac实例,用于进行消息认证码的计算与操作。
5651
5652支持的规格详见[HMAC消息认证码算法规格](../../security/CryptoArchitectureKit/crypto-compute-mac-overview.md#消息认证码计算介绍及算法规格)。
5653
5654**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5655
5656**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5657
5658API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
5659
5660**参数:**
5661
5662| 参数名  | 类型   | 必填 | 说明                                                         |
5663| ------- | ------ | ---- | ------------------------------------------------------------ |
5664| algName | string | 是   | 指定摘要算法,支持算法请参考[HMAC消息认证码算法规格](../../security/CryptoArchitectureKit/crypto-compute-mac-overview.md#消息认证码计算介绍及算法规格)。 |
5665
5666**返回值**:
5667
5668| 类型 | 说明                                      |
5669| ---- | ----------------------------------------- |
5670| Mac  | 返回由输入算法指定生成的[Mac](#mac)对象。 |
5671
5672**错误码:**
5673以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5674
5675| 错误码ID | 错误信息           |
5676| -------- | ------------------ |
5677| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5678| 17620001 | memory error.       |
5679
5680**示例:**
5681
5682```ts
5683import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5684import { BusinessError } from '@kit.BasicServicesKit';
5685
5686try {
5687  // Set algName based on the algorithm supported.
5688  let mac = cryptoFramework.createMac('SHA256');
5689} catch (error) {
5690  let e: BusinessError = error as BusinessError;
5691  console.error(`sync error, ${e.code}, ${e.message}`);
5692}
5693```
5694
5695## cryptoFramework.createMac<sup>18+</sup>
5696
5697createMac(macSpec: MacSpec): Mac
5698
5699生成Mac实例,用于进行消息认证码的计算与操作。
5700
5701支持的规格详见[MAC消息认证码算法规格](../../security/CryptoArchitectureKit/crypto-compute-mac-overview.md#消息认证码计算介绍及算法规格)。
5702
5703**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
5704
5705**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5706
5707**参数:**
5708
5709| 参数名  | 类型   | 必填 | 说明                                                         |
5710| ------- | ------ | ---- | ------------------------------------------------------------ |
5711| macSpec | [MacSpec](#macspec18) | 是   | 根据消息验证码的不同算法,指定入参结构体,支持算法请参考[MAC消息认证码算法规格](../../security/CryptoArchitectureKit/crypto-compute-mac-overview.md#消息认证码计算介绍及算法规格)。 |
5712
5713**返回值**:
5714
5715| 类型 | 说明                                      |
5716| ---- | ----------------------------------------- |
5717| Mac  | 返回由指定入参结构体生成的[Mac](#mac)对象。 |
5718
5719**错误码:**
5720以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5721
5722| 错误码ID | 错误信息           |
5723| -------- | ------------------ |
5724| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5725| 17620001 | memory error.       |
5726| 17620002 | runtime error.       |
5727| 17630001 | crypto operation error.       |
5728
5729**示例:**
5730
5731```ts
5732import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5733import { BusinessError } from '@kit.BasicServicesKit';
5734
5735try {
5736  // Set algName based on the algorithm supported.
5737  let spec: cryptoFramework.HmacSpec = {
5738    algName: "HMAC",
5739    mdName: "SHA256",
5740  };
5741  let mac = cryptoFramework.createMac(spec);
5742} catch (error) {
5743  let e: BusinessError = error as BusinessError;
5744  console.error(`sync error, ${e.code}, ${e.message}`);
5745}
5746```
5747
5748## Mac
5749
5750Mac类,调用Mac方法可以进行MAC(Message Authentication Code)加密计算。调用前,需要通过[createMac](#cryptoframeworkcreatemac)构造Mac实例。
5751
5752### 属性
5753
5754**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5755
5756**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5757
5758API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
5759
5760| 名称    | 类型   | 可读 | 可写 | 说明                   |
5761| ------- | ------ | ---- | ---- | ---------------------- |
5762| algName | string | 是   | 否   | 代表指定的摘要算法名。 |
5763
5764### init
5765
5766init(key: SymKey, callback: AsyncCallback\<void>): void
5767
5768使用对称密钥初始化Mac计算,通过注册回调函数获取结果。init、update、doFinal为三段式接口,需要成组使用。其中init和doFinal必选,update可选。
5769
5770  > **说明:**
5771  >
5772  > 建议通过[HMAC密钥生成规格](../../security/CryptoArchitectureKit/crypto-sym-key-generation-conversion-spec.md#hmac)创建对称密钥生成器,调用[generateSymKey](#generatesymkey)随机生成对称密钥或调用[convertKey](#convertkey)传入与密钥规格长度一致的二进制密钥数据生成密钥。<br/>当指定“HMAC”生成对称密钥生成器时,仅支持调用[convertKey](#convertkey)传入长度在[1,4096]范围内(单位为byte)的任意二进制密钥数据生成密钥。
5773
5774**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5775
5776**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5777
5778API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
5779
5780**参数:**
5781
5782| 参数名   | 类型                 | 必填 | 说明           |
5783| -------- | -------------------- | ---- | -------------- |
5784| key      | [SymKey](#symkey)    | 是   | 共享对称密钥。 |
5785| callback | AsyncCallback\<void> | 是   | 回调函数。当HMAC初始化成功,err为undefined,否则为错误对象。  |
5786
5787**错误码:**
5788以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5789
5790| 错误码ID | 错误信息               |
5791| -------- | ---------------------- |
5792| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5793| 17620001| memory error. |
5794| 17630001 | crypto operation error. |
5795
5796### init
5797
5798init(key: SymKey): Promise\<void>
5799
5800使用对称密钥初始化Mac计算,通过Promise获取结果。init、update、doFinal为三段式接口,需要成组使用。其中init和doFinal必选,update可选。
5801
5802**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5803
5804**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5805
5806API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
5807
5808**参数:**
5809
5810| 参数名 | 类型   | 必填 | 说明         |
5811| ------ | ------ | ---- | ------------ |
5812| key    | [SymKey](#symkey) | 是   | 共享对称密钥。 |
5813
5814**返回值:**
5815
5816| 类型           | 说明          |
5817| -------------- | ------------- |
5818| Promise\<void> | 无返回结果的Promise对象。 |
5819
5820**错误码:**
5821以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5822
5823| 错误码ID | 错误信息               |
5824| -------- | ---------------------- |
5825| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5826| 17620001| memory error. |
5827| 17630001 | crypto operation error. |
5828
5829### initSync<sup>12+</sup>
5830
5831initSync(key: SymKey): void
5832
5833使用对称密钥初始化Mac计算,通过同步方式获取结果。initSync、updateSync、doFinalSync为三段式接口,需要成组使用。其中initSync和doFinalSync必选,updateSync可选。
5834
5835**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5836
5837**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5838
5839**参数:**
5840
5841| 参数名 | 类型   | 必填 | 说明         |
5842| ------ | ------ | ---- | ------------ |
5843| key    | [SymKey](#symkey) | 是   | 共享对称密钥。 |
5844
5845**返回值:**
5846
5847| 类型           | 说明          |
5848| -------------- | ------------- |
5849| void | 无返回结果。 |
5850
5851**错误码:**
5852以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5853
5854| 错误码ID | 错误信息               |
5855| -------- | ---------------------- |
5856| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.     |
5857| 17620001| memory error. |
5858| 17630001 | crypto operation error. |
5859
5860### update
5861
5862update(input: DataBlob, callback: AsyncCallback\<void>): void
5863
5864传入消息进行Mac更新计算,通过注册回调函数获取结果。
5865
5866> **说明:**
5867>
5868> HMAC算法多次调用update更新的代码示例详见开发指导[消息认证码计算](../../security/CryptoArchitectureKit/crypto-compute-hmac.md#分段hmac)。
5869
5870**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5871
5872**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5873
5874API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
5875
5876**参数:**
5877
5878| 参数名   | 类型                  | 必填 | 说明         |
5879| -------- | --------------------- | ---- | ------------ |
5880| input    | [DataBlob](#datablob) | 是   | 传入的消息。 |
5881| callback | AsyncCallback\<void>  | 是   | 回调函数。当HMAC更新成功,err为undefined,否则为错误对象。|
5882
5883**错误码:**
5884以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5885
5886| 错误码ID | 错误信息               |
5887| -------- | ---------------------- |
5888| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5889| 17620001| memory error. |
5890| 17630001 | crypto operation error. |
5891
5892### update
5893
5894update(input: DataBlob): Promise\<void>
5895
5896传入消息进行Mac更新计算,通过Promise获取结果。
5897
5898> **说明:**
5899>
5900> HMAC算法多次调用update更新的代码示例详见开发指导[消息认证码计算](../../security/CryptoArchitectureKit/crypto-compute-hmac.md#分段hmac)。
5901
5902**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5903
5904**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5905
5906API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
5907
5908**参数:**
5909
5910| 参数名 | 类型     | 必填 | 说明       |
5911| ------ | -------- | ---- | ---------- |
5912| input  | [DataBlob](#datablob) | 是   | 传入的消息。 |
5913
5914**返回值:**
5915
5916| 类型           | 说明          |
5917| -------------- | ------------- |
5918| Promise\<void> | 无返回结果的Promise对象。 |
5919
5920**错误码:**
5921以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5922
5923| 错误码ID | 错误信息               |
5924| -------- | ---------------------- |
5925| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
5926| 17620001| memory error. |
5927| 17630001 | crypto operation error. |
5928
5929### updateSync<sup>12+</sup>
5930
5931updateSync(input: DataBlob): void
5932
5933传入消息进行Mac更新计算,通过同步方式获取结果。
5934
5935> **说明:**
5936>
5937> HMAC算法多次调用updateSync更新的代码示例详见开发指导[消息认证码计算](../../security/CryptoArchitectureKit/crypto-compute-hmac.md#分段hmac)。
5938
5939**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5940
5941**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5942
5943**参数:**
5944
5945| 参数名 | 类型     | 必填 | 说明       |
5946| ------ | -------- | ---- | ---------- |
5947| input  | [DataBlob](#datablob) | 是   | 传入的消息。 |
5948
5949**返回值:**
5950
5951| 类型           | 说明          |
5952| -------------- | ------------- |
5953| void | 无返回结果的对象。 |
5954
5955**错误码:**
5956以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5957
5958| 错误码ID | 错误信息               |
5959| -------- | ---------------------- |
5960| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.      |
5961| 17620001| memory error. |
5962| 17630001 | crypto operation error. |
5963
5964### doFinal
5965
5966doFinal(callback: AsyncCallback\<DataBlob>): void
5967
5968通过注册回调函数返回Mac的计算结果。
5969
5970**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
5971
5972**系统能力:** SystemCapability.Security.CryptoFramework.Mac
5973
5974API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
5975
5976**参数:**
5977
5978| 参数名   | 类型                     | 必填 | 说明     |
5979| -------- | ------------------------ | ---- | -------- |
5980| callback | AsyncCallback\<[DataBlob](#datablob)> | 是   | 回调函数,用于获取DataBlob数据。 |
5981
5982**错误码:**
5983以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
5984
5985| 错误码ID | 错误信息               |
5986| -------- | ---------------------- |
5987| 17620001 | memory error.           |
5988| 17630001 | crypto operation error. |
5989
5990**示例:**
5991
5992此外,更多HMAC的完整示例可参考开发指导中[消息认证码计算](../../security/CryptoArchitectureKit/crypto-compute-hmac.md#分段hmac)。
5993
5994```ts
5995import { cryptoFramework } from '@kit.CryptoArchitectureKit';
5996import { buffer } from '@kit.ArkTS';
5997
5998function hmacByCallback() {
5999  let mac = cryptoFramework.createMac('SHA256');
6000  let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("12345678abcdefgh", 'utf-8').buffer) };
6001  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
6002  symKeyGenerator.convertKey(keyBlob, (err, symKey) => {
6003    mac.init(symKey, (err,) => {
6004      mac.update({ data: new Uint8Array(buffer.from("hmacTestMessage", 'utf-8').buffer) }, (err,) => {
6005        mac.doFinal((err, output) => {
6006          console.info('[Callback]: HMAC result: ' + output.data);
6007          console.info('[Callback]: MAC len: ' + mac.getMacLength());
6008        });
6009      });
6010    });
6011  });
6012}
6013```
6014
6015### doFinal
6016
6017doFinal(): Promise\<DataBlob>
6018
6019通过Promise返回Mac的计算结果。
6020
6021**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
6022
6023**系统能力:** SystemCapability.Security.CryptoFramework.Mac
6024
6025API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
6026
6027**返回值:**
6028
6029| 类型               | 说明        |
6030| ------------------ | ----------- |
6031| Promise\<[DataBlob](#datablob)> | Promise对象。 |
6032
6033**错误码:**
6034以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6035
6036| 错误码ID | 错误信息               |
6037| -------- | ---------------------- |
6038| 17620001 | memory error.           |
6039| 17630001 | crypto operation error. |
6040
6041**示例:**
6042
6043此外,更多HMAC的完整示例可参考开发指导[消息认证码计算](../../security/CryptoArchitectureKit/crypto-compute-hmac.md#分段hmac)。
6044
6045```ts
6046import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6047import { buffer } from '@kit.ArkTS';
6048
6049async function hmacByPromise() {
6050  let mac = cryptoFramework.createMac('SHA256');
6051  let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("12345678abcdefgh", 'utf-8').buffer) };
6052  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
6053  let symKey = await symKeyGenerator.convertKey(keyBlob);
6054  await mac.init(symKey);
6055  await mac.update({ data: new Uint8Array(buffer.from("hmacTestMessage", 'utf-8').buffer) });
6056  let macOutput = await mac.doFinal();
6057  console.info('[Promise]: HMAC result: ' + macOutput.data);
6058  console.info('[Promise]: MAC len: ' + mac.getMacLength());
6059}
6060```
6061
6062### doFinalSync<sup>12+</sup>
6063
6064doFinalSync(): DataBlob
6065
6066通过同步方式返回Mac的计算结果。
6067
6068**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
6069
6070**系统能力:** SystemCapability.Security.CryptoFramework.Mac
6071
6072**返回值:**
6073
6074| 类型               | 说明        |
6075| ------------------ | ----------- |
6076| [DataBlob](#datablob) | 返回Mac的计算结果。 |
6077
6078**错误码:**
6079以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6080
6081| 错误码ID | 错误信息               |
6082| -------- | ---------------------- |
6083| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.          |
6084| 17620001 | memory error.           |
6085| 17620002 | runtime error. |
6086| 17630001 | crypto operation error. |
6087
6088**示例:**
6089
6090此外,更多HMAC的完整示例可参考开发指导[消息认证码计算](../../security/CryptoArchitectureKit/crypto-compute-hmac.md#分段hmac)。
6091
6092```ts
6093import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6094import { buffer } from '@kit.ArkTS';
6095
6096function hmacBySync() {
6097  let mac = cryptoFramework.createMac('SHA256');
6098  let keyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("12345678abcdefgh", 'utf-8').buffer) };
6099  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
6100  let symKey = symKeyGenerator.convertKeySync(keyBlob);
6101  mac.initSync(symKey);
6102  mac.updateSync({ data: new Uint8Array(buffer.from("hmacTestMessage", 'utf-8').buffer) });
6103  let macOutput = mac.doFinalSync();
6104  console.info('[Sync]: HMAC result: ' + macOutput.data);
6105  console.info('[Sync]: MAC len: ' + mac.getMacLength());
6106}
6107```
6108
6109### getMacLength
6110
6111getMacLength(): number
6112
6113获取Mac消息认证码的长度(字节数)。
6114
6115**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
6116
6117**系统能力:** SystemCapability.Security.CryptoFramework.Mac
6118
6119API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Mac
6120
6121**返回值:**
6122
6123| 类型   | 说明                        |
6124| ------ | --------------------------- |
6125| number | 返回mac计算结果的字节长度。 |
6126
6127**错误码:**
6128以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6129
6130| 错误码ID | 错误信息               |
6131| -------- | ---------------------- |
6132| 17630001 | crypto operation error. |
6133
6134**示例:**
6135
6136<!--code_no_check-->
6137```ts
6138import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6139import { BusinessError } from '@kit.BasicServicesKit';
6140
6141let mac = cryptoFramework.createMac('SHA256');
6142console.info('Mac algName is: ' + mac.algName);
6143let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]);
6144let keyBlob: cryptoFramework.DataBlob = { data: keyData };
6145let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
6146let promiseConvertKey = symKeyGenerator.convertKey(keyBlob);
6147promiseConvertKey.then(symKey => {
6148  let promiseMacInit = mac.init(symKey);
6149  return promiseMacInit;
6150}).then(() => {
6151  let blob: cryptoFramework.DataBlob = { data : new Uint8Array([83])};
6152  let promiseMacUpdate = mac.update(blob);
6153  return promiseMacUpdate;
6154}).then(() => {
6155  let promiseMacDoFinal = mac.doFinal();
6156  return promiseMacDoFinal;
6157}).then(macOutput => {
6158  console.info('[Promise]: HMAC result: ' + macOutput.data);
6159  let macLen = mac.getMacLength();
6160  console.info('MAC len: ' + macLen);
6161}).catch((error: BusinessError) => {
6162  console.error("[Promise]: error: " + error.message);
6163});
6164```
6165
6166## cryptoFramework.createRandom
6167
6168createRandom(): Random
6169
6170生成Random实例,用于进行随机数的计算与设置种子。
6171
6172支持的规格详见框架概述[随机数算法规格](../../security/CryptoArchitectureKit/crypto-generate-random-number.md#支持的算法与规格)。
6173
6174**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
6175
6176**系统能力:** SystemCapability.Security.CryptoFramework.Rand
6177
6178API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Rand
6179
6180**返回值**:
6181
6182| 类型   | 说明                                            |
6183| ------ | ----------------------------------------------- |
6184| Random | 返回由输入算法指定生成的[Random](#random)对象。 |
6185
6186**错误码:**
6187以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6188
6189| 错误码ID | 错误信息     |
6190| -------- | ------------ |
6191| 17620001 | memory error. |
6192
6193**示例:**
6194
6195```ts
6196import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6197import { BusinessError } from '@kit.BasicServicesKit';
6198
6199try {
6200  let rand = cryptoFramework.createRandom();
6201} catch (error) {
6202  let e: BusinessError = error as BusinessError;
6203  console.error(`sync error, ${e.code}, ${e.message}`);
6204}
6205```
6206
6207## Random
6208
6209Random类,调用Random方法可以进行随机数计算。调用前,需要通过[createRandom](#cryptoframeworkcreaterandom)构造Random实例。
6210
6211### 属性
6212
6213**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
6214
6215**系统能力:** SystemCapability.Security.CryptoFramework.Rand
6216
6217API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Rand
6218
6219| 名称    | 类型   | 可读 | 可写 | 说明                 |
6220| ------- | ------ | ---- | ---- | -------------------- |
6221| algName<sup>10+</sup> | string | 是   | 否   | 代表当前使用的随机数生成算法,目前只支持“CTR_DRBG"。 |
6222
6223### generateRandom
6224
6225generateRandom(len: number, callback: AsyncCallback\<DataBlob>): void
6226
6227异步生成指定长度的随机数,通过注册回调函数返回。
6228
6229> **说明:**
6230>
6231> 该接口不支持轻量级智能穿戴。
6232
6233**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
6234
6235**系统能力:** SystemCapability.Security.CryptoFramework.Rand
6236
6237API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Rand
6238
6239**参数:**
6240
6241| 参数名   | 类型                     | 必填 | 说明                 |
6242| -------- | ------------------------ | ---- | -------------------- |
6243| len      | number                   | 是   | 表示生成随机数的长度,单位为byte,范围在[1, INT_MAX]。 |
6244| callback | AsyncCallback\<[DataBlob](#datablob)> | 是   | 回调函数,用于获取DataBlob数据。 |
6245
6246**错误码:**
6247以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6248
6249| 错误码ID | 错误信息               |
6250| -------- | ---------------------- |
6251| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
6252| 17620001 | memory error.          |
6253| 17630001 | crypto operation error. |
6254
6255**示例:**
6256
6257```ts
6258import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6259
6260let rand = cryptoFramework.createRandom();
6261rand.generateRandom(12, (err, randData) => {
6262  if (err) {
6263    console.error("[Callback] err: " + err.code);
6264  } else {
6265    console.info('[Callback]: generate random result: ' + randData.data);
6266  }
6267});
6268```
6269
6270### generateRandom
6271
6272generateRandom(len: number): Promise\<DataBlob>
6273
6274异步生成指定长度的随机数,通过Promise返回。
6275
6276> **说明:**
6277>
6278> 该接口不支持轻量级智能穿戴。
6279
6280**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
6281
6282**系统能力:** SystemCapability.Security.CryptoFramework.Rand
6283
6284API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Rand
6285
6286**参数:**
6287
6288| 参数名 | 类型   | 必填 | 说明                                                   |
6289| ------ | ------ | ---- | ------------------------------------------------------ |
6290| len    | number | 是   | 表示生成随机数的长度,单位为byte,范围在[1, INT_MAX]。 |
6291
6292**返回值:**
6293
6294| 类型               | 说明        |
6295| ------------------ | ----------- |
6296| Promise\<[DataBlob](#datablob)> | Promise对象。 |
6297
6298**错误码:**
6299以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6300
6301| 错误码ID | 错误信息               |
6302| -------- | ---------------------- |
6303| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
6304| 17620001 | memory error.           |
6305| 17630001 | crypto operation error. |
6306
6307**示例:**
6308
6309```ts
6310import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6311import { BusinessError } from '@kit.BasicServicesKit';
6312
6313let rand = cryptoFramework.createRandom();
6314let promiseGenerateRand = rand.generateRandom(12);
6315promiseGenerateRand.then(randData => {
6316  console.info('[Promise]: rand result: ' + randData.data);
6317}).catch((error: BusinessError) => {
6318  console.error("[Promise]: error: " + error.message);
6319});
6320```
6321
6322### generateRandomSync<sup>10+</sup>
6323
6324generateRandomSync(len: number): DataBlob
6325
6326同步生成指定长度的随机数。
6327
6328**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
6329
6330**系统能力:** SystemCapability.Security.CryptoFramework.Rand
6331
6332API version10-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Rand
6333
6334**参数:**
6335
6336| 参数名 | 类型   | 必填 | 说明                 |
6337| ------ | ------ | ---- | -------------------- |
6338| len    | number | 是   | 表示生成随机数的长度,单位为byte,范围在[1, INT_MAX]。 |
6339
6340**返回值:**
6341
6342| 类型               | 说明        |
6343| ------------------ | ----------- |
6344|[DataBlob](#datablob) | 表示生成的随机数。 |
6345
6346**错误码:**
6347以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6348
6349| 错误码ID | 错误信息               |
6350| -------- | ---------------------- |
6351| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
6352| 17620001 | memory error.           |
6353| 17630001 | crypto operation error. |
6354
6355**示例:**
6356
6357```ts
6358import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6359import { BusinessError } from '@kit.BasicServicesKit';
6360
6361let rand = cryptoFramework.createRandom();
6362try {
6363  let randData = rand.generateRandomSync(12);
6364  if (randData != null) {
6365    console.info('[Sync]: rand result: ' + randData.data);
6366  } else {
6367    console.error("[Sync]: get rand result fail!");
6368  }
6369} catch (error) {
6370  let e: BusinessError = error as BusinessError;
6371  console.error(`sync error, ${e.code}, ${e.message}`);
6372}
6373```
6374
6375### setSeed
6376
6377setSeed(seed: DataBlob): void
6378
6379设置指定的种子。
6380
6381**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
6382
6383**系统能力:** SystemCapability.Security.CryptoFramework.Rand
6384
6385API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Rand
6386
6387| 参数名 | 类型     | 必填 | 说明         |
6388| ------ | -------- | ---- | ------------ |
6389| seed   | [DataBlob](#datablob) | 是   | 设置的种子。 |
6390
6391**错误码:**
6392以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6393
6394| 错误码ID | 错误信息           |
6395| -------- | ----------------- |
6396| 17620001 | memory error.      |
6397
6398**示例:**
6399
6400```ts
6401import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6402import { BusinessError } from '@kit.BasicServicesKit';
6403
6404let rand = cryptoFramework.createRandom();
6405rand.generateRandom(12, (err, randData) => {
6406  if (err) {
6407    console.error("[Callback] err: " + err.code);
6408  } else {
6409    console.info('[Callback]: generate random result: ' + randData.data);
6410    try {
6411      rand.setSeed(randData);
6412    } catch (error) {
6413      let e: BusinessError = error as BusinessError;
6414      console.error(`sync error, ${e.code}, ${e.message}`);
6415    }
6416  }
6417});
6418```
6419
6420## cryptoFramework.createKdf<sup>11+</sup>
6421
6422createKdf(algName: string): Kdf
6423
6424密钥派生函数(key derivation function)实例生成。<br/>支持的规格详见[密钥派生函数规格](../../security/CryptoArchitectureKit/crypto-key-derivation-overview.md)。
6425
6426**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
6427
6428**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
6429
6430API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Kdf
6431
6432**参数:**
6433
6434| 参数名  | 类型   | 必填 | 说明                              |
6435| ------- | ------ | ---- | --------------------------------- |
6436| algName | string | 是   | 指定密钥派生算法(包含HMAC配套的散列函数):目前支持PBKDF2、HKDF算法、SCRYPT算法,如"PBKDF2\|SHA256", "HKDF\|SHA256", "SCRYPT"。 |
6437
6438**返回值**:
6439
6440| 类型         | 说明                                       |
6441| ------------ | ------------------------------------------ |
6442| [Kdf](#kdf11) | 返回由输入算法指定生成的Kdf对象。 |
6443
6444**错误码:**
6445以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6446
6447| 错误码ID | 错误信息               |
6448| -------- | ---------------------- |
6449| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
6450| 801 | this operation is not supported.          |
6451| 17620001 | memory error.          |
6452
6453**示例:**
6454- PBKDF2算法
6455```ts
6456import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6457
6458let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
6459```
6460
6461## Kdf<sup>11+</sup>
6462
6463密钥派生函数(key derivation function)类,使用密钥派生方法之前需要创建该类的实例进行操作,通过createKdf(algName: string): Kdf方法构造此实例。
6464
6465### 属性
6466
6467**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
6468
6469**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
6470
6471API version11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Kdf
6472
6473| 名称    | 类型   | 可读 | 可写 | 说明                         |
6474| ------- | ------ | ---- | ---- | ---------------------------- |
6475| algName | string | 是   | 否   | 密钥派生函数的算法名称。 |
6476
6477### generateSecret
6478
6479generateSecret(params: KdfSpec, callback: AsyncCallback\<DataBlob>): void
6480
6481基于传入的密钥派生参数进行密钥派生,通过注册回调函数返回派生得到的密钥。
6482
6483**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
6484
6485**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
6486
6487API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Kdf
6488
6489**参数:**
6490
6491| 参数名   | 类型                     | 必填 | 说明                   |
6492| -------- | ------------------------ | ---- | ---------------------- |
6493| params   | [KdfSpec](#kdfspec11)        | 是   | 设置密钥派生函数的参数。 |
6494| callback | AsyncCallback\<[DataBlob](#datablob)> | 是   | 回调函数,用于获取派生得到的密钥DataBlob数据。 |
6495
6496**错误码:**
6497以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6498
6499| 错误码ID | 错误信息               |
6500| -------- | ---------------------- |
6501| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
6502| 17620001 | memory error.          |
6503| 17630001 | crypto operation error. |
6504
6505**示例:**
6506
6507- PBKDF2算法
6508  ```ts
6509  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6510
6511  let spec: cryptoFramework.PBKDF2Spec = {
6512    algName: 'PBKDF2',
6513    password: '123456',
6514    salt: new Uint8Array(16),
6515    iterations: 10000,
6516    keySize: 32
6517  };
6518  let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
6519  kdf.generateSecret(spec, (err, secret) => {
6520    if (err) {
6521      console.error("key derivation error.");
6522      return;
6523    }
6524    console.info('key derivation output is ' + secret.data);
6525  });
6526  ```
6527
6528- HKDF算法
6529  ```ts
6530  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6531
6532  let spec: cryptoFramework.HKDFSpec = {
6533    algName: 'HKDF',
6534    key: '123456',
6535    salt: new Uint8Array(16),
6536    info: new Uint8Array(16),
6537    keySize: 32
6538  };
6539  let kdf = cryptoFramework.createKdf('HKDF|SHA256|EXTRACT_AND_EXPAND');
6540  kdf.generateSecret(spec, (err, secret) => {
6541    if (err) {
6542      console.error("key derivation error.");
6543      return;
6544    }
6545    console.info('key derivation output is ' + secret.data);
6546  });
6547  ```
6548
6549### generateSecret
6550
6551generateSecret(params: KdfSpec): Promise\<DataBlob>
6552
6553基于传入的密钥派生参数进行密钥派生,通过Promise形式返回派生得到的密钥。
6554
6555**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
6556
6557**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
6558
6559API version9-11系统能力为SystemCapability.Security.CryptoFramework;从API version12开始为SystemCapability.Security.CryptoFramework.Kdf
6560
6561**参数:**
6562
6563| 参数名 | 类型   | 必填 | 说明                   |
6564| ------ | ------ | ---- | ---------------------- |
6565| params   | [KdfSpec](#kdfspec11)        | 是   | 设置密钥派生函数的参数。 |
6566
6567**返回值:**
6568
6569| 类型               | 说明     |
6570| ------------------ | -------- |
6571| Promise\<[DataBlob](#datablob)> | 回调函数,用于获取派生得到的密钥DataBlob数据。 |
6572
6573**错误码:**
6574以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6575
6576| 错误码ID | 错误信息               |
6577| -------- | ---------------------- |
6578| 401 | invalid parameters. Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.|
6579| 17620001 | memory error.          |
6580| 17630001 | crypto operation error. |
6581
6582**示例:**
6583
6584- PBKDF2算法
6585  ```ts
6586  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6587  import { BusinessError } from '@kit.BasicServicesKit';
6588
6589  let spec: cryptoFramework.PBKDF2Spec = {
6590    algName: 'PBKDF2',
6591    password: '123456',
6592    salt: new Uint8Array(16),
6593    iterations: 10000,
6594    keySize: 32
6595  };
6596  let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
6597  let kdfPromise = kdf.generateSecret(spec);
6598  kdfPromise.then(secret => {
6599    console.info('key derivation output is ' + secret.data);
6600  }).catch((error: BusinessError) => {
6601    console.error("key derivation error, " + error.message);
6602  });
6603  ```
6604
6605- HKDF算法
6606  ```ts
6607  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6608  import { BusinessError } from '@kit.BasicServicesKit';
6609
6610  let spec: cryptoFramework.HKDFSpec = {
6611    algName: 'HKDF',
6612    key: '123456',
6613    salt: new Uint8Array(16),
6614    info: new Uint8Array(16),
6615    keySize: 32
6616  };
6617  let kdf = cryptoFramework.createKdf('HKDF|SHA256|EXTRACT_AND_EXPAND');
6618  let kdfPromise = kdf.generateSecret(spec);
6619  kdfPromise.then(secret => {
6620    console.info('key derivation output is ' + secret.data);
6621  }).catch((error: BusinessError) => {
6622    console.error("key derivation error, " + error.message);
6623  });
6624  ```
6625
6626### generateSecretSync<sup>12+</sup>
6627
6628generateSecretSync(params: KdfSpec): DataBlob
6629
6630基于传入的密钥派生参数进行密钥派生,通过同步方式返回派生得到的密钥。
6631
6632**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
6633
6634**系统能力:** SystemCapability.Security.CryptoFramework.Kdf
6635
6636**参数:**
6637
6638| 参数名 | 类型   | 必填 | 说明                   |
6639| ------ | ------ | ---- | ---------------------- |
6640| params   | [KdfSpec](#kdfspec11)        | 是   | 设置密钥派生函数的参数。 |
6641
6642**返回值:**
6643
6644| 类型               | 说明     |
6645| ------------------ | -------- |
6646| [DataBlob](#datablob) | 用于获取派生得到的密钥DataBlob数据。 |
6647
6648**错误码:**
6649以下错误码的详细介绍请参见[crypto framework错误码](errorcode-crypto-framework.md)
6650
6651| 错误码ID | 错误信息               |
6652| -------- | ---------------------- |
6653| 401 | invalid parameters.  Possible causes: <br>1. Mandatory parameters are left unspecified;<br>2. Incorrect parameter types;<br>3. Parameter verification failed.  |
6654| 17620001 | memory error.          |
6655| 17620002 | runtime error. |
6656| 17630001 | crypto operation error. |
6657
6658**示例:**
6659
6660- PBKDF2算法
6661  ```ts
6662  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6663
6664  let spec: cryptoFramework.PBKDF2Spec = {
6665    algName: 'PBKDF2',
6666    password: '123456',
6667    salt: new Uint8Array(16),
6668    iterations: 10000,
6669    keySize: 32
6670  };
6671  let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
6672  let secret = kdf.generateSecretSync(spec);
6673  console.info("[Sync]key derivation output is " + secret.data);
6674  ```
6675
6676- HKDF算法
6677  ```ts
6678  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
6679
6680  let spec: cryptoFramework.HKDFSpec = {
6681    algName: 'HKDF',
6682    key: '123456',
6683    salt: new Uint8Array(16),
6684    info: new Uint8Array(16),
6685    keySize: 32
6686  };
6687  let kdf = cryptoFramework.createKdf('HKDF|SHA256|EXTRACT_AND_EXPAND');
6688  let secret = kdf.generateSecretSync(spec);
6689  console.info("[Sync]key derivation output is " + secret.data);
6690  ```