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```