• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.security.huks (通用密钥库系统)
2
3向应用提供密钥库能力,包括密钥管理及密钥的密码学操作等功能。
4HUKS所管理的密钥可以由应用导入或者由应用调用HUKS接口生成。
5
6> **说明**
7>
8> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
9
10## 导入模块
11
12```js
13import huks from '@ohos.security.huks'
14```
15
16## HuksParam
17
18调用接口使用的options中的properties数组中的param。
19
20**系统能力**:SystemCapability.Security.Huks
21
22| 名称 | 类型                                | 必填 | 说明         |
23| ------ | ----------------------------------- | ---- | ------------ |
24| tag    | [HuksTag](#hukstag)                 | 是   | 标签。       |
25| value  | boolean\|number\|bigint\|Uint8Array | 是   | 标签对应值。 |
26
27## HuksOptions
28
29调用接口使用的options。
30
31**系统能力**:SystemCapability.Security.Huks
32
33| 名称     | 类型              | 必填 | 说明                     |
34| ---------- | ----------------- | ---- | ------------------------ |
35| properties | Array\<[HuksParam](#huksparam)> | 否   | 属性,用于存HuksParam的数组。 |
36| inData     | Uint8Array        | 否   | 输入数据。               |
37
38## HuksSessionHandle<sup>9+</sup>
39
40huks Handle结构体。
41
42**系统能力**:SystemCapability.Security.Huks
43
44| 名称    | 类型       | 必填 | 说明                                                 |
45| --------- | ---------- | ---- | ---------------------------------------------------- |
46| handle    | number     | 是   | 表示handle值。                                       |
47| challenge | Uint8Array | 否   | 表示[initSession](#huksinitsession9)操作之后获取到的challenge信息。 |
48
49## HuksReturnResult<sup>9+</sup>
50
51调用接口返回的result。
52
53**系统能力**:SystemCapability.Security.Huks
54
55
56
57| 名称     | 类型                            | 必填 | 说明             |
58| ---------- | ------------------------------- | ---- | ---------------- |
59| outData    | Uint8Array                      | 否   | 表示输出数据。   |
60| properties | Array\<[HuksParam](#huksparam)> | 否   | 表示属性信息。   |
61| certChains | Array\<string>                  | 否   | 表示证书链数据。 |
62
63
64## huks.generateKeyItem<sup>9+</sup>
65
66generateKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<void>) : void
67
68生成密钥,使用Callback回调异步返回结果。
69
70**系统能力**:SystemCapability.Security.Huks
71
72**参数:**
73
74| 参数名   | 类型                        | 必填 | 说明                                          |
75| -------- | --------------------------- | ---- | --------------------------------------------- |
76| keyAlias | string                      | 是   | 别名。                                        |
77| options  | [HuksOptions](#huksoptions) | 是   | 用于存放生成key所需TAG。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 |
78| callback | AsyncCallback\<void>        | 是   | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 |
79
80**示例:**
81
82```js
83/* 以生成ECC256密钥为例 */
84let keyAlias = 'keyAlias';
85let properties = new Array();
86properties[0] = {
87    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
88    value: huks.HuksKeyAlg.HUKS_ALG_ECC
89};
90properties[1] = {
91    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
92    value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
93};
94properties[2] = {
95    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
96    value:
97    huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
98    huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
99};
100properties[3] = {
101    tag: huks.HuksTag.HUKS_TAG_DIGEST,
102    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
103};
104let options = {
105    properties: properties
106};
107try {
108    huks.generateKeyItem(keyAlias, options, function (error, data) {
109        if (error) {
110            console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
111        } else {
112            console.info(`callback: generateKeyItem key success`);
113        }
114    });
115} catch (error) {
116    console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
117}
118```
119
120## huks.generateKeyItem<sup>9+</sup>
121
122generateKeyItem(keyAlias: string, options: HuksOptions) : Promise\<void>
123
124生成密钥,使用Promise方式异步返回结果。
125
126**系统能力**:SystemCapability.Security.Huks
127
128**参数:**
129
130| 参数名   | 类型                        | 必填 | 说明                     |
131| -------- | --------------------------- | ---- | ------------------------ |
132| keyAlias | string                      | 是   | 密钥别名。               |
133| options  | [HuksOptions](#huksoptions) | 是   | 用于存放生成key所需TAG。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 |
134
135**示例:**
136
137```js
138/* 以生成ECC256密钥为例 */
139let keyAlias = 'keyAlias';
140let properties = new Array();
141properties[0] = {
142    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
143    value: huks.HuksKeyAlg.HUKS_ALG_ECC
144};
145properties[1] = {
146    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
147    value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
148};
149properties[2] = {
150    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
151    value:
152    huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
153    huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
154};
155properties[3] = {
156    tag: huks.HuksTag.HUKS_TAG_DIGEST,
157    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
158};
159let options = {
160    properties: properties
161};
162try {
163    huks.generateKeyItem(keyAlias, options)
164        .then((data) => {
165            console.info(`promise: generateKeyItem success`);
166        })
167        .catch(error => {
168            console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
169        });
170} catch (error) {
171    console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
172}
173```
174
175## huks.deleteKeyItem<sup>9+</sup>
176
177deleteKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<void>) : void
178
179删除密钥,使用Callback回调异步返回结果。
180
181**系统能力**:SystemCapability.Security.Huks
182
183**参数:**
184
185| 参数名   | 类型                        | 必填 | 说明                                          |
186| -------- | --------------------------- | ---- | --------------------------------------------- |
187| keyAlias | string                      | 是   | 密钥别名,应为生成key时传入的别名。           |
188| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。                      |
189| callback | AsyncCallback\<void>        | 是   | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 |
190
191**示例:**
192
193```js
194/* 此处options选择emptyOptions传空 */
195let keyAlias = 'keyAlias';
196let emptyOptions = {
197    properties: []
198};
199try {
200    huks.deleteKeyItem(keyAlias, emptyOptions, function (error, data) {
201        if (error) {
202            console.error(`callback: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`);
203        } else {
204            console.info(`callback: deleteKeyItem key success`);
205        }
206    });
207} catch (error) {
208    console.error(`callback: deleteKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
209}
210```
211
212## huks.deleteKeyItem<sup>9+</sup>
213
214deleteKeyItem(keyAlias: string, options: HuksOptions) : Promise\<void>
215
216删除密钥,使用Promise方式异步返回结果。
217
218**系统能力**:SystemCapability.Security.Huks
219
220**参数:**
221
222| 参数名   | 类型                        | 必填 | 说明                                |
223| -------- | --------------------------- | ---- | ----------------------------------- |
224| keyAlias | string                      | 是   | 密钥别名,应为生成key时传入的别名。 |
225| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。            |
226
227**示例:**
228
229```js
230/* 此处options选择emptyOptions传空 */
231let keyAlias = 'keyAlias';
232let emptyOptions = {
233    properties: []
234};
235try {
236    huks.deleteKeyItem(keyAlias, emptyOptions)
237        .then ((data) => {
238            console.info(`promise: deleteKeyItem key success`);
239        })
240        .catch(error => {
241            console.error(`promise: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`);
242        });
243} catch (error) {
244    console.error(`promise: deleteKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
245}
246```
247
248## huks.getSdkVersion
249
250getSdkVersion(options: HuksOptions) : string
251
252获取当前系统sdk版本。
253
254**系统能力**:SystemCapability.Security.Huks
255
256**参数:**
257
258| 参数名  | 类型       | 必填 | 说明                      |
259| ------- | ---------- | ---- | ------------------------- |
260| options | [HuksOptions](#huksoptions) | 是   | 空对象,用于存放sdk版本。 |
261
262**返回值:**
263
264| 类型   | 说明          |
265| ------ | ------------- |
266| string | 返回sdk版本。 |
267
268**示例:**
269
270```js
271/* 此处options选择emptyOptions传空 */
272let emptyOptions = {
273  properties: []
274};
275let result = huks.getSdkVersion(emptyOptions);
276```
277
278## huks.importKeyItem<sup>9+</sup>
279
280importKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<void>) : void
281
282导入明文密钥,使用Callback方式回调异步返回结果 。
283
284**系统能力**:SystemCapability.Security.Huks
285
286**参数:**
287
288| 参数名   | 类型                        | 必填 | 说明                                          |
289| -------- | --------------------------- | ---- | --------------------------------------------- |
290| keyAlias | string                      | 是   | 密钥别名。                                    |
291| options  | [HuksOptions](#huksoptions) | 是   | 用于导入时所需TAG和需要导入的密钥。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 |
292| callback | AsyncCallback\<void>        | 是   | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 |
293
294**示例:**
295
296```js
297/* 以导入AES256密钥为例 */
298let plainTextSize32 = makeRandomArr(32);
299function makeRandomArr(size) {
300    let arr = new Uint8Array(size);
301    for (let i = 0; i < size; i++) {
302        arr[i] = Math.floor(Math.random() * 10);
303    }
304    return arr;
305};
306let keyAlias = 'keyAlias';
307let properties = new Array();
308properties[0] = {
309    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
310    value: huks.HuksKeyAlg.HUKS_ALG_AES
311};
312properties[1] = {
313    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
314    value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
315};
316properties[2] = {
317    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
318    value:
319    huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
320};
321properties[3] = {
322    tag: huks.HuksTag.HUKS_TAG_PADDING,
323    value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
324};
325properties[4] = {
326    tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
327    value: huks.HuksCipherMode.HUKS_MODE_ECB
328};
329let options = {
330    properties: properties,
331    inData: plainTextSize32
332};
333try {
334    huks.importKeyItem(keyAlias, options, function (error, data) {
335        if (error) {
336            console.error(`callback: importKeyItem failed, code: ${error.code}, msg: ${error.message}`);
337        } else {
338            console.info(`callback: importKeyItem success`);
339        }
340    });
341} catch (error) {
342    console.error(`callback: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
343}
344```
345
346## huks.importKeyItem<sup>9+</sup>
347
348importKeyItem(keyAlias: string, options: HuksOptions) : Promise\<void>
349
350导入明文密钥,使用Promise方式异步返回结果。
351
352**系统能力**:SystemCapability.Security.Huks
353
354**参数:**
355
356| 参数名   | 类型                        | 必填 | 说明                                |
357| -------- | --------------------------- | ---- | ----------------------------------- |
358| keyAlias | string                      | 是   | 密钥别名。                          |
359| options  | [HuksOptions](#huksoptions) | 是   | 用于导入时所需TAG和需要导入的密钥。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 |
360
361**示例:**
362
363```js
364/* 以导入AES128为例 */
365let plainTextSize32 = makeRandomArr(32);
366
367function makeRandomArr(size) {
368    let arr = new Uint8Array(size);
369    for (let i = 0; i < size; i++) {
370        arr[i] = Math.floor(Math.random() * 10);
371    }
372    return arr;
373};
374
375/*第一步:生成密钥*/
376let keyAlias = 'keyAlias';
377let properties = new Array();
378properties[0] = {
379    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
380    value: huks.HuksKeyAlg.HUKS_ALG_AES
381};
382properties[1] = {
383    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
384    value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128
385};
386properties[2] = {
387    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
388    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
389};
390properties[3] = {
391    tag: huks.HuksTag.HUKS_TAG_PADDING,
392    value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
393};
394properties[4] = {
395    tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
396    value: huks.HuksCipherMode.HUKS_MODE_ECB
397};
398let huksoptions = {
399    properties: properties,
400    inData: plainTextSize32
401};
402try {
403    huks.importKeyItem(keyAlias, huksoptions)
404        .then ((data) => {
405            console.info(`promise: importKeyItem success`);
406        })
407        .catch(error => {
408            console.error(`promise: importKeyItem failed, code: ${error.code}, msg: ${error.message}`);
409        });
410} catch (error) {
411    console.error(`promise: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
412}
413```
414
415## huks.attestKeyItem<sup>9+</sup>
416
417attestKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void
418
419获取密钥证书,使用Callback方式回调异步返回结果 。
420
421**系统能力**:SystemCapability.Security.Huks
422
423**参数:**
424
425| 参数名   | 类型                                                 | 必填 | 说明                                          |
426| -------- | ---------------------------------------------------- | ---- | --------------------------------------------- |
427| keyAlias | string                                               | 是   | 密钥别名,存放待获取证书密钥的别名。          |
428| options  | [HuksOptions](#huksoptions)                          | 是   | 用于获取证书时指定所需参数与数据。            |
429| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是   | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 |
430
431**示例:**
432
433```js
434let securityLevel = stringToUint8Array('sec_level');
435let challenge = stringToUint8Array('challenge_data');
436let versionInfo = stringToUint8Array('version_info');
437let keyAliasString = "key attest";
438
439function stringToUint8Array(str) {
440    let arr = [];
441    for (let i = 0, j = str.length; i < j; ++i) {
442        arr.push(str.charCodeAt(i));
443    }
444    let tmpUint8Array = new Uint8Array(arr);
445    return tmpUint8Array;
446}
447
448async function generateKey(alias) {
449    let properties = new Array();
450    properties[0] = {
451        tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
452        value: huks.HuksKeyAlg.HUKS_ALG_RSA
453    };
454    properties[1] = {
455        tag: huks.HuksTag.HUKS_TAG_KEY_STORAGE_FLAG,
456        value: huks.HuksKeyStorageType.HUKS_STORAGE_PERSISTENT
457    };
458    properties[2] = {
459        tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
460        value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
461    };
462    properties[3] = {
463        tag: huks.HuksTag.HUKS_TAG_PURPOSE,
464        value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
465    };
466    properties[4] = {
467        tag: huks.HuksTag.HUKS_TAG_DIGEST,
468        value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
469    };
470    properties[5] = {
471        tag: huks.HuksTag.HUKS_TAG_PADDING,
472        value: huks.HuksKeyPadding.HUKS_PADDING_PSS
473    };
474    properties[6] = {
475        tag: huks.HuksTag.HUKS_TAG_KEY_GENERATE_TYPE,
476        value: huks.HuksKeyGenerateType.HUKS_KEY_GENERATE_TYPE_DEFAULT
477    };
478    properties[7] = {
479        tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
480        value: huks.HuksCipherMode.HUKS_MODE_ECB
481    };
482    let options = {
483        properties: properties
484    };
485
486    try {
487        huks.generateKeyItem(alias, options, function (error, data) {
488            if (error) {
489                console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
490            } else {
491                console.info(`callback: generateKeyItem success`);
492            }
493        });
494    } catch (error) {
495        console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
496    }
497}
498
499async function attestKey() {
500    let aliasString = keyAliasString;
501    let aliasUint8 = stringToUint8Array(aliasString);
502    let properties = new Array();
503    properties[0] = {
504        tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO,
505        value: securityLevel
506    };
507    properties[1] = {
508        tag: huks.HuksTag.HUKS_TAG_ATTESTATION_CHALLENGE,
509        value: challenge
510    };
511    properties[2] = {
512        tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_VERSION_INFO,
513        value: versionInfo
514    };
515    properties[3] = {
516        tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_ALIAS,
517        value: aliasUint8
518    };
519    let options = {
520        properties: properties
521    };
522    await generateKey(aliasString);
523    try {
524        huks.attestKeyItem(aliasString, options, function (error, data) {
525            if (error) {
526                console.error(`callback: attestKeyItem failed, code: ${error.code}, msg: ${error.message}`);
527            } else {
528                console.info(`callback: attestKeyItem success`);
529            }
530        });
531    } catch (error) {
532        console.error(`callback: attestKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
533    }
534}
535```
536
537## huks.attestKeyItem<sup>9+</sup>
538
539attestKeyItem(keyAlias: string, options: HuksOptions) : Promise\<HuksReturnResult>
540
541获取密钥证书,使用Promise方式异步返回结果 。
542
543**系统能力**:SystemCapability.Security.Huks
544
545**参数:**
546
547| 参数名   | 类型                        | 必填 | 说明                                 |
548| -------- | --------------------------- | ---- | ------------------------------------ |
549| keyAlias | string                      | 是   | 密钥别名,存放待获取证书密钥的别名。 |
550| options  | [HuksOptions](#huksoptions) | 是   | 用于获取证书时指定所需参数与数据。   |
551
552**返回值:**
553
554| 类型                                           | 说明                                          |
555| ---------------------------------------------- | --------------------------------------------- |
556| Promise<[HuksReturnResult](#huksreturnresult9)> | Promise对象。不返回err值时表示接口使用成功,其他时为错误。 |
557
558**示例:**
559
560```js
561let securityLevel = stringToUint8Array('sec_level');
562let challenge = stringToUint8Array('challenge_data');
563let versionInfo = stringToUint8Array('version_info');
564let keyAliasString = "key attest";
565
566function stringToUint8Array(str) {
567    let arr = [];
568    for (let i = 0, j = str.length; i < j; ++i) {
569        arr.push(str.charCodeAt(i));
570    }
571    let tmpUint8Array = new Uint8Array(arr);
572    return tmpUint8Array;
573}
574
575async function generateKey(alias) {
576    let properties = new Array();
577    properties[0] = {
578        tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
579        value: huks.HuksKeyAlg.HUKS_ALG_RSA
580    };
581    properties[1] = {
582        tag: huks.HuksTag.HUKS_TAG_KEY_STORAGE_FLAG,
583        value: huks.HuksKeyStorageType.HUKS_STORAGE_PERSISTENT
584    };
585    properties[2] = {
586        tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
587        value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
588    };
589    properties[3] = {
590        tag: huks.HuksTag.HUKS_TAG_PURPOSE,
591        value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
592    };
593    properties[4] = {
594        tag: huks.HuksTag.HUKS_TAG_DIGEST,
595        value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
596    };
597    properties[5] = {
598        tag: huks.HuksTag.HUKS_TAG_PADDING,
599        value: huks.HuksKeyPadding.HUKS_PADDING_PSS
600    };
601    properties[6] = {
602        tag: huks.HuksTag.HUKS_TAG_KEY_GENERATE_TYPE,
603        value: huks.HuksKeyGenerateType.HUKS_KEY_GENERATE_TYPE_DEFAULT
604    };
605    properties[7] = {
606        tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
607        value: huks.HuksCipherMode.HUKS_MODE_ECB
608    };
609    let options = {
610        properties: properties
611    };
612
613    try {
614        await huks.generateKeyItem(alias, options)
615            .then((data) => {
616                console.info(`promise: generateKeyItem success`);
617            })
618            .catch(error => {
619                console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
620            });
621    } catch (error) {
622        console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
623    }
624}
625
626async function attestKey() {
627    let aliasString = keyAliasString;
628    let aliasUint8 = stringToUint8Array(aliasString);
629    let properties = new Array();
630    properties[0] = {
631        tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO,
632        value: securityLevel
633    };
634    properties[1] = {
635        tag: huks.HuksTag.HUKS_TAG_ATTESTATION_CHALLENGE,
636        value: challenge
637    };
638    properties[2] = {
639        tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_VERSION_INFO,
640        value: versionInfo
641    };
642    properties[3] = {
643        tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_ALIAS,
644        value: aliasUint8
645    };
646    let options = {
647        properties: properties
648    };
649    await generateKey(aliasString);
650    try {
651        await huks.attestKeyItem(aliasString, options)
652            .then ((data) => {
653                console.info(`promise: attestKeyItem success`);
654            })
655            .catch(error => {
656                console.error(`promise: attestKeyItem failed, code: ${error.code}, msg: ${error.message}`);
657            });
658    } catch (error) {
659        console.error(`promise: attestKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
660    }
661}
662```
663
664## huks.importWrappedKeyItem<sup>9+</sup>
665
666importWrappedKeyItem(keyAlias: string, wrappingKeyAlias: string, options: HuksOptions, callback: AsyncCallback\<void>) : void
667
668导入加密密钥,使用Callback方式回调异步返回结果 。
669
670**系统能力**:SystemCapability.Security.Huks
671
672**参数:**
673
674| 参数名           | 类型                        | 必填 | 说明                                          |
675| ---------------- | --------------------------- | ---- | --------------------------------------------- |
676| keyAlias         | string                      | 是   | 密钥别名,存放待导入密钥的别名。              |
677| wrappingKeyAlias | string                      | 是   | 密钥别名,对应密钥用于解密加密的密钥数据。    |
678| options          | [HuksOptions](#huksoptions) | 是   | 用于导入时所需TAG和需要导入的加密的密钥数据。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 |
679| callback         | AsyncCallback\<void>        | 是   | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 |
680
681**示例:**
682
683```js
684import huks from '@ohos.security.huks';
685
686let exportWrappingKey;
687let alias1 = "importAlias";
688let alias2 = "wrappingKeyAlias";
689
690async function TestGenFunc(alias, options) {
691    try {
692        await genKey(alias, options)
693            .then((data) => {
694                console.info(`callback: generateKeyItem success`);
695            })
696            .catch(error => {
697                console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
698            });
699    } catch (error) {
700        console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
701    }
702}
703
704function genKey(alias, options) {
705    return new Promise((resolve, reject) => {
706        try {
707            huks.generateKeyItem(alias, options, function (error, data) {
708                if (error) {
709                    reject(error);
710                } else {
711                    resolve(data);
712                }
713            });
714        } catch (error) {
715            throw(error);
716        }
717    });
718}
719
720async function TestExportFunc(alias, options) {
721    try {
722        await exportKey(alias, options)
723            .then ((data) => {
724                console.info(`callback: exportKeyItem success, data = ${JSON.stringify(data)}`);
725                exportWrappingKey = data.outData;
726            })
727            .catch(error => {
728                console.error(`callback: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`);
729            });
730    } catch (error) {
731        console.error(`callback: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
732    }
733}
734
735function exportKey(alias, options) : Promise<huks.HuksReturnResult> {
736    return new Promise((resolve, reject) => {
737        try {
738            huks.exportKeyItem(alias, options, function (error, data) {
739                if (error) {
740                    reject(error);
741                } else {
742                    resolve(data);
743                }
744            });
745        } catch (error) {
746            throw(error);
747        }
748    });
749}
750
751async function TestImportWrappedFunc(alias, wrappingAlias, options) {
752    try {
753        await importWrappedKey(alias, wrappingAlias, options)
754            .then ((data) => {
755                console.info(`callback: importWrappedKeyItem success`);
756            })
757            .catch(error => {
758                console.error(`callback: importWrappedKeyItem failed, code: ${error.code}, msg: ${error.message}`);
759            });
760    } catch (error) {
761        console.error(`callback: importWrappedKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
762    }
763}
764
765function importWrappedKey(alias, wrappingAlias, options) {
766    return new Promise((resolve, reject) => {
767        try {
768            huks.importWrappedKeyItem(alias, wrappingAlias, options, function (error, data) {
769                if (error) {
770                    reject(error);
771                } else {
772                    resolve(data);
773                }
774            });
775        } catch (error) {
776            throw(error);
777        }
778    });
779}
780
781async function TestImportWrappedKeyFunc(
782        alias,
783        wrappingAlias,
784        genOptions,
785        importOptions
786) {
787    await TestGenFunc(wrappingAlias, genOptions);
788    await TestExportFunc(wrappingAlias, genOptions);
789
790    /* 以下操作不需要调用HUKS接口,此处不给出具体实现。
791     * 假设待导入的密钥为keyA
792     * 1.生成ECC公私钥keyB,公钥为keyB_pub, 私钥为keyB_pri
793     * 2.使用keyB_pri和wrappingAlias密钥中获取的公钥进行密钥协商,协商出共享密钥share_key
794     * 3.随机生成密钥kek,用于加密keyA,采用AES-GCM加密,加密过程中需要记录:nonce1、aad1、加密后的密文keyA_enc、加密后的tag1。
795     * 4.使用share_key加密kek,采用AES-GCM加密,加密过程中需要记录:nonce2、aad2、加密后的密文kek_enc、加密后的tag2。
796     * 5.拼接importOptions.inData字段,满足以下格式:
797     * keyB_pub的长度(4字节) + keyB_pub的数据 + aad2的长度(4字节) + aad2的数据 +
798     * nonce2的长度(4字节)   + nonce2的数据   + tag2的长度(4字节) + tag2的数据 +
799     * kek_enc的长度(4字节)  + kek_enc的数据  + aad1的长度(4字节) + aad1的数据 +
800     * nonce1的长度(4字节)   + nonce1的数据   + tag1的长度(4字节) + tag1的数据 +
801     * keyA长度占用的内存长度(4字节)  + keyA的长度     + keyA_enc的长度(4字节) + keyA_enc的数据
802     */
803    let inputKey = new Uint8Array([0x02, 0x00, 0x00, 0x00]);
804    importOptions.inData = inputKey;
805    await TestImportWrappedFunc(alias, wrappingAlias, importOptions);
806}
807
808function makeGenerateOptions() {
809    let properties = new Array();
810    properties[0] = {
811        tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
812        value: huks.HuksKeyAlg.HUKS_ALG_ECC
813    };
814    properties[1] = {
815        tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
816        value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
817    };
818    properties[2] = {
819        tag: huks.HuksTag.HUKS_TAG_PURPOSE,
820        value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_UNWRAP
821    };
822    properties[3] = {
823        tag: huks.HuksTag.HUKS_TAG_DIGEST,
824        value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
825    };
826    properties[4] = {
827        tag: huks.HuksTag.HUKS_TAG_IMPORT_KEY_TYPE,
828        value: huks.HuksImportKeyType.HUKS_KEY_TYPE_KEY_PAIR,
829    };
830    let options = {
831        properties: properties
832    };
833    return options;
834};
835
836function makeImportOptions() {
837    let properties = new Array();
838    properties[0] = {
839        tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
840        value: huks.HuksKeyAlg.HUKS_ALG_AES
841    };
842    properties[1] = {
843        tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
844        value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
845    };
846    properties[2] = {
847        tag: huks.HuksTag.HUKS_TAG_PURPOSE,
848        value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
849    };
850    properties[3] = {
851        tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
852        value: huks.HuksCipherMode.HUKS_MODE_CBC
853    };
854    properties[4] = {
855        tag: huks.HuksTag.HUKS_TAG_PADDING,
856        value: huks.HuksKeyPadding.HUKS_PADDING_NONE
857    };
858    properties[5] = {
859        tag: huks.HuksTag.HUKS_TAG_UNWRAP_ALGORITHM_SUITE,
860        value: huks.HuksUnwrapSuite.HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING
861    };
862    let options = {
863        properties: properties
864    };
865    return options;
866};
867
868function huksImportWrappedKey() {
869    let genOptions = makeGenerateOptions();
870    let importOptions = makeImportOptions();
871    TestImportWrappedKeyFunc(
872        alias1,
873        alias2,
874        genOptions,
875        importOptions
876    );
877}
878```
879
880## huks.importWrappedKeyItem<sup>9+</sup>
881
882importWrappedKeyItem(keyAlias: string, wrappingKeyAlias: string, options: HuksOptions) : Promise\<void>
883
884导入加密密钥,使用Promise方式异步返回结果。
885
886**系统能力**:SystemCapability.Security.Huks
887
888**参数:**
889
890| 参数名           | 类型                        | 必填 | 说明                                          |
891| ---------------- | --------------------------- | ---- | --------------------------------------------- |
892| keyAlias         | string                      | 是   | 密钥别名,存放待导入密钥的别名。              |
893| wrappingKeyAlias | string                      | 是   | 密钥别名,对应密钥用于解密加密的密钥数据。    |
894| options          | [HuksOptions](#huksoptions) | 是   | 用于导入时所需TAG和需要导入的加密的密钥数据。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 |
895
896**示例:**
897
898```js
899/* 处理流程与callback类似,主要差异点为如下函数: */
900async function TestImportWrappedFunc(alias, wrappingAlias, options) {
901    try {
902        await huks.importWrappedKeyItem(alias, wrappingAlias, options)
903            .then ((data) => {
904                console.info(`promise: importWrappedKeyItem success`);
905            })
906            .catch(error => {
907                console.error(`promise: importWrappedKeyItem failed, code: ${error.code}, msg: ${error.message}`);
908            });
909    } catch (error) {
910        console.error(`promise: importWrappedKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
911    }
912}
913```
914
915## huks.exportKeyItem<sup>9+</sup>
916
917exportKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void
918
919导出密钥,使用Callback方式回调异步返回的结果。
920
921**系统能力**:SystemCapability.Security.Huks
922
923**参数:**
924
925| 参数名   | 类型                                                 | 必填 | 说明                                                         |
926| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
927| keyAlias | string                                               | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。                 |
928| options  | [HuksOptions](#huksoptions)                          | 是   | 空对象(此处传空即可)。                                     |
929| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是   | 回调函数。不返回err值时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 |
930
931**示例:**
932
933```js
934/* 此处options选择emptyOptions来传空 */
935let keyAlias = 'keyAlias';
936let emptyOptions = {
937    properties: []
938};
939try {
940    huks.exportKeyItem(keyAlias, emptyOptions, function (error, data) {
941        if (error) {
942            console.error(`callback: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`);
943        } else {
944            console.info(`callback: exportKeyItem success, data = ${JSON.stringify(data)}`);
945        }
946    });
947} catch (error) {
948    console.error(`callback: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
949}
950```
951
952## huks.exportKeyItem<sup>9+</sup>
953
954exportKeyItem(keyAlias: string, options: HuksOptions) : Promise\<HuksReturnResult>
955
956导出密钥,使用Promise方式回调异步返回的结果。
957
958**系统能力**:SystemCapability.Security.Huks
959
960**参数:**
961
962| 参数名   | 类型                        | 必填 | 说明                                         |
963| -------- | --------------------------- | ---- | -------------------------------------------- |
964| keyAlias | string                      | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。 |
965| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。                     |
966
967**返回值:**
968
969| 类型                                           | 说明                                                         |
970| ---------------------------------------------- | ------------------------------------------------------------ |
971| Promise<[HuksReturnResult](#huksreturnresult9)> | Promise对象。不返回err值时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 |
972
973**示例:**
974
975```js
976/* 此处options选择emptyOptions来传空 */
977let keyAlias = 'keyAlias';
978let emptyOptions = {
979    properties: []
980};
981try {
982    huks.exportKeyItem(keyAlias, emptyOptions)
983        .then ((data) => {
984            console.info(`promise: exportKeyItem success, data = ${JSON.stringify(data)}`);
985        })
986        .catch(error => {
987            console.error(`promise: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`);
988        });
989} catch (error) {
990    console.error(`promise: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
991}
992```
993
994## huks.getKeyItemProperties<sup>9+</sup>
995
996getKeyItemProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void
997
998获取密钥属性,使用Callback回调异步返回结果。
999
1000**系统能力**:SystemCapability.Security.Huks
1001
1002**参数:**
1003
1004| 参数名   | 类型                                                 | 必填 | 说明                                                         |
1005| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
1006| keyAlias | string                                               | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。                 |
1007| options  | [HuksOptions](#huksoptions)                          | 是   | 空对象(此处传空即可)。                                     |
1008| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是   | 回调函数。不返回err值时表示接口使用成功,其他时为错误。properties:返回值为生成密钥时所需参数。 |
1009
1010**示例:**
1011
1012```js
1013/* 此处options选择emptyOptions来传空 */
1014let keyAlias = 'keyAlias';
1015let emptyOptions = {
1016    properties: []
1017};
1018try {
1019    huks.getKeyItemProperties(keyAlias, emptyOptions, function (error, data) {
1020        if (error) {
1021            console.error(`callback: getKeyItemProperties failed, code: ${error.code}, msg: ${error.message}`);
1022        } else {
1023            console.info(`callback: getKeyItemProperties success, data = ${JSON.stringify(data)}`);
1024        }
1025    });
1026} catch (error) {
1027    console.error(`callback: getKeyItemProperties input arg invalid, code: ${error.code}, msg: ${error.message}`);
1028}
1029```
1030
1031## huks.getKeyItemProperties<sup>9+</sup>
1032
1033getKeyItemProperties(keyAlias: string, options: HuksOptions) : Promise\<HuksReturnResult>
1034
1035获取密钥属性,使用Promise回调异步返回结果。
1036
1037**系统能力**:SystemCapability.Security.Huks
1038
1039**参数:**
1040
1041| 参数名   | 类型                        | 必填 | 说明                                         |
1042| -------- | --------------------------- | ---- | -------------------------------------------- |
1043| keyAlias | string                      | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。 |
1044| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。                     |
1045
1046**返回值:**
1047
1048| 类型                                            | 说明                                                         |
1049| ----------------------------------------------- | ------------------------------------------------------------ |
1050| Promise\<[HuksReturnResult](#huksreturnresult9)> | Promise对象。不返回err值时表示接口使用成功,其他时为错误。properties:返回值为生成密钥时所需参数。 |
1051
1052**示例:**
1053
1054```js
1055/* 此处options选择emptyOptions来传空 */
1056let keyAlias = 'keyAlias';
1057let emptyOptions = {
1058    properties: []
1059};
1060try {
1061    huks.getKeyItemProperties(keyAlias, emptyOptions)
1062        .then ((data) => {
1063            console.info(`promise: getKeyItemProperties success, data = ${JSON.stringify(data)}`);
1064        })
1065        .catch(error => {
1066            console.error(`promise: getKeyItemProperties failed, code: ${error.code}, msg: ${error.message}`);
1067        });
1068} catch (error) {
1069    console.error(`promise: getKeyItemProperties input arg invalid, code: ${error.code}, msg: ${error.message}`);
1070}
1071```
1072
1073## huks.isKeyItemExist<sup>9+</sup>
1074
1075isKeyItemExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<boolean>) : void
1076
1077判断密钥是否存在,使用Callback回调异步返回结果 。
1078
1079**系统能力**:SystemCapability.Security.Huks
1080
1081**参数:**
1082
1083| 参数名   | 类型                        | 必填 | 说明                                    |
1084| -------- | --------------------------- | ---- | --------------------------------------- |
1085| keyAlias | string                      | 是   | 所需查找的密钥的别名。                  |
1086| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。                |
1087| callback | AsyncCallback\<boolean>     | 是   | 回调函数。FALSE代表密钥不存在,TRUE代表密钥存在。 |
1088
1089**示例:**
1090
1091```js
1092/* 此处options选择emptyOptions来传空 */
1093let keyAlias = 'keyAlias';
1094let emptyOptions = {
1095    properties: []
1096};
1097try {
1098    huks.isKeyItemExist(keyAlias, emptyOptions, function (error, data) {
1099        if (error) {
1100            console.error(`callback: isKeyItemExist failed, code: ${error.code}, msg: ${error.message}`);
1101        } else {
1102            console.info(`callback: isKeyItemExist success, data = ${JSON.stringify(data)}`);
1103        }
1104    });
1105} catch (error) {
1106    console.error(`promise: isKeyItemExist input arg invalid, code: ${error.code}, msg: ${error.message}`);
1107}
1108```
1109
1110## huks.isKeyItemExist<sup>9+</sup>
1111
1112isKeyItemExist(keyAlias: string, options: HuksOptions) : Promise\<boolean>
1113
1114判断密钥是否存在,使用Promise回调异步返回结果 。
1115
1116**系统能力**:SystemCapability.Security.Huks
1117
1118**参数:**
1119
1120| 参数名   | 类型                        | 必填 | 说明                     |
1121| -------- | --------------------------- | ---- | ------------------------ |
1122| keyAlias | string                      | 是   | 所需查找的密钥的别名。   |
1123| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
1124
1125**返回值:**
1126
1127| 类型              | 说明                                    |
1128| ----------------- | --------------------------------------- |
1129| Promise\<boolean> | Promise对象。FALSE代表密钥不存在,TRUE代表密钥存在。 |
1130
1131**示例:**
1132
1133```js
1134/* 此处options选择emptyOptions来传空 */
1135let keyAlias = 'keyAlias';
1136let emptyOptions = {
1137    properties: []
1138};
1139try {
1140    huks.isKeyItemExist(keyAlias, emptyOptions)
1141        .then ((data) => {
1142            console.info(`promise: isKeyItemExist success, data = ${JSON.stringify(data)}`);
1143        })
1144        .catch(error => {
1145            console.error(`promise: isKeyItemExist failed, code: ${error.code}, msg: ${error.message}`);
1146        });
1147} catch (error) {
1148    console.error(`promise: isKeyItemExist input arg invalid, code: ${error.code}, msg: ${error.message}`);
1149}
1150```
1151
1152## huks.initSession<sup>9+</sup>
1153
1154initSession(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksSessionHandle>) : void
1155
1156initSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。
1157
1158**系统能力**:SystemCapability.Security.Huks
1159
1160**参数:**
1161
1162| 参数名   | 类型                                                    | 必填 | 说明                                                 |
1163| -------- | ------------------------------------------------------- | ---- | ---------------------------------------------------- |
1164| keyAlias | string                                                  | 是   | initSession操作密钥的别名。                                 |
1165| options  | [HuksOptions](#huksoptions)                             | 是   | initSession操作的参数集合。                                 |
1166| callback | AsyncCallback\<[HuksSessionHandle](#hukssessionhandle9)> | 是   | 回调函数。将initSession操作返回的handle添加到密钥管理系统的回调。 |
1167
1168## huks.initSession<sup>9+</sup>
1169
1170initSession(keyAlias: string, options: HuksOptions) : Promise\<HuksSessionHandle>
1171
1172initSession操作密钥接口,使用Promise方式异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。
1173
1174**系统能力**:SystemCapability.Security.Huks
1175
1176**参数:**
1177
1178| 参数名   | 类型                                              | 必填 | 说明                                             |
1179| -------- | ------------------------------------------------- | ---- | ------------------------------------------------ |
1180| keyAlias | string                                            | 是   | initSession操作密钥的别名。                             |
1181| options  | [HuksOptions](#huksoptions)                       | 是   | initSession参数集合。                                   |
1182
1183**返回值**:
1184
1185| 类型                                | 说明                                               |
1186| ----------------------------------- | -------------------------------------------------- |
1187| Promise\<[HuksSessionHandle](#hukssessionhandle9)> | Promise对象。将initSession操作返回的handle添加到密钥管理系统的回调。 |
1188
1189## huks.updateSession<sup>9+</sup>
1190
1191updateSession(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void
1192
1193updateSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。
1194
1195**系统能力**:SystemCapability.Security.Huks
1196
1197**参数:**
1198
1199| 参数名   | 类型                                                 | 必填 | 说明                                         |
1200| -------- | ---------------------------------------------------- | ---- | -------------------------------------------- |
1201| handle   | number                                               | 是   | updateSession操作的handle。                         |
1202| options  | [HuksOptions](#huksoptions)                          | 是   | updateSession的参数集合。                           |
1203| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是   | 回调函数。将updateSession操作的结果添加到密钥管理系统的回调。 |
1204
1205
1206## huks.updateSession<sup>9+</sup>
1207
1208updateSession(handle: number, options: HuksOptions, token: Uint8Array, callback: AsyncCallback\<HuksReturnResult>) : void
1209
1210updateSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。
1211
1212**系统能力**:SystemCapability.Security.Huks
1213
1214**参数:**
1215
1216| 参数名   | 类型                                                 | 必填 | 说明                                         |
1217| -------- | ---------------------------------------------------- | ---- | -------------------------------------------- |
1218| handle   | number                                               | 是   | updateSession操作的handle。                         |
1219| options  | [HuksOptions](#huksoptions)                          | 是   | updateSession操作的参数集合。                       |
1220| token    | Uint8Array                                           | 是   | updateSession操作的token。                          |
1221| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是   | 回调函数。将updateSession操作的结果添加到密钥管理系统的回调。 |
1222
1223## huks.updateSession<sup>9+</sup>
1224
1225updateSession(handle: number, options: HuksOptions, token?: Uint8Array) : Promise\<HuksReturnResult>
1226
1227updateSession操作密钥接口,使用Promise方式异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。
1228
1229**系统能力**:SystemCapability.Security.Huks
1230
1231**参数:**
1232
1233| 参数名  | 类型                                           | 必填 | 说明                                         |
1234| ------- | ---------------------------------------------- | ---- | -------------------------------------------- |
1235| handle  | number                                         | 是   | updateSession操作的handle。                         |
1236| options | [HuksOptions](#huksoptions)                    | 是   | updateSession操作的参数集合。                       |
1237| token   | Uint8Array                                     | 否   | updateSession操作的token。                          |
1238
1239**返回值**:
1240
1241| 类型                                | 说明                                               |
1242| ----------------------------------- | -------------------------------------------------- |
1243| Promise<[HuksReturnResult](#huksreturnresult9)> | Promise对象。将updateSession操作的结果添加到密钥管理系统的回调。 |
1244
1245## huks.finishSession<sup>9+</sup>
1246
1247finishSession(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void
1248
1249finishSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。
1250
1251**系统能力**:SystemCapability.Security.Huks
1252
1253**参数:**
1254
1255| 参数名   | 类型                                                 | 必填 | 说明                                         |
1256| -------- | ---------------------------------------------------- | ---- | -------------------------------------------- |
1257| handle   | number                                               | 是   | finishSession操作的handle。                         |
1258| options  | [HuksOptions](#huksoptions)                          | 是   | finishSession的参数集合。                           |
1259| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是   | 回调函数。将finishSession操作的结果添加到密钥管理系统的回调。 |
1260
1261## huks.finishSession<sup>9+</sup>
1262
1263finishSession(handle: number, options: HuksOptions, token: Uint8Array, callback: AsyncCallback\<HuksReturnResult>) : void
1264
1265finishSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。
1266
1267**系统能力**:SystemCapability.Security.Huks
1268
1269**参数:**
1270
1271| 参数名   | 类型                                                  | 必填 | 说明                                         |
1272| -------- | ----------------------------------------------------- | ---- | -------------------------------------------- |
1273| handle   | number                                                | 是   | finishSession操作的handle。                         |
1274| options  | [HuksOptions](#huksoptions)                           | 是   | finishSession的参数集合。                           |
1275| token    | Uint8Array                                            | 是   | finishSession操作的token。                          |
1276| callback | AsyncCallback\<[HuksReturnResult](#huksreturnresult9)> | 是   | 回调函数。将finishSession操作的结果添加到密钥管理系统的回调。 |
1277
1278## huks.finishSession<sup>9+</sup>
1279
1280finishSession(handle: number, options: HuksOptions, token?: Uint8Array) : Promise\<HuksReturnResult>
1281
1282finishSession操作密钥接口,使用Promise方式异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。
1283
1284**系统能力**:SystemCapability.Security.Huks
1285
1286**参数:**
1287
1288| 参数名  | 类型                                            | 必填 | 说明                                |
1289| ------- | ----------------------------------------------- | ---- | ----------------------------------- |
1290| handle  | number                                          | 是   | finishSession操作的handle。                |
1291| options | [HuksOptions](#huksoptions)                     | 是   | finishSession操作的参数集合。              |
1292| token   | Uint8Array                                      | 否   | finishSession操作的token。                 |
1293
1294**返回值**:
1295
1296| 类型                                | 说明                                               |
1297| ----------------------------------- | -------------------------------------------------- |
1298| Promise\<[HuksReturnResult](#huksreturnresult9)> | Promise对象,用于获取异步返回结果。 |
1299
1300## huks.abortSession<sup>9+</sup>
1301
1302abortSession(handle: number, options: HuksOptions, callback: AsyncCallback\<void>) : void
1303
1304abortSession操作密钥接口,使用Callback回调异步返回结果 。
1305
1306**系统能力**:SystemCapability.Security.Huks
1307
1308**参数:**
1309
1310| 参数名   | 类型                        | 必填 | 说明                                        |
1311| -------- | --------------------------- | ---- | ------------------------------------------- |
1312| handle   | number                      | 是   | abortSession操作的handle。                         |
1313| options  | [HuksOptions](#huksoptions) | 是   | abortSession操作的参数集合。                       |
1314| callback | AsyncCallback\<void>        | 是   | 回调函数。将abortSession操作的结果添加到密钥管理系统的回调。 |
1315
1316**示例:**
1317
1318```js
1319/* huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用,当
1320 * huks.initSessionhuks.updateSession
1321 * 以及huks.finishSession操作中的任一阶段发生错误时,
1322 * 都需要调用huks.abortSession来终止密钥的使用。
1323 *
1324 * 以下以RSA1024密钥的callback功能使用为例
1325 */
1326function stringToUint8Array(str) {
1327    let arr = [];
1328    for (let i = 0, j = str.length; i < j; ++i) {
1329        arr.push(str.charCodeAt(i));
1330    }
1331    let tmpUint8Array = new Uint8Array(arr);
1332    return tmpUint8Array;
1333}
1334
1335let keyAlias = "HuksDemoRSA";
1336let properties = new Array();
1337let options = {
1338    properties: properties,
1339    inData: new Uint8Array(0)
1340};
1341let handle;
1342async function generateKey() {
1343    properties[0] = {
1344        tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
1345        value: huks.HuksKeyAlg.HUKS_ALG_RSA
1346    };
1347    properties[1] = {
1348        tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
1349        value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024
1350    };
1351    properties[2] = {
1352        tag: huks.HuksTag.HUKS_TAG_PURPOSE,
1353        value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
1354    };
1355    properties[3] = {
1356        tag: huks.HuksTag.HUKS_TAG_PADDING,
1357        value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5
1358    };
1359    properties[4] = {
1360        tag: huks.HuksTag.HUKS_TAG_DIGEST,
1361        value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
1362    };
1363    properties[5] = {
1364        tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
1365        value: huks.HuksCipherMode.HUKS_MODE_ECB,
1366    }
1367
1368    try {
1369        await huks.generateKeyItem(keyAlias, options, function (error, data) {
1370            if (error) {
1371                console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
1372            } else {
1373                console.info(`callback: generateKeyItem success`);
1374            }
1375        });
1376    } catch (error) {
1377        console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
1378    }
1379}
1380
1381async function huksInit() {
1382    console.log('enter huksInit');
1383    try {
1384        huks.initSession(keyAlias, options, function (error, data) {
1385            if (error) {
1386                console.error(`callback: initSession failed, code: ${error.code}, msg: ${error.message}`);
1387            } else {
1388                console.info(`callback: initSession success, data = ${JSON.stringify(data)}`);
1389                handle = data.handle;
1390            }
1391        });
1392    } catch (error) {
1393        console.error(`callback: initSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
1394    }
1395}
1396
1397async function huksUpdate() {
1398    console.log('enter huksUpdate');
1399    options.inData = stringToUint8Array("huksHmacTest");
1400    try {
1401        huks.updateSession(handle, options, function (error, data) {
1402            if (error) {
1403                console.error(`callback: updateSession failed, code: ${error.code}, msg: ${error.message}`);
1404            } else {
1405                console.info(`callback: updateSession success, data = ${JSON.stringify(data)}`);
1406            }
1407        });
1408    } catch (error) {
1409        console.error(`callback: updateSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
1410    }
1411}
1412
1413async function huksFinish() {
1414    console.log('enter huksFinish');
1415    options.inData = new Uint8Array(0);
1416    try {
1417        huks.finishSession(handle, options, function (error, data) {
1418            if (error) {
1419                console.error(`callback: finishSession failed, code: ${error.code}, msg: ${error.message}`);
1420            } else {
1421                console.info(`callback: finishSession success, data = ${JSON.stringify(data)}`);
1422            }
1423        });
1424    } catch (error) {
1425        console.error(`callback: finishSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
1426    }
1427}
1428
1429async function huksAbort() {
1430    console.log('enter huksAbort');
1431    try {
1432        huks.abortSession(handle, options, function (error, data) {
1433            if (error) {
1434                console.error(`callback: abortSession failed, code: ${error.code}, msg: ${error.message}`);
1435            } else {
1436                console.info(`callback: abortSession success`);
1437            }
1438        });
1439    } catch (error) {
1440        console.error(`callback: abortSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
1441    }
1442}
1443```
1444
1445## huks.abortSession<sup>9+</sup>
1446
1447abortSession(handle: number, options: HuksOptions) : Promise\<void>;
1448
1449abortSession操作密钥接口,使用Promise方式异步返回结果。
1450
1451**系统能力**:SystemCapability.Security.Huks
1452
1453**参数:**
1454
1455| 参数名  | 类型                        | 必填 | 说明                                        |
1456| ------- | --------------------------- | ---- | ------------------------------------------- |
1457| handle  | number                      | 是   | abortSession操作的handle。                         |
1458| options | [HuksOptions](#huksoptions) | 是   | abortSession操作的参数集合。                       |
1459
1460**返回值**:
1461
1462| 类型                                | 说明                                               |
1463| ----------------------------------- | -------------------------------------------------- |
1464| Promise\<void>             | Promise对象。将abortSession操作的结果添加到密钥管理系统的回调。 |
1465
1466**示例:**
1467
1468```js
1469/* huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用,当
1470 * huks.initSessionhuks.updateSession
1471 * 以及huks.finishSession操作中的任一阶段发生错误时,
1472 * 都需要调用huks.abortSession来终止密钥的使用。
1473 *
1474 * 以下以RSA1024密钥的callback功能使用为例
1475 */
1476function stringToUint8Array(str) {
1477    let arr = [];
1478    for (let i = 0, j = str.length; i < j; ++i) {
1479        arr.push(str.charCodeAt(i));
1480    }
1481    let tmpUint8Array = new Uint8Array(arr);
1482    return tmpUint8Array;
1483}
1484
1485let keyAlias = "HuksDemoRSA";
1486let properties = new Array();
1487let options = {
1488    properties: properties,
1489    inData: new Uint8Array(0)
1490};
1491let handle;
1492async function generateKey() {
1493    properties[0] = {
1494        tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
1495        value: huks.HuksKeyAlg.HUKS_ALG_RSA
1496    };
1497    properties[1] = {
1498        tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
1499        value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024
1500    };
1501    properties[2] = {
1502        tag: huks.HuksTag.HUKS_TAG_PURPOSE,
1503        value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
1504    };
1505    properties[3] = {
1506        tag: huks.HuksTag.HUKS_TAG_PADDING,
1507        value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5
1508    };
1509    properties[4] = {
1510        tag: huks.HuksTag.HUKS_TAG_DIGEST,
1511        value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
1512    };
1513    properties[5] = {
1514        tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
1515        value: huks.HuksCipherMode.HUKS_MODE_ECB,
1516    }
1517
1518    try {
1519        await huks.generateKeyItem(keyAlias, options)
1520            .then((data) => {
1521                console.info(`promise: generateKeyItem success`);
1522            })
1523            .catch(error => {
1524                console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
1525            });
1526    } catch (error) {
1527        console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
1528    }
1529}
1530
1531async function huksInit() {
1532    console.log('enter huksInit');
1533    try {
1534        await huks.initSession(keyAlias, options)
1535            .then ((data) => {
1536                console.info(`promise: initSession success, data = ${JSON.stringify(data)}`);
1537                    handle = data.handle;
1538            })
1539            .catch(error => {
1540                console.error(`promise: initSession key failed, code: ${error.code}, msg: ${error.message}`);
1541            });
1542    } catch (error) {
1543        console.error(`promise: initSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
1544    }
1545}
1546
1547async function huksUpdate() {
1548    console.log('enter huksUpdate');
1549    options.inData = stringToUint8Array("huksHmacTest");
1550    try {
1551        await huks.updateSession(handle, options)
1552            .then ((data) => {
1553                console.info(`promise: updateSession success, data = ${JSON.stringify(data)}`);
1554            })
1555            .catch(error => {
1556                console.error(`promise: updateSession failed, code: ${error.code}, msg: ${error.message}`);
1557            });
1558    } catch (error) {
1559        console.error(`promise: updateSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
1560    }
1561}
1562
1563async function huksFinish() {
1564    console.log('enter huksFinish');
1565    options.inData = new Uint8Array(0);
1566    try {
1567        await huks.finishSession(handle, options)
1568            .then ((data) => {
1569                console.info(`promise: finishSession success, data = ${JSON.stringify(data)}`);
1570            })
1571            .catch(error => {
1572                console.error(`promise: finishSession failed, code: ${error.code}, msg: ${error.message}`);
1573            });
1574    } catch (error) {
1575        console.error(`promise: finishSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
1576    }
1577}
1578
1579async function huksAbort() {
1580    console.log('enter huksAbort');
1581    try {
1582        await huks.abortSession(handle, options)
1583            .then ((data) => {
1584                console.info(`promise: abortSession success`);
1585            })
1586            .catch(error => {
1587                console.error(`promise: abortSession failed, code: ${error.code}, msg: ${error.message}`);
1588            });
1589    } catch (error) {
1590        console.error(`promise: abortSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
1591    }
1592}
1593```
1594
1595
1596## HuksExceptionErrCode<sup>9+</sup>
1597
1598表示错误码的枚举以及对应的错误信息, 错误码表示错误类型,错误信息展示错误详情。
1599
1600关于错误码的具体信息,可在[错误码参考文档](../errorcodes/errorcode-huks.md)中查看。
1601
1602**系统能力**:SystemCapability.Security.Huks
1603
1604| 名称                                           | 值 |  说明                        |
1605| ---------------------------------------------- | -------- |--------------------------- |
1606| HUKS_ERR_CODE_PERMISSION_FAIL                  | 201      | 权限错误导致失败。          |
1607| HUKS_ERR_CODE_ILLEGAL_ARGUMENT                 | 401      | 参数错误导致失败。          |
1608| HUKS_ERR_CODE_NOT_SUPPORTED_API                | 801      | 不支持的API。               |
1609| HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED            | 12000001 | 不支持的功能/特性。         |
1610| HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT      | 12000002 | 缺少密钥算法参数。          |
1611| HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT      | 12000003 | 无效密钥算法参数。          |
1612| HUKS_ERR_CODE_FILE_OPERATION_FAIL              | 12000004 | 文件操作失败。              |
1613| HUKS_ERR_CODE_COMMUNICATION_FAIL               | 12000005 | 通信失败。                  |
1614| HUKS_ERR_CODE_CRYPTO_FAIL                      | 12000006 | 算法库操作失败。            |
1615| HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED | 12000007 | 密钥访问失败-密钥访问失效。 |
1616| HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED           | 12000008 | 密钥访问失败-密钥认证失败。 |
1617| HUKS_ERR_CODE_KEY_AUTH_TIME_OUT                | 12000009 | 密钥访问失败-密钥访问超时。 |
1618| HUKS_ERR_CODE_SESSION_LIMIT                    | 12000010 | 密钥操作会话数已达上限。    |
1619| HUKS_ERR_CODE_ITEM_NOT_EXIST                   | 12000011 | 目标对象不存在。            |
1620| HUKS_ERR_CODE_EXTERNAL_ERROR                   | 12000012 | 外部错误。                  |
1621| HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST             | 12000013 | 缺失所需凭据。              |
1622| HUKS_ERR_CODE_INSUFFICIENT_MEMORY              | 12000014 | 内存不足。                  |
1623| HUKS_ERR_CODE_CALL_SERVICE_FAILED              | 12000015 | 调用其他系统服务失败。      |
1624
1625## HuksKeyPurpose
1626
1627表示密钥用途。
1628
1629**系统能力**:SystemCapability.Security.Huks
1630
1631| 名称                     | 值   | 说明                             |
1632| ------------------------ | ---- | -------------------------------- |
1633| HUKS_KEY_PURPOSE_ENCRYPT | 1    | 表示密钥用于对明文进行加密操作。 |
1634| HUKS_KEY_PURPOSE_DECRYPT | 2    | 表示密钥用于对密文进行解密操作。 |
1635| HUKS_KEY_PURPOSE_SIGN    | 4    | 表示密钥用于对数据进行签名。     |
1636| HUKS_KEY_PURPOSE_VERIFY  | 8    | 表示密钥用于验证签名后的数据。   |
1637| HUKS_KEY_PURPOSE_DERIVE  | 16   | 表示密钥用于派生密钥。           |
1638| HUKS_KEY_PURPOSE_WRAP    | 32   | 表示密钥用于加密导出。           |
1639| HUKS_KEY_PURPOSE_UNWRAP  | 64   | 表示密钥加密导入。               |
1640| HUKS_KEY_PURPOSE_MAC     | 128  | 表示密钥用于生成mac消息验证码。  |
1641| HUKS_KEY_PURPOSE_AGREE   | 256  | 表示密钥用于进行密钥协商。       |
1642
1643## HuksKeyDigest
1644
1645表示摘要算法。
1646
1647**系统能力**:SystemCapability.Security.Huks
1648
1649| 名称                   | 值   | 说明                                     |
1650| ---------------------- | ---- | ---------------------------------------- |
1651| HUKS_DIGEST_NONE       | 0   | 表示无摘要算法。 |
1652| HUKS_DIGEST_MD5        | 1    | 表示MD5摘要算法。 |
1653| HUKS_DIGEST_SM3<sup>9+</sup> | 2 | 表示SM3摘要算法。 |
1654| HUKS_DIGEST_SHA1       | 10   | 表示SHA1摘要算法。 |
1655| HUKS_DIGEST_SHA224 | 11   | 表示SHA224摘要算法。 |
1656| HUKS_DIGEST_SHA256 | 12  | 表示SHA256摘要算法。 |
1657| HUKS_DIGEST_SHA384  | 13  | 表示SHA384摘要算法。 |
1658| HUKS_DIGEST_SHA512 | 14  | 表示SHA512摘要算法。 |
1659
1660## HuksKeyPadding
1661
1662表示补齐算法。
1663
1664**系统能力**:SystemCapability.Security.Huks
1665
1666| 名称                   | 值   | 说明                                     |
1667| ---------------------- | ---- | ---------------------------------------- |
1668| HUKS_PADDING_NONE | 0    | 表示不使用补齐算法。 |
1669| HUKS_PADDING_OAEP | 1    | 表示使用OAEP补齐算法。 |
1670| HUKS_PADDING_PSS | 2    | 表示使用PSS补齐算法。 |
1671| HUKS_PADDING_PKCS1_V1_5 | 3    | 表示使用PKCS1_V1_5补齐算法。 |
1672| HUKS_PADDING_PKCS5 | 4   | 表示使用PKCS5补齐算法。 |
1673| HUKS_PADDING_PKCS7 | 5   | 表示使用PKCS7补齐算法。 |
1674
1675## HuksCipherMode
1676
1677表示加密模式。
1678
1679**系统能力**:SystemCapability.Security.Huks
1680
1681| 名称          | 值   | 说明                  |
1682| ------------- | ---- | --------------------- |
1683| HUKS_MODE_ECB | 1    | 表示使用ECB加密模式。 |
1684| HUKS_MODE_CBC | 2    | 表示使用CBC加密模式。 |
1685| HUKS_MODE_CTR | 3    | 表示使用CTR加密模式。 |
1686| HUKS_MODE_OFB | 4    | 表示使用OFB加密模式。 |
1687| HUKS_MODE_CCM | 31   | 表示使用CCM加密模式。 |
1688| HUKS_MODE_GCM | 32   | 表示使用GCM加密模式。 |
1689
1690## HuksKeySize
1691
1692表示密钥长度。
1693
1694**系统能力**:SystemCapability.Security.Huks
1695
1696| 名称                               | 值   | 说明                                       |
1697| ---------------------------------- | ---- | ------------------------------------------ |
1698| HUKS_RSA_KEY_SIZE_512              | 512  | 表示使用RSA算法的密钥长度为512bit。        |
1699| HUKS_RSA_KEY_SIZE_768              | 768  | 表示使用RSA算法的密钥长度为768bit。        |
1700| HUKS_RSA_KEY_SIZE_1024             | 1024 | 表示使用RSA算法的密钥长度为1024bit。       |
1701| HUKS_RSA_KEY_SIZE_2048             | 2048 | 表示使用RSA算法的密钥长度为2048bit。       |
1702| HUKS_RSA_KEY_SIZE_3072             | 3072 | 表示使用RSA算法的密钥长度为3072bit。       |
1703| HUKS_RSA_KEY_SIZE_4096             | 4096 | 表示使用RSA算法的密钥长度为4096bit。       |
1704| HUKS_ECC_KEY_SIZE_224              | 224  | 表示使用ECC算法的密钥长度为224bit。        |
1705| HUKS_ECC_KEY_SIZE_256              | 256  | 表示使用ECC算法的密钥长度为256bit。        |
1706| HUKS_ECC_KEY_SIZE_384              | 384  | 表示使用ECC算法的密钥长度为384bit。        |
1707| HUKS_ECC_KEY_SIZE_521              | 521  | 表示使用ECC算法的密钥长度为521bit。        |
1708| HUKS_AES_KEY_SIZE_128              | 128  | 表示使用AES算法的密钥长度为128bit。        |
1709| HUKS_AES_KEY_SIZE_192              | 192  | 表示使用AES算法的密钥长度为196bit。        |
1710| HUKS_AES_KEY_SIZE_256              | 256  | 表示使用AES算法的密钥长度为256bit。        |
1711| HUKS_AES_KEY_SIZE_512              | 512  | 表示使用AES算法的密钥长度为512bit。        |
1712| HUKS_CURVE25519_KEY_SIZE_256       | 256  | 表示使用CURVE25519算法的密钥长度为256bit。 |
1713| HUKS_DH_KEY_SIZE_2048              | 2048 | 表示使用DH算法的密钥长度为2048bit。        |
1714| HUKS_DH_KEY_SIZE_3072              | 3072 | 表示使用DH算法的密钥长度为3072bit。        |
1715| HUKS_DH_KEY_SIZE_4096              | 4096 | 表示使用DH算法的密钥长度为4096bit。        |
1716| HUKS_SM2_KEY_SIZE_256<sup>9+</sup> | 256  | 表示SM2算法的密钥长度为256bit。            |
1717| HUKS_SM4_KEY_SIZE_128<sup>9+</sup> | 128  | 表示SM4算法的密钥长度为128bit。            |
1718
1719## HuksKeyAlg
1720
1721表示密钥使用的算法。
1722
1723**系统能力**:SystemCapability.Security.Huks
1724
1725| 名称                      | 值   | 说明                  |
1726| ------------------------- | ---- | --------------------- |
1727| HUKS_ALG_RSA              | 1    | 表示使用RSA算法。     |
1728| HUKS_ALG_ECC              | 2    | 表示使用ECC算法。     |
1729| HUKS_ALG_DSA              | 3    | 表示使用DSA算法。     |
1730| HUKS_ALG_AES              | 20   | 表示使用AES算法。     |
1731| HUKS_ALG_HMAC             | 50   | 表示使用HMAC算法。    |
1732| HUKS_ALG_HKDF             | 51   | 表示使用HKDF算法。    |
1733| HUKS_ALG_PBKDF2           | 52   | 表示使用PBKDF2算法。  |
1734| HUKS_ALG_ECDH             | 100  | 表示使用ECDH算法。    |
1735| HUKS_ALG_X25519           | 101  | 表示使用X25519算法。  |
1736| HUKS_ALG_ED25519          | 102  | 表示使用ED25519算法。 |
1737| HUKS_ALG_DH               | 103  | 表示使用DH算法。      |
1738| HUKS_ALG_SM2<sup>9+</sup> | 150  | 表示使用SM2算法。     |
1739| HUKS_ALG_SM3<sup>9+</sup> | 151  | 表示使用SM3算法。     |
1740| HUKS_ALG_SM4<sup>9+</sup> | 152  | 表示使用SM4算法。     |
1741
1742## HuksKeyGenerateType
1743
1744表示生成密钥的类型。
1745
1746**系统能力**:SystemCapability.Security.Huks
1747
1748| 名称                           | 值   | 说明             |
1749| ------------------------------ | ---- | ---------------- |
1750| HUKS_KEY_GENERATE_TYPE_DEFAULT | 0    | 默认生成的密钥。 |
1751| HUKS_KEY_GENERATE_TYPE_DERIVE  | 1    | 派生生成的密钥。 |
1752| HUKS_KEY_GENERATE_TYPE_AGREE   | 2    | 协商生成的密钥。 |
1753
1754## HuksKeyFlag
1755
1756表示密钥的产生方式。
1757
1758**系统能力**:SystemCapability.Security.Huks
1759
1760| 名称                       | 值   | 说明                                 |
1761| -------------------------- | ---- | ------------------------------------ |
1762| HUKS_KEY_FLAG_IMPORT_KEY   | 1    | 表示通过导入公钥接口导入的密钥。     |
1763| HUKS_KEY_FLAG_GENERATE_KEY | 2    | 表示通过生成密钥接口生成的密钥。     |
1764| HUKS_KEY_FLAG_AGREE_KEY    | 3    | 表示通过生成密钥协商接口生成的密钥。 |
1765| HUKS_KEY_FLAG_DERIVE_KEY   | 4    | 表示通过生成密钥派生接口生成的密钥。 |
1766
1767## HuksKeyStorageType
1768
1769表示密钥存储方式。
1770
1771**系统能力**:SystemCapability.Security.Huks
1772
1773| 名称                    | 值   | 说明                           |
1774| ----------------------- | ---- | ------------------------------ |
1775| HUKS_STORAGE_TEMP       | 0    | 表示通过本地直接管理密钥。     |
1776| HUKS_STORAGE_PERSISTENT | 1    | 表示通过HUKS service管理密钥。 |
1777
1778## HuksSendType
1779
1780表示发送Tag的方式。
1781
1782**系统能力**:SystemCapability.Security.Huks
1783
1784| 名称                 | 值   | 说明              |
1785| -------------------- | ---- | ----------------- |
1786| HUKS_SEND_TYPE_ASYNC | 0    | 表示异步发送TAG。 |
1787| HUKS_SEND_TYPE_SYNC  | 1    | 表示同步发送TAG。 |
1788
1789## HuksUnwrapSuite<sup>9+</sup>
1790
1791表示导入加密密钥的算法套件。
1792
1793**系统能力**:SystemCapability.Security.Huks
1794
1795| 名称                                           | 值   | 说明                                                  |
1796| ---------------------------------------------- | ---- | ----------------------------------------------------- |
1797| HUKS_UNWRAP_SUITE_X25519_AES_256_GCM_NOPADDING | 1    | 导入加密密钥时,X25519密钥协商后使用AES-256 GCM加密。 |
1798| HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING   | 2    | 导入加密密钥时,ECDH密钥协商后使用AES-256 GCM加密。   |
1799
1800## HuksImportKeyType<sup>9+</sup>
1801
1802表示导入密钥的密钥类型,默认为导入公钥,导入对称密钥时不需要该字段。
1803
1804**系统能力**:SystemCapability.Security.Huks
1805
1806| 名称                      | 值   | 说明                           |
1807| ------------------------- | ---- | ------------------------------ |
1808| HUKS_KEY_TYPE_PUBLIC_KEY  | 0    | 表示导入的密钥类型为公钥。     |
1809| HUKS_KEY_TYPE_PRIVATE_KEY | 1    | 表示导入的密钥类型为私钥。     |
1810| HUKS_KEY_TYPE_KEY_PAIR    | 2    | 表示导入的密钥类型为公私钥对。 |
1811
1812## HuksUserAuthType<sup>9+</sup>
1813
1814表示用户认证类型。
1815
1816**系统能力**:SystemCapability.Security.Huks
1817
1818| 名称                            | 值   | 说明                      |
1819| ------------------------------- | ---- | ------------------------- |
1820| HUKS_USER_AUTH_TYPE_FINGERPRINT | 1 << 0 | 表示用户认证类型为指纹。  |
1821| HUKS_USER_AUTH_TYPE_FACE        | 1 << 1 | 表示用户认证类型为人脸 。 |
1822| HUKS_USER_AUTH_TYPE_PIN         | 1 << 2  | 表示用户认证类型为PIN码。 |
1823
1824## HuksAuthAccessType<sup>9+</sup>
1825
1826表示安全访问控制类型。
1827
1828**系统能力**:SystemCapability.Security.Huks
1829
1830| 名称                                    | 值   | 说明                                             |
1831| --------------------------------------- | ---- | ------------------------------------------------ |
1832| HUKS_AUTH_ACCESS_INVALID_CLEAR_PASSWORD | 1 << 0 | 表示安全访问控制类型为清除密码后密钥无效。       |
1833| HUKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL | 1 << 1 | 表示安全访问控制类型为新录入生物特征后密钥无效。 |
1834
1835## HuksChallengeType<sup>9+</sup>
1836
1837表示密钥使用时生成challenge的类型。
1838
1839**系统能力**:SystemCapability.Security.Huks
1840
1841| 名称                            | 值   | 说明                           |
1842| ------------------------------- | ---- | ------------------------------ |
1843| HUKS_CHALLENGE_TYPE_NORMAL | 0    | 表示challenge为普通类型,默认32字节。 |
1844| HUKS_CHALLENGE_TYPE_CUSTOM        | 1    | 表示challenge为用户自定义类型。支持使用多个密钥仅一次认证。 |
1845| HUKS_CHALLENGE_TYPE_NONE         | 2    | 表示免challenge类型。 |
1846
1847## HuksChallengePosition<sup>9+</sup>
1848
1849表示challenge类型为用户自定义类型时,生成的challenge有效长度仅为8字节连续的数据,且仅支持4种位置 。
1850
1851**系统能力**:SystemCapability.Security.Huks
1852
1853| 名称                            | 值   | 说明                           |
1854| ------------------------------- | ---- | ------------------------------ |
1855| HUKS_CHALLENGE_POS_0 | 0    | 表示0~7字节为当前密钥的有效challenge。 |
1856| HUKS_CHALLENGE_POS_1        | 1    | 表示8~15字节为当前密钥的有效challenge。 |
1857| HUKS_CHALLENGE_POS_2         | 2    | 表示16~23字节为当前密钥的有效challenge。 |
1858| HUKS_CHALLENGE_POS_3        | 3   | 表示24~31字节为当前密钥的有效challenge。 |
1859
1860## HuksSecureSignType<sup>9+</sup>
1861
1862表示生成或导入密钥时,指定该密钥的签名类型。
1863
1864**系统能力**:SystemCapability.Security.Huks
1865
1866| 名称                           | 值   | 说明                                                         |
1867| ------------------------------ | ---- | ------------------------------------------------------------ |
1868| HUKS_SECURE_SIGN_WITH_AUTHINFO | 1    | 表示签名类型为携带认证信息。生成或导入密钥时指定该字段,则在使用密钥进行签名时,对待签名的数据添加认证信息后进行签名。 |
1869
1870## HuksTagType
1871
1872表示Tag的数据类型。
1873
1874**系统能力**:SystemCapability.Security.Huks
1875
1876| 名称                  | 值      | 说明                                    |
1877| --------------------- | ------- | --------------------------------------- |
1878| HUKS_TAG_TYPE_INVALID | 0 << 28 | 表示非法的Tag类型。                     |
1879| HUKS_TAG_TYPE_INT     | 1 << 28 | 表示该Tag的数据类型为int类型的number。  |
1880| HUKS_TAG_TYPE_UINT    | 2 << 28 | 表示该Tag的数据类型为uint类型的number。 |
1881| HUKS_TAG_TYPE_ULONG   | 3 << 28 | 表示该Tag的数据类型为bigint。           |
1882| HUKS_TAG_TYPE_BOOL    | 4 << 28 | 表示该Tag的数据类型为boolean。          |
1883| HUKS_TAG_TYPE_BYTES   | 5 << 28 | 表示该Tag的数据类型为Uint8Array。       |
1884
1885## HuksTag
1886
1887表示调用参数的Tag。
1888
1889**系统能力**:SystemCapability.Security.Huks
1890
1891| 名称                                         | 值                                       | 说明                                   |
1892| -------------------------------------------- | ---------------------------------------- | -------------------------------------- |
1893| HUKS_TAG_INVALID                             | HuksTagType.HUKS_TAG_TYPE_INVALID \| 0   | 表示非法的Tag。                        |
1894| HUKS_TAG_ALGORITHM                           | HuksTagType.HUKS_TAG_TYPE_UINT \| 1                  | 表示算法的Tag。                        |
1895| HUKS_TAG_PURPOSE                             | HuksTagType.HUKS_TAG_TYPE_UINT \| 2      | 表示密钥用途的Tag。                    |
1896| HUKS_TAG_KEY_SIZE                            | HuksTagType.HUKS_TAG_TYPE_UINT \| 3      | 表示密钥长度的Tag。                    |
1897| HUKS_TAG_DIGEST                              | HuksTagType.HUKS_TAG_TYPE_UINT \| 4      | 表示摘要算法的Tag。                    |
1898| HUKS_TAG_PADDING                             | HuksTagType.HUKS_TAG_TYPE_UINT \| 5      | 表示补齐算法的Tag。                    |
1899| HUKS_TAG_BLOCK_MODE                          | HuksTagType.HUKS_TAG_TYPE_UINT \| 6      | 表示加密模式的Tag。                    |
1900| HUKS_TAG_KEY_TYPE                            | HuksTagType.HUKS_TAG_TYPE_UINT \| 7      | 表示密钥类型的Tag。                    |
1901| HUKS_TAG_ASSOCIATED_DATA                     | HuksTagType.HUKS_TAG_TYPE_BYTES \| 8     | 表示附加身份验证数据的Tag。            |
1902| HUKS_TAG_NONCE                               | HuksTagType.HUKS_TAG_TYPE_BYTES \| 9     | 表示密钥加解密的字段。                 |
1903| HUKS_TAG_IV                                  | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10    | 表示密钥初始化的向量。                 |
1904| HUKS_TAG_INFO                                | HuksTagType.HUKS_TAG_TYPE_BYTES \| 11    | 表示密钥派生时的info。                 |
1905| HUKS_TAG_SALT                                | HuksTagType.HUKS_TAG_TYPE_BYTES \| 12    | 表示密钥派生时的盐值。                 |
1906| HUKS_TAG_PWD                                 | HuksTagType.HUKS_TAG_TYPE_BYTES \| 13    | 表示密钥派生时的password。             |
1907| HUKS_TAG_ITERATION                           | HuksTagType.HUKS_TAG_TYPE_UINT \| 14     | 表示密钥派生时的迭代次数。             |
1908| HUKS_TAG_KEY_GENERATE_TYPE                   | HuksTagType.HUKS_TAG_TYPE_UINT \| 15     | 表示生成密钥类型的Tag。                |
1909| HUKS_TAG_DERIVE_MAIN_KEY                     | HuksTagType.HUKS_TAG_TYPE_BYTES \| 16    | 表示密钥派生时的主密钥。               |
1910| HUKS_TAG_DERIVE_FACTOR                       | HuksTagType.HUKS_TAG_TYPE_BYTES \| 17    | 表示密钥派生时的派生因子。             |
1911| HUKS_TAG_DERIVE_ALG                          | HuksTagType.HUKS_TAG_TYPE_UINT \| 18     | 表示密钥派生时的算法类型。             |
1912| HUKS_TAG_AGREE_ALG                           | HuksTagType.HUKS_TAG_TYPE_UINT \| 19     | 表示密钥协商时的算法类型。             |
1913| HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS       | HuksTagType.HUKS_TAG_TYPE_BOOL \| 20     | 表示密钥协商时的公钥别名。             |
1914| HUKS_TAG_AGREE_PRIVATE_KEY_ALIAS             | HuksTagType.HUKS_TAG_TYPE_BYTES \| 21    | 表示密钥协商时的私钥别名。             |
1915| HUKS_TAG_AGREE_PUBLIC_KEY                    | HuksTagType.HUKS_TAG_TYPE_BYTES \| 22    | 表示密钥协商时的公钥。                 |
1916| HUKS_TAG_KEY_ALIAS                           | HuksTagType.HUKS_TAG_TYPE_BYTES \| 23    | 表示密钥别名。                         |
1917| HUKS_TAG_DERIVE_KEY_SIZE                     | HuksTagType.HUKS_TAG_TYPE_UINT \| 24     | 表示派生密钥的大小。                   |
1918| HUKS_TAG_IMPORT_KEY_TYPE<sup>9+</sup>        | HuksTagType.HUKS_TAG_TYPE_UINT \| 25     | 表示导入的密钥类型。                     |
1919| HUKS_TAG_UNWRAP_ALGORITHM_SUITE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 26     | 表示导入加密密钥的套件。                 |
1920| HUKS_TAG_ACTIVE_DATETIME                     | HuksTagType.HUKS_TAG_TYPE_ULONG \| 201   | 预留。                                 |
1921| HUKS_TAG_ORIGINATION_EXPIRE_DATETIME         | HuksTagType.HUKS_TAG_TYPE_ULONG \| 202   | 预留。                                 |
1922| HUKS_TAG_USAGE_EXPIRE_DATETIME               | HuksTagType.HUKS_TAG_TYPE_ULONG \| 203   | 预留。                                 |
1923| HUKS_TAG_CREATION_DATETIME                   | HuksTagType.HUKS_TAG_TYPE_ULONG \| 204   | 预留。                                 |
1924| HUKS_TAG_ALL_USERS                           | HuksTagType.HUKS_TAG_TYPE_BOOL \| 301    | 预留。                                 |
1925| HUKS_TAG_USER_ID                             | HuksTagType.HUKS_TAG_TYPE_UINT \| 302    | 预留。                                 |
1926| HUKS_TAG_NO_AUTH_REQUIRED                    | HuksTagType.HUKS_TAG_TYPE_BOOL \| 303    | 预留。                                 |
1927| HUKS_TAG_USER_AUTH_TYPE                      | HuksTagType.HUKS_TAG_TYPE_UINT \| 304    | 表示用户认证类型。从[HuksUserAuthType](#huksuserauthtype9)中选择,需要与安全访问控制类型同时设置。支持同时指定两种用户认证类型,如:安全访问控制类型指定为HKS_SECURE_ACCESS_INVALID_NEW_BIO_ENROLL时,密钥访问认证类型可以指定以下三种: HKS_USER_AUTH_TYPE_FACE 、HKS_USER_AUTH_TYPE_FINGERPRINT、HKS_USER_AUTH_TYPE_FACE \| HKS_USER_AUTH_TYPE_FINGERPRINT |
1928| HUKS_TAG_AUTH_TIMEOUT                        | HuksTagType.HUKS_TAG_TYPE_UINT \| 305    | 预留。                                 |
1929| HUKS_TAG_AUTH_TOKEN                          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 306   | 预留。                                 |
1930| HUKS_TAG_KEY_AUTH_ACCESS_TYPE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 307 | 表示安全访问控制类型。从[HuksAuthAccessType](#huksauthaccesstype9)中选择,需要和用户认证类型同时设置。 |
1931| HUKS_TAG_KEY_SECURE_SIGN_TYPE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 308 | 表示生成或导入密钥时,指定该密钥的签名类型。 |
1932| HUKS_TAG_CHALLENGE_TYPE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 309 | 表示密钥使用时生成的challenge类型。从[HuksChallengeType](#hukschallengetype9)中选择 |
1933| HUKS_TAG_CHALLENGE_POS<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 310 | 表示challenge类型为用户自定义类型时,huks产生的challenge有效长度仅为8字节连续的数据。从[HuksChallengePosition](#hukschallengeposition9)中选择。 |
1934| HUKS_TAG_ATTESTATION_CHALLENGE               | HuksTagType.HUKS_TAG_TYPE_BYTES \| 501   | 表示attestation时的挑战值。            |
1935| HUKS_TAG_ATTESTATION_APPLICATION_ID          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 502   | 表示attestation时拥有该密钥的application的Id。    |
1936| HUKS_TAG_ATTESTATION_ID_BRAND                | HuksTagType.HUKS_TAG_TYPE_BYTES \| 503   | 表示设备的品牌。                      |
1937| HUKS_TAG_ATTESTATION_ID_DEVICE               | HuksTagType.HUKS_TAG_TYPE_BYTES \| 504   | 表示设备的设备ID。                     |
1938| HUKS_TAG_ATTESTATION_ID_PRODUCT              | HuksTagType.HUKS_TAG_TYPE_BYTES \| 505   | 表示设备的产品名。                    |
1939| HUKS_TAG_ATTESTATION_ID_SERIAL               | HuksTagType.HUKS_TAG_TYPE_BYTES \| 506   | 表示设备的SN号。                       |
1940| HUKS_TAG_ATTESTATION_ID_IMEI                 | HuksTagType.HUKS_TAG_TYPE_BYTES \| 507   | 表示设备的IMEI号。                     |
1941| HUKS_TAG_ATTESTATION_ID_MEID                 | HuksTagType.HUKS_TAG_TYPE_BYTES \| 508   | 表示设备的MEID号。                     |
1942| HUKS_TAG_ATTESTATION_ID_MANUFACTURER         | HuksTagType.HUKS_TAG_TYPE_BYTES \| 509   | 表示设备的制造商。                     |
1943| HUKS_TAG_ATTESTATION_ID_MODEL                | HuksTagType.HUKS_TAG_TYPE_BYTES \| 510   | 表示设备的型号。                       |
1944| HUKS_TAG_ATTESTATION_ID_ALIAS                | HuksTagType.HUKS_TAG_TYPE_BYTES \| 511   | 表示attestation时的密钥别名。          |
1945| HUKS_TAG_ATTESTATION_ID_SOCID                | HuksTagType.HUKS_TAG_TYPE_BYTES \| 512   | 表示设备的SOCID。                      |
1946| HUKS_TAG_ATTESTATION_ID_UDID                 | HuksTagType.HUKS_TAG_TYPE_BYTES \| 513   | 表示设备的UDID。                       |
1947| HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO       | HuksTagType.HUKS_TAG_TYPE_BYTES \| 514   | 表示attestation时的安全凭据。          |
1948| HUKS_TAG_ATTESTATION_ID_VERSION_INFO         | HuksTagType.HUKS_TAG_TYPE_BYTES \| 515   | 表示attestation时的版本号。            |
1949| HUKS_TAG_IS_KEY_ALIAS                        | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1001   | 表示是否使用生成key时传入的别名的Tag。 |
1950| HUKS_TAG_KEY_STORAGE_FLAG                    | HuksTagType.HUKS_TAG_TYPE_UINT \| 1002   | 表示密钥存储方式的Tag。                |
1951| HUKS_TAG_IS_ALLOWED_WRAP                     | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1003   | 预留。                                 |
1952| HUKS_TAG_KEY_WRAP_TYPE                       | HuksTagType.HUKS_TAG_TYPE_UINT \| 1004   | 预留。                                 |
1953| HUKS_TAG_KEY_AUTH_ID                         | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1005  | 预留。                                 |
1954| HUKS_TAG_KEY_ROLE                            | HuksTagType.HUKS_TAG_TYPE_UINT \| 1006   | 预留。                                 |
1955| HUKS_TAG_KEY_FLAG                            | HuksTagType.HUKS_TAG_TYPE_UINT \| 1007   | 表示密钥标志的Tag。                    |
1956| HUKS_TAG_IS_ASYNCHRONIZED                    | HuksTagType.HUKS_TAG_TYPE_UINT \| 1008   | 预留。                                 |
1957| HUKS_TAG_SECURE_KEY_ALIAS                    | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1009   | 预留。                                 |
1958| HUKS_TAG_SECURE_KEY_UUID                     | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1010  | 预留。                                 |
1959| HUKS_TAG_KEY_DOMAIN                          | HuksTagType.HUKS_TAG_TYPE_UINT \| 1011   | 预留。                                 |
1960| HUKS_TAG_PROCESS_NAME                        | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10001 | 表示进程名称的Tag。                    |
1961| HUKS_TAG_PACKAGE_NAME                        | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10002 | 预留。                                 |
1962| HUKS_TAG_ACCESS_TIME                         | HuksTagType.HUKS_TAG_TYPE_UINT \| 10003  | 预留。                                 |
1963| HUKS_TAG_USES_TIME                           | HuksTagType.HUKS_TAG_TYPE_UINT \| 10004  | 预留。                                 |
1964| HUKS_TAG_CRYPTO_CTX                          | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10005 | 预留。                                 |
1965| HUKS_TAG_KEY                                 | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10006 | 预留。                                 |
1966| HUKS_TAG_KEY_VERSION                         | HuksTagType.HUKS_TAG_TYPE_UINT \| 10007  | 表示密钥版本的Tag。                    |
1967| HUKS_TAG_PAYLOAD_LEN                         | HuksTagType.HUKS_TAG_TYPE_UINT \| 10008  | 预留。                                 |
1968| HUKS_TAG_AE_TAG                              | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10009 | 预留。                                 |
1969| HUKS_TAG_IS_KEY_HANDLE                       | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10010 | 预留。                                 |
1970| HUKS_TAG_OS_VERSION                          | HuksTagType.HUKS_TAG_TYPE_UINT \| 10101  | 表示操作系统版本的Tag。                |
1971| HUKS_TAG_OS_PATCHLEVEL                       | HuksTagType.HUKS_TAG_TYPE_UINT \| 10102  | 表示操作系统补丁级别的Tag。            |
1972| HUKS_TAG_SYMMETRIC_KEY_DATA                  | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20001 | 预留。                                 |
1973| HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20002 | 预留。                                 |
1974| HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA         | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20003 | 预留。                                 |
1975
1976## huks.generateKey<sup>(deprecated)</sup>
1977
1978generateKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
1979
1980生成密钥,使用Callback回调异步返回结果。
1981
1982> **说明:** 从API Version 9开始废弃,建议使用[huks.generateKeyItem<sup>9+</sup>](#huksgeneratekeyitem9)替代。
1983
1984**系统能力**:SystemCapability.Security.Huks
1985
1986**参数:**
1987
1988| 参数名   | 类型                                      | 必填 | 说明                                                         |
1989| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1990| keyAlias | string                                    | 是   | 别名。                                                       |
1991| options  | [HuksOptions](#huksoptions)               | 是   | 用于存放生成key所需TAG。                                     |
1992| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是   | 回调函数。返回HUKS_SUCCESS时表示接口使用成功,其余结果请参考HuksResult进行错误码查询。 |
1993
1994**示例:**
1995
1996```js
1997/* 以生成RSA512密钥为例 */
1998let keyAlias = 'keyAlias';
1999let properties = new Array();
2000properties[0] = {
2001  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
2002  value: huks.HuksKeyAlg.HUKS_ALG_RSA
2003};
2004properties[1] = {
2005  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
2006  value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_512
2007};
2008properties[2] = {
2009  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
2010  value:
2011huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT |
2012huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
2013};
2014properties[3] = {
2015  tag: huks.HuksTag.HUKS_TAG_PADDING,
2016  value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
2017};
2018properties[4] = {
2019  tag: huks.HuksTag.HUKS_TAG_DIGEST,
2020  value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
2021};
2022let options = {
2023  properties: properties
2024};
2025huks.generateKey(keyAlias, options, function (err, data){});
2026```
2027
2028## huks.generateKey<sup>(deprecated)</sup>
2029
2030generateKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
2031
2032生成密钥,使用Promise方式异步返回结果。
2033
2034> **说明:** 从API Version 9开始废弃,建议使用[huks.generateKeyItem<sup>9+</sup>](#huksgeneratekeyitem9-1)替代。
2035
2036**系统能力**:SystemCapability.Security.Huks
2037
2038**参数:**
2039
2040| 参数名   | 类型                        | 必填 | 说明                     |
2041| -------- | --------------------------- | ---- | ------------------------ |
2042| keyAlias | string                      | 是   | 密钥别名。               |
2043| options  | [HuksOptions](#huksoptions) | 是   | 用于存放生成key所需TAG。 |
2044
2045**返回值**:
2046
2047| 类型                                | 说明                                               |
2048| ----------------------------------- | -------------------------------------------------- |
2049| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
2050
2051**示例:**
2052
2053```js
2054/* 以生成ECC256密钥为例 */
2055let keyAlias = 'keyAlias';
2056let properties = new Array();
2057properties[0] = {
2058  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
2059  value: huks.HuksKeyAlg.HUKS_ALG_ECC
2060};
2061properties[1] = {
2062  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
2063  value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
2064};
2065properties[2] = {
2066  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
2067  value:
2068huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
2069huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
2070};
2071properties[3] = {
2072  tag: huks.HuksTag.HUKS_TAG_DIGEST,
2073  value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
2074};
2075let options = {
2076  properties: properties
2077};
2078let result = huks.generateKey(keyAlias, options);
2079```
2080
2081## huks.deleteKey<sup>(deprecated)</sup>
2082
2083deleteKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
2084
2085删除密钥,使用Callback回调异步返回结果。
2086
2087> **说明:** 从API Version 9开始废弃,建议使用[huks.deleteKeyItem<sup>9+</sup>](#huksdeletekeyitem9)替代。
2088
2089**系统能力**:SystemCapability.Security.Huks
2090
2091**参数:**
2092
2093| 参数名   | 类型                                      | 必填 | 说明                                               |
2094| -------- | ----------------------------------------- | ---- | -------------------------------------------------- |
2095| keyAlias | string                                    | 是   | 密钥别名,应为生成key时传入的别名。                |
2096| options  | [HuksOptions](#huksoptions)               | 是   | 空对象(此处传空即可)。                           |
2097| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是   | 回调函数。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
2098
2099**示例:**
2100
2101```js
2102/* 此处options选择emptyOptions传空 */
2103let keyAlias = 'keyAlias';
2104let emptyOptions = {
2105  properties: []
2106};
2107huks.deleteKey(keyAlias, emptyOptions, function (err, data) {});
2108```
2109
2110## huks.deleteKey<sup>(deprecated)</sup>
2111
2112deleteKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
2113
2114删除密钥,使用Promise方式异步返回结果。
2115
2116> **说明:** 从API Version 9开始废弃,建议使用[huks.deleteKeyItem<sup>9+</sup>](#huksdeletekeyitem9-1)替代。
2117
2118**系统能力**:SystemCapability.Security.Huks
2119
2120**参数:**
2121
2122| 参数名   | 类型        | 必填 | 说明                                                  |
2123| -------- | ----------- | ---- | ----------------------------------------------------- |
2124| keyAlias | string      | 是   | 密钥别名,应为生成key时传入的别名。 |
2125| options | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
2126
2127**返回值:**
2128
2129| 类型                                | 说明                                               |
2130| ----------------------------------- | -------------------------------------------------- |
2131| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
2132
2133**示例:**
2134
2135```js
2136/* 此处options选择emptyOptions传空 */
2137let keyAlias = 'keyAlias';
2138let emptyOptions = {
2139  properties: []
2140};
2141let result = huks.deleteKey(keyAlias, emptyOptions);
2142```
2143
2144## huks.importKey<sup>(deprecated)</sup>
2145
2146importKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
2147
2148导入明文密钥,使用Callback方式回调异步返回结果 。
2149
2150> **说明:** 从API Version 9开始废弃,建议使用[huks.importKeyItem<sup>9+</sup>](#huksimportkeyitem9)替代。
2151
2152**系统能力**:SystemCapability.Security.Huks
2153
2154**参数:**
2155
2156| 参数名   | 类型                     | 必填 | 说明                                              |
2157| -------- | ------------------------ | ---- | ------------------------------------------------- |
2158| keyAlias | string                   | 是   | 密钥别名。 |
2159| options  | [HuksOptions](#huksoptions) | 是   | 用于导入时所需TAG和需要导入的密钥。 |
2160| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是   | 回调函数。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
2161
2162**示例:**
2163
2164```js
2165/* 以导入AES256密钥为例 */
2166let plainTextSize32 = makeRandomArr(32);
2167function makeRandomArr(size) {
2168    let arr = new Uint8Array(size);
2169    for (let i = 0; i < size; i++) {
2170        arr[i] = Math.floor(Math.random() * 10);
2171    }
2172    return arr;
2173};
2174let keyAlias = 'keyAlias';
2175let properties = new Array();
2176properties[0] = {
2177  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
2178  value: huks.HuksKeyAlg.HUKS_ALG_AES
2179};
2180properties[1] = {
2181  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
2182  value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
2183};
2184properties[2] = {
2185  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
2186  value:
2187huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
2188};
2189properties[3] = {
2190  tag: huks.HuksTag.HUKS_TAG_PADDING,
2191  value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
2192};
2193properties[4] = {
2194  tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
2195  value: huks.HuksCipherMode.HUKS_MODE_ECB
2196};
2197let options = {
2198  properties: properties,
2199  inData: plainTextSize32
2200};
2201huks.importKey(keyAlias, options, function (err, data){});
2202```
2203
2204## huks.importKey<sup>(deprecated)</sup>
2205
2206importKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
2207
2208导入明文密钥,使用Promise方式异步返回结果。
2209
2210> **说明:** 从API Version 9开始废弃,建议使用[huks.importKeyItem<sup>9+</sup>](#huksimportkeyitem9-1)替代。
2211
2212**系统能力**:SystemCapability.Security.Huks
2213
2214**参数:**
2215
2216| 参数名   | 类型        | 必填 | 说明                                 |
2217| -------- | ----------- | ---- | ------------------------------------ |
2218| keyAlias | string      | 是   | 密钥别名。 |
2219| options  | [HuksOptions](#huksoptions) | 是   | 用于导入时所需TAG和需要导入的密钥。 |
2220
2221**返回值:**
2222
2223| 类型                                | 说明                                               |
2224| ----------------------------------- | -------------------------------------------------- |
2225| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
2226
2227**示例:**
2228
2229```js
2230/* 以导入AES128为例 */
2231let plainTextSize32 = makeRandomArr(32);
2232
2233function makeRandomArr(size) {
2234    let arr = new Uint8Array(size);
2235    for (let i = 0; i < size; i++) {
2236        arr[i] = Math.floor(Math.random() * 10);
2237    }
2238    return arr;
2239};
2240
2241/*第一步:生成密钥*/
2242let keyAlias = 'keyAlias';
2243let properties = new Array();
2244properties[0] = {
2245  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
2246  value: huks.HuksKeyAlg.HUKS_ALG_AES
2247};
2248properties[1] = {
2249  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
2250  value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128
2251};
2252properties[2] = {
2253  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
2254  value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
2255};
2256properties[3] = {
2257  tag: huks.HuksTag.HUKS_TAG_PADDING,
2258  value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
2259};
2260properties[4] = {
2261  tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
2262  value: huks.HuksCipherMode.HUKS_MODE_ECB
2263};
2264let huksoptions = {
2265  properties: properties,
2266  inData: plainTextSize32
2267};
2268let result = huks.importKey(keyAlias, huksoptions);
2269```
2270
2271## huks.exportKey<sup>(deprecated)</sup>
2272
2273exportKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
2274
2275导出密钥,使用Callback方式回调异步返回的结果。
2276
2277> **说明:** 从API Version 9开始废弃,建议使用[huks.exportKeyItem<sup>9+</sup>](#huksexportkeyitem9)替代。
2278
2279**系统能力**:SystemCapability.Security.Huks
2280
2281**参数:**
2282
2283| 参数名   | 类型                                      | 必填 | 说明                                                         |
2284| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2285| keyAlias | string                                    | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。                 |
2286| options  | [HuksOptions](#huksoptions)               | 是   | 空对象(此处传空即可)。                                     |
2287| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是   | 回调函数。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 |
2288
2289**示例:**
2290
2291```js
2292/* 此处options选择emptyOptions来传空 */
2293let keyAlias = 'keyAlias';
2294let emptyOptions = {
2295  properties: []
2296};
2297huks.exportKey(keyAlias, emptyOptions, function (err, data){});
2298```
2299
2300## huks.exportKey<sup>(deprecated)</sup>
2301
2302exportKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
2303
2304导出密钥,使用Promise方式回调异步返回的结果。
2305
2306> **说明:** 从API Version 9开始废弃,建议使用[huks.exportKeyItem<sup>9+</sup>](#huksexportkeyitem9-1))替代。
2307
2308**系统能力**:SystemCapability.Security.Huks
2309
2310**参数:**
2311
2312| 参数名   | 类型        | 必填 | 说明                                                         |
2313| -------- | ----------- | ---- | ------------------------------------------------------------ |
2314| keyAlias | string      | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。 |
2315| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
2316
2317**返回值:**
2318
2319| 类型                                | 说明                                                         |
2320| ----------------------------------- | ------------------------------------------------------------ |
2321| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 |
2322
2323**示例:**
2324
2325```js
2326/* 此处options选择emptyOptions来传空 */
2327let keyAlias = 'keyAlias';
2328let emptyOptions = {
2329  properties: []
2330};
2331let result = huks.exportKey(keyAlias, emptyOptions);
2332```
2333
2334## huks.getKeyProperties<sup>(deprecated)</sup>
2335
2336getKeyProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
2337
2338获取密钥属性,使用Callback回调异步返回结果。
2339
2340> **说明:** 从API Version 9开始废弃,建议使用[huks.getKeyItemProperties<sup>9+</sup>](#huksgetkeyitemproperties9)替代。
2341
2342**系统能力**:SystemCapability.Security.Huks
2343
2344**参数:**
2345
2346| 参数名   | 类型                                      | 必填 | 说明                                                         |
2347| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2348| keyAlias | string                                    | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。                 |
2349| options  | [HuksOptions](#huksoptions)               | 是   | 空对象(此处传空即可)。                                     |
2350| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是   | 回调函数。errorCode:返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
2351
2352**示例:**
2353
2354```js
2355/* 此处options选择emptyOptions来传空 */
2356let keyAlias = 'keyAlias';
2357let emptyOptions = {
2358  properties: []
2359};
2360huks.getKeyProperties(keyAlias, emptyOptions, function (err, data){});
2361```
2362
2363## huks.getKeyProperties<sup>(deprecated)</sup>
2364
2365getKeyProperties(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
2366
2367获取密钥属性,使用Promise回调异步返回结果。
2368
2369> **说明:** 从API Version 9开始废弃,建议使用[huks.getKeyItemProperties<sup>9+</sup>](#huksgetkeyitemproperties9-1)替代。
2370
2371**系统能力**:SystemCapability.Security.Huks
2372
2373**参数:**
2374
2375| 参数名   | 类型        | 必填 | 说明                                                         |
2376| -------- | ----------- | ---- | ------------------------------------------------------------ |
2377| keyAlias | string      | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。 |
2378| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
2379
2380**返回值:**
2381
2382| 类型               | 说明                                                         |
2383| ------------------ | ------------------------------------------------------------ |
2384| Promise\<[HuksResult](#huksoptions)> | Promise对象。errorCode:返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。properties:返回值为生成密钥时所需参数。 |
2385
2386**示例:**
2387
2388```js
2389/* 此处options选择emptyOptions来传空 */
2390let keyAlias = 'keyAlias';
2391let emptyOptions = {
2392  properties: []
2393};
2394let result = huks.getKeyProperties(keyAlias, emptyOptions);
2395```
2396
2397## huks.isKeyExist<sup>(deprecated)</sup>
2398
2399isKeyExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<boolean>) : void
2400
2401判断密钥是否存在,使用Callback回调异步返回结果 。
2402
2403> **说明:** 从API Version 9开始废弃,建议使用[huks.isKeyItemExist<sup>9+</sup>](#huksiskeyitemexist9)替代。
2404
2405**系统能力**:SystemCapability.Security.Huks
2406
2407**参数:**
2408
2409| 参数名   | 类型                   | 必填 | 说明                                  |
2410| -------- | ---------------------- | ---- | ------------------------------------- |
2411| keyAlias | string                 | 是   | 所需查找的密钥的别名。 |
2412| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
2413| callback | AsyncCallback\<boolean> | 是   | 回调函数。FALSE代表密钥不存在,TRUE代表密钥存在。 |
2414
2415**示例:**
2416
2417```js
2418/* 此处options选择emptyOptions来传空 */
2419let keyAlias = 'keyAlias';
2420let emptyOptions = {
2421  properties: []
2422};
2423huks.isKeyExist(keyAlias, emptyOptions, function (err, data){});
2424```
2425
2426## huks.isKeyExist<sup>(deprecated)</sup>
2427
2428isKeyExist(keyAlias: string, options: HuksOptions) : Promise\<boolean>
2429
2430判断密钥是否存在,使用Promise回调异步返回结果 。
2431
2432> **说明:** 从API Version 9开始废弃,建议使用[huks.isKeyItemExist<sup>9+</sup>](#huksiskeyitemexist9-1)替代。
2433
2434**系统能力**:SystemCapability.Security.Huks
2435
2436**参数:**
2437
2438| 参数名   | 类型        | 必填 | 说明                             |
2439| -------- | ----------- | ---- | -------------------------------- |
2440| keyAlias | string      | 是   | 所需查找的密钥的别名。 |
2441| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
2442
2443**返回值:**
2444
2445| 类型              | 说明                                    |
2446| ----------------- | --------------------------------------- |
2447| Promise\<boolean> | Promise对象。FALSE代表密钥不存在,TRUE代表密钥存在。 |
2448
2449**示例:**
2450
2451```js
2452/* 此处options选择emptyOptions来传空 */
2453let keyAlias = 'keyAlias';
2454let emptyOptions = {
2455  properties: []
2456};
2457let result = huks.isKeyExist(keyAlias, emptyOptions);
2458```
2459
2460## huks.init<sup>(deprecated)</sup>
2461
2462init(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksHandle>) : void
2463
2464init操作密钥接口,使用Callback回调异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。
2465
2466> **说明:** 从API Version 9开始废弃,建议使用[huks.initSession<sup>9+</sup>](#huksinitsession9-1)替代。
2467
2468**系统能力**:SystemCapability.Security.Huks
2469
2470**参数:**
2471
2472| 参数名   | 类型                   | 必填 | 说明                                  |
2473| -------- | ---------------------- | ---- | ------------------------------------- |
2474| keyAlias | string                 | 是   | Init操作密钥的别名。 |
2475| options  | [HuksOptions](#huksoptions) | 是   | Init操作的参数集合。 |
2476| callback | AsyncCallback\<[HuksHandle](#hukshandledeprecated)> | 是   | 回调函数。将Init操作操作返回的handle添加到密钥管理系统的回调。 |
2477
2478## huks.init<sup>(deprecated)</sup>
2479
2480init(keyAlias: string, options: HuksOptions) : Promise\<HuksHandle>
2481
2482init操作密钥接口,使用Promise方式异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。
2483
2484> **说明:** 从API Version 9开始废弃,建议使用[huks.initSession<sup>9+</sup>](#huksinitsession9-1)替代。
2485
2486**系统能力**:SystemCapability.Security.Huks
2487
2488**参数:**
2489
2490| 参数名   | 类型                   | 必填 | 说明                                  |
2491| -------- | ---------------------- | ---- | ------------------------------------- |
2492| keyAlias | string                 | 是   | Init操作密钥的别名。 |
2493| options  | [HuksOptions](#huksoptions) | 是   | Init参数集合。 |
2494
2495**返回值**:
2496
2497| 类型                                | 说明                                               |
2498| ----------------------------------- | -------------------------------------------------- |
2499| Promise\<[HuksHandle](#hukshandledeprecated)> | Promise对象。将Init操作返回的handle添加到密钥管理系统的回调。 |
2500
2501## huks.update<sup>(deprecated)</sup>
2502
2503update(handle: number, token?: Uint8Array, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
2504
2505update操作密钥接口,使用Callback回调异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。
2506
2507> **说明:** 从API Version 9开始废弃,建议使用[huks.updateSession<sup>9+</sup>](#huksupdatesession9-1)替代。
2508
2509**系统能力**: SystemCapability.Security.Huks
2510
2511**参数:**
2512
2513| 参数名   | 类型                                      | 必填 | 说明                                         |
2514| -------- | ----------------------------------------- | ---- | -------------------------------------------- |
2515| handle   | number                                    | 是   | Update操作的handle。                         |
2516| token    | Uint8Array                                | 否   | Update操作的token。                          |
2517| options  | [HuksOptions](#huksoptions)               | 是   | Update操作的参数集合。                       |
2518| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是   | 回调函数。将Update操作的结果添加到密钥管理系统的回调。 |
2519
2520## huks.update<sup>(deprecated)</sup>
2521
2522update(handle: number, token?: Uint8Array, options: HuksOptions) : Promise\<HuksResult>;
2523
2524update操作密钥接口,使用Promise方式异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。
2525
2526> **说明:** 从API Version 9开始废弃,建议使用[huks.updateSession<sup>9+</sup>](#huksupdatesession9-2)替代。
2527
2528**系统能力**: SystemCapability.Security.Huks
2529
2530**参数:**
2531
2532| 参数名  | 类型                                | 必填 | 说明                                         |
2533| ------- | ----------------------------------- | ---- | -------------------------------------------- |
2534| handle  | number                              | 是   | Update操作的handle。                         |
2535| token   | Uint8Array                          | 否   | Update操作的token。                          |
2536| options | [HuksOptions](#huksoptions)         | 是   | Update操作的参数集合。                       |
2537
2538**返回值**:
2539
2540| 类型                                | 说明                                               |
2541| ----------------------------------- | -------------------------------------------------- |
2542| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。将Update操作的结果添加到密钥管理系统的回调。 |
2543
2544## huks.finish<sup>(deprecated)</sup>
2545
2546finish(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
2547
2548finish操作密钥接口,使用Callback回调异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。
2549
2550> **说明:** 从API Version 9开始废弃,建议使用[huks.finishSession<sup>9+</sup>](#huksfinishsession9)替代。
2551
2552**系统能力**:SystemCapability.Security.Huks
2553
2554**参数:**
2555
2556| 参数名   | 类型                   | 必填 | 说明                                  |
2557| -------- | ---------------------- | ---- | ------------------------------------- |
2558| handle | number           | 是   | Finish操作的handle。 |
2559| options  | [HuksOptions](#huksoptions) | 是   | Finish的参数集合。 |
2560| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。将Finish操作的结果添加到密钥管理系统的回调。 |
2561
2562## huks.finish<sup>(deprecated)</sup>
2563
2564finish(handle: number, options: HuksOptions) : Promise\<HuksResult>
2565
2566finish操作密钥接口,使用Promise方式异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。
2567
2568> **说明:** 从API Version 9开始废弃,建议使用[huks.finishSession<sup>9+</sup>](#huksfinishsession9-1)替代。
2569
2570**系统能力**:SystemCapability.Security.Huks
2571
2572**参数:**
2573
2574| 参数名   | 类型                   | 必填 | 说明                                  |
2575| -------- | ---------------------- | ---- | ------------------------------------- |
2576| handle | number           | 是   | Finish操作的handle。 |
2577| options  | [HuksOptions](#huksoptions) | 是   | Finish操作的参数集合。 |
2578
2579**返回值**:
2580
2581| 类型                                | 说明                                               |
2582| ----------------------------------- | -------------------------------------------------- |
2583| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象,用于获取异步返回结果。 |
2584
2585## huks.abort<sup>(deprecated)</sup>
2586
2587abort(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
2588
2589abort操作密钥接口,使用Callback回调异步返回结果。
2590
2591> **说明:** 从API Version 9开始废弃,建议使用[huks.abortSession<sup>9+</sup>](#huksabortsession9)替代。
2592
2593**系统能力**:SystemCapability.Security.Huks
2594
2595**参数:**
2596
2597| 参数名   | 类型                   | 必填 | 说明                                  |
2598| -------- | ---------------------- | ---- | ------------------------------------- |
2599| handle | number           | 是   | Abort操作的handle。 |
2600| options  | [HuksOptions](#huksoptions) | 是   | Abort操作的参数集合。 |
2601| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。将Abort操作的结果添加到密钥管理系统的回调。 |
2602
2603**示例:**
2604
2605```js
2606/* huks.init, huks.update, huks.finish为三段式接口,需要一起使用,当huks.inithuks.update
2607 * 以及huks.finish操作中的任一阶段发生错误时,都需要调用huks.abort来终止密钥的使用。
2608 *
2609 * 以下以RSA1024密钥的callback操作使用为例
2610 */
2611let keyalias = "HuksDemoRSA";
2612let properties = new Array();
2613let options = {
2614  properties: properties,
2615  inData: new Uint8Array(0)
2616};
2617let handle;
2618let resultMessage = "";
2619async function generateKey() {
2620  properties[0] = {
2621    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
2622    value: huks.HuksKeyAlg.HUKS_ALG_RSA
2623  };
2624  properties[1] = {
2625    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
2626    value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024
2627  };
2628  properties[2] = {
2629    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
2630    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
2631  };
2632  properties[3] = {
2633    tag: huks.HuksTag.HUKS_TAG_PADDING,
2634    value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
2635  };
2636  properties[4] = {
2637    tag: huks.HuksTag.HUKS_TAG_DIGEST,
2638    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
2639  };
2640  huks.generateKey(keyalias, options);
2641}
2642function stringToUint8Array(str) {
2643  let arr = [];
2644  for (let i = 0, j = str.length; i < j; ++i) {
2645    arr.push(str.charCodeAt(i));
2646  }
2647  let tmpUint8Array = new Uint8Array(arr);
2648  return tmpUint8Array;
2649}
2650async function huksInit() {
2651  await huks.init(keyalias, options).then((data) => {
2652    console.log(`test init data: ${JSON.stringify(data)}`);
2653    handle = data.handle;
2654  }).catch((err) => {
2655    console.log("test init err information: " + JSON.stringify(err))
2656  })
2657}
2658async function huksUpdate() {
2659    options.inData = stringToUint8Array("huksHmacTest");
2660    await huks.update(handle, options).then((data) => {
2661      if (data.errorCode === 0) {
2662        resultMessage += "update success!";
2663      } else {
2664        resultMessage += "update fail!";
2665      }
2666    });
2667    console.log(resultMessage);
2668}
2669function huksFinish() {
2670  options.inData = stringToUint8Array("HuksDemoHMAC");
2671  huks.finish(handle, options).then((data) => {
2672    if (data.errorCode === 0) {
2673      resultMessage = "finish success!";
2674    } else {
2675      resultMessage = "finish fail errorCode: " + data.errorCode;
2676    }
2677  }).catch((err) => {
2678    resultMessage = "finish fail, catch errorMessage:" + JSON.stringify(err)
2679  });
2680  console.log(resultMessage);
2681}
2682async function huksAbort() {
2683  huks.abort(handle, options).then((data) => {
2684    if (data.errorCode === 0) {
2685      resultMessage = "abort success!";
2686    } else {
2687      resultMessage = "abort fail errorCode: " + data.errorCode;
2688    }
2689  }).catch((err) => {
2690    resultMessage = "abort fail, catch errorMessage:" + JSON.stringify(err)
2691  });
2692  console.log(resultMessage);
2693}
2694```
2695
2696## huks.abort<sup>(deprecated)</sup>
2697
2698abort(handle: number, options: HuksOptions) : Promise\<HuksResult>;
2699
2700abort操作密钥接口,使用Promise方式异步返回结果。
2701
2702> **说明:** 从API Version 9开始废弃,建议使用[huks.abortSession<sup>9+</sup>](#huksabortsession9-1)替代。
2703
2704**系统能力**:SystemCapability.Security.Huks
2705
2706**参数:**
2707
2708| 参数名   | 类型                   | 必填 | 说明                                  |
2709| -------- | ---------------------- | ---- | ------------------------------------- |
2710| handle | number           | 是   | Abort操作的handle。 |
2711| options  | [HuksOptions](#huksoptions) | 是   | Abort操作的参数集合。 |
2712
2713**返回值**:
2714
2715| 类型                                | 说明                                               |
2716| ----------------------------------- | -------------------------------------------------- |
2717| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。将Abort操作的结果添加到密钥管理系统的回调。 |
2718
2719**示例:**
2720
2721```js
2722/* huks.init, huks.update, huks.finish为三段式接口,需要一起使用,当huks.inithuks.update
2723 * 以及huks.finish操作中的任一阶段发生错误时,都需要调用huks.abort来终止密钥的使用。
2724 *
2725 * 以下以RSA1024密钥的promise操作使用为例
2726 */
2727let keyalias = "HuksDemoRSA";
2728let properties = new Array();
2729let options = {
2730  properties: properties,
2731  inData: new Uint8Array(0)
2732};
2733let handle;
2734let resultMessage = "";
2735function stringToUint8Array(str) {
2736  let arr = [];
2737  for (let i = 0, j = str.length; i < j; ++i) {
2738    arr.push(str.charCodeAt(i));
2739  }
2740  let tmpUint8Array = new Uint8Array(arr);
2741  return tmpUint8Array;
2742}
2743
2744async function generateKey() {
2745  properties[0] = {
2746    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
2747    value: huks.HuksKeyAlg.HUKS_ALG_RSA
2748  };
2749  properties[1] = {
2750    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
2751    value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024
2752  };
2753  properties[2] = {
2754    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
2755    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
2756  };
2757  properties[3] = {
2758    tag: huks.HuksTag.HUKS_TAG_PADDING,
2759    value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
2760  };
2761  properties[4] = {
2762    tag: huks.HuksTag.HUKS_TAG_DIGEST,
2763    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
2764  };
2765  huks.generateKey(keyalias, options, function (err, data) { });
2766}
2767async function huksInit() {
2768  return new Promise((resolve, reject) => {
2769    huks.init(keyalias, options, async function (err, data) {
2770      if (data.errorCode === 0) {
2771        resultMessage = "init success!"
2772        handle = data.handle;
2773      } else {
2774        resultMessage = "init fail errorCode: " + data.errorCode
2775      }
2776    });
2777  });
2778}
2779
2780async function huksUpdate() {
2781    options.inData = stringToUint8Array("huksHmacTest");
2782    new Promise((resolve, reject) => {
2783      huks.update(handle, options, function (err, data) {
2784        if (data.errorCode === 0) {
2785          resultMessage += "update success!";
2786        } else {
2787          resultMessage += "update fail!";
2788        }
2789      });
2790    });
2791    console.log(resultMessage);
2792
2793}
2794
2795async function huksFinish() {
2796  options.inData = stringToUint8Array("0");
2797  new Promise((resolve, reject) => {
2798    huks.finish(handle, options, function (err, data) {
2799      if (data.errorCode === 0) {
2800        resultMessage = "finish success!";
2801      } else {
2802        resultMessage =  "finish fail errorCode: " + data.errorCode;
2803      }
2804    });
2805  });
2806}
2807
2808function huksAbort() {
2809  new Promise((resolve, reject) => {
2810    huks.abort(handle, options, function (err, data) {
2811      console.log(`Huks_Demo hmac huksAbort1 data ${JSON.stringify(data)}`);
2812      console.log(`Huks_Demo hmac huksAbort1 err ${JSON.stringify(err)}`);
2813    });
2814  });
2815}
2816```
2817
2818## HuksHandle<sup>(deprecated)</sup>
2819
2820huks Handle结构体。
2821
2822**系统能力**:SystemCapability.Security.Huks
2823
2824| 名称     | 类型             | 必填 | 说明     |
2825| ---------- | ---------------- | ---- | -------- |
2826| errorCode  | number           | 是   | 表示错误码。 |
2827| handle    | number       | 是 | 表示handle值。 |
2828| token | Uint8Array | 否 | 表示[init](#huksinitdeprecated)操作之后获取到的challenge信息。 |
2829
2830## HuksResult<sup>(deprecated)</sup>
2831
2832调用接口返回的result。
2833
2834**系统能力**:SystemCapability.Security.Huks
2835
2836| 名称     | 类型                            | 必填 | 说明             |
2837| ---------- | ------------------------------- | ---- | ---------------- |
2838| errorCode  | number                          | 是   | 表示错误码。     |
2839| outData    | Uint8Array                      | 否   | 表示输出数据。   |
2840| properties | Array\<[HuksParam](#huksparam)> | 否   | 表示属性信息。   |
2841| certChains | Array\<string>                  | 否   | 表示证书链数据。 |
2842
2843
2844## HuksErrorCode<sup>(deprecated)</sup>
2845
2846表示错误码的枚举。
2847
2848**系统能力**:SystemCapability.Security.Huks
2849
2850| 名称                       | 值    | 说明 |
2851| -------------------------- | ----- | ---- |
2852| HUKS_SUCCESS | 0     |表示成功。|
2853| HUKS_FAILURE | -1    |表示失败。|
2854| HUKS_ERROR_BAD_STATE | -2    |表示错误的状态。|
2855| HUKS_ERROR_INVALID_ARGUMENT | -3    |表示无效的数据。|
2856| HUKS_ERROR_NOT_SUPPORTED | -4    |表示不支持。|
2857| HUKS_ERROR_NO_PERMISSION | -5    |表示没有许可。|
2858| HUKS_ERROR_INSUFFICIENT_DATA | -6    |表示数据不足。|
2859| HUKS_ERROR_BUFFER_TOO_SMALL | -7    |表示缓冲区太小。|
2860| HUKS_ERROR_INSUFFICIENT_MEMORY | -8    |表示内存不足。|
2861| HUKS_ERROR_COMMUNICATION_FAILURE | -9    |表示通讯失败。|
2862| HUKS_ERROR_STORAGE_FAILURE | -10   |表示存储故障。|
2863| HUKS_ERROR_HARDWARE_FAILURE | -11   |表示硬件故障。|
2864| HUKS_ERROR_ALREADY_EXISTS | -12   |表示已经存在。|
2865| HUKS_ERROR_NOT_EXIST | -13   |表示不存在。|
2866| HUKS_ERROR_NULL_POINTER | -14   |表示空指针。|
2867| HUKS_ERROR_FILE_SIZE_FAIL | -15   |表示文件大小失败。|
2868| HUKS_ERROR_READ_FILE_FAIL | -16   |表示读取文件失败。|
2869| HUKS_ERROR_INVALID_PUBLIC_KEY | -17   |表示无效的公钥。|
2870| HUKS_ERROR_INVALID_PRIVATE_KEY | -18   |表示无效的私钥。|
2871| HUKS_ERROR_INVALID_KEY_INFO | -19   |表示无效的密钥信息。|
2872| HUKS_ERROR_HASH_NOT_EQUAL | -20   |表示哈希不相等。|
2873| HUKS_ERROR_MALLOC_FAIL | -21   |表示MALLOC 失败。|
2874| HUKS_ERROR_WRITE_FILE_FAIL | -22   |表示写文件失败。|
2875| HUKS_ERROR_REMOVE_FILE_FAIL | -23   |表示删除文件失败。|
2876| HUKS_ERROR_OPEN_FILE_FAIL | -24   |表示打开文件失败。|
2877| HUKS_ERROR_CLOSE_FILE_FAIL | -25   |表示关闭文件失败。|
2878| HUKS_ERROR_MAKE_DIR_FAIL | -26   |表示创建目录失败。|
2879| HUKS_ERROR_INVALID_KEY_FILE | -27   |表示无效的密钥文件。|
2880| HUKS_ERROR_IPC_MSG_FAIL | -28   |表示IPC 信息失败。|
2881| HUKS_ERROR_REQUEST_OVERFLOWS | -29   |表示请求溢出。|
2882| HUKS_ERROR_PARAM_NOT_EXIST | -30   |表示参数不存在。|
2883| HUKS_ERROR_CRYPTO_ENGINE_ERROR | -31   |表示CRYPTO ENGINE错误。|
2884| HUKS_ERROR_COMMUNICATION_TIMEOUT | -32   |表示通讯超时。|
2885| HUKS_ERROR_IPC_INIT_FAIL | -33   |表示IPC 初始化失败。|
2886| HUKS_ERROR_IPC_DLOPEN_FAIL | -34   |表示IPC DLOPEN 失败。|
2887| HUKS_ERROR_EFUSE_READ_FAIL | -35   |表示EFUSE 读取失败。|
2888| HUKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST | -36   |表示存在新的根密钥材料。|
2889| HUKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL | -37   |表示更新根密钥材料失败。|
2890| HUKS_ERROR_VERIFICATION_FAILED | -38   |表示验证证书链失败。|
2891| HUKS_ERROR_CHECK_GET_ALG_FAIL | -100  |表示检查获取 ALG 失败。|
2892| HUKS_ERROR_CHECK_GET_KEY_SIZE_FAIL | -101  |表示检查获取密钥大小失败。|
2893| HUKS_ERROR_CHECK_GET_PADDING_FAIL | -102  |表示检查获取填充失败。|
2894| HUKS_ERROR_CHECK_GET_PURPOSE_FAIL | -103  |表示检查获取目的失败。|
2895| HUKS_ERROR_CHECK_GET_DIGEST_FAIL | -104  |表示检查获取摘要失败。|
2896| HUKS_ERROR_CHECK_GET_MODE_FAIL | -105  |表示检查获取模式失败。|
2897| HUKS_ERROR_CHECK_GET_NONCE_FAIL | -106  |表示检查获取随机数失败。|
2898| HUKS_ERROR_CHECK_GET_AAD_FAIL | -107  |表示检查获取 AAD 失败。|
2899| HUKS_ERROR_CHECK_GET_IV_FAIL | -108  |表示检查 GET IV 失败。|
2900| HUKS_ERROR_CHECK_GET_AE_TAG_FAIL | -109  |表示检查获取 AE 标记失败。|
2901| HUKS_ERROR_CHECK_GET_SALT_FAIL | -110  |表示检查获取SALT失败。|
2902| HUKS_ERROR_CHECK_GET_ITERATION_FAIL | -111  |表示检查获取迭代失败。|
2903| HUKS_ERROR_INVALID_ALGORITHM | -112  |表示无效的算法。|
2904| HUKS_ERROR_INVALID_KEY_SIZE | -113  |表示无效的密钥大小。|
2905| HUKS_ERROR_INVALID_PADDING | -114  |表示无效的填充。|
2906| HUKS_ERROR_INVALID_PURPOSE | -115  |表示无效的目的。|
2907| HUKS_ERROR_INVALID_MODE | -116  |表示无效模式。|
2908| HUKS_ERROR_INVALID_DIGEST | -117  |表示无效的摘要。|
2909| HUKS_ERROR_INVALID_SIGNATURE_SIZE | -118  |表示签名大小无效。|
2910| HUKS_ERROR_INVALID_IV | -119  |表示无效的 IV。|
2911| HUKS_ERROR_INVALID_AAD | -120  |表示无效的 AAD。|
2912| HUKS_ERROR_INVALID_NONCE | -121  |表示无效的随机数。|
2913| HUKS_ERROR_INVALID_AE_TAG | -122  |表示无效的 AE 标签。|
2914| HUKS_ERROR_INVALID_SALT | -123  |表示无效SALT。|
2915| HUKS_ERROR_INVALID_ITERATION | -124  |表示无效的迭代。|
2916| HUKS_ERROR_INVALID_OPERATION | -125  |表示无效操作。|
2917| HUKS_ERROR_INTERNAL_ERROR | -999  |表示内部错误。|
2918| HUKS_ERROR_UNKNOWN_ERROR | -1000 |表示未知错误。|