js-apis-huks.md 58.7 KB
Newer Older
V
Vincentchenhao 已提交
1 2
# 通用密钥库系统

S
shuyi 已提交
3 4 5
> **说明**
>
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
V
Vincentchenhao 已提交
6

S
shuyi 已提交
7
向应用提供密钥库能力,包括密钥管理及密钥的密码学操作等功能。
V
Vincentchenhao 已提交
8 9 10 11 12 13 14
HUKS所管理的密钥可以由应用导入或者由应用调用HUKS接口生成。

## 导入模块

```js
import huks from '@ohos.security.huks'
```
Z
zengyawen 已提交
15
## HuksErrorCode
V
Vincentchenhao 已提交
16 17 18

表示错误码的枚举。

S
shuyi 已提交
19 20
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
21 22
| 名称                       | 值    | 说明 |
| -------------------------- | ----- | ---- |
Z
zengyawen 已提交
23
| HUKS_SUCCESS | 0     |表示成功。|
S
shuyi 已提交
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| HUKS_FAILURE | -1    |表示失败。|
| HUKS_ERROR_BAD_STATE | -2    |表示错误的状态。|
| HUKS_ERROR_INVALID_ARGUMENT | -3    |表示无效的数据。|
| HUKS_ERROR_NOT_SUPPORTED | -4    |表示不支持。|
| HUKS_ERROR_NO_PERMISSION | -5    |表示没有许可。|
| HUKS_ERROR_INSUFFICIENT_DATA | -6    |表示数据不足。|
| HUKS_ERROR_BUFFER_TOO_SMALL | -7    |表示缓冲区太小。|
| HUKS_ERROR_INSUFFICIENT_MEMORY | -8    |表示内存不足。|
| HUKS_ERROR_COMMUNICATION_FAILURE | -9    |表示通讯失败。|
| HUKS_ERROR_STORAGE_FAILURE | -10   |表示存储故障。|
| HUKS_ERROR_HARDWARE_FAILURE | -11   |表示硬件故障。|
| HUKS_ERROR_ALREADY_EXISTS | -12   |表示已经存在。|
| HUKS_ERROR_NOT_EXIST | -13   |表示不存在。|
| HUKS_ERROR_NULL_POINTER | -14   |表示空指针。|
| HUKS_ERROR_FILE_SIZE_FAIL | -15   |表示文件大小失败。|
| HUKS_ERROR_READ_FILE_FAIL | -16   |表示读取文件失败。|
| HUKS_ERROR_INVALID_PUBLIC_KEY | -17   |表示无效的公钥。|
| HUKS_ERROR_INVALID_PRIVATE_KEY | -18   |表示无效的私钥。|
| HUKS_ERROR_INVALID_KEY_INFO | -19   |表示无效的密钥信息。|
| HUKS_ERROR_HASH_NOT_EQUAL | -20   |表示哈希不相等。|
| HUKS_ERROR_MALLOC_FAIL | -21   |表示MALLOC 失败。|
| HUKS_ERROR_WRITE_FILE_FAIL | -22   |表示写文件失败。|
| HUKS_ERROR_REMOVE_FILE_FAIL | -23   |表示删除文件失败。|
| HUKS_ERROR_OPEN_FILE_FAIL | -24   |表示打开文件失败。|
| HUKS_ERROR_CLOSE_FILE_FAIL | -25   |表示关闭文件失败。|
| HUKS_ERROR_MAKE_DIR_FAIL | -26   |表示创建目录失败。|
| HUKS_ERROR_INVALID_KEY_FILE | -27   |表示无效的密钥文件。|
| HUKS_ERROR_IPC_MSG_FAIL | -28   |表示IPC 信息失败。|
| HUKS_ERROR_REQUEST_OVERFLOWS | -29   |表示请求溢出。|
| HUKS_ERROR_PARAM_NOT_EXIST | -30   |表示参数不存在。|
| HUKS_ERROR_CRYPTO_ENGINE_ERROR | -31   |表示CRYPTO ENGINE错误。|
| HUKS_ERROR_COMMUNICATION_TIMEOUT | -32   |表示通讯超时。|
| HUKS_ERROR_IPC_INIT_FAIL | -33   |表示IPC 初始化失败。|
| HUKS_ERROR_IPC_DLOPEN_FAIL | -34   |表示IPC DLOPEN 失败。|
| HUKS_ERROR_EFUSE_READ_FAIL | -35   |表示EFUSE 读取失败。|
| HUKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST | -36   |表示存在新的根密钥材料。|
| HUKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL | -37   |表示更新根密钥材料失败。|
| HUKS_ERROR_VERIFICATION_FAILED | -38   |表示验证证书链失败。|
| HUKS_ERROR_CHECK_GET_ALG_FAIL | -100  |表示检查获取 ALG 失败。|
| HUKS_ERROR_CHECK_GET_KEY_SIZE_FAIL | -101  |表示检查获取密钥大小失败。|
| HUKS_ERROR_CHECK_GET_PADDING_FAIL | -102  |表示检查获取填充失败。|
| HUKS_ERROR_CHECK_GET_PURPOSE_FAIL | -103  |表示检查获取目的失败。|
| HUKS_ERROR_CHECK_GET_DIGEST_FAIL | -104  |表示检查获取摘要失败。|
| HUKS_ERROR_CHECK_GET_MODE_FAIL | -105  |表示检查获取模式失败。|
| HUKS_ERROR_CHECK_GET_NONCE_FAIL | -106  |表示检查获取随机数失败。|
| HUKS_ERROR_CHECK_GET_AAD_FAIL | -107  |表示检查获取 AAD 失败。|
| HUKS_ERROR_CHECK_GET_IV_FAIL | -108  |表示检查 GET IV 失败。|
| HUKS_ERROR_CHECK_GET_AE_TAG_FAIL | -109  |表示检查获取 AE 标记失败。|
| HUKS_ERROR_CHECK_GET_SALT_FAIL | -110  |表示检查获取SALT失败。|
| HUKS_ERROR_CHECK_GET_ITERATION_FAIL | -111  |表示检查获取迭代失败。|
| HUKS_ERROR_INVALID_ALGORITHM | -112  |表示无效的算法。|
| HUKS_ERROR_INVALID_KEY_SIZE | -113  |表示无效的密钥大小。|
| HUKS_ERROR_INVALID_PADDING | -114  |表示无效的填充。|
| HUKS_ERROR_INVALID_PURPOSE | -115  |表示无效的目的。|
| HUKS_ERROR_INVALID_MODE | -116  |表示无效模式。|
| HUKS_ERROR_INVALID_DIGEST | -117  |表示无效的摘要。|
| HUKS_ERROR_INVALID_SIGNATURE_SIZE | -118  |表示签名大小无效。|
| HUKS_ERROR_INVALID_IV | -119  |表示无效的 IV。|
| HUKS_ERROR_INVALID_AAD | -120  |表示无效的 AAD。|
| HUKS_ERROR_INVALID_NONCE | -121  |表示无效的随机数。|
| HUKS_ERROR_INVALID_AE_TAG | -122  |表示无效的 AE 标签。|
| HUKS_ERROR_INVALID_SALT | -123  |表示无效SALT。|
| HUKS_ERROR_INVALID_ITERATION | -124  |表示无效的迭代。|
| HUKS_ERROR_INVALID_OPERATION | -125  |表示无效操作。|
| HUKS_ERROR_INTERNAL_ERROR | -999  |表示内部错误。|
| HUKS_ERROR_UNKNOWN_ERROR | -1000 |表示未知错误。|
V
Vincentchenhao 已提交
90 91


Z
zengyawen 已提交
92
## HuksKeyPurpose
V
Vincentchenhao 已提交
93

S
shuyi 已提交
94
表示密钥用途。
V
Vincentchenhao 已提交
95

S
shuyi 已提交
96 97
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

S
shuyi 已提交
98 99 100 101 102 103 104 105 106 107 108
| 名称                     | 值   | 说明                             |
| ------------------------ | ---- | -------------------------------- |
| HUKS_KEY_PURPOSE_ENCRYPT | 1    | 表示密钥用于对明文进行加密操作。 |
| HUKS_KEY_PURPOSE_DECRYPT | 2    | 表示密钥用于对密文进行解密操作。 |
| HUKS_KEY_PURPOSE_SIGN    | 4    | 表示密钥用于对数据进行签名。     |
| HUKS_KEY_PURPOSE_VERIFY  | 8    | 表示密钥用于验证签名后的数据。   |
| HUKS_KEY_PURPOSE_DERIVE  | 16   | 表示密钥用于派生密钥。           |
| HUKS_KEY_PURPOSE_WRAP    | 32   | 表示密钥用于加密导入。           |
| HUKS_KEY_PURPOSE_UNWRAP  | 64   | 表示密钥加密导出。               |
| HUKS_KEY_PURPOSE_MAC     | 128  | 表示密钥用于生成mac消息验证码。  |
| HUKS_KEY_PURPOSE_AGREE   | 256  | 表示密钥用于进行密钥协商。       |
V
Vincentchenhao 已提交
109

