• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 生成密钥(ArkTS)
2
3
4以生成DH密钥为例,生成随机密钥。具体的场景介绍及支持的算法规格,请参考[密钥生成支持的算法](huks-key-generation-overview.md#支持的算法)。
5
6
7## 开发步骤
8
91. 指定待生成的密钥别名keyAlias。
10   - 密钥别名的最大长度为64字节。
11   - 对于不同业务间生成的密钥,HUKS将基于业务身份信息进行存储路径隔离,不会因为和其他业务密钥同名导致冲突。
12
132. 初始化密钥属性集。通过[HuksParam](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksparam)封装密钥属性,搭配Array组成密钥属性集,并赋值给[HuksOptions](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksoptions)中的properties字段。
14   密钥属性集中必须包含[HuksKeyAlg](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeyalg),[HuksKeySize](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeysize),[HuksKeyPurpose](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeypurpose)属性,即必传TAG,HUKS_TAG_ALGORITHM、HUKS_TAG_PURPOSE、HUKS_TAG_KEY_SIZE。
15
163. 调用[huks.generateKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksgeneratekeyitem9),传入密钥别名和密钥属性集,生成密钥。
17
18> **说明:**
19> 如果业务再次使用相同别名调用HUKS生成密钥,HUKS将生成新密钥并直接覆盖历史的密钥文件。
20
21
22```ts
23/* 以下以生成DH密钥为例 */
24import huks from '@ohos.security.huks';
25import { BusinessError } from '@ohos.base';
26class HuksProperties {
27    tag: huks.HuksTag = huks.HuksTag.HUKS_TAG_ALGORITHM;
28    value: huks.HuksKeyAlg | huks.HuksKeySize | huks.HuksKeyPurpose | huks.HuksKeyDigest = huks.HuksKeyAlg.HUKS_ALG_ECC;
29}
30/* 1.确定密钥别名 */
31let keyAlias = 'dh_key';
32/* 2.初始化密钥属性集 */
33let properties1: HuksProperties[] = [
34    {
35        tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
36        value: huks.HuksKeyAlg.HUKS_ALG_DH
37    },
38    {
39        tag: huks.HuksTag.HUKS_TAG_PURPOSE,
40        value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE
41    },
42    {
43        tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
44        value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048
45    },
46    {
47        tag: huks.HuksTag.HUKS_TAG_DIGEST,
48        value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
49    }
50];
51let huksOptions: huks.HuksOptions = {
52    properties: properties1,
53    inData: new Uint8Array(new Array())
54}
55/* 3.生成密钥 */
56function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions){
57    return new Promise<void>((resolve, reject) => {
58        try {
59            huks.generateKeyItem(keyAlias, huksOptions, (error, data) => {
60                if (error) {
61                    reject(error);
62                } else {
63                    resolve(data);
64                }
65            });
66        } catch (error) {
67            throw (error as Error);
68        }
69    });
70}
71async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions) {
72    console.info(`enter promise generateKeyItem`);
73    try {
74        await generateKeyItem(keyAlias, huksOptions)
75        .then((data) => {
76            console.info(`promise: generateKeyItem success, data = ${JSON.stringify(data)}`);
77        })
78        .catch((error: BusinessError) => {
79            console.error(`promise: generateKeyItem failed` + error);
80        });
81    } catch (error) {
82        console.error(`promise: generateKeyItem input arg invalid` + error);
83    }
84}
85async function TestGenKey() {
86    await publicGenKeyFunc(keyAlias, huksOptions);
87}
88```
89