• 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提供了接口供业务获取指定密钥的相关属性。在获取指定密钥属性前,需要确保已在HUKS中生成或导入持久化存储的密钥。
11>**说明:**
12> <!--RP1-->轻量级设备<!--RP1End-->不支持获取密钥属性功能。
13
14## 开发步骤
15
161. 指定待查询的密钥别名keyAlias,密钥别名最大长度为128字节。
17
182. 调用接口[getKeyItemProperties](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksgetkeyitemproperties9),传入参数keyAlias和options。options为预留参数,当前可传入空。
19
203. 返回值为[HuksReturnResult](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksreturnresult9)类型对象,获取的属性集在properties字段中。
21
22```ts
23import { huks } from '@kit.UniversalKeystoreKit';
24import { BusinessError } from "@kit.BasicServicesKit";
25
26function Uint8ArrayToString(fileData: Uint8Array) {
27  let dataString = '';
28  for (let i = 0; i < fileData.length; i++) {
29    dataString += String.fromCharCode(fileData[i]);
30  }
31  return dataString;
32}
33
34/* 1. 设置密钥别名 */
35let keyAlias = 'keyAlias';
36/* 2. 设置密钥属性 */
37let emptyOptions: huks.HuksOptions = {
38  properties: []
39};
40let properties1: huks.HuksParam[] = [{
41    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
42    value: huks.HuksKeyAlg.HUKS_ALG_DH
43  }, {
44    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
45    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE
46  }, {
47    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
48    value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048
49  }
50];
51let huksOptions: huks.HuksOptions = {
52  properties: properties1,
53  inData: new Uint8Array([])
54}
55
56/* 3.生成密钥 */
57async function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions): Promise<boolean> {
58  console.info(`enter promise generateKeyItem`);
59  let ret: boolean = false;
60  try {
61    await huks.generateKeyItem(keyAlias, huksOptions)
62      .then(() => {
63        console.info(`promise: generateKeyItem success`);
64        ret = true;
65      }).catch((error: BusinessError) => {
66        console.error(`promise: generateKeyItem failed, errCode : ${error.code}, errMag : ${error.message}`);
67      });
68  } catch (error) {
69    console.error(`promise: generateKeyItem input arg invalid`);
70  }
71  return ret;
72}
73
74/* 4.获取密钥属性 */
75async function getKeyItemProperties(keyAlias: string, emptyOptions: huks.HuksOptions): Promise<boolean> {
76  console.info(`enter promise getKeyItemProperties`);
77  let ret: boolean = false;
78  try {
79    await huks.getKeyItemProperties(keyAlias, emptyOptions)
80      .then((data) => {
81        console.info(`promise: getKeyItemProperties success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
82        ret = true;
83      }).catch((error: BusinessError) => {
84        console.error(`promise: getKeyItemProperties failed, errCode : ${error.code}, errMag : ${error.message}`);
85      });
86  } catch (error) {
87    console.error(`promise: getKeyItemProperties input arg invalid`);
88  }
89  return ret;
90}
91
92async function testGetKeyProperties() {
93  /* 1. 生成密钥 */
94  let genResult = await generateKeyItem(keyAlias, huksOptions);
95  /* 2. 获取密钥属性 */
96  if (genResult == false) {
97    console.error('Key generation failed, skipping get properties');
98    return;
99  }
100
101  let getResult = await getKeyItemProperties(keyAlias, emptyOptions);
102  if (getResult == false) {
103    console.error('getKeyItemProperties failed');
104    return;
105  }
106  console.info(`testGetKeyProperties success}`);
107}
108```