Z
zengyawen 已提交
110
## HuksKeyDigest
V
Vincentchenhao 已提交
111 112 113

表示摘要算法。

S
shuyi 已提交
114 115
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
116 117
| 名称                   | 值   | 说明                                     |
| ---------------------- | ---- | ---------------------------------------- |
S
shuyi 已提交
118 119 120 121 122 123 124
| HUKS_DIGEST_NONE       | 0   | 表示无摘要算法。 |
| HUKS_DIGEST_MD5        | 1    | 表示MD5摘要算法。 |
| HUKS_DIGEST_SHA1       | 10   | 表示SHA1摘要算法。 |
| HUKS_DIGEST_SHA224 | 11   | 表示SHA224摘要算法。 |
| HUKS_DIGEST_SHA256 | 12  | 表示SHA256摘要算法。 |
| HUKS_DIGEST_SHA384  | 13  | 表示SHA384摘要算法。 |
| HUKS_DIGEST_SHA512 | 14  | 表示SHA512摘要算法。 |
V
Vincentchenhao 已提交
125

Z
zengyawen 已提交
126
## HuksKeyPadding
V
Vincentchenhao 已提交
127 128 129

表示补齐算法。

S
shuyi 已提交
130 131
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
132 133
| 名称                   | 值   | 说明                                     |
| ---------------------- | ---- | ---------------------------------------- |
S
shuyi 已提交
134 135 136 137 138 139
| HUKS_PADDING_NONE | 0    | 表示不使用补齐算法。 |
| HUKS_PADDING_OAEP | 1    | 表示使用OAEP补齐算法。 |
| HUKS_PADDING_PSS | 2    | 表示使用PSS补齐算法。 |
| HUKS_PADDING_PKCS1_V1_5 | 3    | 表示使用PKCS1_V1_5补齐算法。 |
| HUKS_PADDING_PKCS5 | 4   | 表示使用PKCS5补齐算法。 |
| HUKS_PADDING_PKCS7 | 5   | 表示使用PKCS7补齐算法。 |
V
Vincentchenhao 已提交
140

Z
zengyawen 已提交
141
## HuksCipherMode
V
Vincentchenhao 已提交
142 143 144

表示加密模式。

S
shuyi 已提交
145 146 147 148 149 150 151 152 153 154
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 名称          | 值   | 说明                  |
| ------------- | ---- | --------------------- |
| HUKS_MODE_ECB | 1    | 表示使用ECB加密模式。 |
| HUKS_MODE_CBC | 2    | 表示使用CBC加密模式。 |
| HUKS_MODE_CTR | 3    | 表示使用CTR加密模式。 |
| HUKS_MODE_OFB | 4    | 表示使用OFB加密模式。 |
| HUKS_MODE_CCM | 31   | 表示使用CCM加密模式。 |
| HUKS_MODE_GCM | 32   | 表示使用GCM加密模式。 |
V
Vincentchenhao 已提交
155

Z
zengyawen 已提交
156
## HuksKeySize
V
Vincentchenhao 已提交
157

S
shuyi 已提交
158
表示密钥长度。
V
Vincentchenhao 已提交
159

S
shuyi 已提交
160 161
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

S
shuyi 已提交
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
| 名称                         | 值   | 说明                                       |
| ---------------------------- | ---- | ------------------------------------------ |
| HUKS_RSA_KEY_SIZE_512        | 512  | 表示使用RSA算法的密钥长度为512bit。        |
| HUKS_RSA_KEY_SIZE_768        | 768  | 表示使用RSA算法的密钥长度为768bit。        |
| HUKS_RSA_KEY_SIZE_1024       | 1024 | 表示使用RSA算法的密钥长度为1024bit。       |
| HUKS_RSA_KEY_SIZE_2048       | 2048 | 表示使用RSA算法的密钥长度为2048bit。       |
| HUKS_RSA_KEY_SIZE_3072       | 3072 | 表示使用RSA算法的密钥长度为3072bit。       |
| HUKS_RSA_KEY_SIZE_4096       | 4096 | 表示使用RSA算法的密钥长度为4096bit。       |
| HUKS_ECC_KEY_SIZE_224        | 224  | 表示使用ECC算法的密钥长度为224bit。        |
| HUKS_ECC_KEY_SIZE_256        | 256  | 表示使用ECC算法的密钥长度为256bit。        |
| HUKS_ECC_KEY_SIZE_384        | 384  | 表示使用ECC算法的密钥长度为384bit。        |
| HUKS_ECC_KEY_SIZE_521        | 521  | 表示使用ECC算法的密钥长度为521bit。        |
| HUKS_AES_KEY_SIZE_128        | 128  | 表示使用AES算法的密钥长度为128bit。        |
| HUKS_AES_KEY_SIZE_192        | 196  | 表示使用AES算法的密钥长度为196bit。        |
| HUKS_AES_KEY_SIZE_256        | 256  | 表示使用AES算法的密钥长度为256bit。        |
| HUKS_AES_KEY_SIZE_512        | 512  | 表示使用AES算法的密钥长度为512bit。        |
| HUKS_CURVE25519_KEY_SIZE_256 | 256  | 表示使用CURVE25519算法的密钥长度为256bit。 |
| HUKS_DH_KEY_SIZE_2048        | 2048 | 表示使用DH算法的密钥长度为2048bit。        |
| HUKS_DH_KEY_SIZE_3072        | 3072 | 表示使用DH算法的密钥长度为3072bit。        |
| HUKS_DH_KEY_SIZE_4096        | 4096 | 表示使用DH算法的密钥长度为4096bit。        |
V
Vincentchenhao 已提交
182

Z
zengyawen 已提交
183
## HuksKeyAlg
V
Vincentchenhao 已提交
184 185 186

表示密钥使用的算法。

S
shuyi 已提交
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 名称             | 值   | 说明                  |
| ---------------- | ---- | --------------------- |
| HUKS_ALG_RSA     | 1    | 表示使用RSA算法。     |
| HUKS_ALG_ECC     | 2    | 表示使用ECC算法。     |
| HUKS_ALG_DSA     | 3    | 表示使用DSA算法。     |
| HUKS_ALG_AES     | 20   | 表示使用AES算法。     |
| HUKS_ALG_HMAC    | 50   | 表示使用HMAC算法。    |
| HUKS_ALG_HKDF    | 51   | 表示使用HKDF算法。    |
| HUKS_ALG_PBKDF2  | 52   | 表示使用PBKDF2算法。  |
| HUKS_ALG_ECDH    | 100  | 表示使用ECDH算法。    |
| HUKS_ALG_X25519  | 101  | 表示使用X25519算法。  |
| HUKS_ALG_ED25519 | 102  | 表示使用ED25519算法。 |
| HUKS_ALG_DH      | 103  | 表示使用DH算法。      |
V
Vincentchenhao 已提交
202

Z
zengyawen 已提交
203
## HuksKeyGenerateType
V
Vincentchenhao 已提交
204 205 206

表示生成密钥的类型。

S
shuyi 已提交
207 208 209 210 211 212 213
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 名称                           | 值   | 说明             |
| ------------------------------ | ---- | ---------------- |
| HUKS_KEY_GENERATE_TYPE_DEFAULT | 0    | 默认生成的密钥。 |
| HUKS_KEY_GENERATE_TYPE_DERIVE  | 1    | 派生生成的密钥。 |
| HUKS_KEY_GENERATE_TYPE_AGREE   | 2    | 协商生成的密钥。 |
V
Vincentchenhao 已提交
214

Z
zengyawen 已提交
215
## HuksKeyFlag
V
Vincentchenhao 已提交
216 217 218

表示密钥的产生方式。

