1# HUKS开发指导 2 3## 场景介绍 4 5 HUKS(OpenHarmony Universal KeyStore,OpenHarmony通用密钥库系统)向应用提供密钥库能力,包括密钥管理及密钥的密码学操作等功能。HUKS所管理的密钥可以由应用导入或者由应用调用HUKS接口生成。 6 7 8## 接口说明 9 10| 接口名 | 描述 | 11| ------------------------------------------------------------ | ---------------- | 12| generateKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void| 生成密钥 | 13| generateKey(keyAlias: string, options: HuksOptions) : Promise<HuksResult>| 生成密钥 | 14| exportKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void| 导出公钥 | 15| exportKey(keyAlias: string, options: HuksOptions) : Promise<HuksResult>| 导出公钥 | 16| isKeyExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback<boolean>) : void | 查询密钥是否存在 | 17| isKeyExist(keyAlias: string, options: HuksOptions) : Promise<boolean> | 查询密钥是否存在 | 18| deleteKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void| 删除密钥 | 19| deleteKey(keyAlias: string, options: HuksOptions) : Promise<HuksResult>| 删除密钥 | 20 21## 开发步骤 22 231. 引入HUKS模块 24 25 ```js 26 import huks from '@ohos.security.huks' 27 ``` 28 292. 使用generateKey接口生成密钥。 30 31 keyAlias为生成的密钥别名,options为生成密钥时使用到的参数,需根据具体需要到的算法设定options中的参数。 32 33 generateKey接口会返回密钥的生成是否成功。 34 35 ```js 36 var alias = 'testAlias'; 37 var properties = new Array(); 38 properties[0] = { 39 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 40 value: huks.HuksKeyAlg.HUKS_ALG_ECC 41 }; 42 properties[1] = { 43 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 44 value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_224 45 }; 46 properties[2] = { 47 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 48 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 49 }; 50 properties[3] = { 51 tag: huks.HuksTag.HUKS_TAG_DIGEST, 52 value: huks.HuksKeyDigest.HUKS_DIGEST_NONE 53 }; 54 var options = { 55 properties: properties 56 } 57 var resultA = huks.generateKey(alias, options); 58 ``` 59 603. 使用Init接口进行init操作。 61 62 Alias为初始化密钥的别名,options为初始化密钥用的参数集合,需根据具体需要到的算法设定options中的参数。 63 64 init接口会返回init操作是否成功。 65 66 ```js 67 var alias = 'test001' 68 var properties = new Array(); 69 properties[0] = { 70 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 71 value: huks.HuksKeyAlg.HUKS_ALG_DH 72 }; 73 properties[1] = { 74 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 75 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 76 }; 77 properties[2] = { 78 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 79 value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_4096 80 }; 81 var options = { 82 properties: properties 83 }; 84 huks.init(alias, options, function(err, data) { 85 if (err.code !== 0) { 86 console.log("test init err information: " + JSON.stringify(err)); 87 } else { 88 console.log(`test init data: ${JSON.stringify(data)}`); 89 } 90 }) 91 ``` 92 934. 使用Update接口进行update操作。 94 95 handle为更新密钥的session id,options为更新密钥用的参数集合,需根据具体需要到的算法设定options中的参数。 96 97 update接口会返回update操作是否成功。 98 99 ```js 100 var properties = new Array(); 101 properties[0] = { 102 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 103 value: huks.HuksKeyAlg.HUKS_ALG_DH 104 }; 105 properties[1] = { 106 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 107 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 108 }; 109 properties[2] = { 110 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 111 value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_4096 112 }; 113 var options = { 114 properties: properties 115 }; 116 var result = huks.update(handle, options) 117 ``` 118 1195. 使用Finish接口进行finish操作。 120 121 handle为 结束密钥的session id,options为结束密钥用的参数集合,需根据具体需要到的算法设定options中的参数。 122 123 finish接口会返回finish操作是否成功。 124 125 ```js 126 var properties = new Array(); 127 properties[0] = { 128 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 129 value: huks.HuksKeyAlg.HUKS_ALG_DH 130 }; 131 properties[1] = { 132 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 133 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 134 }; 135 properties[2] = { 136 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 137 value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_4096 138 }; 139 var options = { 140 properties: properties 141 }; 142 var result = huks.finish(handle, options) 143 ``` 144 145 146 147