1# @ohos.security.huks (通用密钥库系统) 2 3向应用提供密钥库能力,包括密钥管理及密钥的密码学操作等功能。 4HUKS所管理的密钥可以由应用导入或者由应用调用HUKS接口生成。 5 6> **说明** 7> 8> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 9 10## 导入模块 11 12```js 13import huks from '@ohos.security.huks' 14``` 15 16## HuksParam 17 18调用接口使用的options中的properties数组中的param。 19 20**系统能力**:SystemCapability.Security.Huks 21 22| 名称 | 类型 | 必填 | 说明 | 23| ------ | ----------------------------------- | ---- | ------------ | 24| tag | [HuksTag](#hukstag) | 是 | 标签。 | 25| value | boolean\|number\|bigint\|Uint8Array | 是 | 标签对应值。 | 26 27## HuksOptions 28 29调用接口使用的options。 30 31**系统能力**:SystemCapability.Security.Huks 32 33| 名称 | 类型 | 必填 | 说明 | 34| ---------- | ----------------- | ---- | ------------------------ | 35| properties | Array\<[HuksParam](#huksparam)> | 否 | 属性,用于存HuksParam的数组。 | 36| inData | Uint8Array | 否 | 输入数据。 | 37 38## HuksSessionHandle<sup>9+</sup> 39 40huks Handle结构体。 41 42**系统能力**:SystemCapability.Security.Huks 43 44| 名称 | 类型 | 必填 | 说明 | 45| --------- | ---------- | ---- | ---------------------------------------------------- | 46| handle | number | 是 | 表示handle值。 | 47| challenge | Uint8Array | 否 | 表示[initSession](#huksinitsession9)操作之后获取到的challenge信息。 | 48 49## HuksReturnResult<sup>9+</sup> 50 51调用接口返回的result。 52 53**系统能力**:SystemCapability.Security.Huks 54 55 56 57| 名称 | 类型 | 必填 | 说明 | 58| ---------- | ------------------------------- | ---- | ---------------- | 59| outData | Uint8Array | 否 | 表示输出数据。 | 60| properties | Array\<[HuksParam](#huksparam)> | 否 | 表示属性信息。 | 61| certChains | Array\<string> | 否 | 表示证书链数据。 | 62 63 64## huks.generateKeyItem<sup>9+</sup> 65 66generateKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<void>) : void 67 68生成密钥,使用Callback回调异步返回结果。 69 70**系统能力**:SystemCapability.Security.Huks 71 72**参数:** 73 74| 参数名 | 类型 | 必填 | 说明 | 75| -------- | --------------------------- | ---- | --------------------------------------------- | 76| keyAlias | string | 是 | 别名。 | 77| options | [HuksOptions](#huksoptions) | 是 | 用于存放生成key所需TAG。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 | 78| callback | AsyncCallback\<void> | 是 | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 | 79 80**示例:** 81 82```js 83/* 以生成ECC256密钥为例 */ 84let keyAlias = 'keyAlias'; 85let properties = new Array(); 86properties[0] = { 87 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 88 value: huks.HuksKeyAlg.HUKS_ALG_ECC 89}; 90properties[1] = { 91 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 92 value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 93}; 94properties[2] = { 95 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 96 value: 97 huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | 98 huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY 99}; 100properties[3] = { 101 tag: huks.HuksTag.HUKS_TAG_DIGEST, 102 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 103}; 104let options = { 105 properties: properties 106}; 107try { 108 huks.generateKeyItem(keyAlias, options, function (error, data) { 109 if (error) { 110 console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); 111 } else { 112 console.info(`callback: generateKeyItem key success`); 113 } 114 }); 115} catch (error) { 116 console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 117} 118``` 119 120## huks.generateKeyItem<sup>9+</sup> 121 122generateKeyItem(keyAlias: string, options: HuksOptions) : Promise\<void> 123 124生成密钥,使用Promise方式异步返回结果。 125 126**系统能力**:SystemCapability.Security.Huks 127 128**参数:** 129 130| 参数名 | 类型 | 必填 | 说明 | 131| -------- | --------------------------- | ---- | ------------------------ | 132| keyAlias | string | 是 | 密钥别名。 | 133| options | [HuksOptions](#huksoptions) | 是 | 用于存放生成key所需TAG。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 | 134 135**示例:** 136 137```js 138/* 以生成ECC256密钥为例 */ 139let keyAlias = 'keyAlias'; 140let properties = new Array(); 141properties[0] = { 142 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 143 value: huks.HuksKeyAlg.HUKS_ALG_ECC 144}; 145properties[1] = { 146 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 147 value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 148}; 149properties[2] = { 150 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 151 value: 152 huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | 153 huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY 154}; 155properties[3] = { 156 tag: huks.HuksTag.HUKS_TAG_DIGEST, 157 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 158}; 159let options = { 160 properties: properties 161}; 162try { 163 huks.generateKeyItem(keyAlias, options) 164 .then((data) => { 165 console.info(`promise: generateKeyItem success`); 166 }) 167 .catch(error => { 168 console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); 169 }); 170} catch (error) { 171 console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 172} 173``` 174 175## huks.deleteKeyItem<sup>9+</sup> 176 177deleteKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<void>) : void 178 179删除密钥,使用Callback回调异步返回结果。 180 181**系统能力**:SystemCapability.Security.Huks 182 183**参数:** 184 185| 参数名 | 类型 | 必填 | 说明 | 186| -------- | --------------------------- | ---- | --------------------------------------------- | 187| keyAlias | string | 是 | 密钥别名,应为生成key时传入的别名。 | 188| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 189| callback | AsyncCallback\<void> | 是 | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 | 190 191**示例:** 192 193```js 194/* 此处options选择emptyOptions传空 */ 195let keyAlias = 'keyAlias'; 196let emptyOptions = { 197 properties: [] 198}; 199try { 200 huks.deleteKeyItem(keyAlias, emptyOptions, function (error, data) { 201 if (error) { 202 console.error(`callback: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`); 203 } else { 204 console.info(`callback: deleteKeyItem key success`); 205 } 206 }); 207} catch (error) { 208 console.error(`callback: deleteKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 209} 210``` 211 212## huks.deleteKeyItem<sup>9+</sup> 213 214deleteKeyItem(keyAlias: string, options: HuksOptions) : Promise\<void> 215 216删除密钥,使用Promise方式异步返回结果。 217 218**系统能力**:SystemCapability.Security.Huks 219 220**参数:** 221 222| 参数名 | 类型 | 必填 | 说明 | 223| -------- | --------------------------- | ---- | ----------------------------------- | 224| keyAlias | string | 是 | 密钥别名,应为生成key时传入的别名。 | 225| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 226 227**示例:** 228 229```js 230/* 此处options选择emptyOptions传空 */ 231let keyAlias = 'keyAlias'; 232let emptyOptions = { 233 properties: [] 234}; 235try { 236 huks.deleteKeyItem(keyAlias, emptyOptions) 237 .then ((data) => { 238 console.info(`promise: deleteKeyItem key success`); 239 }) 240 .catch(error => { 241 console.error(`promise: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`); 242 }); 243} catch (error) { 244 console.error(`promise: deleteKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 245} 246``` 247 248## huks.getSdkVersion 249 250getSdkVersion(options: HuksOptions) : string 251 252获取当前系统sdk版本。 253 254**系统能力**:SystemCapability.Security.Huks 255 256**参数:** 257 258| 参数名 | 类型 | 必填 | 说明 | 259| ------- | ---------- | ---- | ------------------------- | 260| options | [HuksOptions](#huksoptions) | 是 | 空对象,用于存放sdk版本。 | 261 262**返回值:** 263 264| 类型 | 说明 | 265| ------ | ------------- | 266| string | 返回sdk版本。 | 267 268**示例:** 269 270```js 271/* 此处options选择emptyOptions传空 */ 272let emptyOptions = { 273 properties: [] 274}; 275let result = huks.getSdkVersion(emptyOptions); 276``` 277 278## huks.importKeyItem<sup>9+</sup> 279 280importKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<void>) : void 281 282导入明文密钥,使用Callback方式回调异步返回结果 。 283 284**系统能力**:SystemCapability.Security.Huks 285 286**参数:** 287 288| 参数名 | 类型 | 必填 | 说明 | 289| -------- | --------------------------- | ---- | --------------------------------------------- | 290| keyAlias | string | 是 | 密钥别名。 | 291| options | [HuksOptions](#huksoptions) | 是 | 用于导入时所需TAG和需要导入的密钥。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 | 292| callback | AsyncCallback\<void> | 是 | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 | 293 294**示例:** 295 296```js 297/* 以导入AES256密钥为例 */ 298let plainTextSize32 = makeRandomArr(32); 299function makeRandomArr(size) { 300 let arr = new Uint8Array(size); 301 for (let i = 0; i < size; i++) { 302 arr[i] = Math.floor(Math.random() * 10); 303 } 304 return arr; 305}; 306let keyAlias = 'keyAlias'; 307let properties = new Array(); 308properties[0] = { 309 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 310 value: huks.HuksKeyAlg.HUKS_ALG_AES 311}; 312properties[1] = { 313 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 314 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 315}; 316properties[2] = { 317 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 318 value: 319 huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 320}; 321properties[3] = { 322 tag: huks.HuksTag.HUKS_TAG_PADDING, 323 value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 324}; 325properties[4] = { 326 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 327 value: huks.HuksCipherMode.HUKS_MODE_ECB 328}; 329let options = { 330 properties: properties, 331 inData: plainTextSize32 332}; 333try { 334 huks.importKeyItem(keyAlias, options, function (error, data) { 335 if (error) { 336 console.error(`callback: importKeyItem failed, code: ${error.code}, msg: ${error.message}`); 337 } else { 338 console.info(`callback: importKeyItem success`); 339 } 340 }); 341} catch (error) { 342 console.error(`callback: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 343} 344``` 345 346## huks.importKeyItem<sup>9+</sup> 347 348importKeyItem(keyAlias: string, options: HuksOptions) : Promise\<void> 349 350导入明文密钥,使用Promise方式异步返回结果。 351 352**系统能力**:SystemCapability.Security.Huks 353 354**参数:** 355 356| 参数名 | 类型 | 必填 | 说明 | 357| -------- | --------------------------- | ---- | ----------------------------------- | 358| keyAlias | string | 是 | 密钥别名。 | 359| options | [HuksOptions](#huksoptions) | 是 | 用于导入时所需TAG和需要导入的密钥。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 | 360 361**示例:** 362 363```js 364/* 以导入AES128为例 */ 365let plainTextSize32 = makeRandomArr(32); 366 367function makeRandomArr(size) { 368 let arr = new Uint8Array(size); 369 for (let i = 0; i < size; i++) { 370 arr[i] = Math.floor(Math.random() * 10); 371 } 372 return arr; 373}; 374 375/*第一步:生成密钥*/ 376let keyAlias = 'keyAlias'; 377let properties = new Array(); 378properties[0] = { 379 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 380 value: huks.HuksKeyAlg.HUKS_ALG_AES 381}; 382properties[1] = { 383 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 384 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128 385}; 386properties[2] = { 387 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 388 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 389}; 390properties[3] = { 391 tag: huks.HuksTag.HUKS_TAG_PADDING, 392 value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 393}; 394properties[4] = { 395 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 396 value: huks.HuksCipherMode.HUKS_MODE_ECB 397}; 398let huksoptions = { 399 properties: properties, 400 inData: plainTextSize32 401}; 402try { 403 huks.importKeyItem(keyAlias, huksoptions) 404 .then ((data) => { 405 console.info(`promise: importKeyItem success`); 406 }) 407 .catch(error => { 408 console.error(`promise: importKeyItem failed, code: ${error.code}, msg: ${error.message}`); 409 }); 410} catch (error) { 411 console.error(`promise: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 412} 413``` 414 415## huks.attestKeyItem<sup>9+</sup> 416 417attestKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void 418 419获取密钥证书,使用Callback方式回调异步返回结果 。 420 421**系统能力**:SystemCapability.Security.Huks 422 423**参数:** 424 425| 参数名 | 类型 | 必填 | 说明 | 426| -------- | ---------------------------------------------------- | ---- | --------------------------------------------- | 427| keyAlias | string | 是 | 密钥别名,存放待获取证书密钥的别名。 | 428| options | [HuksOptions](#huksoptions) | 是 | 用于获取证书时指定所需参数与数据。 | 429| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是 | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 | 430 431**示例:** 432 433```js 434let securityLevel = stringToUint8Array('sec_level'); 435let challenge = stringToUint8Array('challenge_data'); 436let versionInfo = stringToUint8Array('version_info'); 437let keyAliasString = "key attest"; 438 439function stringToUint8Array(str) { 440 let arr = []; 441 for (let i = 0, j = str.length; i < j; ++i) { 442 arr.push(str.charCodeAt(i)); 443 } 444 let tmpUint8Array = new Uint8Array(arr); 445 return tmpUint8Array; 446} 447 448async function generateKey(alias) { 449 let properties = new Array(); 450 properties[0] = { 451 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 452 value: huks.HuksKeyAlg.HUKS_ALG_RSA 453 }; 454 properties[1] = { 455 tag: huks.HuksTag.HUKS_TAG_KEY_STORAGE_FLAG, 456 value: huks.HuksKeyStorageType.HUKS_STORAGE_PERSISTENT 457 }; 458 properties[2] = { 459 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 460 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048 461 }; 462 properties[3] = { 463 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 464 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY 465 }; 466 properties[4] = { 467 tag: huks.HuksTag.HUKS_TAG_DIGEST, 468 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 469 }; 470 properties[5] = { 471 tag: huks.HuksTag.HUKS_TAG_PADDING, 472 value: huks.HuksKeyPadding.HUKS_PADDING_PSS 473 }; 474 properties[6] = { 475 tag: huks.HuksTag.HUKS_TAG_KEY_GENERATE_TYPE, 476 value: huks.HuksKeyGenerateType.HUKS_KEY_GENERATE_TYPE_DEFAULT 477 }; 478 properties[7] = { 479 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 480 value: huks.HuksCipherMode.HUKS_MODE_ECB 481 }; 482 let options = { 483 properties: properties 484 }; 485 486 try { 487 huks.generateKeyItem(alias, options, function (error, data) { 488 if (error) { 489 console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); 490 } else { 491 console.info(`callback: generateKeyItem success`); 492 } 493 }); 494 } catch (error) { 495 console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 496 } 497} 498 499async function attestKey() { 500 let aliasString = keyAliasString; 501 let aliasUint8 = stringToUint8Array(aliasString); 502 let properties = new Array(); 503 properties[0] = { 504 tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO, 505 value: securityLevel 506 }; 507 properties[1] = { 508 tag: huks.HuksTag.HUKS_TAG_ATTESTATION_CHALLENGE, 509 value: challenge 510 }; 511 properties[2] = { 512 tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_VERSION_INFO, 513 value: versionInfo 514 }; 515 properties[3] = { 516 tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_ALIAS, 517 value: aliasUint8 518 }; 519 let options = { 520 properties: properties 521 }; 522 await generateKey(aliasString); 523 try { 524 huks.attestKeyItem(aliasString, options, function (error, data) { 525 if (error) { 526 console.error(`callback: attestKeyItem failed, code: ${error.code}, msg: ${error.message}`); 527 } else { 528 console.info(`callback: attestKeyItem success`); 529 } 530 }); 531 } catch (error) { 532 console.error(`callback: attestKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 533 } 534} 535``` 536 537## huks.attestKeyItem<sup>9+</sup> 538 539attestKeyItem(keyAlias: string, options: HuksOptions) : Promise\<HuksReturnResult> 540 541获取密钥证书,使用Promise方式异步返回结果 。 542 543**系统能力**:SystemCapability.Security.Huks 544 545**参数:** 546 547| 参数名 | 类型 | 必填 | 说明 | 548| -------- | --------------------------- | ---- | ------------------------------------ | 549| keyAlias | string | 是 | 密钥别名,存放待获取证书密钥的别名。 | 550| options | [HuksOptions](#huksoptions) | 是 | 用于获取证书时指定所需参数与数据。 | 551 552**返回值:** 553 554| 类型 | 说明 | 555| ---------------------------------------------- | --------------------------------------------- | 556| Promise<[HuksReturnResult](#huksreturnresult9)> | Promise对象。不返回err值时表示接口使用成功,其他时为错误。 | 557 558**示例:** 559 560```js 561let securityLevel = stringToUint8Array('sec_level'); 562let challenge = stringToUint8Array('challenge_data'); 563let versionInfo = stringToUint8Array('version_info'); 564let keyAliasString = "key attest"; 565 566function stringToUint8Array(str) { 567 let arr = []; 568 for (let i = 0, j = str.length; i < j; ++i) { 569 arr.push(str.charCodeAt(i)); 570 } 571 let tmpUint8Array = new Uint8Array(arr); 572 return tmpUint8Array; 573} 574 575async function generateKey(alias) { 576 let properties = new Array(); 577 properties[0] = { 578 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 579 value: huks.HuksKeyAlg.HUKS_ALG_RSA 580 }; 581 properties[1] = { 582 tag: huks.HuksTag.HUKS_TAG_KEY_STORAGE_FLAG, 583 value: huks.HuksKeyStorageType.HUKS_STORAGE_PERSISTENT 584 }; 585 properties[2] = { 586 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 587 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048 588 }; 589 properties[3] = { 590 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 591 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY 592 }; 593 properties[4] = { 594 tag: huks.HuksTag.HUKS_TAG_DIGEST, 595 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 596 }; 597 properties[5] = { 598 tag: huks.HuksTag.HUKS_TAG_PADDING, 599 value: huks.HuksKeyPadding.HUKS_PADDING_PSS 600 }; 601 properties[6] = { 602 tag: huks.HuksTag.HUKS_TAG_KEY_GENERATE_TYPE, 603 value: huks.HuksKeyGenerateType.HUKS_KEY_GENERATE_TYPE_DEFAULT 604 }; 605 properties[7] = { 606 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 607 value: huks.HuksCipherMode.HUKS_MODE_ECB 608 }; 609 let options = { 610 properties: properties 611 }; 612 613 try { 614 await huks.generateKeyItem(alias, options) 615 .then((data) => { 616 console.info(`promise: generateKeyItem success`); 617 }) 618 .catch(error => { 619 console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); 620 }); 621 } catch (error) { 622 console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 623 } 624} 625 626async function attestKey() { 627 let aliasString = keyAliasString; 628 let aliasUint8 = stringToUint8Array(aliasString); 629 let properties = new Array(); 630 properties[0] = { 631 tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO, 632 value: securityLevel 633 }; 634 properties[1] = { 635 tag: huks.HuksTag.HUKS_TAG_ATTESTATION_CHALLENGE, 636 value: challenge 637 }; 638 properties[2] = { 639 tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_VERSION_INFO, 640 value: versionInfo 641 }; 642 properties[3] = { 643 tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_ALIAS, 644 value: aliasUint8 645 }; 646 let options = { 647 properties: properties 648 }; 649 await generateKey(aliasString); 650 try { 651 await huks.attestKeyItem(aliasString, options) 652 .then ((data) => { 653 console.info(`promise: attestKeyItem success`); 654 }) 655 .catch(error => { 656 console.error(`promise: attestKeyItem failed, code: ${error.code}, msg: ${error.message}`); 657 }); 658 } catch (error) { 659 console.error(`promise: attestKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 660 } 661} 662``` 663 664## huks.importWrappedKeyItem<sup>9+</sup> 665 666importWrappedKeyItem(keyAlias: string, wrappingKeyAlias: string, options: HuksOptions, callback: AsyncCallback\<void>) : void 667 668导入加密密钥,使用Callback方式回调异步返回结果 。 669 670**系统能力**:SystemCapability.Security.Huks 671 672**参数:** 673 674| 参数名 | 类型 | 必填 | 说明 | 675| ---------------- | --------------------------- | ---- | --------------------------------------------- | 676| keyAlias | string | 是 | 密钥别名,存放待导入密钥的别名。 | 677| wrappingKeyAlias | string | 是 | 密钥别名,对应密钥用于解密加密的密钥数据。 | 678| options | [HuksOptions](#huksoptions) | 是 | 用于导入时所需TAG和需要导入的加密的密钥数据。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 | 679| callback | AsyncCallback\<void> | 是 | 回调函数。不返回err值时表示接口使用成功,其他时为错误。 | 680 681**示例:** 682 683```js 684import huks from '@ohos.security.huks'; 685 686let exportWrappingKey; 687let alias1 = "importAlias"; 688let alias2 = "wrappingKeyAlias"; 689 690async function TestGenFunc(alias, options) { 691 try { 692 await genKey(alias, options) 693 .then((data) => { 694 console.info(`callback: generateKeyItem success`); 695 }) 696 .catch(error => { 697 console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); 698 }); 699 } catch (error) { 700 console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 701 } 702} 703 704function genKey(alias, options) { 705 return new Promise((resolve, reject) => { 706 try { 707 huks.generateKeyItem(alias, options, function (error, data) { 708 if (error) { 709 reject(error); 710 } else { 711 resolve(data); 712 } 713 }); 714 } catch (error) { 715 throw(error); 716 } 717 }); 718} 719 720async function TestExportFunc(alias, options) { 721 try { 722 await exportKey(alias, options) 723 .then ((data) => { 724 console.info(`callback: exportKeyItem success, data = ${JSON.stringify(data)}`); 725 exportWrappingKey = data.outData; 726 }) 727 .catch(error => { 728 console.error(`callback: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`); 729 }); 730 } catch (error) { 731 console.error(`callback: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 732 } 733} 734 735function exportKey(alias, options) : Promise<huks.HuksReturnResult> { 736 return new Promise((resolve, reject) => { 737 try { 738 huks.exportKeyItem(alias, options, function (error, data) { 739 if (error) { 740 reject(error); 741 } else { 742 resolve(data); 743 } 744 }); 745 } catch (error) { 746 throw(error); 747 } 748 }); 749} 750 751async function TestImportWrappedFunc(alias, wrappingAlias, options) { 752 try { 753 await importWrappedKey(alias, wrappingAlias, options) 754 .then ((data) => { 755 console.info(`callback: importWrappedKeyItem success`); 756 }) 757 .catch(error => { 758 console.error(`callback: importWrappedKeyItem failed, code: ${error.code}, msg: ${error.message}`); 759 }); 760 } catch (error) { 761 console.error(`callback: importWrappedKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 762 } 763} 764 765function importWrappedKey(alias, wrappingAlias, options) { 766 return new Promise((resolve, reject) => { 767 try { 768 huks.importWrappedKeyItem(alias, wrappingAlias, options, function (error, data) { 769 if (error) { 770 reject(error); 771 } else { 772 resolve(data); 773 } 774 }); 775 } catch (error) { 776 throw(error); 777 } 778 }); 779} 780 781async function TestImportWrappedKeyFunc( 782 alias, 783 wrappingAlias, 784 genOptions, 785 importOptions 786) { 787 await TestGenFunc(wrappingAlias, genOptions); 788 await TestExportFunc(wrappingAlias, genOptions); 789 790 /* 以下操作不需要调用HUKS接口,此处不给出具体实现。 791 * 假设待导入的密钥为keyA 792 * 1.生成ECC公私钥keyB,公钥为keyB_pub, 私钥为keyB_pri 793 * 2.使用keyB_pri和wrappingAlias密钥中获取的公钥进行密钥协商,协商出共享密钥share_key 794 * 3.随机生成密钥kek,用于加密keyA,采用AES-GCM加密,加密过程中需要记录:nonce1、aad1、加密后的密文keyA_enc、加密后的tag1。 795 * 4.使用share_key加密kek,采用AES-GCM加密,加密过程中需要记录:nonce2、aad2、加密后的密文kek_enc、加密后的tag2。 796 * 5.拼接importOptions.inData字段,满足以下格式: 797 * keyB_pub的长度(4字节) + keyB_pub的数据 + aad2的长度(4字节) + aad2的数据 + 798 * nonce2的长度(4字节) + nonce2的数据 + tag2的长度(4字节) + tag2的数据 + 799 * kek_enc的长度(4字节) + kek_enc的数据 + aad1的长度(4字节) + aad1的数据 + 800 * nonce1的长度(4字节) + nonce1的数据 + tag1的长度(4字节) + tag1的数据 + 801 * keyA长度占用的内存长度(4字节) + keyA的长度 + keyA_enc的长度(4字节) + keyA_enc的数据 802 */ 803 let inputKey = new Uint8Array([0x02, 0x00, 0x00, 0x00]); 804 importOptions.inData = inputKey; 805 await TestImportWrappedFunc(alias, wrappingAlias, importOptions); 806} 807 808function makeGenerateOptions() { 809 let properties = new Array(); 810 properties[0] = { 811 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 812 value: huks.HuksKeyAlg.HUKS_ALG_ECC 813 }; 814 properties[1] = { 815 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 816 value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 817 }; 818 properties[2] = { 819 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 820 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_UNWRAP 821 }; 822 properties[3] = { 823 tag: huks.HuksTag.HUKS_TAG_DIGEST, 824 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 825 }; 826 properties[4] = { 827 tag: huks.HuksTag.HUKS_TAG_IMPORT_KEY_TYPE, 828 value: huks.HuksImportKeyType.HUKS_KEY_TYPE_KEY_PAIR, 829 }; 830 let options = { 831 properties: properties 832 }; 833 return options; 834}; 835 836function makeImportOptions() { 837 let properties = new Array(); 838 properties[0] = { 839 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 840 value: huks.HuksKeyAlg.HUKS_ALG_AES 841 }; 842 properties[1] = { 843 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 844 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 845 }; 846 properties[2] = { 847 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 848 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 849 }; 850 properties[3] = { 851 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 852 value: huks.HuksCipherMode.HUKS_MODE_CBC 853 }; 854 properties[4] = { 855 tag: huks.HuksTag.HUKS_TAG_PADDING, 856 value: huks.HuksKeyPadding.HUKS_PADDING_NONE 857 }; 858 properties[5] = { 859 tag: huks.HuksTag.HUKS_TAG_UNWRAP_ALGORITHM_SUITE, 860 value: huks.HuksUnwrapSuite.HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING 861 }; 862 let options = { 863 properties: properties 864 }; 865 return options; 866}; 867 868function huksImportWrappedKey() { 869 let genOptions = makeGenerateOptions(); 870 let importOptions = makeImportOptions(); 871 TestImportWrappedKeyFunc( 872 alias1, 873 alias2, 874 genOptions, 875 importOptions 876 ); 877} 878``` 879 880## huks.importWrappedKeyItem<sup>9+</sup> 881 882importWrappedKeyItem(keyAlias: string, wrappingKeyAlias: string, options: HuksOptions) : Promise\<void> 883 884导入加密密钥,使用Promise方式异步返回结果。 885 886**系统能力**:SystemCapability.Security.Huks 887 888**参数:** 889 890| 参数名 | 类型 | 必填 | 说明 | 891| ---------------- | --------------------------- | ---- | --------------------------------------------- | 892| keyAlias | string | 是 | 密钥别名,存放待导入密钥的别名。 | 893| wrappingKeyAlias | string | 是 | 密钥别名,对应密钥用于解密加密的密钥数据。 | 894| options | [HuksOptions](#huksoptions) | 是 | 用于导入时所需TAG和需要导入的加密的密钥数据。其中密钥使用的算法、密钥用途、密钥长度为必选参数。 | 895 896**示例:** 897 898```js 899/* 处理流程与callback类似,主要差异点为如下函数: */ 900async function TestImportWrappedFunc(alias, wrappingAlias, options) { 901 try { 902 await huks.importWrappedKeyItem(alias, wrappingAlias, options) 903 .then ((data) => { 904 console.info(`promise: importWrappedKeyItem success`); 905 }) 906 .catch(error => { 907 console.error(`promise: importWrappedKeyItem failed, code: ${error.code}, msg: ${error.message}`); 908 }); 909 } catch (error) { 910 console.error(`promise: importWrappedKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 911 } 912} 913``` 914 915## huks.exportKeyItem<sup>9+</sup> 916 917exportKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void 918 919导出密钥,使用Callback方式回调异步返回的结果。 920 921**系统能力**:SystemCapability.Security.Huks 922 923**参数:** 924 925| 参数名 | 类型 | 必填 | 说明 | 926| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | 927| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 928| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 929| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是 | 回调函数。不返回err值时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 | 930 931**示例:** 932 933```js 934/* 此处options选择emptyOptions来传空 */ 935let keyAlias = 'keyAlias'; 936let emptyOptions = { 937 properties: [] 938}; 939try { 940 huks.exportKeyItem(keyAlias, emptyOptions, function (error, data) { 941 if (error) { 942 console.error(`callback: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`); 943 } else { 944 console.info(`callback: exportKeyItem success, data = ${JSON.stringify(data)}`); 945 } 946 }); 947} catch (error) { 948 console.error(`callback: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 949} 950``` 951 952## huks.exportKeyItem<sup>9+</sup> 953 954exportKeyItem(keyAlias: string, options: HuksOptions) : Promise\<HuksReturnResult> 955 956导出密钥,使用Promise方式回调异步返回的结果。 957 958**系统能力**:SystemCapability.Security.Huks 959 960**参数:** 961 962| 参数名 | 类型 | 必填 | 说明 | 963| -------- | --------------------------- | ---- | -------------------------------------------- | 964| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 965| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 966 967**返回值:** 968 969| 类型 | 说明 | 970| ---------------------------------------------- | ------------------------------------------------------------ | 971| Promise<[HuksReturnResult](#huksreturnresult9)> | Promise对象。不返回err值时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 | 972 973**示例:** 974 975```js 976/* 此处options选择emptyOptions来传空 */ 977let keyAlias = 'keyAlias'; 978let emptyOptions = { 979 properties: [] 980}; 981try { 982 huks.exportKeyItem(keyAlias, emptyOptions) 983 .then ((data) => { 984 console.info(`promise: exportKeyItem success, data = ${JSON.stringify(data)}`); 985 }) 986 .catch(error => { 987 console.error(`promise: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`); 988 }); 989} catch (error) { 990 console.error(`promise: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 991} 992``` 993 994## huks.getKeyItemProperties<sup>9+</sup> 995 996getKeyItemProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void 997 998获取密钥属性,使用Callback回调异步返回结果。 999 1000**系统能力**:SystemCapability.Security.Huks 1001 1002**参数:** 1003 1004| 参数名 | 类型 | 必填 | 说明 | 1005| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | 1006| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 1007| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 1008| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是 | 回调函数。不返回err值时表示接口使用成功,其他时为错误。properties:返回值为生成密钥时所需参数。 | 1009 1010**示例:** 1011 1012```js 1013/* 此处options选择emptyOptions来传空 */ 1014let keyAlias = 'keyAlias'; 1015let emptyOptions = { 1016 properties: [] 1017}; 1018try { 1019 huks.getKeyItemProperties(keyAlias, emptyOptions, function (error, data) { 1020 if (error) { 1021 console.error(`callback: getKeyItemProperties failed, code: ${error.code}, msg: ${error.message}`); 1022 } else { 1023 console.info(`callback: getKeyItemProperties success, data = ${JSON.stringify(data)}`); 1024 } 1025 }); 1026} catch (error) { 1027 console.error(`callback: getKeyItemProperties input arg invalid, code: ${error.code}, msg: ${error.message}`); 1028} 1029``` 1030 1031## huks.getKeyItemProperties<sup>9+</sup> 1032 1033getKeyItemProperties(keyAlias: string, options: HuksOptions) : Promise\<HuksReturnResult> 1034 1035获取密钥属性,使用Promise回调异步返回结果。 1036 1037**系统能力**:SystemCapability.Security.Huks 1038 1039**参数:** 1040 1041| 参数名 | 类型 | 必填 | 说明 | 1042| -------- | --------------------------- | ---- | -------------------------------------------- | 1043| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 1044| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 1045 1046**返回值:** 1047 1048| 类型 | 说明 | 1049| ----------------------------------------------- | ------------------------------------------------------------ | 1050| Promise\<[HuksReturnResult](#huksreturnresult9)> | Promise对象。不返回err值时表示接口使用成功,其他时为错误。properties:返回值为生成密钥时所需参数。 | 1051 1052**示例:** 1053 1054```js 1055/* 此处options选择emptyOptions来传空 */ 1056let keyAlias = 'keyAlias'; 1057let emptyOptions = { 1058 properties: [] 1059}; 1060try { 1061 huks.getKeyItemProperties(keyAlias, emptyOptions) 1062 .then ((data) => { 1063 console.info(`promise: getKeyItemProperties success, data = ${JSON.stringify(data)}`); 1064 }) 1065 .catch(error => { 1066 console.error(`promise: getKeyItemProperties failed, code: ${error.code}, msg: ${error.message}`); 1067 }); 1068} catch (error) { 1069 console.error(`promise: getKeyItemProperties input arg invalid, code: ${error.code}, msg: ${error.message}`); 1070} 1071``` 1072 1073## huks.isKeyItemExist<sup>9+</sup> 1074 1075isKeyItemExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<boolean>) : void 1076 1077判断密钥是否存在,使用Callback回调异步返回结果 。 1078 1079**系统能力**:SystemCapability.Security.Huks 1080 1081**参数:** 1082 1083| 参数名 | 类型 | 必填 | 说明 | 1084| -------- | --------------------------- | ---- | --------------------------------------- | 1085| keyAlias | string | 是 | 所需查找的密钥的别名。 | 1086| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 1087| callback | AsyncCallback\<boolean> | 是 | 回调函数。FALSE代表密钥不存在,TRUE代表密钥存在。 | 1088 1089**示例:** 1090 1091```js 1092/* 此处options选择emptyOptions来传空 */ 1093let keyAlias = 'keyAlias'; 1094let emptyOptions = { 1095 properties: [] 1096}; 1097try { 1098 huks.isKeyItemExist(keyAlias, emptyOptions, function (error, data) { 1099 if (error) { 1100 console.error(`callback: isKeyItemExist failed, code: ${error.code}, msg: ${error.message}`); 1101 } else { 1102 console.info(`callback: isKeyItemExist success, data = ${JSON.stringify(data)}`); 1103 } 1104 }); 1105} catch (error) { 1106 console.error(`promise: isKeyItemExist input arg invalid, code: ${error.code}, msg: ${error.message}`); 1107} 1108``` 1109 1110## huks.isKeyItemExist<sup>9+</sup> 1111 1112isKeyItemExist(keyAlias: string, options: HuksOptions) : Promise\<boolean> 1113 1114判断密钥是否存在,使用Promise回调异步返回结果 。 1115 1116**系统能力**:SystemCapability.Security.Huks 1117 1118**参数:** 1119 1120| 参数名 | 类型 | 必填 | 说明 | 1121| -------- | --------------------------- | ---- | ------------------------ | 1122| keyAlias | string | 是 | 所需查找的密钥的别名。 | 1123| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 1124 1125**返回值:** 1126 1127| 类型 | 说明 | 1128| ----------------- | --------------------------------------- | 1129| Promise\<boolean> | Promise对象。FALSE代表密钥不存在,TRUE代表密钥存在。 | 1130 1131**示例:** 1132 1133```js 1134/* 此处options选择emptyOptions来传空 */ 1135let keyAlias = 'keyAlias'; 1136let emptyOptions = { 1137 properties: [] 1138}; 1139try { 1140 huks.isKeyItemExist(keyAlias, emptyOptions) 1141 .then ((data) => { 1142 console.info(`promise: isKeyItemExist success, data = ${JSON.stringify(data)}`); 1143 }) 1144 .catch(error => { 1145 console.error(`promise: isKeyItemExist failed, code: ${error.code}, msg: ${error.message}`); 1146 }); 1147} catch (error) { 1148 console.error(`promise: isKeyItemExist input arg invalid, code: ${error.code}, msg: ${error.message}`); 1149} 1150``` 1151 1152## huks.initSession<sup>9+</sup> 1153 1154initSession(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksSessionHandle>) : void 1155 1156initSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。 1157 1158**系统能力**:SystemCapability.Security.Huks 1159 1160**参数:** 1161 1162| 参数名 | 类型 | 必填 | 说明 | 1163| -------- | ------------------------------------------------------- | ---- | ---------------------------------------------------- | 1164| keyAlias | string | 是 | initSession操作密钥的别名。 | 1165| options | [HuksOptions](#huksoptions) | 是 | initSession操作的参数集合。 | 1166| callback | AsyncCallback\<[HuksSessionHandle](#hukssessionhandle9)> | 是 | 回调函数。将initSession操作返回的handle添加到密钥管理系统的回调。 | 1167 1168## huks.initSession<sup>9+</sup> 1169 1170initSession(keyAlias: string, options: HuksOptions) : Promise\<HuksSessionHandle> 1171 1172initSession操作密钥接口,使用Promise方式异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。 1173 1174**系统能力**:SystemCapability.Security.Huks 1175 1176**参数:** 1177 1178| 参数名 | 类型 | 必填 | 说明 | 1179| -------- | ------------------------------------------------- | ---- | ------------------------------------------------ | 1180| keyAlias | string | 是 | initSession操作密钥的别名。 | 1181| options | [HuksOptions](#huksoptions) | 是 | initSession参数集合。 | 1182 1183**返回值**: 1184 1185| 类型 | 说明 | 1186| ----------------------------------- | -------------------------------------------------- | 1187| Promise\<[HuksSessionHandle](#hukssessionhandle9)> | Promise对象。将initSession操作返回的handle添加到密钥管理系统的回调。 | 1188 1189## huks.updateSession<sup>9+</sup> 1190 1191updateSession(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void 1192 1193updateSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。 1194 1195**系统能力**:SystemCapability.Security.Huks 1196 1197**参数:** 1198 1199| 参数名 | 类型 | 必填 | 说明 | 1200| -------- | ---------------------------------------------------- | ---- | -------------------------------------------- | 1201| handle | number | 是 | updateSession操作的handle。 | 1202| options | [HuksOptions](#huksoptions) | 是 | updateSession的参数集合。 | 1203| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是 | 回调函数。将updateSession操作的结果添加到密钥管理系统的回调。 | 1204 1205 1206## huks.updateSession<sup>9+</sup> 1207 1208updateSession(handle: number, options: HuksOptions, token: Uint8Array, callback: AsyncCallback\<HuksReturnResult>) : void 1209 1210updateSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。 1211 1212**系统能力**:SystemCapability.Security.Huks 1213 1214**参数:** 1215 1216| 参数名 | 类型 | 必填 | 说明 | 1217| -------- | ---------------------------------------------------- | ---- | -------------------------------------------- | 1218| handle | number | 是 | updateSession操作的handle。 | 1219| options | [HuksOptions](#huksoptions) | 是 | updateSession操作的参数集合。 | 1220| token | Uint8Array | 是 | updateSession操作的token。 | 1221| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是 | 回调函数。将updateSession操作的结果添加到密钥管理系统的回调。 | 1222 1223## huks.updateSession<sup>9+</sup> 1224 1225updateSession(handle: number, options: HuksOptions, token?: Uint8Array) : Promise\<HuksReturnResult> 1226 1227updateSession操作密钥接口,使用Promise方式异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。 1228 1229**系统能力**:SystemCapability.Security.Huks 1230 1231**参数:** 1232 1233| 参数名 | 类型 | 必填 | 说明 | 1234| ------- | ---------------------------------------------- | ---- | -------------------------------------------- | 1235| handle | number | 是 | updateSession操作的handle。 | 1236| options | [HuksOptions](#huksoptions) | 是 | updateSession操作的参数集合。 | 1237| token | Uint8Array | 否 | updateSession操作的token。 | 1238 1239**返回值**: 1240 1241| 类型 | 说明 | 1242| ----------------------------------- | -------------------------------------------------- | 1243| Promise<[HuksReturnResult](#huksreturnresult9)> | Promise对象。将updateSession操作的结果添加到密钥管理系统的回调。 | 1244 1245## huks.finishSession<sup>9+</sup> 1246 1247finishSession(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksReturnResult>) : void 1248 1249finishSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。 1250 1251**系统能力**:SystemCapability.Security.Huks 1252 1253**参数:** 1254 1255| 参数名 | 类型 | 必填 | 说明 | 1256| -------- | ---------------------------------------------------- | ---- | -------------------------------------------- | 1257| handle | number | 是 | finishSession操作的handle。 | 1258| options | [HuksOptions](#huksoptions) | 是 | finishSession的参数集合。 | 1259| token | Uint8Array | 是 | finishSession操作的token。 | 1260| callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | 是 | 回调函数。将finishSession操作的结果添加到密钥管理系统的回调。 | 1261 1262## huks.finishSession<sup>9+</sup> 1263 1264finishSession(handle: number, options: HuksOptions, token: Uint8Array, callback: AsyncCallback\<HuksReturnResult>) : void 1265 1266finishSession操作密钥接口,使用Callback回调异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。 1267 1268**系统能力**:SystemCapability.Security.Huks 1269 1270**参数:** 1271 1272| 参数名 | 类型 | 必填 | 说明 | 1273| -------- | ----------------------------------------------------- | ---- | -------------------------------------------- | 1274| handle | number | 是 | finishSession操作的handle。 | 1275| options | [HuksOptions](#huksoptions) | 是 | finishSession的参数集合。 | 1276| token | Uint8Array | 是 | finishSession操作的token。 | 1277| callback | AsyncCallback\<[HuksReturnResult](#huksreturnresult9)> | 是 | 回调函数。将finishSession操作的结果添加到密钥管理系统的回调。 | 1278 1279## huks.finishSession<sup>9+</sup> 1280 1281finishSession(handle: number, options: HuksOptions, token?: Uint8Array) : Promise\<HuksReturnResult> 1282 1283finishSession操作密钥接口,使用Promise方式异步返回结果。huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用。 1284 1285**系统能力**:SystemCapability.Security.Huks 1286 1287**参数:** 1288 1289| 参数名 | 类型 | 必填 | 说明 | 1290| ------- | ----------------------------------------------- | ---- | ----------------------------------- | 1291| handle | number | 是 | finishSession操作的handle。 | 1292| options | [HuksOptions](#huksoptions) | 是 | finishSession操作的参数集合。 | 1293| token | Uint8Array | 否 | finishSession操作的token。 | 1294 1295**返回值**: 1296 1297| 类型 | 说明 | 1298| ----------------------------------- | -------------------------------------------------- | 1299| Promise\<[HuksReturnResult](#huksreturnresult9)> | Promise对象,用于获取异步返回结果。 | 1300 1301## huks.abortSession<sup>9+</sup> 1302 1303abortSession(handle: number, options: HuksOptions, callback: AsyncCallback\<void>) : void 1304 1305abortSession操作密钥接口,使用Callback回调异步返回结果 。 1306 1307**系统能力**:SystemCapability.Security.Huks 1308 1309**参数:** 1310 1311| 参数名 | 类型 | 必填 | 说明 | 1312| -------- | --------------------------- | ---- | ------------------------------------------- | 1313| handle | number | 是 | abortSession操作的handle。 | 1314| options | [HuksOptions](#huksoptions) | 是 | abortSession操作的参数集合。 | 1315| callback | AsyncCallback\<void> | 是 | 回调函数。将abortSession操作的结果添加到密钥管理系统的回调。 | 1316 1317**示例:** 1318 1319```js 1320/* huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用,当 1321 * huks.initSession和huks.updateSession 1322 * 以及huks.finishSession操作中的任一阶段发生错误时, 1323 * 都需要调用huks.abortSession来终止密钥的使用。 1324 * 1325 * 以下以RSA1024密钥的callback功能使用为例 1326 */ 1327function stringToUint8Array(str) { 1328 let arr = []; 1329 for (let i = 0, j = str.length; i < j; ++i) { 1330 arr.push(str.charCodeAt(i)); 1331 } 1332 let tmpUint8Array = new Uint8Array(arr); 1333 return tmpUint8Array; 1334} 1335 1336let keyAlias = "HuksDemoRSA"; 1337let properties = new Array(); 1338let options = { 1339 properties: properties, 1340 inData: new Uint8Array(0) 1341}; 1342let handle; 1343async function generateKey() { 1344 properties[0] = { 1345 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 1346 value: huks.HuksKeyAlg.HUKS_ALG_RSA 1347 }; 1348 properties[1] = { 1349 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 1350 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 1351 }; 1352 properties[2] = { 1353 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 1354 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT 1355 }; 1356 properties[3] = { 1357 tag: huks.HuksTag.HUKS_TAG_PADDING, 1358 value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5 1359 }; 1360 properties[4] = { 1361 tag: huks.HuksTag.HUKS_TAG_DIGEST, 1362 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 1363 }; 1364 properties[5] = { 1365 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 1366 value: huks.HuksCipherMode.HUKS_MODE_ECB, 1367 } 1368 1369 try { 1370 await huks.generateKeyItem(keyAlias, options, function (error, data) { 1371 if (error) { 1372 console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); 1373 } else { 1374 console.info(`callback: generateKeyItem success`); 1375 } 1376 }); 1377 } catch (error) { 1378 console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 1379 } 1380} 1381 1382async function huksInit() { 1383 console.log('enter huksInit'); 1384 try { 1385 huks.initSession(keyAlias, options, function (error, data) { 1386 if (error) { 1387 console.error(`callback: initSession failed, code: ${error.code}, msg: ${error.message}`); 1388 } else { 1389 console.info(`callback: initSession success, data = ${JSON.stringify(data)}`); 1390 handle = data.handle; 1391 } 1392 }); 1393 } catch (error) { 1394 console.error(`callback: initSession input arg invalid, code: ${error.code}, msg: ${error.message}`); 1395 } 1396} 1397 1398async function huksUpdate() { 1399 console.log('enter huksUpdate'); 1400 options.inData = stringToUint8Array("huksHmacTest"); 1401 try { 1402 huks.updateSession(handle, options, function (error, data) { 1403 if (error) { 1404 console.error(`callback: updateSession failed, code: ${error.code}, msg: ${error.message}`); 1405 } else { 1406 console.info(`callback: updateSession success, data = ${JSON.stringify(data)}`); 1407 } 1408 }); 1409 } catch (error) { 1410 console.error(`callback: updateSession input arg invalid, code: ${error.code}, msg: ${error.message}`); 1411 } 1412} 1413 1414async function huksFinish() { 1415 console.log('enter huksFinish'); 1416 options.inData = new Uint8Array(0); 1417 try { 1418 huks.finishSession(handle, options, function (error, data) { 1419 if (error) { 1420 console.error(`callback: finishSession failed, code: ${error.code}, msg: ${error.message}`); 1421 } else { 1422 console.info(`callback: finishSession success, data = ${JSON.stringify(data)}`); 1423 } 1424 }); 1425 } catch (error) { 1426 console.error(`callback: finishSession input arg invalid, code: ${error.code}, msg: ${error.message}`); 1427 } 1428} 1429 1430async function huksAbort() { 1431 console.log('enter huksAbort'); 1432 try { 1433 huks.abortSession(handle, options, function (error, data) { 1434 if (error) { 1435 console.error(`callback: abortSession failed, code: ${error.code}, msg: ${error.message}`); 1436 } else { 1437 console.info(`callback: abortSession success`); 1438 } 1439 }); 1440 } catch (error) { 1441 console.error(`callback: abortSession input arg invalid, code: ${error.code}, msg: ${error.message}`); 1442 } 1443} 1444``` 1445 1446## huks.abortSession<sup>9+</sup> 1447 1448abortSession(handle: number, options: HuksOptions) : Promise\<void>; 1449 1450abortSession操作密钥接口,使用Promise方式异步返回结果。 1451 1452**系统能力**:SystemCapability.Security.Huks 1453 1454**参数:** 1455 1456| 参数名 | 类型 | 必填 | 说明 | 1457| ------- | --------------------------- | ---- | ------------------------------------------- | 1458| handle | number | 是 | abortSession操作的handle。 | 1459| options | [HuksOptions](#huksoptions) | 是 | abortSession操作的参数集合。 | 1460 1461**返回值**: 1462 1463| 类型 | 说明 | 1464| ----------------------------------- | -------------------------------------------------- | 1465| Promise\<void> | Promise对象。将abortSession操作的结果添加到密钥管理系统的回调。 | 1466 1467**示例:** 1468 1469```js 1470/* huks.initSession, huks.updateSession, huks.finishSession为三段式接口,需要一起使用,当 1471 * huks.initSession和huks.updateSession 1472 * 以及huks.finishSession操作中的任一阶段发生错误时, 1473 * 都需要调用huks.abortSession来终止密钥的使用。 1474 * 1475 * 以下以RSA1024密钥的callback功能使用为例 1476 */ 1477function stringToUint8Array(str) { 1478 let arr = []; 1479 for (let i = 0, j = str.length; i < j; ++i) { 1480 arr.push(str.charCodeAt(i)); 1481 } 1482 let tmpUint8Array = new Uint8Array(arr); 1483 return tmpUint8Array; 1484} 1485 1486let keyAlias = "HuksDemoRSA"; 1487let properties = new Array(); 1488let options = { 1489 properties: properties, 1490 inData: new Uint8Array(0) 1491}; 1492let handle; 1493async function generateKey() { 1494 properties[0] = { 1495 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 1496 value: huks.HuksKeyAlg.HUKS_ALG_RSA 1497 }; 1498 properties[1] = { 1499 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 1500 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 1501 }; 1502 properties[2] = { 1503 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 1504 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT 1505 }; 1506 properties[3] = { 1507 tag: huks.HuksTag.HUKS_TAG_PADDING, 1508 value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5 1509 }; 1510 properties[4] = { 1511 tag: huks.HuksTag.HUKS_TAG_DIGEST, 1512 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 1513 }; 1514 properties[5] = { 1515 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 1516 value: huks.HuksCipherMode.HUKS_MODE_ECB, 1517 } 1518 1519 try { 1520 await huks.generateKeyItem(keyAlias, options) 1521 .then((data) => { 1522 console.info(`promise: generateKeyItem success`); 1523 }) 1524 .catch(error => { 1525 console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); 1526 }); 1527 } catch (error) { 1528 console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); 1529 } 1530} 1531 1532async function huksInit() { 1533 console.log('enter huksInit'); 1534 try { 1535 await huks.initSession(keyAlias, options) 1536 .then ((data) => { 1537 console.info(`promise: initSession success, data = ${JSON.stringify(data)}`); 1538 handle = data.handle; 1539 }) 1540 .catch(error => { 1541 console.error(`promise: initSession key failed, code: ${error.code}, msg: ${error.message}`); 1542 }); 1543 } catch (error) { 1544 console.error(`promise: initSession input arg invalid, code: ${error.code}, msg: ${error.message}`); 1545 } 1546} 1547 1548async function huksUpdate() { 1549 console.log('enter huksUpdate'); 1550 options.inData = stringToUint8Array("huksHmacTest"); 1551 try { 1552 await huks.updateSession(handle, options) 1553 .then ((data) => { 1554 console.info(`promise: updateSession success, data = ${JSON.stringify(data)}`); 1555 }) 1556 .catch(error => { 1557 console.error(`promise: updateSession failed, code: ${error.code}, msg: ${error.message}`); 1558 }); 1559 } catch (error) { 1560 console.error(`promise: updateSession input arg invalid, code: ${error.code}, msg: ${error.message}`); 1561 } 1562} 1563 1564async function huksFinish() { 1565 console.log('enter huksFinish'); 1566 options.inData = new Uint8Array(0); 1567 try { 1568 await huks.finishSession(handle, options) 1569 .then ((data) => { 1570 console.info(`promise: finishSession success, data = ${JSON.stringify(data)}`); 1571 }) 1572 .catch(error => { 1573 console.error(`promise: finishSession failed, code: ${error.code}, msg: ${error.message}`); 1574 }); 1575 } catch (error) { 1576 console.error(`promise: finishSession input arg invalid, code: ${error.code}, msg: ${error.message}`); 1577 } 1578} 1579 1580async function huksAbort() { 1581 console.log('enter huksAbort'); 1582 try { 1583 await huks.abortSession(handle, options) 1584 .then ((data) => { 1585 console.info(`promise: abortSession success`); 1586 }) 1587 .catch(error => { 1588 console.error(`promise: abortSession failed, code: ${error.code}, msg: ${error.message}`); 1589 }); 1590 } catch (error) { 1591 console.error(`promise: abortSession input arg invalid, code: ${error.code}, msg: ${error.message}`); 1592 } 1593} 1594``` 1595 1596 1597## HuksExceptionErrCode<sup>9+</sup> 1598 1599表示错误码的枚举以及对应的错误信息, 错误码表示错误类型,错误信息展示错误详情。 1600 1601关于错误码的具体信息,可在[错误码参考文档](../errorcodes/errorcode-huks.md)中查看。 1602 1603**系统能力**:SystemCapability.Security.Huks 1604 1605| 名称 | 值 | 说明 | 1606| ---------------------------------------------- | -------- |--------------------------- | 1607| HUKS_ERR_CODE_PERMISSION_FAIL | 201 | 权限错误导致失败。 | 1608| HUKS_ERR_CODE_ILLEGAL_ARGUMENT | 401 | 参数错误导致失败。 | 1609| HUKS_ERR_CODE_NOT_SUPPORTED_API | 801 | 不支持的API。 | 1610| HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED | 12000001 | 不支持的功能/特性。 | 1611| HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT | 12000002 | 缺少密钥算法参数。 | 1612| HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT | 12000003 | 无效密钥算法参数。 | 1613| HUKS_ERR_CODE_FILE_OPERATION_FAIL | 12000004 | 文件操作失败。 | 1614| HUKS_ERR_CODE_COMMUNICATION_FAIL | 12000005 | 通信失败。 | 1615| HUKS_ERR_CODE_CRYPTO_FAIL | 12000006 | 算法库操作失败。 | 1616| HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED | 12000007 | 密钥访问失败-密钥访问失效。 | 1617| HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED | 12000008 | 密钥访问失败-密钥认证失败。 | 1618| HUKS_ERR_CODE_KEY_AUTH_TIME_OUT | 12000009 | 密钥访问失败-密钥访问超时。 | 1619| HUKS_ERR_CODE_SESSION_LIMIT | 12000010 | 密钥操作会话数已达上限。 | 1620| HUKS_ERR_CODE_ITEM_NOT_EXIST | 12000011 | 目标对象不存在。 | 1621| HUKS_ERR_CODE_EXTERNAL_ERROR | 12000012 | 外部错误。 | 1622| HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST | 12000013 | 缺失所需凭据。 | 1623| HUKS_ERR_CODE_INSUFFICIENT_MEMORY | 12000014 | 内存不足。 | 1624| HUKS_ERR_CODE_CALL_SERVICE_FAILED | 12000015 | 调用其他系统服务失败。 | 1625 1626## HuksKeyPurpose 1627 1628表示密钥用途。 1629 1630**系统能力**:SystemCapability.Security.Huks 1631 1632| 名称 | 值 | 说明 | 1633| ------------------------ | ---- | -------------------------------- | 1634| HUKS_KEY_PURPOSE_ENCRYPT | 1 | 表示密钥用于对明文进行加密操作。 | 1635| HUKS_KEY_PURPOSE_DECRYPT | 2 | 表示密钥用于对密文进行解密操作。 | 1636| HUKS_KEY_PURPOSE_SIGN | 4 | 表示密钥用于对数据进行签名。 | 1637| HUKS_KEY_PURPOSE_VERIFY | 8 | 表示密钥用于验证签名后的数据。 | 1638| HUKS_KEY_PURPOSE_DERIVE | 16 | 表示密钥用于派生密钥。 | 1639| HUKS_KEY_PURPOSE_WRAP | 32 | 表示密钥用于加密导出。 | 1640| HUKS_KEY_PURPOSE_UNWRAP | 64 | 表示密钥加密导入。 | 1641| HUKS_KEY_PURPOSE_MAC | 128 | 表示密钥用于生成mac消息验证码。 | 1642| HUKS_KEY_PURPOSE_AGREE | 256 | 表示密钥用于进行密钥协商。 | 1643 1644## HuksKeyDigest 1645 1646表示摘要算法。 1647 1648**系统能力**:SystemCapability.Security.Huks 1649 1650| 名称 | 值 | 说明 | 1651| ---------------------- | ---- | ---------------------------------------- | 1652| HUKS_DIGEST_NONE | 0 | 表示无摘要算法。 | 1653| HUKS_DIGEST_MD5 | 1 | 表示MD5摘要算法。 | 1654| HUKS_DIGEST_SM3<sup>9+</sup> | 2 | 表示SM3摘要算法。 | 1655| HUKS_DIGEST_SHA1 | 10 | 表示SHA1摘要算法。 | 1656| HUKS_DIGEST_SHA224 | 11 | 表示SHA224摘要算法。 | 1657| HUKS_DIGEST_SHA256 | 12 | 表示SHA256摘要算法。 | 1658| HUKS_DIGEST_SHA384 | 13 | 表示SHA384摘要算法。 | 1659| HUKS_DIGEST_SHA512 | 14 | 表示SHA512摘要算法。 | 1660 1661## HuksKeyPadding 1662 1663表示补齐算法。 1664 1665**系统能力**:SystemCapability.Security.Huks 1666 1667| 名称 | 值 | 说明 | 1668| ---------------------- | ---- | ---------------------------------------- | 1669| HUKS_PADDING_NONE | 0 | 表示不使用补齐算法。 | 1670| HUKS_PADDING_OAEP | 1 | 表示使用OAEP补齐算法。 | 1671| HUKS_PADDING_PSS | 2 | 表示使用PSS补齐算法。 | 1672| HUKS_PADDING_PKCS1_V1_5 | 3 | 表示使用PKCS1_V1_5补齐算法。 | 1673| HUKS_PADDING_PKCS5 | 4 | 表示使用PKCS5补齐算法。 | 1674| HUKS_PADDING_PKCS7 | 5 | 表示使用PKCS7补齐算法。 | 1675 1676## HuksCipherMode 1677 1678表示加密模式。 1679 1680**系统能力**:SystemCapability.Security.Huks 1681 1682| 名称 | 值 | 说明 | 1683| ------------- | ---- | --------------------- | 1684| HUKS_MODE_ECB | 1 | 表示使用ECB加密模式。 | 1685| HUKS_MODE_CBC | 2 | 表示使用CBC加密模式。 | 1686| HUKS_MODE_CTR | 3 | 表示使用CTR加密模式。 | 1687| HUKS_MODE_OFB | 4 | 表示使用OFB加密模式。 | 1688| HUKS_MODE_CCM | 31 | 表示使用CCM加密模式。 | 1689| HUKS_MODE_GCM | 32 | 表示使用GCM加密模式。 | 1690 1691## HuksKeySize 1692 1693表示密钥长度。 1694 1695**系统能力**:SystemCapability.Security.Huks 1696 1697| 名称 | 值 | 说明 | 1698| ---------------------------------- | ---- | ------------------------------------------ | 1699| HUKS_RSA_KEY_SIZE_512 | 512 | 表示使用RSA算法的密钥长度为512bit。 | 1700| HUKS_RSA_KEY_SIZE_768 | 768 | 表示使用RSA算法的密钥长度为768bit。 | 1701| HUKS_RSA_KEY_SIZE_1024 | 1024 | 表示使用RSA算法的密钥长度为1024bit。 | 1702| HUKS_RSA_KEY_SIZE_2048 | 2048 | 表示使用RSA算法的密钥长度为2048bit。 | 1703| HUKS_RSA_KEY_SIZE_3072 | 3072 | 表示使用RSA算法的密钥长度为3072bit。 | 1704| HUKS_RSA_KEY_SIZE_4096 | 4096 | 表示使用RSA算法的密钥长度为4096bit。 | 1705| HUKS_ECC_KEY_SIZE_224 | 224 | 表示使用ECC算法的密钥长度为224bit。 | 1706| HUKS_ECC_KEY_SIZE_256 | 256 | 表示使用ECC算法的密钥长度为256bit。 | 1707| HUKS_ECC_KEY_SIZE_384 | 384 | 表示使用ECC算法的密钥长度为384bit。 | 1708| HUKS_ECC_KEY_SIZE_521 | 521 | 表示使用ECC算法的密钥长度为521bit。 | 1709| HUKS_AES_KEY_SIZE_128 | 128 | 表示使用AES算法的密钥长度为128bit。 | 1710| HUKS_AES_KEY_SIZE_192 | 192 | 表示使用AES算法的密钥长度为196bit。 | 1711| HUKS_AES_KEY_SIZE_256 | 256 | 表示使用AES算法的密钥长度为256bit。 | 1712| HUKS_AES_KEY_SIZE_512 | 512 | 表示使用AES算法的密钥长度为512bit。 | 1713| HUKS_CURVE25519_KEY_SIZE_256 | 256 | 表示使用CURVE25519算法的密钥长度为256bit。 | 1714| HUKS_DH_KEY_SIZE_2048 | 2048 | 表示使用DH算法的密钥长度为2048bit。 | 1715| HUKS_DH_KEY_SIZE_3072 | 3072 | 表示使用DH算法的密钥长度为3072bit。 | 1716| HUKS_DH_KEY_SIZE_4096 | 4096 | 表示使用DH算法的密钥长度为4096bit。 | 1717| HUKS_SM2_KEY_SIZE_256<sup>9+</sup> | 256 | 表示SM2算法的密钥长度为256bit。 | 1718| HUKS_SM4_KEY_SIZE_128<sup>9+</sup> | 128 | 表示SM4算法的密钥长度为128bit。 | 1719 1720## HuksKeyAlg 1721 1722表示密钥使用的算法。 1723 1724**系统能力**:SystemCapability.Security.Huks 1725 1726| 名称 | 值 | 说明 | 1727| ------------------------- | ---- | --------------------- | 1728| HUKS_ALG_RSA | 1 | 表示使用RSA算法。 | 1729| HUKS_ALG_ECC | 2 | 表示使用ECC算法。 | 1730| HUKS_ALG_DSA | 3 | 表示使用DSA算法。 | 1731| HUKS_ALG_AES | 20 | 表示使用AES算法。 | 1732| HUKS_ALG_HMAC | 50 | 表示使用HMAC算法。 | 1733| HUKS_ALG_HKDF | 51 | 表示使用HKDF算法。 | 1734| HUKS_ALG_PBKDF2 | 52 | 表示使用PBKDF2算法。 | 1735| HUKS_ALG_ECDH | 100 | 表示使用ECDH算法。 | 1736| HUKS_ALG_X25519 | 101 | 表示使用X25519算法。 | 1737| HUKS_ALG_ED25519 | 102 | 表示使用ED25519算法。 | 1738| HUKS_ALG_DH | 103 | 表示使用DH算法。 | 1739| HUKS_ALG_SM2<sup>9+</sup> | 150 | 表示使用SM2算法。 | 1740| HUKS_ALG_SM3<sup>9+</sup> | 151 | 表示使用SM3算法。 | 1741| HUKS_ALG_SM4<sup>9+</sup> | 152 | 表示使用SM4算法。 | 1742 1743## HuksKeyGenerateType 1744 1745表示生成密钥的类型。 1746 1747**系统能力**:SystemCapability.Security.Huks 1748 1749| 名称 | 值 | 说明 | 1750| ------------------------------ | ---- | ---------------- | 1751| HUKS_KEY_GENERATE_TYPE_DEFAULT | 0 | 默认生成的密钥。 | 1752| HUKS_KEY_GENERATE_TYPE_DERIVE | 1 | 派生生成的密钥。 | 1753| HUKS_KEY_GENERATE_TYPE_AGREE | 2 | 协商生成的密钥。 | 1754 1755## HuksKeyFlag 1756 1757表示密钥的产生方式。 1758 1759**系统能力**:SystemCapability.Security.Huks 1760 1761| 名称 | 值 | 说明 | 1762| -------------------------- | ---- | ------------------------------------ | 1763| HUKS_KEY_FLAG_IMPORT_KEY | 1 | 表示通过导入公钥接口导入的密钥。 | 1764| HUKS_KEY_FLAG_GENERATE_KEY | 2 | 表示通过生成密钥接口生成的密钥。 | 1765| HUKS_KEY_FLAG_AGREE_KEY | 3 | 表示通过生成密钥协商接口生成的密钥。 | 1766| HUKS_KEY_FLAG_DERIVE_KEY | 4 | 表示通过生成密钥派生接口生成的密钥。 | 1767 1768## HuksKeyStorageType 1769 1770表示密钥存储方式。 1771 1772**系统能力**:SystemCapability.Security.Huks 1773 1774| 名称 | 值 | 说明 | 1775| ----------------------- | ---- | ------------------------------ | 1776| HUKS_STORAGE_TEMP | 0 | 表示通过本地直接管理密钥。 | 1777| HUKS_STORAGE_PERSISTENT | 1 | 表示通过HUKS service管理密钥。 | 1778 1779## HuksSendType 1780 1781表示发送Tag的方式。 1782 1783**系统能力**:SystemCapability.Security.Huks 1784 1785| 名称 | 值 | 说明 | 1786| -------------------- | ---- | ----------------- | 1787| HUKS_SEND_TYPE_ASYNC | 0 | 表示异步发送TAG。 | 1788| HUKS_SEND_TYPE_SYNC | 1 | 表示同步发送TAG。 | 1789 1790## HuksUnwrapSuite<sup>9+</sup> 1791 1792表示导入加密密钥的算法套件。 1793 1794**系统能力**:SystemCapability.Security.Huks 1795 1796| 名称 | 值 | 说明 | 1797| ---------------------------------------------- | ---- | ----------------------------------------------------- | 1798| HUKS_UNWRAP_SUITE_X25519_AES_256_GCM_NOPADDING | 1 | 导入加密密钥时,X25519密钥协商后使用AES-256 GCM加密。 | 1799| HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING | 2 | 导入加密密钥时,ECDH密钥协商后使用AES-256 GCM加密。 | 1800 1801## HuksImportKeyType<sup>9+</sup> 1802 1803表示导入密钥的密钥类型,默认为导入公钥,导入对称密钥时不需要该字段。 1804 1805**系统能力**:SystemCapability.Security.Huks 1806 1807| 名称 | 值 | 说明 | 1808| ------------------------- | ---- | ------------------------------ | 1809| HUKS_KEY_TYPE_PUBLIC_KEY | 0 | 表示导入的密钥类型为公钥。 | 1810| HUKS_KEY_TYPE_PRIVATE_KEY | 1 | 表示导入的密钥类型为私钥。 | 1811| HUKS_KEY_TYPE_KEY_PAIR | 2 | 表示导入的密钥类型为公私钥对。 | 1812 1813## HuksUserAuthType<sup>9+</sup> 1814 1815表示用户认证类型。 1816 1817**系统能力**:SystemCapability.Security.Huks 1818 1819| 名称 | 值 | 说明 | 1820| ------------------------------- | ---- | ------------------------- | 1821| HUKS_USER_AUTH_TYPE_FINGERPRINT | 1 << 0 | 表示用户认证类型为指纹。 | 1822| HUKS_USER_AUTH_TYPE_FACE | 1 << 1 | 表示用户认证类型为人脸 。 | 1823| HUKS_USER_AUTH_TYPE_PIN | 1 << 2 | 表示用户认证类型为PIN码。 | 1824 1825## HuksAuthAccessType<sup>9+</sup> 1826 1827表示安全访问控制类型。 1828 1829**系统能力**:SystemCapability.Security.Huks 1830 1831| 名称 | 值 | 说明 | 1832| --------------------------------------- | ---- | ------------------------------------------------ | 1833| HUKS_AUTH_ACCESS_INVALID_CLEAR_PASSWORD | 1 << 0 | 表示安全访问控制类型为清除密码后密钥无效。 | 1834| HUKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL | 1 << 1 | 表示安全访问控制类型为新录入生物特征后密钥无效。 | 1835 1836## HuksChallengeType<sup>9+</sup> 1837 1838表示密钥使用时生成challenge的类型。 1839 1840**系统能力**:SystemCapability.Security.Huks 1841 1842| 名称 | 值 | 说明 | 1843| ------------------------------- | ---- | ------------------------------ | 1844| HUKS_CHALLENGE_TYPE_NORMAL | 0 | 表示challenge为普通类型,默认32字节。 | 1845| HUKS_CHALLENGE_TYPE_CUSTOM | 1 | 表示challenge为用户自定义类型。支持使用多个密钥仅一次认证。 | 1846| HUKS_CHALLENGE_TYPE_NONE | 2 | 表示免challenge类型。 | 1847 1848## HuksChallengePosition<sup>9+</sup> 1849 1850表示challenge类型为用户自定义类型时,生成的challenge有效长度仅为8字节连续的数据,且仅支持4种位置 。 1851 1852**系统能力**:SystemCapability.Security.Huks 1853 1854| 名称 | 值 | 说明 | 1855| ------------------------------- | ---- | ------------------------------ | 1856| HUKS_CHALLENGE_POS_0 | 0 | 表示0~7字节为当前密钥的有效challenge。 | 1857| HUKS_CHALLENGE_POS_1 | 1 | 表示8~15字节为当前密钥的有效challenge。 | 1858| HUKS_CHALLENGE_POS_2 | 2 | 表示16~23字节为当前密钥的有效challenge。 | 1859| HUKS_CHALLENGE_POS_3 | 3 | 表示24~31字节为当前密钥的有效challenge。 | 1860 1861## HuksSecureSignType<sup>9+</sup> 1862 1863表示生成或导入密钥时,指定该密钥的签名类型。 1864 1865**系统能力**:SystemCapability.Security.Huks 1866 1867| 名称 | 值 | 说明 | 1868| ------------------------------ | ---- | ------------------------------------------------------------ | 1869| HUKS_SECURE_SIGN_WITH_AUTHINFO | 1 | 表示签名类型为携带认证信息。生成或导入密钥时指定该字段,则在使用密钥进行签名时,对待签名的数据添加认证信息后进行签名。 | 1870 1871## HuksTagType 1872 1873表示Tag的数据类型。 1874 1875**系统能力**:SystemCapability.Security.Huks 1876 1877| 名称 | 值 | 说明 | 1878| --------------------- | ------- | --------------------------------------- | 1879| HUKS_TAG_TYPE_INVALID | 0 << 28 | 表示非法的Tag类型。 | 1880| HUKS_TAG_TYPE_INT | 1 << 28 | 表示该Tag的数据类型为int类型的number。 | 1881| HUKS_TAG_TYPE_UINT | 2 << 28 | 表示该Tag的数据类型为uint类型的number。 | 1882| HUKS_TAG_TYPE_ULONG | 3 << 28 | 表示该Tag的数据类型为bigint。 | 1883| HUKS_TAG_TYPE_BOOL | 4 << 28 | 表示该Tag的数据类型为boolean。 | 1884| HUKS_TAG_TYPE_BYTES | 5 << 28 | 表示该Tag的数据类型为Uint8Array。 | 1885 1886## HuksTag 1887 1888表示调用参数的Tag。 1889 1890**系统能力**:SystemCapability.Security.Huks 1891 1892| 名称 | 值 | 说明 | 1893| -------------------------------------------- | ---------------------------------------- | -------------------------------------- | 1894| HUKS_TAG_INVALID | HuksTagType.HUKS_TAG_TYPE_INVALID \| 0 | 表示非法的Tag。 | 1895| HUKS_TAG_ALGORITHM | HuksTagType.HUKS_TAG_TYPE_UINT \| 1 | 表示算法的Tag。 | 1896| HUKS_TAG_PURPOSE | HuksTagType.HUKS_TAG_TYPE_UINT \| 2 | 表示密钥用途的Tag。 | 1897| HUKS_TAG_KEY_SIZE | HuksTagType.HUKS_TAG_TYPE_UINT \| 3 | 表示密钥长度的Tag。 | 1898| HUKS_TAG_DIGEST | HuksTagType.HUKS_TAG_TYPE_UINT \| 4 | 表示摘要算法的Tag。 | 1899| HUKS_TAG_PADDING | HuksTagType.HUKS_TAG_TYPE_UINT \| 5 | 表示补齐算法的Tag。 | 1900| HUKS_TAG_BLOCK_MODE | HuksTagType.HUKS_TAG_TYPE_UINT \| 6 | 表示加密模式的Tag。 | 1901| HUKS_TAG_KEY_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 7 | 表示密钥类型的Tag。 | 1902| HUKS_TAG_ASSOCIATED_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 8 | 表示附加身份验证数据的Tag。 | 1903| HUKS_TAG_NONCE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 9 | 表示密钥加解密的字段。 | 1904| HUKS_TAG_IV | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10 | 表示密钥初始化的向量。 | 1905| HUKS_TAG_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 11 | 表示密钥派生时的info。 | 1906| HUKS_TAG_SALT | HuksTagType.HUKS_TAG_TYPE_BYTES \| 12 | 表示密钥派生时的盐值。 | 1907| HUKS_TAG_PWD | HuksTagType.HUKS_TAG_TYPE_BYTES \| 13 | 表示密钥派生时的password。 | 1908| HUKS_TAG_ITERATION | HuksTagType.HUKS_TAG_TYPE_UINT \| 14 | 表示密钥派生时的迭代次数。 | 1909| HUKS_TAG_KEY_GENERATE_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 15 | 表示生成密钥类型的Tag。 | 1910| HUKS_TAG_DERIVE_MAIN_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 16 | 表示密钥派生时的主密钥。 | 1911| HUKS_TAG_DERIVE_FACTOR | HuksTagType.HUKS_TAG_TYPE_BYTES \| 17 | 表示密钥派生时的派生因子。 | 1912| HUKS_TAG_DERIVE_ALG | HuksTagType.HUKS_TAG_TYPE_UINT \| 18 | 表示密钥派生时的算法类型。 | 1913| HUKS_TAG_AGREE_ALG | HuksTagType.HUKS_TAG_TYPE_UINT \| 19 | 表示密钥协商时的算法类型。 | 1914| HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 20 | 表示密钥协商时的公钥别名。 | 1915| HUKS_TAG_AGREE_PRIVATE_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 21 | 表示密钥协商时的私钥别名。 | 1916| HUKS_TAG_AGREE_PUBLIC_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 22 | 表示密钥协商时的公钥。 | 1917| HUKS_TAG_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 23 | 表示密钥别名。 | 1918| HUKS_TAG_DERIVE_KEY_SIZE | HuksTagType.HUKS_TAG_TYPE_UINT \| 24 | 表示派生密钥的大小。 | 1919| HUKS_TAG_IMPORT_KEY_TYPE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 25 | 表示导入的密钥类型。 | 1920| HUKS_TAG_UNWRAP_ALGORITHM_SUITE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 26 | 表示导入加密密钥的套件。 | 1921| HUKS_TAG_ACTIVE_DATETIME | HuksTagType.HUKS_TAG_TYPE_ULONG \| 201 | 预留。 | 1922| HUKS_TAG_ORIGINATION_EXPIRE_DATETIME | HuksTagType.HUKS_TAG_TYPE_ULONG \| 202 | 预留。 | 1923| HUKS_TAG_USAGE_EXPIRE_DATETIME | HuksTagType.HUKS_TAG_TYPE_ULONG \| 203 | 预留。 | 1924| HUKS_TAG_CREATION_DATETIME | HuksTagType.HUKS_TAG_TYPE_ULONG \| 204 | 预留。 | 1925| HUKS_TAG_ALL_USERS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 301 | 预留。 | 1926| HUKS_TAG_USER_ID | HuksTagType.HUKS_TAG_TYPE_UINT \| 302 | 预留。 | 1927| HUKS_TAG_NO_AUTH_REQUIRED | HuksTagType.HUKS_TAG_TYPE_BOOL \| 303 | 预留。 | 1928| HUKS_TAG_USER_AUTH_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 304 | 表示用户认证类型。从[HuksUserAuthType](#huksuserauthtype9)中选择,需要与安全访问控制类型同时设置。支持同时指定两种用户认证类型,如:安全访问控制类型指定为HKS_SECURE_ACCESS_INVALID_NEW_BIO_ENROLL时,密钥访问认证类型可以指定以下三种: HKS_USER_AUTH_TYPE_FACE 、HKS_USER_AUTH_TYPE_FINGERPRINT、HKS_USER_AUTH_TYPE_FACE \| HKS_USER_AUTH_TYPE_FINGERPRINT | 1929| HUKS_TAG_AUTH_TIMEOUT | HuksTagType.HUKS_TAG_TYPE_UINT \| 305 | 预留。 | 1930| HUKS_TAG_AUTH_TOKEN | HuksTagType.HUKS_TAG_TYPE_BYTES \| 306 | 预留。 | 1931| HUKS_TAG_KEY_AUTH_ACCESS_TYPE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 307 | 表示安全访问控制类型。从[HuksAuthAccessType](#huksauthaccesstype9)中选择,需要和用户认证类型同时设置。 | 1932| HUKS_TAG_KEY_SECURE_SIGN_TYPE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 308 | 表示生成或导入密钥时,指定该密钥的签名类型。 | 1933| HUKS_TAG_CHALLENGE_TYPE<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 309 | 表示密钥使用时生成的challenge类型。从[HuksChallengeType](#hukschallengetype9)中选择 | 1934| HUKS_TAG_CHALLENGE_POS<sup>9+</sup> | HuksTagType.HUKS_TAG_TYPE_UINT \| 310 | 表示challenge类型为用户自定义类型时,huks产生的challenge有效长度仅为8字节连续的数据。从[HuksChallengePosition](#hukschallengeposition9)中选择。 | 1935| HUKS_TAG_ATTESTATION_CHALLENGE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 501 | 表示attestation时的挑战值。 | 1936| HUKS_TAG_ATTESTATION_APPLICATION_ID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 502 | 表示attestation时拥有该密钥的application的Id。 | 1937| HUKS_TAG_ATTESTATION_ID_BRAND | HuksTagType.HUKS_TAG_TYPE_BYTES \| 503 | 表示设备的品牌。 | 1938| HUKS_TAG_ATTESTATION_ID_DEVICE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 504 | 表示设备的设备ID。 | 1939| HUKS_TAG_ATTESTATION_ID_PRODUCT | HuksTagType.HUKS_TAG_TYPE_BYTES \| 505 | 表示设备的产品名。 | 1940| HUKS_TAG_ATTESTATION_ID_SERIAL | HuksTagType.HUKS_TAG_TYPE_BYTES \| 506 | 表示设备的SN号。 | 1941| HUKS_TAG_ATTESTATION_ID_IMEI | HuksTagType.HUKS_TAG_TYPE_BYTES \| 507 | 表示设备的IMEI号。 | 1942| HUKS_TAG_ATTESTATION_ID_MEID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 508 | 表示设备的MEID号。 | 1943| HUKS_TAG_ATTESTATION_ID_MANUFACTURER | HuksTagType.HUKS_TAG_TYPE_BYTES \| 509 | 表示设备的制造商。 | 1944| HUKS_TAG_ATTESTATION_ID_MODEL | HuksTagType.HUKS_TAG_TYPE_BYTES \| 510 | 表示设备的型号。 | 1945| HUKS_TAG_ATTESTATION_ID_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 511 | 表示attestation时的密钥别名。 | 1946| HUKS_TAG_ATTESTATION_ID_SOCID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 512 | 表示设备的SOCID。 | 1947| HUKS_TAG_ATTESTATION_ID_UDID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 513 | 表示设备的UDID。 | 1948| HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 514 | 表示attestation时的安全凭据。 | 1949| HUKS_TAG_ATTESTATION_ID_VERSION_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 515 | 表示attestation时的版本号。 | 1950| HUKS_TAG_IS_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1001 | 表示是否使用生成key时传入的别名的Tag。 | 1951| HUKS_TAG_KEY_STORAGE_FLAG | HuksTagType.HUKS_TAG_TYPE_UINT \| 1002 | 表示密钥存储方式的Tag。 | 1952| HUKS_TAG_IS_ALLOWED_WRAP | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1003 | 预留。 | 1953| HUKS_TAG_KEY_WRAP_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 1004 | 预留。 | 1954| HUKS_TAG_KEY_AUTH_ID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1005 | 预留。 | 1955| HUKS_TAG_KEY_ROLE | HuksTagType.HUKS_TAG_TYPE_UINT \| 1006 | 预留。 | 1956| HUKS_TAG_KEY_FLAG | HuksTagType.HUKS_TAG_TYPE_UINT \| 1007 | 表示密钥标志的Tag。 | 1957| HUKS_TAG_IS_ASYNCHRONIZED | HuksTagType.HUKS_TAG_TYPE_UINT \| 1008 | 预留。 | 1958| HUKS_TAG_SECURE_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1009 | 预留。 | 1959| HUKS_TAG_SECURE_KEY_UUID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1010 | 预留。 | 1960| HUKS_TAG_KEY_DOMAIN | HuksTagType.HUKS_TAG_TYPE_UINT \| 1011 | 预留。 | 1961| HUKS_TAG_PROCESS_NAME | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10001 | 表示进程名称的Tag。 | 1962| HUKS_TAG_PACKAGE_NAME | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10002 | 预留。 | 1963| HUKS_TAG_ACCESS_TIME | HuksTagType.HUKS_TAG_TYPE_UINT \| 10003 | 预留。 | 1964| HUKS_TAG_USES_TIME | HuksTagType.HUKS_TAG_TYPE_UINT \| 10004 | 预留。 | 1965| HUKS_TAG_CRYPTO_CTX | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10005 | 预留。 | 1966| HUKS_TAG_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10006 | 预留。 | 1967| HUKS_TAG_KEY_VERSION | HuksTagType.HUKS_TAG_TYPE_UINT \| 10007 | 表示密钥版本的Tag。 | 1968| HUKS_TAG_PAYLOAD_LEN | HuksTagType.HUKS_TAG_TYPE_UINT \| 10008 | 预留。 | 1969| HUKS_TAG_AE_TAG | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10009 | 预留。 | 1970| HUKS_TAG_IS_KEY_HANDLE | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10010 | 预留。 | 1971| HUKS_TAG_OS_VERSION | HuksTagType.HUKS_TAG_TYPE_UINT \| 10101 | 表示操作系统版本的Tag。 | 1972| HUKS_TAG_OS_PATCHLEVEL | HuksTagType.HUKS_TAG_TYPE_UINT \| 10102 | 表示操作系统补丁级别的Tag。 | 1973| HUKS_TAG_SYMMETRIC_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20001 | 预留。 | 1974| HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20002 | 预留。 | 1975| HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20003 | 预留。 | 1976 1977## huks.generateKey<sup>(deprecated)</sup> 1978 1979generateKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 1980 1981生成密钥,使用Callback回调异步返回结果。 1982 1983> **说明:** 从API Version 9开始废弃,建议使用[huks.generateKeyItem<sup>9+</sup>](#huksgeneratekeyitem9)替代。 1984 1985**系统能力**:SystemCapability.Security.Huks 1986 1987**参数:** 1988 1989| 参数名 | 类型 | 必填 | 说明 | 1990| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 1991| keyAlias | string | 是 | 别名。 | 1992| options | [HuksOptions](#huksoptions) | 是 | 用于存放生成key所需TAG。 | 1993| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。返回HUKS_SUCCESS时表示接口使用成功,其余结果请参考HuksResult进行错误码查询。 | 1994 1995**示例:** 1996 1997```js 1998/* 以生成RSA512密钥为例 */ 1999let keyAlias = 'keyAlias'; 2000let properties = new Array(); 2001properties[0] = { 2002 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 2003 value: huks.HuksKeyAlg.HUKS_ALG_RSA 2004}; 2005properties[1] = { 2006 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 2007 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_512 2008}; 2009properties[2] = { 2010 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 2011 value: 2012huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | 2013huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 2014}; 2015properties[3] = { 2016 tag: huks.HuksTag.HUKS_TAG_PADDING, 2017 value: huks.HuksKeyPadding.HUKS_PADDING_OAEP 2018}; 2019properties[4] = { 2020 tag: huks.HuksTag.HUKS_TAG_DIGEST, 2021 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 2022}; 2023let options = { 2024 properties: properties 2025}; 2026huks.generateKey(keyAlias, options, function (err, data){}); 2027``` 2028 2029## huks.generateKey<sup>(deprecated)</sup> 2030 2031generateKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 2032 2033生成密钥,使用Promise方式异步返回结果。 2034 2035> **说明:** 从API Version 9开始废弃,建议使用[huks.generateKeyItem<sup>9+</sup>](#huksgeneratekeyitem9-1)替代。 2036 2037**系统能力**:SystemCapability.Security.Huks 2038 2039**参数:** 2040 2041| 参数名 | 类型 | 必填 | 说明 | 2042| -------- | --------------------------- | ---- | ------------------------ | 2043| keyAlias | string | 是 | 密钥别名。 | 2044| options | [HuksOptions](#huksoptions) | 是 | 用于存放生成key所需TAG。 | 2045 2046**返回值**: 2047 2048| 类型 | 说明 | 2049| ----------------------------------- | -------------------------------------------------- | 2050| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 2051 2052**示例:** 2053 2054```js 2055/* 以生成ECC256密钥为例 */ 2056let keyAlias = 'keyAlias'; 2057let properties = new Array(); 2058properties[0] = { 2059 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 2060 value: huks.HuksKeyAlg.HUKS_ALG_ECC 2061}; 2062properties[1] = { 2063 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 2064 value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 2065}; 2066properties[2] = { 2067 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 2068 value: 2069huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | 2070huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY 2071}; 2072properties[3] = { 2073 tag: huks.HuksTag.HUKS_TAG_DIGEST, 2074 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 2075}; 2076let options = { 2077 properties: properties 2078}; 2079let result = huks.generateKey(keyAlias, options); 2080``` 2081 2082## huks.deleteKey<sup>(deprecated)</sup> 2083 2084deleteKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 2085 2086删除密钥,使用Callback回调异步返回结果。 2087 2088> **说明:** 从API Version 9开始废弃,建议使用[huks.deleteKeyItem<sup>9+</sup>](#huksdeletekeyitem9)替代。 2089 2090**系统能力**:SystemCapability.Security.Huks 2091 2092**参数:** 2093 2094| 参数名 | 类型 | 必填 | 说明 | 2095| -------- | ----------------------------------------- | ---- | -------------------------------------------------- | 2096| keyAlias | string | 是 | 密钥别名,应为生成key时传入的别名。 | 2097| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 2098| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 2099 2100**示例:** 2101 2102```js 2103/* 此处options选择emptyOptions传空 */ 2104let keyAlias = 'keyAlias'; 2105let emptyOptions = { 2106 properties: [] 2107}; 2108huks.deleteKey(keyAlias, emptyOptions, function (err, data) {}); 2109``` 2110 2111## huks.deleteKey<sup>(deprecated)</sup> 2112 2113deleteKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 2114 2115删除密钥,使用Promise方式异步返回结果。 2116 2117> **说明:** 从API Version 9开始废弃,建议使用[huks.deleteKeyItem<sup>9+</sup>](#huksdeletekeyitem9-1)替代。 2118 2119**系统能力**:SystemCapability.Security.Huks 2120 2121**参数:** 2122 2123| 参数名 | 类型 | 必填 | 说明 | 2124| -------- | ----------- | ---- | ----------------------------------------------------- | 2125| keyAlias | string | 是 | 密钥别名,应为生成key时传入的别名。 | 2126| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 2127 2128**返回值:** 2129 2130| 类型 | 说明 | 2131| ----------------------------------- | -------------------------------------------------- | 2132| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 2133 2134**示例:** 2135 2136```js 2137/* 此处options选择emptyOptions传空 */ 2138let keyAlias = 'keyAlias'; 2139let emptyOptions = { 2140 properties: [] 2141}; 2142let result = huks.deleteKey(keyAlias, emptyOptions); 2143``` 2144 2145## huks.importKey<sup>(deprecated)</sup> 2146 2147importKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 2148 2149导入明文密钥,使用Callback方式回调异步返回结果 。 2150 2151> **说明:** 从API Version 9开始废弃,建议使用[huks.importKeyItem<sup>9+</sup>](#huksimportkeyitem9)替代。 2152 2153**系统能力**:SystemCapability.Security.Huks 2154 2155**参数:** 2156 2157| 参数名 | 类型 | 必填 | 说明 | 2158| -------- | ------------------------ | ---- | ------------------------------------------------- | 2159| keyAlias | string | 是 | 密钥别名。 | 2160| options | [HuksOptions](#huksoptions) | 是 | 用于导入时所需TAG和需要导入的密钥。 | 2161| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 2162 2163**示例:** 2164 2165```js 2166/* 以导入AES256密钥为例 */ 2167let plainTextSize32 = makeRandomArr(32); 2168function makeRandomArr(size) { 2169 let arr = new Uint8Array(size); 2170 for (let i = 0; i < size; i++) { 2171 arr[i] = Math.floor(Math.random() * 10); 2172 } 2173 return arr; 2174}; 2175let keyAlias = 'keyAlias'; 2176let properties = new Array(); 2177properties[0] = { 2178 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 2179 value: huks.HuksKeyAlg.HUKS_ALG_AES 2180}; 2181properties[1] = { 2182 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 2183 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 2184}; 2185properties[2] = { 2186 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 2187 value: 2188huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 2189}; 2190properties[3] = { 2191 tag: huks.HuksTag.HUKS_TAG_PADDING, 2192 value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 2193}; 2194properties[4] = { 2195 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 2196 value: huks.HuksCipherMode.HUKS_MODE_ECB 2197}; 2198let options = { 2199 properties: properties, 2200 inData: plainTextSize32 2201}; 2202huks.importKey(keyAlias, options, function (err, data){}); 2203``` 2204 2205## huks.importKey<sup>(deprecated)</sup> 2206 2207importKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 2208 2209导入明文密钥,使用Promise方式异步返回结果。 2210 2211> **说明:** 从API Version 9开始废弃,建议使用[huks.importKeyItem<sup>9+</sup>](#huksimportkeyitem9-1)替代。 2212 2213**系统能力**:SystemCapability.Security.Huks 2214 2215**参数:** 2216 2217| 参数名 | 类型 | 必填 | 说明 | 2218| -------- | ----------- | ---- | ------------------------------------ | 2219| keyAlias | string | 是 | 密钥别名。 | 2220| options | [HuksOptions](#huksoptions) | 是 | 用于导入时所需TAG和需要导入的密钥。 | 2221 2222**返回值:** 2223 2224| 类型 | 说明 | 2225| ----------------------------------- | -------------------------------------------------- | 2226| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 2227 2228**示例:** 2229 2230```js 2231/* 以导入AES128为例 */ 2232let plainTextSize32 = makeRandomArr(32); 2233 2234function makeRandomArr(size) { 2235 let arr = new Uint8Array(size); 2236 for (let i = 0; i < size; i++) { 2237 arr[i] = Math.floor(Math.random() * 10); 2238 } 2239 return arr; 2240}; 2241 2242/*第一步:生成密钥*/ 2243let keyAlias = 'keyAlias'; 2244let properties = new Array(); 2245properties[0] = { 2246 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 2247 value: huks.HuksKeyAlg.HUKS_ALG_AES 2248}; 2249properties[1] = { 2250 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 2251 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128 2252}; 2253properties[2] = { 2254 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 2255 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 2256}; 2257properties[3] = { 2258 tag: huks.HuksTag.HUKS_TAG_PADDING, 2259 value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 2260}; 2261properties[4] = { 2262 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 2263 value: huks.HuksCipherMode.HUKS_MODE_ECB 2264}; 2265let huksoptions = { 2266 properties: properties, 2267 inData: plainTextSize32 2268}; 2269let result = huks.importKey(keyAlias, huksoptions); 2270``` 2271 2272## huks.exportKey<sup>(deprecated)</sup> 2273 2274exportKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 2275 2276导出密钥,使用Callback方式回调异步返回的结果。 2277 2278> **说明:** 从API Version 9开始废弃,建议使用[huks.exportKeyItem<sup>9+</sup>](#huksexportkeyitem9)替代。 2279 2280**系统能力**:SystemCapability.Security.Huks 2281 2282**参数:** 2283 2284| 参数名 | 类型 | 必填 | 说明 | 2285| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2286| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 2287| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 2288| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 | 2289 2290**示例:** 2291 2292```js 2293/* 此处options选择emptyOptions来传空 */ 2294let keyAlias = 'keyAlias'; 2295let emptyOptions = { 2296 properties: [] 2297}; 2298huks.exportKey(keyAlias, emptyOptions, function (err, data){}); 2299``` 2300 2301## huks.exportKey<sup>(deprecated)</sup> 2302 2303exportKey(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 2304 2305导出密钥,使用Promise方式回调异步返回的结果。 2306 2307> **说明:** 从API Version 9开始废弃,建议使用[huks.exportKeyItem<sup>9+</sup>](#huksexportkeyitem9-1))替代。 2308 2309**系统能力**:SystemCapability.Security.Huks 2310 2311**参数:** 2312 2313| 参数名 | 类型 | 必填 | 说明 | 2314| -------- | ----------- | ---- | ------------------------------------------------------------ | 2315| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 2316| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 2317 2318**返回值:** 2319 2320| 类型 | 说明 | 2321| ----------------------------------- | ------------------------------------------------------------ | 2322| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。outData:返回从密钥中导出的公钥。 | 2323 2324**示例:** 2325 2326```js 2327/* 此处options选择emptyOptions来传空 */ 2328let keyAlias = 'keyAlias'; 2329let emptyOptions = { 2330 properties: [] 2331}; 2332let result = huks.exportKey(keyAlias, emptyOptions); 2333``` 2334 2335## huks.getKeyProperties<sup>(deprecated)</sup> 2336 2337getKeyProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 2338 2339获取密钥属性,使用Callback回调异步返回结果。 2340 2341> **说明:** 从API Version 9开始废弃,建议使用[huks.getKeyItemProperties<sup>9+</sup>](#huksgetkeyitemproperties9)替代。 2342 2343**系统能力**:SystemCapability.Security.Huks 2344 2345**参数:** 2346 2347| 参数名 | 类型 | 必填 | 说明 | 2348| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2349| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 2350| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 2351| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。errorCode:返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。 | 2352 2353**示例:** 2354 2355```js 2356/* 此处options选择emptyOptions来传空 */ 2357let keyAlias = 'keyAlias'; 2358let emptyOptions = { 2359 properties: [] 2360}; 2361huks.getKeyProperties(keyAlias, emptyOptions, function (err, data){}); 2362``` 2363 2364## huks.getKeyProperties<sup>(deprecated)</sup> 2365 2366getKeyProperties(keyAlias: string, options: HuksOptions) : Promise\<HuksResult> 2367 2368获取密钥属性,使用Promise回调异步返回结果。 2369 2370> **说明:** 从API Version 9开始废弃,建议使用[huks.getKeyItemProperties<sup>9+</sup>](#huksgetkeyitemproperties9-1)替代。 2371 2372**系统能力**:SystemCapability.Security.Huks 2373 2374**参数:** 2375 2376| 参数名 | 类型 | 必填 | 说明 | 2377| -------- | ----------- | ---- | ------------------------------------------------------------ | 2378| keyAlias | string | 是 | 密钥别名,应与所用密钥生成时使用的别名相同。 | 2379| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 2380 2381**返回值:** 2382 2383| 类型 | 说明 | 2384| ------------------ | ------------------------------------------------------------ | 2385| Promise\<[HuksResult](#huksoptions)> | Promise对象。errorCode:返回HUKS_SUCCESS时表示接口使用成功,其他时为错误。properties:返回值为生成密钥时所需参数。 | 2386 2387**示例:** 2388 2389```js 2390/* 此处options选择emptyOptions来传空 */ 2391let keyAlias = 'keyAlias'; 2392let emptyOptions = { 2393 properties: [] 2394}; 2395let result = huks.getKeyProperties(keyAlias, emptyOptions); 2396``` 2397 2398## huks.isKeyExist<sup>(deprecated)</sup> 2399 2400isKeyExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<boolean>) : void 2401 2402判断密钥是否存在,使用Callback回调异步返回结果 。 2403 2404> **说明:** 从API Version 9开始废弃,建议使用[huks.isKeyItemExist<sup>9+</sup>](#huksiskeyitemexist9)替代。 2405 2406**系统能力**:SystemCapability.Security.Huks 2407 2408**参数:** 2409 2410| 参数名 | 类型 | 必填 | 说明 | 2411| -------- | ---------------------- | ---- | ------------------------------------- | 2412| keyAlias | string | 是 | 所需查找的密钥的别名。 | 2413| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 2414| callback | AsyncCallback\<boolean> | 是 | 回调函数。FALSE代表密钥不存在,TRUE代表密钥存在。 | 2415 2416**示例:** 2417 2418```js 2419/* 此处options选择emptyOptions来传空 */ 2420let keyAlias = 'keyAlias'; 2421let emptyOptions = { 2422 properties: [] 2423}; 2424huks.isKeyExist(keyAlias, emptyOptions, function (err, data){}); 2425``` 2426 2427## huks.isKeyExist<sup>(deprecated)</sup> 2428 2429isKeyExist(keyAlias: string, options: HuksOptions) : Promise\<boolean> 2430 2431判断密钥是否存在,使用Promise回调异步返回结果 。 2432 2433> **说明:** 从API Version 9开始废弃,建议使用[huks.isKeyItemExist<sup>9+</sup>](#huksiskeyitemexist9-1)替代。 2434 2435**系统能力**:SystemCapability.Security.Huks 2436 2437**参数:** 2438 2439| 参数名 | 类型 | 必填 | 说明 | 2440| -------- | ----------- | ---- | -------------------------------- | 2441| keyAlias | string | 是 | 所需查找的密钥的别名。 | 2442| options | [HuksOptions](#huksoptions) | 是 | 空对象(此处传空即可)。 | 2443 2444**返回值:** 2445 2446| 类型 | 说明 | 2447| ----------------- | --------------------------------------- | 2448| Promise\<boolean> | Promise对象。FALSE代表密钥不存在,TRUE代表密钥存在。 | 2449 2450**示例:** 2451 2452```js 2453/* 此处options选择emptyOptions来传空 */ 2454let keyAlias = 'keyAlias'; 2455let emptyOptions = { 2456 properties: [] 2457}; 2458let result = huks.isKeyExist(keyAlias, emptyOptions); 2459``` 2460 2461## huks.init<sup>(deprecated)</sup> 2462 2463init(keyAlias: string, options: HuksOptions, callback: AsyncCallback\<HuksHandle>) : void 2464 2465init操作密钥接口,使用Callback回调异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。 2466 2467> **说明:** 从API Version 9开始废弃,建议使用[huks.initSession<sup>9+</sup>](#huksinitsession9-1)替代。 2468 2469**系统能力**:SystemCapability.Security.Huks 2470 2471**参数:** 2472 2473| 参数名 | 类型 | 必填 | 说明 | 2474| -------- | ---------------------- | ---- | ------------------------------------- | 2475| keyAlias | string | 是 | Init操作密钥的别名。 | 2476| options | [HuksOptions](#huksoptions) | 是 | Init操作的参数集合。 | 2477| callback | AsyncCallback\<[HuksHandle](#hukshandledeprecated)> | 是 | 回调函数。将Init操作操作返回的handle添加到密钥管理系统的回调。 | 2478 2479## huks.init<sup>(deprecated)</sup> 2480 2481init(keyAlias: string, options: HuksOptions) : Promise\<HuksHandle> 2482 2483init操作密钥接口,使用Promise方式异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。 2484 2485> **说明:** 从API Version 9开始废弃,建议使用[huks.initSession<sup>9+</sup>](#huksinitsession9-1)替代。 2486 2487**系统能力**:SystemCapability.Security.Huks 2488 2489**参数:** 2490 2491| 参数名 | 类型 | 必填 | 说明 | 2492| -------- | ---------------------- | ---- | ------------------------------------- | 2493| keyAlias | string | 是 | Init操作密钥的别名。 | 2494| options | [HuksOptions](#huksoptions) | 是 | Init参数集合。 | 2495 2496**返回值**: 2497 2498| 类型 | 说明 | 2499| ----------------------------------- | -------------------------------------------------- | 2500| Promise\<[HuksHandle](#hukshandledeprecated)> | Promise对象。将Init操作返回的handle添加到密钥管理系统的回调。 | 2501 2502## huks.update<sup>(deprecated)</sup> 2503 2504update(handle: number, token?: Uint8Array, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 2505 2506update操作密钥接口,使用Callback回调异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。 2507 2508> **说明:** 从API Version 9开始废弃,建议使用[huks.updateSession<sup>9+</sup>](#huksupdatesession9-1)替代。 2509 2510**系统能力**: SystemCapability.Security.Huks 2511 2512**参数:** 2513 2514| 参数名 | 类型 | 必填 | 说明 | 2515| -------- | ----------------------------------------- | ---- | -------------------------------------------- | 2516| handle | number | 是 | Update操作的handle。 | 2517| token | Uint8Array | 否 | Update操作的token。 | 2518| options | [HuksOptions](#huksoptions) | 是 | Update操作的参数集合。 | 2519| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。将Update操作的结果添加到密钥管理系统的回调。 | 2520 2521## huks.update<sup>(deprecated)</sup> 2522 2523update(handle: number, token?: Uint8Array, options: HuksOptions) : Promise\<HuksResult>; 2524 2525update操作密钥接口,使用Promise方式异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。 2526 2527> **说明:** 从API Version 9开始废弃,建议使用[huks.updateSession<sup>9+</sup>](#huksupdatesession9-2)替代。 2528 2529**系统能力**: SystemCapability.Security.Huks 2530 2531**参数:** 2532 2533| 参数名 | 类型 | 必填 | 说明 | 2534| ------- | ----------------------------------- | ---- | -------------------------------------------- | 2535| handle | number | 是 | Update操作的handle。 | 2536| token | Uint8Array | 否 | Update操作的token。 | 2537| options | [HuksOptions](#huksoptions) | 是 | Update操作的参数集合。 | 2538 2539**返回值**: 2540 2541| 类型 | 说明 | 2542| ----------------------------------- | -------------------------------------------------- | 2543| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。将Update操作的结果添加到密钥管理系统的回调。 | 2544 2545## huks.finish<sup>(deprecated)</sup> 2546 2547finish(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 2548 2549finish操作密钥接口,使用Callback回调异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。 2550 2551> **说明:** 从API Version 9开始废弃,建议使用[huks.finishSession<sup>9+</sup>](#huksfinishsession9)替代。 2552 2553**系统能力**:SystemCapability.Security.Huks 2554 2555**参数:** 2556 2557| 参数名 | 类型 | 必填 | 说明 | 2558| -------- | ---------------------- | ---- | ------------------------------------- | 2559| handle | number | 是 | Finish操作的handle。 | 2560| options | [HuksOptions](#huksoptions) | 是 | Finish的参数集合。 | 2561| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。将Finish操作的结果添加到密钥管理系统的回调。 | 2562 2563## huks.finish<sup>(deprecated)</sup> 2564 2565finish(handle: number, options: HuksOptions) : Promise\<HuksResult> 2566 2567finish操作密钥接口,使用Promise方式异步返回结果。huks.init, huks.update, huks.finish为三段式接口,需要一起使用。 2568 2569> **说明:** 从API Version 9开始废弃,建议使用[huks.finishSession<sup>9+</sup>](#huksfinishsession9-1)替代。 2570 2571**系统能力**:SystemCapability.Security.Huks 2572 2573**参数:** 2574 2575| 参数名 | 类型 | 必填 | 说明 | 2576| -------- | ---------------------- | ---- | ------------------------------------- | 2577| handle | number | 是 | Finish操作的handle。 | 2578| options | [HuksOptions](#huksoptions) | 是 | Finish操作的参数集合。 | 2579 2580**返回值**: 2581 2582| 类型 | 说明 | 2583| ----------------------------------- | -------------------------------------------------- | 2584| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象,用于获取异步返回结果。 | 2585 2586## huks.abort<sup>(deprecated)</sup> 2587 2588abort(handle: number, options: HuksOptions, callback: AsyncCallback\<HuksResult>) : void 2589 2590abort操作密钥接口,使用Callback回调异步返回结果。 2591 2592> **说明:** 从API Version 9开始废弃,建议使用[huks.abortSession<sup>9+</sup>](#huksabortsession9)替代。 2593 2594**系统能力**:SystemCapability.Security.Huks 2595 2596**参数:** 2597 2598| 参数名 | 类型 | 必填 | 说明 | 2599| -------- | ---------------------- | ---- | ------------------------------------- | 2600| handle | number | 是 | Abort操作的handle。 | 2601| options | [HuksOptions](#huksoptions) | 是 | Abort操作的参数集合。 | 2602| callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | 是 | 回调函数。将Abort操作的结果添加到密钥管理系统的回调。 | 2603 2604**示例:** 2605 2606```js 2607/* huks.init, huks.update, huks.finish为三段式接口,需要一起使用,当huks.init和huks.update 2608 * 以及huks.finish操作中的任一阶段发生错误时,都需要调用huks.abort来终止密钥的使用。 2609 * 2610 * 以下以RSA1024密钥的callback操作使用为例 2611 */ 2612let keyalias = "HuksDemoRSA"; 2613let properties = new Array(); 2614let options = { 2615 properties: properties, 2616 inData: new Uint8Array(0) 2617}; 2618let handle; 2619let resultMessage = ""; 2620async function generateKey() { 2621 properties[0] = { 2622 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 2623 value: huks.HuksKeyAlg.HUKS_ALG_RSA 2624 }; 2625 properties[1] = { 2626 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 2627 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 2628 }; 2629 properties[2] = { 2630 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 2631 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT 2632 }; 2633 properties[3] = { 2634 tag: huks.HuksTag.HUKS_TAG_PADDING, 2635 value: huks.HuksKeyPadding.HUKS_PADDING_OAEP 2636 }; 2637 properties[4] = { 2638 tag: huks.HuksTag.HUKS_TAG_DIGEST, 2639 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 2640 }; 2641 huks.generateKey(keyalias, options); 2642} 2643function stringToUint8Array(str) { 2644 let arr = []; 2645 for (let i = 0, j = str.length; i < j; ++i) { 2646 arr.push(str.charCodeAt(i)); 2647 } 2648 let tmpUint8Array = new Uint8Array(arr); 2649 return tmpUint8Array; 2650} 2651async function huksInit() { 2652 await huks.init(keyalias, options).then((data) => { 2653 console.log(`test init data: ${JSON.stringify(data)}`); 2654 handle = data.handle; 2655 }).catch((err) => { 2656 console.log("test init err information: " + JSON.stringify(err)) 2657 }) 2658} 2659async function huksUpdate() { 2660 options.inData = stringToUint8Array("huksHmacTest"); 2661 await huks.update(handle, options).then((data) => { 2662 if (data.errorCode === 0) { 2663 resultMessage += "update success!"; 2664 } else { 2665 resultMessage += "update fail!"; 2666 } 2667 }); 2668 console.log(resultMessage); 2669} 2670function huksFinish() { 2671 options.inData = stringToUint8Array("HuksDemoHMAC"); 2672 huks.finish(handle, options).then((data) => { 2673 if (data.errorCode === 0) { 2674 resultMessage = "finish success!"; 2675 } else { 2676 resultMessage = "finish fail errorCode: " + data.errorCode; 2677 } 2678 }).catch((err) => { 2679 resultMessage = "finish fail, catch errorMessage:" + JSON.stringify(err) 2680 }); 2681 console.log(resultMessage); 2682} 2683async function huksAbort() { 2684 huks.abort(handle, options).then((data) => { 2685 if (data.errorCode === 0) { 2686 resultMessage = "abort success!"; 2687 } else { 2688 resultMessage = "abort fail errorCode: " + data.errorCode; 2689 } 2690 }).catch((err) => { 2691 resultMessage = "abort fail, catch errorMessage:" + JSON.stringify(err) 2692 }); 2693 console.log(resultMessage); 2694} 2695``` 2696 2697## huks.abort<sup>(deprecated)</sup> 2698 2699abort(handle: number, options: HuksOptions) : Promise\<HuksResult>; 2700 2701abort操作密钥接口,使用Promise方式异步返回结果。 2702 2703> **说明:** 从API Version 9开始废弃,建议使用[huks.abortSession<sup>9+</sup>](#huksabortsession9-1)替代。 2704 2705**系统能力**:SystemCapability.Security.Huks 2706 2707**参数:** 2708 2709| 参数名 | 类型 | 必填 | 说明 | 2710| -------- | ---------------------- | ---- | ------------------------------------- | 2711| handle | number | 是 | Abort操作的handle。 | 2712| options | [HuksOptions](#huksoptions) | 是 | Abort操作的参数集合。 | 2713 2714**返回值**: 2715 2716| 类型 | 说明 | 2717| ----------------------------------- | -------------------------------------------------- | 2718| Promise\<[HuksResult](#huksresultdeprecated)> | Promise对象。将Abort操作的结果添加到密钥管理系统的回调。 | 2719 2720**示例:** 2721 2722```js 2723/* huks.init, huks.update, huks.finish为三段式接口,需要一起使用,当huks.init和huks.update 2724 * 以及huks.finish操作中的任一阶段发生错误时,都需要调用huks.abort来终止密钥的使用。 2725 * 2726 * 以下以RSA1024密钥的promise操作使用为例 2727 */ 2728let keyalias = "HuksDemoRSA"; 2729let properties = new Array(); 2730let options = { 2731 properties: properties, 2732 inData: new Uint8Array(0) 2733}; 2734let handle; 2735let resultMessage = ""; 2736function stringToUint8Array(str) { 2737 let arr = []; 2738 for (let i = 0, j = str.length; i < j; ++i) { 2739 arr.push(str.charCodeAt(i)); 2740 } 2741 let tmpUint8Array = new Uint8Array(arr); 2742 return tmpUint8Array; 2743} 2744 2745async function generateKey() { 2746 properties[0] = { 2747 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 2748 value: huks.HuksKeyAlg.HUKS_ALG_RSA 2749 }; 2750 properties[1] = { 2751 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 2752 value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 2753 }; 2754 properties[2] = { 2755 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 2756 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT 2757 }; 2758 properties[3] = { 2759 tag: huks.HuksTag.HUKS_TAG_PADDING, 2760 value: huks.HuksKeyPadding.HUKS_PADDING_OAEP 2761 }; 2762 properties[4] = { 2763 tag: huks.HuksTag.HUKS_TAG_DIGEST, 2764 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 2765 }; 2766 huks.generateKey(keyalias, options, function (err, data) { }); 2767} 2768async function huksInit() { 2769 return new Promise((resolve, reject) => { 2770 huks.init(keyalias, options, async function (err, data) { 2771 if (data.errorCode === 0) { 2772 resultMessage = "init success!" 2773 handle = data.handle; 2774 } else { 2775 resultMessage = "init fail errorCode: " + data.errorCode 2776 } 2777 }); 2778 }); 2779} 2780 2781async function huksUpdate() { 2782 options.inData = stringToUint8Array("huksHmacTest"); 2783 new Promise((resolve, reject) => { 2784 huks.update(handle, options, function (err, data) { 2785 if (data.errorCode === 0) { 2786 resultMessage += "update success!"; 2787 } else { 2788 resultMessage += "update fail!"; 2789 } 2790 }); 2791 }); 2792 console.log(resultMessage); 2793 2794} 2795 2796async function huksFinish() { 2797 options.inData = stringToUint8Array("0"); 2798 new Promise((resolve, reject) => { 2799 huks.finish(handle, options, function (err, data) { 2800 if (data.errorCode === 0) { 2801 resultMessage = "finish success!"; 2802 } else { 2803 resultMessage = "finish fail errorCode: " + data.errorCode; 2804 } 2805 }); 2806 }); 2807} 2808 2809function huksAbort() { 2810 new Promise((resolve, reject) => { 2811 huks.abort(handle, options, function (err, data) { 2812 console.log(`Huks_Demo hmac huksAbort1 data ${JSON.stringify(data)}`); 2813 console.log(`Huks_Demo hmac huksAbort1 err ${JSON.stringify(err)}`); 2814 }); 2815 }); 2816} 2817``` 2818 2819## HuksHandle<sup>(deprecated)</sup> 2820 2821huks Handle结构体。 2822 2823**系统能力**:SystemCapability.Security.Huks 2824 2825| 名称 | 类型 | 必填 | 说明 | 2826| ---------- | ---------------- | ---- | -------- | 2827| errorCode | number | 是 | 表示错误码。 | 2828| handle | number | 是 | 表示handle值。 | 2829| token | Uint8Array | 否 | 表示[init](#huksinitdeprecated)操作之后获取到的challenge信息。 | 2830 2831## HuksResult<sup>(deprecated)</sup> 2832 2833调用接口返回的result。 2834 2835**系统能力**:SystemCapability.Security.Huks 2836 2837| 名称 | 类型 | 必填 | 说明 | 2838| ---------- | ------------------------------- | ---- | ---------------- | 2839| errorCode | number | 是 | 表示错误码。 | 2840| outData | Uint8Array | 否 | 表示输出数据。 | 2841| properties | Array\<[HuksParam](#huksparam)> | 否 | 表示属性信息。 | 2842| certChains | Array\<string> | 否 | 表示证书链数据。 | 2843 2844 2845## HuksErrorCode<sup>(deprecated)</sup> 2846 2847表示错误码的枚举。 2848 2849**系统能力**:SystemCapability.Security.Huks 2850 2851| 名称 | 值 | 说明 | 2852| -------------------------- | ----- | ---- | 2853| HUKS_SUCCESS | 0 |表示成功。| 2854| HUKS_FAILURE | -1 |表示失败。| 2855| HUKS_ERROR_BAD_STATE | -2 |表示错误的状态。| 2856| HUKS_ERROR_INVALID_ARGUMENT | -3 |表示无效的数据。| 2857| HUKS_ERROR_NOT_SUPPORTED | -4 |表示不支持。| 2858| HUKS_ERROR_NO_PERMISSION | -5 |表示没有许可。| 2859| HUKS_ERROR_INSUFFICIENT_DATA | -6 |表示数据不足。| 2860| HUKS_ERROR_BUFFER_TOO_SMALL | -7 |表示缓冲区太小。| 2861| HUKS_ERROR_INSUFFICIENT_MEMORY | -8 |表示内存不足。| 2862| HUKS_ERROR_COMMUNICATION_FAILURE | -9 |表示通讯失败。| 2863| HUKS_ERROR_STORAGE_FAILURE | -10 |表示存储故障。| 2864| HUKS_ERROR_HARDWARE_FAILURE | -11 |表示硬件故障。| 2865| HUKS_ERROR_ALREADY_EXISTS | -12 |表示已经存在。| 2866| HUKS_ERROR_NOT_EXIST | -13 |表示不存在。| 2867| HUKS_ERROR_NULL_POINTER | -14 |表示空指针。| 2868| HUKS_ERROR_FILE_SIZE_FAIL | -15 |表示文件大小失败。| 2869| HUKS_ERROR_READ_FILE_FAIL | -16 |表示读取文件失败。| 2870| HUKS_ERROR_INVALID_PUBLIC_KEY | -17 |表示无效的公钥。| 2871| HUKS_ERROR_INVALID_PRIVATE_KEY | -18 |表示无效的私钥。| 2872| HUKS_ERROR_INVALID_KEY_INFO | -19 |表示无效的密钥信息。| 2873| HUKS_ERROR_HASH_NOT_EQUAL | -20 |表示哈希不相等。| 2874| HUKS_ERROR_MALLOC_FAIL | -21 |表示MALLOC 失败。| 2875| HUKS_ERROR_WRITE_FILE_FAIL | -22 |表示写文件失败。| 2876| HUKS_ERROR_REMOVE_FILE_FAIL | -23 |表示删除文件失败。| 2877| HUKS_ERROR_OPEN_FILE_FAIL | -24 |表示打开文件失败。| 2878| HUKS_ERROR_CLOSE_FILE_FAIL | -25 |表示关闭文件失败。| 2879| HUKS_ERROR_MAKE_DIR_FAIL | -26 |表示创建目录失败。| 2880| HUKS_ERROR_INVALID_KEY_FILE | -27 |表示无效的密钥文件。| 2881| HUKS_ERROR_IPC_MSG_FAIL | -28 |表示IPC 信息失败。| 2882| HUKS_ERROR_REQUEST_OVERFLOWS | -29 |表示请求溢出。| 2883| HUKS_ERROR_PARAM_NOT_EXIST | -30 |表示参数不存在。| 2884| HUKS_ERROR_CRYPTO_ENGINE_ERROR | -31 |表示CRYPTO ENGINE错误。| 2885| HUKS_ERROR_COMMUNICATION_TIMEOUT | -32 |表示通讯超时。| 2886| HUKS_ERROR_IPC_INIT_FAIL | -33 |表示IPC 初始化失败。| 2887| HUKS_ERROR_IPC_DLOPEN_FAIL | -34 |表示IPC DLOPEN 失败。| 2888| HUKS_ERROR_EFUSE_READ_FAIL | -35 |表示EFUSE 读取失败。| 2889| HUKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST | -36 |表示存在新的根密钥材料。| 2890| HUKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL | -37 |表示更新根密钥材料失败。| 2891| HUKS_ERROR_VERIFICATION_FAILED | -38 |表示验证证书链失败。| 2892| HUKS_ERROR_CHECK_GET_ALG_FAIL | -100 |表示检查获取 ALG 失败。| 2893| HUKS_ERROR_CHECK_GET_KEY_SIZE_FAIL | -101 |表示检查获取密钥大小失败。| 2894| HUKS_ERROR_CHECK_GET_PADDING_FAIL | -102 |表示检查获取填充失败。| 2895| HUKS_ERROR_CHECK_GET_PURPOSE_FAIL | -103 |表示检查获取目的失败。| 2896| HUKS_ERROR_CHECK_GET_DIGEST_FAIL | -104 |表示检查获取摘要失败。| 2897| HUKS_ERROR_CHECK_GET_MODE_FAIL | -105 |表示检查获取模式失败。| 2898| HUKS_ERROR_CHECK_GET_NONCE_FAIL | -106 |表示检查获取随机数失败。| 2899| HUKS_ERROR_CHECK_GET_AAD_FAIL | -107 |表示检查获取 AAD 失败。| 2900| HUKS_ERROR_CHECK_GET_IV_FAIL | -108 |表示检查 GET IV 失败。| 2901| HUKS_ERROR_CHECK_GET_AE_TAG_FAIL | -109 |表示检查获取 AE 标记失败。| 2902| HUKS_ERROR_CHECK_GET_SALT_FAIL | -110 |表示检查获取SALT失败。| 2903| HUKS_ERROR_CHECK_GET_ITERATION_FAIL | -111 |表示检查获取迭代失败。| 2904| HUKS_ERROR_INVALID_ALGORITHM | -112 |表示无效的算法。| 2905| HUKS_ERROR_INVALID_KEY_SIZE | -113 |表示无效的密钥大小。| 2906| HUKS_ERROR_INVALID_PADDING | -114 |表示无效的填充。| 2907| HUKS_ERROR_INVALID_PURPOSE | -115 |表示无效的目的。| 2908| HUKS_ERROR_INVALID_MODE | -116 |表示无效模式。| 2909| HUKS_ERROR_INVALID_DIGEST | -117 |表示无效的摘要。| 2910| HUKS_ERROR_INVALID_SIGNATURE_SIZE | -118 |表示签名大小无效。| 2911| HUKS_ERROR_INVALID_IV | -119 |表示无效的 IV。| 2912| HUKS_ERROR_INVALID_AAD | -120 |表示无效的 AAD。| 2913| HUKS_ERROR_INVALID_NONCE | -121 |表示无效的随机数。| 2914| HUKS_ERROR_INVALID_AE_TAG | -122 |表示无效的 AE 标签。| 2915| HUKS_ERROR_INVALID_SALT | -123 |表示无效SALT。| 2916| HUKS_ERROR_INVALID_ITERATION | -124 |表示无效的迭代。| 2917| HUKS_ERROR_INVALID_OPERATION | -125 |表示无效操作。| 2918| HUKS_ERROR_INTERNAL_ERROR | -999 |表示内部错误。| 2919| HUKS_ERROR_UNKNOWN_ERROR | -1000 |表示未知错误。|