S
shuyi 已提交
219 220 221 222 223 224 225 226
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 名称                       | 值   | 说明                                 |
| -------------------------- | ---- | ------------------------------------ |
| HUKS_KEY_FLAG_IMPORT_KEY   | 1    | 表示通过导入公钥接口导入的密钥。     |
| HUKS_KEY_FLAG_GENERATE_KEY | 2    | 表示通过生成密钥接口生成的密钥。     |
| HUKS_KEY_FLAG_AGREE_KEY    | 3    | 表示通过生成密钥协商接口生成的密钥。 |
| HUKS_KEY_FLAG_DERIVE_KEY   | 4    | 表示通过生成密钥派生接口生成的密钥。 |
V
Vincentchenhao 已提交
227

Z
zengyawen 已提交
228
## HuksKeyStorageType
V
Vincentchenhao 已提交
229 230 231

表示密钥存储方式。

S
shuyi 已提交
232 233 234 235 236 237
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 名称                    | 值   | 说明                           |
| ----------------------- | ---- | ------------------------------ |
| HUKS_STORAGE_TEMP       | 0    | 表示通过本地直接管理密钥。     |
| HUKS_STORAGE_PERSISTENT | 1    | 表示通过HUKS service管理密钥。 |
V
Vincentchenhao 已提交
238

Z
zengyawen 已提交
239
## HuksSendType
V
Vincentchenhao 已提交
240

S
shuyi 已提交
241 242 243 244 245 246 247 248
表示发送Tag的方式。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 名称                 | 值   | 说明              |
| -------------------- | ---- | ----------------- |
| HUKS_SEND_TYPE_ASYNC | 0    | 表示异步发送TAG。 |
| HUKS_SEND_TYPE_SYNC  | 1    | 表示同步发送TAG。 |
V
Vincentchenhao 已提交
249

Z
zengyawen 已提交
250
## HuksTagType
V
Vincentchenhao 已提交
251 252 253

表示Tag的数据类型。

S
shuyi 已提交
254 255 256
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。


S
shuyi 已提交
257 258 259 260 261 262 263 264
| 名称                  | 值      | 说明                                    |
| --------------------- | ------- | --------------------------------------- |
| HUKS_TAG_TYPE_INVALID | 0 << 28 | 表示非法的Tag类型。                     |
| HUKS_TAG_TYPE_INT     | 1 << 28 | 表示该Tag的数据类型为int类型的number。  |
| HUKS_TAG_TYPE_UINT    | 2 << 28 | 表示该Tag的数据类型为uint类型的number。 |
| HUKS_TAG_TYPE_ULONG   | 3 << 28 | 表示该Tag的数据类型为bigint。           |
| HUKS_TAG_TYPE_BOOL    | 4 << 28 | 表示该Tag的数据类型为boolean。          |
| HUKS_TAG_TYPE_BYTES   | 5 << 28 | 表示该Tag的数据类型为Uint8Array。       |
V
Vincentchenhao 已提交
265

Z
zengyawen 已提交
266
## HuksTag
V
Vincentchenhao 已提交
267 268 269

表示调用参数的Tag。

