• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 查询密钥是否存在(ArkTS)
2
3<!--Kit: Universal Keystore Kit-->
4<!--Subsystem: Security-->
5<!--Owner: @wutiantian-gitee-->
6<!--Designer: @HighLowWorld-->
7<!--Tester: @wxy1234564846-->
8<!--Adviser: @zengyawen-->
9
10HUKS提供了接口供应用查询指定密钥是否存在。
11
12## 开发步骤
13
141. 指定密钥别名,密钥别名命名规范参考[密钥生成介绍及算法规格](huks-key-generation-overview.md)。
15
162. 初始化密钥属性集。用于查询时指定[密钥的属性TAG](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukstag),当查询单个密钥时,TAG字段可传空。
17
183. 调用接口[hasKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukshaskeyitem11),查询密钥是否存在。
19
20```ts
21import { huks } from '@kit.UniversalKeystoreKit';
22import { BusinessError } from "@kit.BasicServicesKit";
23
24/* 1.确定密钥别名 */
25let keyAlias = 'test_key';
26let isKeyExist: boolean;
27/* 2.构造空对象 */
28let huksOptions: huks.HuksOptions = {
29  properties: []
30}
31/* 3.初始化密钥属性集 */
32let generateProperties: huks.HuksParam[] = [{
33    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
34    value: huks.HuksKeyAlg.HUKS_ALG_DH
35  }, {
36    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
37    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE
38  }, {
39    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
40    value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048
41  }
42];
43let generateHuksOptions: huks.HuksOptions = {
44  properties: generateProperties,
45  inData: new Uint8Array([])
46}
47
48/* 4.生成密钥 */
49async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions): Promise<boolean> {
50  console.info(`enter promise generateKeyItem`);
51  let ret: boolean = false;
52  try {
53    await huks.generateKeyItem(keyAlias, huksOptions)
54      .then(() => {
55        console.info(`promise: generateKeyItem success`);
56        ret = true;
57      }).catch((error: BusinessError) => {
58        console.error(`promise: generateKeyItem failed, errCode : ${error.code}, errMag : ${error.message}`);
59      });
60  } catch (error) {
61    console.error(`promise: generateKeyItem input arg invalid`);
62  }
63  return ret;
64}
65
66/* 5.查询密钥是否存在 */
67async function hasKeyItem(keyAlias: string, huksOptions: huks.HuksOptions): Promise<boolean> {
68  console.info(`enter promise hasKeyItem`);
69  let ret: boolean = false;
70  try {
71    await huks.hasKeyItem(keyAlias, huksOptions)
72      .then((data) => {
73        console.info(`promise: hasKeyItem success, data = ${data}`);
74        ret = true;
75      }).catch((error: BusinessError) => {
76        console.error(`promise: hasKeyItem failed, errCode : ${error.code}, errMag : ${error.message}`);
77      });
78    return ret;
79  } catch (error) {
80    console.error(`promise: hasKeyItem input arg invalid, errCode : ${error.code}, errMag : ${error.message}`);
81  }
82
83  return ret;
84}
85
86async function testKeyExist() {
87  /* 1.生成密钥 */
88  let genResult = await publicGenKeyFunc(keyAlias, generateHuksOptions);
89  /* 2.判断密钥是否存在 */
90  if (genResult == true) {
91    isKeyExist = await hasKeyItem(keyAlias, huksOptions);
92    console.info(`hasKeyItem success, isKeyExist = ${isKeyExist}`);
93  } else {
94    console.error('Key generation failed, skipping query');
95  }
96}
97```