S
shuyi 已提交
270 271 272 273 274 275
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 名称                                   | 值                                       | 说明                                   |
| -------------------------------------- | ---------------------------------------- | -------------------------------------- |
| HUKS_TAG_INVALID                       | HuksTagType.HUKS_TAG_TYPE_INVALID \| 0   | 表示非法的Tag。                        |
| HUKS_TAG_ALGORITHM                     | HUKS_TAG_TYPE_UINT \| 1                  | 表示算法的Tag。                        |
S
shuyi 已提交
276 277
| HUKS_TAG_PURPOSE                       | HuksTagType.HUKS_TAG_TYPE_UINT \| 2      | 表示密钥用途的Tag。                    |
| HUKS_TAG_KEY_SIZE                      | HuksTagType.HUKS_TAG_TYPE_UINT \| 3      | 表示密钥长度的Tag。                    |
S
shuyi 已提交
278 279 280 281
| HUKS_TAG_DIGEST                        | HuksTagType.HUKS_TAG_TYPE_UINT \| 4      | 表示摘要算法的Tag。                    |
| HUKS_TAG_PADDING                       | HuksTagType.HUKS_TAG_TYPE_UINT \| 5      | 表示补齐算法的Tag。                    |
| HUKS_TAG_BLOCK_MODE                    | HuksTagType.HUKS_TAG_TYPE_UINT \| 6      | 表示加密模式的Tag。                    |
| HUKS_TAG_KEY_TYPE                      | HuksTagType.HUKS_TAG_TYPE_UINT \| 7      | 表示密钥类型的Tag。                    |
S
shuyi 已提交
282 283 284
| HUKS_TAG_ASSOCIATED_DATA               | HuksTagType.HUKS_TAG_TYPE_BYTES \| 8     | 表示附加身份验证数据的Tag。            |
| HUKS_TAG_NONCE                         | HuksTagType.HUKS_TAG_TYPE_BYTES \| 9     | 表示密钥加解密的字段。                 |
| HUKS_TAG_IV                            | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10    | 表示密钥初始化的向量。                 |
S
shuyi 已提交
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349
| HUKS_TAG_INFO                          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 11    | 表示密钥派生时的info。                 |
| HUKS_TAG_SALT                          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 12    | 表示密钥派生时的盐值。                 |
| HUKS_TAG_PWD                           | HuksTagType.HUKS_TAG_TYPE_BYTES \| 13    | 表示密钥派生时的password。             |
| HUKS_TAG_ITERATION                     | HuksTagType.HUKS_TAG_TYPE_UINT \| 14     | 表示密钥派生时的迭代次数。             |
| HUKS_TAG_KEY_GENERATE_TYPE             | HuksTagType.HUKS_TAG_TYPE_UINT \| 15     | 表示生成密钥类型的Tag。                |
| HUKS_TAG_DERIVE_MAIN_KEY               | HuksTagType.HUKS_TAG_TYPE_BYTES \| 16    | 表示密钥派生时的主密钥。               |
| HUKS_TAG_DERIVE_FACTOR                 | HuksTagType.HUKS_TAG_TYPE_BYTES \| 17    | 表示密钥派生时的派生因子。             |
| HUKS_TAG_DERIVE_ALG                    | HuksTagType.HUKS_TAG_TYPE_UINT \| 18     | 表示密钥派生时的算法类型。             |
| HUKS_TAG_AGREE_ALG                     | HuksTagType.HUKS_TAG_TYPE_UINT \| 19     | 表示密钥协商时的算法类型。             |
| HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 20     | 表示密钥协商时的公钥别名。             |
| HUKS_TAG_AGREE_PRIVATE_KEY_ALIAS       | HuksTagType.HUKS_TAG_TYPE_BYTES \| 21    | 表示密钥协商时的私钥别名。             |
| HUKS_TAG_AGREE_PUBLIC_KEY              | HuksTagType.HUKS_TAG_TYPE_BYTES \| 22    | 表示密钥协商时的公钥。                 |
| HUKS_TAG_KEY_ALIAS                     | HuksTagType.HUKS_TAG_TYPE_BYTES \| 23    | 表示密钥别名。                         |
| HUKS_TAG_DERIVE_KEY_SIZE               | HuksTagType.HUKS_TAG_TYPE_UINT \| 24     | 表示派生密钥的大小。                   |
| HUKS_TAG_ACTIVE_DATETIME               | HuksTagType.HUKS_TAG_TYPE_ULONG \| 201   | 预留。                                 |
| HUKS_TAG_ORIGINATION_EXPIRE_DATETIME   | HuksTagType.HUKS_TAG_TYPE_ULONG \| 202   | 预留。                                 |
| HUKS_TAG_USAGE_EXPIRE_DATETIME         | HuksTagType.HUKS_TAG_TYPE_ULONG \| 203   | 预留。                                 |
| HUKS_TAG_CREATION_DATETIME             | HuksTagType.HUKS_TAG_TYPE_ULONG \| 204   | 预留。                                 |
| HUKS_TAG_ALL_USERS                     | ksTagType.HUKS_TAG_TYPE_BOOL \| 301      | 预留。                                 |
| HUKS_TAG_USER_ID                       | HuksTagType.HUKS_TAG_TYPE_UINT \| 302    | 预留。                                 |
| HUKS_TAG_NO_AUTH_REQUIRED              | HuksTagType.HUKS_TAG_TYPE_BOOL \| 303    | 预留。                                 |
| HUKS_TAG_USER_AUTH_TYPE                | HuksTagType.HUKS_TAG_TYPE_UINT \| 304    | 预留。                                 |
| HUKS_TAG_AUTH_TIMEOUT                  | HuksTagType.HUKS_TAG_TYPE_UINT \| 305    | 预留。                                 |
| HUKS_TAG_AUTH_TOKEN                    | HuksTagType.HUKS_TAG_TYPE_BYTES \| 306   | 预留。                                 |
| HUKS_TAG_ATTESTATION_CHALLENGE         | HuksTagType.HUKS_TAG_TYPE_BYTES \| 501   | 表示attestation时的挑战值。            |
| HUKS_TAG_ATTESTATION_APPLICATION_ID    | HuksTagType.HUKS_TAG_TYPE_BYTES \| 502   | 表示attestation时的application Id。    |
| HUKS_TAG_ATTESTATION_ID_BRAND          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 503   | 表示设备的brand。                      |
| HUKS_TAG_ATTESTATION_ID_DEVICE         | HuksTagType.HUKS_TAG_TYPE_BYTES \| 504   | 表示设备的device。                     |
| HUKS_TAG_ATTESTATION_ID_PRODUCT        | HuksTagType.HUKS_TAG_TYPE_BYTES \| 505   | 表示设备的product。                    |
| HUKS_TAG_ATTESTATION_ID_SERIAL         | HuksTagType.HUKS_TAG_TYPE_BYTES \| 506   | 表示设备的SN号。                       |
| HUKS_TAG_ATTESTATION_ID_IMEI           | HuksTagType.HUKS_TAG_TYPE_BYTES \| 507   | 表示设备的IMEI号。                     |
| HUKS_TAG_ATTESTATION_ID_MEID           | HuksTagType.HUKS_TAG_TYPE_BYTES \| 508   | 表示设备的MEID号。                     |
| HUKS_TAG_ATTESTATION_ID_MANUFACTURER   | HuksTagType.HUKS_TAG_TYPE_BYTES \| 509   | 表示设备的制造商。                     |
| HUKS_TAG_ATTESTATION_ID_MODEL          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 510   | 表示设备的型号。                       |
| HUKS_TAG_ATTESTATION_ID_ALIAS          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 511   | 表示attestation时的密钥别名。          |
| HUKS_TAG_ATTESTATION_ID_SOCID          | HuksTagType.HUKS_TAG_TYPE_BYTES \| 512   | 表示设备的SOCID。                      |
| HUKS_TAG_ATTESTATION_ID_UDID           | HuksTagType.HUKS_TAG_TYPE_BYTES \| 513   | 表示设备的UDID。                       |
| HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 514   | 表示attestation时的安全凭据。          |
| HUKS_TAG_ATTESTATION_ID_VERSION_INFO   | HuksTagType.HUKS_TAG_TYPE_BYTES \| 515   | 表示attestation时的版本号。            |
| HUKS_TAG_IS_KEY_ALIAS                  | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1001   | 表示是否使用生成key时传入的别名的Tag。 |
| HUKS_TAG_KEY_STORAGE_FLAG              | HuksTagType.HUKS_TAG_TYPE_UINT \| 1002   | 表示密钥存储方式的Tag。                |
| HUKS_TAG_IS_ALLOWED_WRAP               | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1003   | 预留。                                 |
| HUKS_TAG_KEY_WRAP_TYPE                 | HuksTagType.HUKS_TAG_TYPE_UINT \| 1004   | 预留。                                 |
| HUKS_TAG_KEY_AUTH_ID                   | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1005  | 预留。                                 |
| HUKS_TAG_KEY_ROLE                      | HuksTagType.HUKS_TAG_TYPE_UINT \| 1006   | 预留。                                 |
| HUKS_TAG_KEY_FLAG                      | HuksTagType.HUKS_TAG_TYPE_UINT \| 1007   | 表示密钥标志的Tag。                    |
| HUKS_TAG_IS_ASYNCHRONIZED              | HuksTagType.HUKS_TAG_TYPE_UINT \| 1008   | 预留。                                 |
| HUKS_TAG_SECURE_KEY_ALIAS              | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1009   | 预留。                                 |
| HUKS_TAG_SECURE_KEY_UUID               | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1010  | 预留。                                 |
| HUKS_TAG_KEY_DOMAIN                    | HuksTagType.HUKS_TAG_TYPE_UINT \| 1011   | 预留。                                 |
| HUKS_TAG_PROCESS_NAME                  | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10001 | 表示进程名称的Tag。                    |
| HUKS_TAG_PACKAGE_NAME                  | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10002 | 预留。                                 |
| HUKS_TAG_ACCESS_TIME                   | HuksTagType.HUKS_TAG_TYPE_UINT \| 10003  | 预留。                                 |
| HUKS_TAG_USES_TIME                     | HuksTagType.HUKS_TAG_TYPE_UINT \| 10004  | 预留。                                 |
| HUKS_TAG_CRYPTO_CTX                    | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10005 | 预留。                                 |
| HUKS_TAG_KEY                           | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10006 | 预留。                                 |
| HUKS_TAG_KEY_VERSION                   | HuksTagType.HUKS_TAG_TYPE_UINT \| 10007  | 表示密钥版本的Tag。                    |
| HUKS_TAG_PAYLOAD_LEN                   | HuksTagType.HUKS_TAG_TYPE_UINT \| 10008  | 预留。                                 |
| HUKS_TAG_AE_TAG                        | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10009 | 预留。                                 |
| HUKS_TAG_IS_KEY_HANDLE                 | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10010 | 预留。                                 |
| HUKS_TAG_OS_VERSION                    | HuksTagType.HUKS_TAG_TYPE_UINT \| 10101  | 表示操作系统版本的Tag。                |
| HUKS_TAG_OS_PATCHLEVEL                 | HuksTagType.HUKS_TAG_TYPE_UINT \| 10102  | 表示操作系统补丁级别的Tag。            |
| HUKS_TAG_SYMMETRIC_KEY_DATA            | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20001 | 预留。                                 |
| HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA    | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20002 | 预留。                                 |
| HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA   | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20003 | 预留。                                 |
V
Vincentchenhao 已提交
350 351 352

## huks.generateKey

Z
zengyawen 已提交
353
generateKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
V
Vincentchenhao 已提交
354

S
shuyi 已提交
355
生成密钥,使用Callback回调异步返回结果。
S
shuyi 已提交
356 357

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
358 359 360 361 362

**参数:** 

| 参数名   | 类型                                      | 必填 | 说明                                                         |
| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
S
shuyi 已提交
363 364 365
| keyAlias | string                                    | 是   | 别名。                                                       |
| options  | [HuksOptions](#huksoptions)               | 是   | 用于存放生成key所需TAG。                                     |
| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是   | 返回HUKS_SUCCESS时表示接口使用成功,其余结果请参考HuksResult进行错误码查询。 |
V
Vincentchenhao 已提交
366 367 368 369

**示例:**

```js
S
shuyi 已提交
370 371
/* 以生成RSA512密钥为例 */
var keyAlias = 'keyAlias';
V
Vincentchenhao 已提交
372 373 374
var properties = new Array();
properties[0] = {
  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
S
shuyi 已提交
375
  value: huks.HuksKeyAlg.HUKS_ALG_RSA
V
Vincentchenhao 已提交
376 377 378 379 380 381 382
};
properties[1] = {
  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_512
};
properties[2] = {
  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
S
shuyi 已提交
383 384 385
  value:
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT |
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
V
Vincentchenhao 已提交
386 387 388
};
properties[3] = {
  tag: huks.HuksTag.HUKS_TAG_PADDING,
S
shuyi 已提交
389
  value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
V
Vincentchenhao 已提交
390 391 392
};
properties[4] = {
  tag: huks.HuksTag.HUKS_TAG_DIGEST,
S
shuyi 已提交
393
  value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
V
Vincentchenhao 已提交
394 395 396 397
};
var options = {
  properties: properties
};
S
shuyi 已提交
398
huks.generateKey(keyAlias, options, function (err, data){}); 
V
Vincentchenhao 已提交
399 400
```

Z
zengyawen 已提交
401
## huks.generateKey
V
Vincentchenhao 已提交
402

Z
zengyawen 已提交
403
generateKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
V
Vincentchenhao 已提交
404

S
shuyi 已提交
405
生成密钥,使用Promise方式异步返回结果。
S
shuyi 已提交
406 407

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
408 409 410

**参数:** 

S
shuyi 已提交
411 412 413 414
| 参数名   | 类型                        | 必填 | 说明                     |
| -------- | --------------------------- | ---- | ------------------------ |
| keyAlias | string                      | 是   | 密钥别名。               |
| options  | [HuksOptions](#huksoptions) | 是   | 用于存放生成key所需TAG。 |
V
Vincentchenhao 已提交
415 416 417

**返回值**:(可选,如不涉及可删除)

S
shuyi 已提交
418 419 420
| 类型                                | 说明                                               |
| ----------------------------------- | -------------------------------------------------- |
| Promise\<[HuksResult](#huksresult)> | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
V
Vincentchenhao 已提交
421 422 423 424

**示例:**

```js
S
shuyi 已提交
425 426
/* 以生成ECC256密钥为例 */
var keyAlias = 'keyAlias';
V
Vincentchenhao 已提交
427 428 429
var properties = new Array();
properties[0] = {
  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
S
shuyi 已提交
430
  value: huks.HuksKeyAlg.HUKS_ALG_ECC
V
Vincentchenhao 已提交
431 432 433
};
properties[1] = {
  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
S
shuyi 已提交
434
  value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
V
Vincentchenhao 已提交
435 436 437
};
properties[2] = {
  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
S
shuyi 已提交
438 439 440
  value:
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
V
Vincentchenhao 已提交
441 442 443
};
properties[3] = {
  tag: huks.HuksTag.HUKS_TAG_DIGEST,
S
shuyi 已提交
444
  value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
V
Vincentchenhao 已提交
445 446 447 448
};
var options = {
  properties: properties
};
S
shuyi 已提交
449
var result = huks.generateKey(keyAlias, options);
V
Vincentchenhao 已提交
450 451 452 453
```

## huks.deleteKey

Z
zengyawen 已提交
454
deleteKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
V
Vincentchenhao 已提交
455

S
shuyi 已提交
456 457 458
删除密钥,使用Callback回调异步返回结果。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
459 460 461

**参数:**

S
shuyi 已提交
462 463 464 465 466
| 参数名   | 类型                                      | 必填 | 说明                                               |
| -------- | ----------------------------------------- | ---- | -------------------------------------------------- |
| keyAlias | string                                    | 是   | 密钥别名,应为生成key时传入的别名。                |
| options  | [HuksOptions](#huksoptions)               | 是   | 空对象(此处传空即可)。                           |
| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是   | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
V
Vincentchenhao 已提交
467 468 469 470

**示例:**

```js
S
shuyi 已提交
471 472
/* 此处options选择emptyOptions传空 */
var keyAlias = 'keyAlias';
V
Vincentchenhao 已提交
473 474 475
var emptyOptions = {
  properties: []
};
S
shuyi 已提交
476
huks.deleteKey(keyAlias, emptyOptions, function (err, data) {});
V
Vincentchenhao 已提交
477 478
```

Z
zengyawen 已提交
479
## huks.deleteKey
V
Vincentchenhao 已提交
480

Z
zengyawen 已提交
481
deleteKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
V
Vincentchenhao 已提交
482

S
shuyi 已提交
483 484 485
删除密钥,使用Promise方式异步返回结果。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
486 487 488 489 490

**参数:**

| 参数名   | 类型        | 必填 | 说明                                                  |
| -------- | ----------- | ---- | ----------------------------------------------------- |
S
shuyi 已提交
491
| keyAlias | string      | 是   | 密钥别名,应为生成key时传入的别名。 |
S
shuyi 已提交
492
| options | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
V
Vincentchenhao 已提交
493 494 495

**返回值:**

S
shuyi 已提交
496 497 498
| 类型                                | 说明                                               |
| ----------------------------------- | -------------------------------------------------- |
| Promise\<[HuksResult](#huksresult)> | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
V
Vincentchenhao 已提交
499 500 501 502

**示例:**

```js
S
shuyi 已提交
503 504
/* 此处options选择emptyOptions传空 */
var keyAlias = 'keyAlias';
V
Vincentchenhao 已提交
505 506 507
var emptyOptions = {
  properties: []
};
S
shuyi 已提交
508
var result = huks.deleteKey(keyAlias, emptyOptions);
V
Vincentchenhao 已提交
509 510 511 512 513 514 515 516
```

## huks.getSdkVersion

getSdkVersion(options: HuksOptions) : string

获取当前系统sdk版本。

S
shuyi 已提交
517 518
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
519 520 521 522
**参数:**

| 参数名  | 类型       | 必填 | 说明                      |
| ------- | ---------- | ---- | ------------------------- |
S
shuyi 已提交
523
| options | [HuksOptions](#huksoptions) | 是   | 空对象,用于存放sdk版本。 |
V
Vincentchenhao 已提交
524 525 526

**返回值:**

S
shuyi 已提交
527 528 529
| 类型   | 说明          |
| ------ | ------------- |
| string | 返回sdk版本。 |
V
Vincentchenhao 已提交
530 531 532 533

**示例:**

```js
S
shuyi 已提交
534
/* 此处options选择emptyOptions传空 */
V
Vincentchenhao 已提交
535 536 537
var emptyOptions = {
  properties: []
};
S
shuyi 已提交
538
var result = huks.getSdkVersion(emptyOptions);
V
Vincentchenhao 已提交
539 540 541 542
```

## huks.importKey

Z
zengyawen 已提交
543
importKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
V
Vincentchenhao 已提交
544

S
shuyi 已提交
545
导入密钥,使用Callback方式回调异步返回结果 。
S
shuyi 已提交
546 547

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
548 549 550 551 552

**参数:**

| 参数名   | 类型                     | 必填 | 说明                                              |
| -------- | ------------------------ | ---- | ------------------------------------------------- |
S
shuyi 已提交
553 554 555
| keyAlias | string                   | 是   | 密钥别名,用于存放所需密钥。 |
| options  | [HuksOptions](#huksoptions) | 是   | 用于导入时所需TAG和需要导入的密钥。 |
| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是   | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
V
Vincentchenhao 已提交
556 557 558 559

**示例:**

```js
S
shuyi 已提交
560 561 562 563 564 565 566 567 568
/* 以导入AES256密钥为例 */
var plainTextSize32 = makeRandomArr(32);
function makeRandomArr(size) {
    var arr = new Uint8Array(size);
    for (var i = 0; i < size; i++) {
        arr[i] = Math.floor(Math.random() * 10);
    }
    return arr;
};
V
Vincentchenhao 已提交
569 570 571 572
var keyAlias = 'keyAlias';
var properties = new Array();
properties[0] = {
  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
S
shuyi 已提交
573
  value: huks.HuksKeyAlg.HUKS_ALG_AES
V
Vincentchenhao 已提交
574 575 576
};
properties[1] = {
  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
S
shuyi 已提交
577
  value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
V
Vincentchenhao 已提交
578 579 580
};
properties[2] = {
  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
S
shuyi 已提交
581 582
  value:
huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
V
Vincentchenhao 已提交
583 584 585
};
properties[3] = {
  tag: huks.HuksTag.HUKS_TAG_PADDING,
S
shuyi 已提交
586
  value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
V
Vincentchenhao 已提交
587 588
};
properties[4] = {
S
shuyi 已提交
589 590
  tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  value: huks.HuksCipherMode.HUKS_MODE_ECB
V
Vincentchenhao 已提交
591 592 593
};
var options = {
  properties: properties,
S
shuyi 已提交
594
  inData: plainTextSize32
V
Vincentchenhao 已提交
595 596 597 598
};
huks.importKey(keyAlias, options, function (err, data){});
```

Z
zengyawen 已提交
599
## huks.importKey
V
Vincentchenhao 已提交
600

Z
zengyawen 已提交
601
importKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
V
Vincentchenhao 已提交
602

S
shuyi 已提交
603
导入密钥,使用Promise方式异步返回结果。
S
shuyi 已提交
604 605

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
606 607 608 609 610

**参数:**

| 参数名   | 类型        | 必填 | 说明                                 |
| -------- | ----------- | ---- | ------------------------------------ |
S
shuyi 已提交
611 612
| keyAlias | string      | 是   | 密钥别名,用于存放所需密钥。 |
| options  | [HuksOptions](#huksoptions) | 是   | 用于导入时所需TAG和需要导入的密钥。 |
V
Vincentchenhao 已提交
613 614 615

**返回值:**

S
shuyi 已提交
616 617 618
| 类型                                | 说明                                               |
| ----------------------------------- | -------------------------------------------------- |
| Promise\<[HuksResult](#huksresult)> | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
V
Vincentchenhao 已提交
619 620 621 622

**示例:**

```js
S
shuyi 已提交
623 624 625 626 627 628 629 630 631 632 633 634
/* 以导入AES128为例 */
var plainTextSize32 = makeRandomArr(32);

function makeRandomArr(size) {
    var arr = new Uint8Array(size);
    for (var i = 0; i < size; i++) {
        arr[i] = Math.floor(Math.random() * 10);
    }
    return arr;
};

/*第一步:生成密钥*/
V
Vincentchenhao 已提交
635 636 637 638
var keyAlias = 'keyAlias';
var properties = new Array();
properties[0] = {
  tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
S
shuyi 已提交
639
  value: huks.HuksKeyAlg.HUKS_ALG_AES
V
Vincentchenhao 已提交
640 641 642
};
properties[1] = {
  tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
S
shuyi 已提交
643
  value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128
V
Vincentchenhao 已提交
644 645 646
};
properties[2] = {
  tag: huks.HuksTag.HUKS_TAG_PURPOSE,
S
shuyi 已提交
647
  value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
V
Vincentchenhao 已提交
648 649 650
};
properties[3] = {
  tag: huks.HuksTag.HUKS_TAG_PADDING,
S
shuyi 已提交
651
  value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
V
Vincentchenhao 已提交
652 653
};
properties[4] = {
S
shuyi 已提交
654 655
  tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  value: huks.HuksCipherMode.HUKS_MODE_ECB
V
Vincentchenhao 已提交
656
};
S
shuyi 已提交
657
var huksoptions = {
V
Vincentchenhao 已提交
658
  properties: properties,
S
shuyi 已提交
659
  inData: plainTextSize32
V
Vincentchenhao 已提交
660
};
S
shuyi 已提交
661
var result = huks.importKey(keyAlias, huksoptions);
V
Vincentchenhao 已提交
662 663 664 665
```

## huks.exportKey

Z
zengyawen 已提交
666
exportKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
V
Vincentchenhao 已提交
667

S
shuyi 已提交
668
导出密钥,使用Callback方式回调异步返回的结果。
S
shuyi 已提交
669 670

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
671 672 673

**参数:**

Z
zengyawen 已提交
674 675
| 参数名   | 类型                                      | 必填 | 说明                                                         |
| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
S
shuyi 已提交
676 677 678
| keyAlias | string                                    | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。                 |
| options  | [HuksOptions](#huksoptions)               | 是   | 空对象(此处传空即可)。                                     |
| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是   | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 |
V
Vincentchenhao 已提交
679 680 681 682

**示例:**

```js
S
shuyi 已提交
683
/* 此处options选择emptyOptions来传空 */
V
Vincentchenhao 已提交
684 685 686 687 688 689 690
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
huks.exportKey(keyAlias, emptyOptions, function (err, data){});
```

Z
zengyawen 已提交
691
## huks.exportKey
V
Vincentchenhao 已提交
692

Z
zengyawen 已提交
693
exportKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
V
Vincentchenhao 已提交
694

S
shuyi 已提交
695
导出密钥,使用Promise方式回调异步返回的结果。
S
shuyi 已提交
696 697

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
698 699 700 701 702

**参数:**

| 参数名   | 类型        | 必填 | 说明                                                         |
| -------- | ----------- | ---- | ------------------------------------------------------------ |
S
shuyi 已提交
703 704
| keyAlias | string      | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。 |
| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
V
Vincentchenhao 已提交
705 706 707 708 709

**返回值:**

| 类型                                | 说明                                                         |
| ----------------------------------- | ------------------------------------------------------------ |
S
shuyi 已提交
710
| Promise\<[HuksResult](#huksresult)> | 返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 |
V
Vincentchenhao 已提交
711 712 713 714

**示例:**

```js
S
shuyi 已提交
715
/* 此处options选择emptyOptions来传空 */
V
Vincentchenhao 已提交
716 717 718 719
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
S
shuyi 已提交
720
var result = huks.exportKey(keyAlias, emptyOptions);
V
Vincentchenhao 已提交
721 722 723 724
```

## huks.getKeyProperties

Z
zengyawen 已提交
725
getKeyProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
V
Vincentchenhao 已提交
726

S
shuyi 已提交
727 728 729
获取密钥属性,使用Callback回调异步返回结果。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
730 731 732 733 734

**参数:**

| 参数名   | 类型                                      | 必填 | 说明                                                         |
| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
S
shuyi 已提交
735 736
| keyAlias | string                                    | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。                 |
| options  | [HuksOptions](#huksoptions)               | 是   | 空对象(此处传空即可)。                                     |
S
shuyi 已提交
737
| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是   | errorCode:返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 |
V
Vincentchenhao 已提交
738 739 740 741

**示例:**

```js
S
shuyi 已提交
742
/* 此处options选择emptyOptions来传空 */
V
Vincentchenhao 已提交
743 744 745 746 747 748 749
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
huks.getKeyProperties(keyAlias, emptyOptions, function (err, data){});
```

Z
zengyawen 已提交
750
## huks.getKeyProperties
V
Vincentchenhao 已提交
751

Z
zengyawen 已提交
752
getKeyProperties(keyAlias: string, options: HuksOptions) : Promise\<HuksResult>
V
Vincentchenhao 已提交
753

S
shuyi 已提交
754 755 756
获取密钥属性,使用Promise回调异步返回结果。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
757 758 759 760 761

**参数:**

| 参数名   | 类型        | 必填 | 说明                                                         |
| -------- | ----------- | ---- | ------------------------------------------------------------ |
S
shuyi 已提交
762 763
| keyAlias | string      | 是   | 密钥别名,应与所用密钥生成时使用的别名相同。 |
| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
V
Vincentchenhao 已提交
764 765 766 767 768

**返回值:**

| 类型               | 说明                                                         |
| ------------------ | ------------------------------------------------------------ |
S
shuyi 已提交
769
| Promise\<[HuksResult](#huksoptions)> | errorCode:返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。properties:返回值为从生成key时传入的别名。中导出的生成密钥时所需参数。 |
V
Vincentchenhao 已提交
770 771 772 773

**示例:**

```js
S
shuyi 已提交
774
/* 此处options选择emptyOptions来传空 */
V
Vincentchenhao 已提交
775 776 777 778
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
S
shuyi 已提交
779
var result = huks.getKeyProperties(keyAlias, emptyOptions);
V
Vincentchenhao 已提交
780 781 782 783
```

## huks.isKeyExist

Z
zengyawen 已提交
784
isKeyExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<boolean>) : void
V
Vincentchenhao 已提交
785

S
shuyi 已提交
786 787 788
判断密钥是否存在,使用Callback回调异步返回结果 。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
789 790 791 792 793

**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
794 795 796
| keyAlias | string                 | 是   | 所需查找的密钥的别名。 |
| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
| callback | AsyncCallback\<boolean> | 是   | FALSE代表密钥不存在,TRUE代表密钥存在。 |
V
Vincentchenhao 已提交
797 798 799 800

**示例:**

```js
S
shuyi 已提交
801
/* 此处options选择emptyOptions来传空 */
V
Vincentchenhao 已提交
802 803 804 805 806 807 808
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
huks.isKeyExist(keyAlias, emptyOptions, function (err, data){});
```

Z
zengyawen 已提交
809
## huks.isKeyExist
V
Vincentchenhao 已提交
810

Z
zengyawen 已提交
811
isKeyExist(keyAlias: string, options: HuksOptions) : Promise\<boolean>
V
Vincentchenhao 已提交
812

S
shuyi 已提交
813 814 815
判断密钥是否存在,使用Promise回调异步返回结果 。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
816 817 818 819 820

**参数:**

| 参数名   | 类型        | 必填 | 说明                             |
| -------- | ----------- | ---- | -------------------------------- |
S
shuyi 已提交
821 822
| keyAlias | string      | 是   | 所需查找的密钥的别名。 |
| options  | [HuksOptions](#huksoptions) | 是   | 空对象(此处传空即可)。 |
V
Vincentchenhao 已提交
823 824 825

**返回值:**

S
shuyi 已提交
826 827 828
| 类型              | 说明                                    |
| ----------------- | --------------------------------------- |
| Promise\<boolean> | FALSE代表密钥不存在,TRUE代表密钥存在。 |
V
Vincentchenhao 已提交
829 830 831 832

**示例:**

```js
S
shuyi 已提交
833
/* 此处options选择emptyOptions来传空 */
V
Vincentchenhao 已提交
834 835 836 837
var keyAlias = 'keyAlias';
var emptyOptions = {
  properties: []
};
S
shuyi 已提交
838
var result = huks.isKeyExist(keyAlias, emptyOptions);
V
Vincentchenhao 已提交
839 840 841
```


S
shuyi 已提交
842

V
Vincentchenhao 已提交
843 844
## huks.init

Z
zengyawen 已提交
845
init(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksHandle>) : void
V
Vincentchenhao 已提交
846

S
shuyi 已提交
847
init操作密钥接口,使用Callback回调异步返回结果 。
S
shuyi 已提交
848 849

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
850 851 852 853 854

**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
855 856 857
| keyAlias | string                 | 是   | Init操作密钥的别名。 |
| options  | [HuksOptions](#huksoptions) | 是   | Init操作的参数集合。 |
| callback | AsyncCallback\<[HuksHandle](#hukshandle)> | 是   | 将Init操作操作返回的handle添加到密钥管理系统的回调。 |
V
Vincentchenhao 已提交
858 859


Z
zengyawen 已提交
860 861 862
## huks.init

init(keyAlias: string, options: HuksOptions) : Promise\<HuksHandle>
V
Vincentchenhao 已提交
863

S
shuyi 已提交
864
init操作密钥接口,使用Promise方式异步返回结果。
V
Vincentchenhao 已提交
865

S
shuyi 已提交
866 867
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
868 869 870 871
**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
872 873 874
| keyAlias | string                 | 是   | Init操作密钥的别名。 |
| options  | [HuksOptions](#huksoptions) | 是   | Init参数集合。 |
| promise | Promise\<[HuksHandle](#hukshandle)> | 是   | 将Init操作返回的handle添加到密钥管理系统的回调。 |
V
Vincentchenhao 已提交
875 876 877 878


## huks.update

Z
zengyawen 已提交
879
update(handle: number, token?: Uint8Array, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
V
Vincentchenhao 已提交
880

S
shuyi 已提交
881
update操作密钥接口,使用Callback回调异步返回结果 。
S
shuyi 已提交
882 883

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
884 885 886 887 888

**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
889 890 891
| handle | number           | 是   | Update操作的handle。 |
| token | Uint8Array | 否 | Update操作的token。 |
| options  | [HuksOptions](#huksoptions) | 是   | Update的参数集合。 |
S
shuyi 已提交
892
| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 将Update操作的结果添加到密钥管理系统的回调。 |
V
Vincentchenhao 已提交
893 894


Z
zengyawen 已提交
895 896
## huks.update

Z
zengyawen 已提交
897
update(handle: number, token?: Uint8Array, options: HuksOptions) : Promise\<HuksResult>
V
Vincentchenhao 已提交
898

S
shuyi 已提交
899
update操作密钥接口,使用Promise方式异步返回结果。
V
Vincentchenhao 已提交
900

S
shuyi 已提交
901 902
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
903 904 905 906
**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
907 908 909 910
| handle | number           | 是   | Update操作的handle。 |
| token | Uint8Array | 否 | Update操作的token。 |
| options  | [HuksOptions](#huksoptions) | 是   | Update操作的参数集合。 |
| promise | Promise\<[HuksResult](#huksresult)> | 是 | 将Update操作的结果添加到密钥管理系统的回调。 |
V
Vincentchenhao 已提交
911 912 913 914


## huks.finish

Z
zengyawen 已提交
915
finish(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
V
Vincentchenhao 已提交
916

S
shuyi 已提交
917
finish操作密钥接口,使用Callback回调异步返回结果 。
S
shuyi 已提交
918 919

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
920 921 922 923 924

**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
925 926
| handle | number           | 是   | Finish操作的handle。 |
| options  | [HuksOptions](#huksoptions) | 是   | Finish的参数集合。 |
Z
zengyawen 已提交
927
| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 将Finish操作的结果添加到密钥管理系统的回调。 |
V
Vincentchenhao 已提交
928 929


Z
zengyawen 已提交
930 931 932
## huks.finish

finish(handle: number, options: HuksOptions) : Promise\<HuksResult>
V
Vincentchenhao 已提交
933

S
shuyi 已提交
934
finish操作密钥接口,使用Promise方式异步返回结果。
V
Vincentchenhao 已提交
935

S
shuyi 已提交
936 937
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
938 939 940 941
**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
942 943 944
| handle | number           | 是   | Finish操作的handle。 |
| options  | [HuksOptions](#huksoptions) | 是   | Finish操作的参数集合。 |
| promise | Promise\<[HuksResult](#HuksResult)> | 是 | promise实例,用于获取异步返回结果。 |
V
Vincentchenhao 已提交
945 946 947 948


## huks.abort

Z
zengyawen 已提交
949
abort(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void
V
Vincentchenhao 已提交
950

S
shuyi 已提交
951
abort操作密钥接口,使用Callback回调异步返回结果 。
S
shuyi 已提交
952 953

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。
V
Vincentchenhao 已提交
954 955 956 957 958

**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
959 960
| handle | number           | 是   | Abort操作的handle。 |
| options  | [HuksOptions](#huksoptions) | 是   | Abort操作的参数集合。 |
Z
zengyawen 已提交
961
| callback | AsyncCallback\<[HuksResult](#huksresult)> | 是 | 将Abort操作的结果添加到密钥管理系统的回调。 |
V
Vincentchenhao 已提交
962 963 964 965

**示例:**

```js
S
shuyi 已提交
966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098
/* huks.init, huks.update, huks.finish为三段式接口,需要一起使用,当huks.init和huks.update
 * 以及huks.finish操作中的任一阶段发生错误时,都需要调用huks.abort来终止密钥的使用。
 *
 * 以下以RSA1024密钥的callback操作使用为例
 */
import router from '@system.router';
import huks from "@ohos.security.huks";
import display from '@ohos.display';

export default {
    data: {
        title: "hmac",
        genHuksOptions: {},
        HuksOptions: {
            "properties": "",
            "inData": new Uint8Array()
        },
        keyAlias: 'HuksDemoHMAC',
        inData: 'huksHmacTest',
        handle: {},
    },

    onInit() {
        this.title = this.$t('strings.world');
    },

    onCreate() {
        console.info("Application onCreate");
    },

    onDestroy() {
        console.info("Application onDestroy");
    },

    stringToUint8Array: function (str) {
        var arr = [];
        for (var i = 0, j = str.length; i < j; ++i) {
            arr.push(str.charCodeAt(i));
        }
        var tmpUint8Array = new Uint8Array(arr);
        return tmpUint8Array;
    },

    huksGenerateKey: function () {
        var alias = this.keyAlias;
        var properties = new Array();
        properties[0] = {
            tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
            value: huks.HuksKeyAlg.HUKS_ALG_RSA
        };
        properties[1] = {
            tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
            value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024
        };
        properties[2] = {
            tag: huks.HuksTag.HUKS_TAG_PURPOSE,
            value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
        };
        properties[3] = {
            tag: huks.HuksTag.HUKS_TAG_PADDING,
            value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
        };
        properties[4] = {
            tag: huks.HuksTag.HUKS_TAG_DIGEST,
            value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
        };
        var options = {
            properties: properties
        };
        this.HuksOptions.properties = properties;
        this.genHuksOptions = options;
        huks.generateKey(alias, options, function (err, data) { });
    },

    async huksInit() {
        var alias = this.keyAlias;
        var that = this;
        return new Promise((resolve, reject) => {
            huks.init(alias, this.genHuksOptions, async function (err, data) {
                console.log(`the init err is :${JSON.stringify(err)}`);
                console.log(`the init data is :${JSON.stringify(data)}`);
                if (data.errorCode === 0) {
                    that.resultMessage = "init 执行成功!"
                    that.handle = {
                        "handle1": data.handle1,
                        "handle2": data.handle2
                    }
                } else {
                    that.resultMessage = "init 执行失败  errorCode: " + data.errorCode
                }
            });
        });
    },

    async huksUpdate() {
        let count = 2;
        for (let i = 0; i < count; i++) {
            this.HuksOptions.inData = this.stringToUint8Array(this.inData);
            console.log(`Huks_Demo hmac before update HuksOptions  ${JSON.stringify(this.HuksOptions)}`);
            new Promise((resolve, reject) => {
                huks.update(this.handle, this.HuksOptions, function (err, data) {
                    if (data.errorCode === 0) {
                        this.resultMessage += "update 共执行 " + count + "" + "" + (i + 1) + " 次执行成功!        "
                    } else {
                        this.resultMessage += "update 共执行 " + count + "" + "" + (i + 1) + " 次执行失败   errorCode: " + data.errorCode + "          "
                    }
                });
            });
        }
    },

    huksFinish: function () {
        this.HuksOptions.inData = this.stringToUint8Array("0");
        new Promise((resolve, reject) => {
            huks.finish(this.handle, this.HuksOptions, function (err, data) {
                if (data.errorCode === 0) {
                    that.resultMessage = "finish 执行成功!";
                } else {
                    that.resultMessage = "finish 执行失败  errorCode: " + data.errorCode;
                }
            });
        });
    },

    huksAbort: function () {
        new Promise((resolve, reject) => {
            huks.abort(this.handle, this.genHuksOptions, function (err, data) {
                console.log(`Huks_Demo hmac huksAbort1 data ${JSON.stringify(data)}`);
                console.log(`Huks_Demo hmac huksAbort1 err ${JSON.stringify(err)}`);
            });
        });
    }
}
V
Vincentchenhao 已提交
1099 1100
```

Z
zengyawen 已提交
1101 1102 1103
## huks.abort

abort(handle: number, options: HuksOptions) : Promise\<HuksResult>;
V
Vincentchenhao 已提交
1104

S
shuyi 已提交
1105
abort操作密钥接口,使用Promise方式异步返回结果。
V
Vincentchenhao 已提交
1106

S
shuyi 已提交
1107 1108
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
1109 1110 1111 1112
**参数:**

| 参数名   | 类型                   | 必填 | 说明                                  |
| -------- | ---------------------- | ---- | ------------------------------------- |
S
shuyi 已提交
1113 1114 1115
| handle | number           | 是   | Abort操作的handle。 |
| options  | [HuksOptions](#huksoptions) | 是   | Abort操作的参数集合。 |
| promise | Promise\<[HuksResult](#huksresult)> | 是 | 将Abort操作的结果添加到密钥管理系统的回调。 |
V
Vincentchenhao 已提交
1116 1117 1118 1119

**示例:**

```js
S
shuyi 已提交
1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249
/* huks.init, huks.update, huks.finish为三段式接口,需要一起使用,当huks.init和huks.update
 * 以及huks.finish操作中的任一阶段发生错误时,都需要调用huks.abort来终止密钥的使用。
 *
 * 以下以RSA1024密钥的promise操作使用为例
 */
import router from '@system.router';
import huks from "@ohos.security.huks";
import display from '@ohos.display';

export default {
    data: {
        title: "hmac",
        genHuksOptions: {},
        HuksOptions: {
            "properties": "",
            "inData": new Uint8Array()
        },
        keyAlias: 'HuksDemoHMAC',
        inData: 'huksHmacTest',
        handle: {},
    },

    onInit() {
        this.title = this.$t('strings.world');
    },

    onCreate() {
        console.info("Application onCreate");
    },
    onDestroy() {
        console.info("Application onDestroy");
    },

    stringToUint8Array: function (str) {
        var arr = [];
        for (var i = 0, j = str.length; i < j; ++i) {
            arr.push(str.charCodeAt(i));
        }
        var tmpUint8Array = new Uint8Array(arr);
        return tmpUint8Array;
    },

    huksGenerateKey: function () {
        console.log("huksGenerate2 is start!!!");
        var alias = this.keyAlias;
        var properties = new Array();
        properties[0] = {
            tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
            value: huks.HuksKeyAlg.HUKS_ALG_RSA
        };
        properties[1] = {
            tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
            value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024
        };
        properties[2] = {
            tag: huks.HuksTag.HUKS_TAG_PURPOSE,
            value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
        };
        properties[3] = {
            tag: huks.HuksTag.HUKS_TAG_PADDING,
            value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
        };
        properties[4] = {
            tag: huks.HuksTag.HUKS_TAG_DIGEST,
            value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
        };
        var options = {
            properties: properties
        };
        this.HuksOptions.properties = properties;
        this.genHuksOptions = options;
        var result = huks.generateKey(alias, this.genHuksOptions);
        console.log("huksgenerate2 is ok!!!")
    },

    async huksInit() {
        var alias = this.keyAlias;
        var that = this;
        await huks.init(alias, this.genHuksOptions).then((data) => {
            console.log(`test init data: ${JSON.stringify(data)}`);
            that.handle = {
                "handle1": data.handle1,
                "handle2": data.handle2
            };
        }).catch((err) => {
            console.log("test init err information: " + JSON.stringify(err))
        })
    },

    async huksUpdate() {
        let count = 2;
        for (let i = 0; i < count; i++) {
            this.HuksOptions.inData = this.stringToUint8Array(this.inData);
            await huks.update(this.handle, this.HuksOptions).then(async (data) => {
                if (data.errorCode === 0) {
                    this.resultMessage += "update 共执行 " + count + "" + "" + (i + 1) + " 次执行成功!        "
                } else {
                    this.resultMessage += "update 共执行 " + count + "" + "" + (i + 1) + " 次执行失败   errorCode: " + data.errorCode + "          "
                }
            }).catch((err) => {
                this.resultMessage += "update 共执行 " + count + "" + "" + (i + 1) + " 次执行失败 catch 错误信息:" + JSON.stringify(err) + "        "
            });
        }
    },

    huksFinish: function () {
        this.HuksOptions.inData = this.stringToUint8Array("HuksDemoHMAC");
        huks.finish(this.handle, this.HuksOptions).then((data) => {
            if (data.errorCode === 0) {
                this.resultMessage = "finish 执行成功!";
            } else {
                this.resultMessage = "finish 执行失败  errorCode: " + data.errorCode;
            }
        }).catch((err) => {
            this.resultMessage = "finish 执行失败, catch 错误信息:" + JSON.stringify(err)
        });
    },

    huksAbort: function () {
        huks.abort(this.handle, this.HuksOptions).then((data) => {
            if (data.errorCode === 0) {
                this.resultMessage = "abort 执行成功!";
            } else {
                this.resultMessage = "abort 执行失败  errorCode: " + data.errorCode;
            }
        }).catch((err) => {
            this.resultMessage = "abort 执行失败, catch 错误信息:" + JSON.stringify(err)
        });
    }
}
V
Vincentchenhao 已提交
1250 1251
```

Z
zengyawen 已提交
1252
## HuksParam
V
Vincentchenhao 已提交
1253 1254 1255

调用接口使用的options中的properties数组中的param。

S
shuyi 已提交
1256 1257 1258 1259 1260 1261
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 参数名 | 类型                                | 必填 | 说明       |
| ------ | ----------------------------------- | ---- | ---------- |
| tag    | HuksTag                             | 是   | 标签       |
| value  | boolean\|number\|bigint\|Uint8Array | 是   | 标签对应值 |
V
Vincentchenhao 已提交
1262

Z
zengyawen 已提交
1263
## HuksOptions
V
Vincentchenhao 已提交
1264 1265 1266

调用接口使用的options。

S
shuyi 已提交
1267 1268 1269 1270 1271 1272
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

| 参数名     | 类型              | 必填 | 说明                     |
| ---------- | ----------------- | ---- | ------------------------ |
| properties | Array\<HuksParam> | 否   | 属性,存HuksParam的数组。 |
| inData     | Uint8Array        | 否   | 输入数据。               |
V
Vincentchenhao 已提交
1273

Z
zengyawen 已提交
1274
## HuksHandle
V
Vincentchenhao 已提交
1275 1276 1277

huks Handle结构体。

S
shuyi 已提交
1278 1279
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。

V
Vincentchenhao 已提交
1280 1281
| 参数名     | 类型             | 必填 | 说明     |
| ---------- | ---------------- | ---- | -------- |
S
shuyi 已提交
1282 1283 1284
| errorCode  | number           | 是   | 错误码 |
| handle    | number       | 是 | handle值 |
| token | Uint8Array | 否 | 预留字段 |
V
Vincentchenhao 已提交
1285 1286


Z
zengyawen 已提交
1287
## HuksResult
V
Vincentchenhao 已提交
1288 1289 1290

调用接口返回的result。

S
shuyi 已提交
1291 1292 1293 1294 1295 1296 1297 1298 1299 1300
**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.Huks。



| 参数名     | 类型              | 必填 | 说明     |
| ---------- | ----------------- | ---- | -------- |
| errorCode  | number            | 是   | 错误码   |
| outData    | Uint8Array        | 否   | 输出数据 |
| properties | Array\<HuksParam> | 否   | 属性     |
| certChains | Array\<string>    | 否   | 证书链   |
V
Vincentchenhao 已提交
1301