通用密鑰庫系統(tǒng)

2024-01-23 16:00 更新

向應(yīng)用提供密鑰庫能力,包括密鑰管理及密鑰的密碼學(xué)操作等功能。

HUKS所管理的密鑰可以由應(yīng)用導(dǎo)入或者由應(yīng)用調(diào)用HUKS接口生成。

說明

本模塊首批接口從API version 8開始支持。后續(xù)版本的新增接口,采用上角標(biāo)單獨標(biāo)記接口的起始版本。

導(dǎo)入模塊

  1. import huks from '@ohos.security.huks'

HuksParam

調(diào)用接口使用的options中的properties數(shù)組中的param。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

類型

必填

說明

tag

HuksTag

標(biāo)簽。

value

boolean|number|bigint|Uint8Array

標(biāo)簽對應(yīng)值。

HuksOptions

調(diào)用接口使用的options。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

類型

必填

說明

properties

Array<HuksParam>

屬性,用于存HuksParam的數(shù)組。

inData

Uint8Array

輸入數(shù)據(jù)。

HuksSessionHandle9+

huks Handle結(jié)構(gòu)體。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

類型

必填

說明

handle

number

表示handle值。

challenge

Uint8Array

表示initSession操作之后獲取到的challenge信息。

HuksReturnResult9+

調(diào)用接口返回的result。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

類型

必填

說明

outData

Uint8Array

表示輸出數(shù)據(jù)。

properties

Array<HuksParam>

表示屬性信息。

certChains

Array<string>

表示證書鏈數(shù)據(jù)。

huks.generateKeyItem9+

generateKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback<void>) : void

生成密鑰,使用Callback回調(diào)異步返回結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

別名。

options

HuksOptions

用于存放生成key所需TAG。其中密鑰使用的算法、密鑰用途、密鑰長度為必選參數(shù)。

callback

AsyncCallback<void>

回調(diào)函數(shù)。未捕獲error時代表用戶指定別名的密鑰生成成功,基于密鑰不出TEE原則,此接口不會返回密鑰材料內(nèi)容,若捕獲error,則為生成階段出現(xiàn)異常。

示例:

  1. /* 以生成ECC256密鑰為例 */
  2. let keyAlias = 'keyAlias';
  3. let properties = new Array();
  4. properties[0] = {
  5. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  6. value: huks.HuksKeyAlg.HUKS_ALG_ECC
  7. };
  8. properties[1] = {
  9. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  10. value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
  11. };
  12. properties[2] = {
  13. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  14. value:
  15. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
  16. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
  17. };
  18. properties[3] = {
  19. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  20. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  21. };
  22. let options = {
  23. properties: properties
  24. };
  25. try {
  26. huks.generateKeyItem(keyAlias, options, function (error, data) {
  27. if (error) {
  28. console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  29. } else {
  30. console.info(`callback: generateKeyItem key success`);
  31. }
  32. });
  33. } catch (error) {
  34. console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  35. }

huks.generateKeyItem9+

generateKeyItem(keyAlias: string, options: HuksOptions) : Promise<void>

生成密鑰,使用Promise方式異步返回結(jié)果。基于密鑰不出TEE原則,通過promise不會返回密鑰材料內(nèi)容,只用于表示此次調(diào)用是否成功。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名。

options

HuksOptions

用于存放生成key所需TAG。其中密鑰使用的算法、密鑰用途、密鑰長度為必選參數(shù)。

示例:

  1. /* 以生成ECC256密鑰為例 */
  2. let keyAlias = 'keyAlias';
  3. let properties = new Array();
  4. properties[0] = {
  5. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  6. value: huks.HuksKeyAlg.HUKS_ALG_ECC
  7. };
  8. properties[1] = {
  9. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  10. value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
  11. };
  12. properties[2] = {
  13. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  14. value:
  15. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
  16. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
  17. };
  18. properties[3] = {
  19. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  20. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  21. };
  22. let options = {
  23. properties: properties
  24. };
  25. try {
  26. huks.generateKeyItem(keyAlias, options)
  27. .then((data) => {
  28. console.info(`promise: generateKeyItem success`);
  29. })
  30. .catch(error => {
  31. console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  32. });
  33. } catch (error) {
  34. console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  35. }

huks.deleteKeyItem9+

deleteKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback<void>) : void

刪除密鑰,使用Callback回調(diào)異步返回結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)為生成key時傳入的別名。

options

HuksOptions

空對象(此處傳空即可)。

callback

AsyncCallback<void>

回調(diào)函數(shù)。不返回err值時表示接口使用成功,其他時為錯誤。

示例:

  1. /* 此處options選擇emptyOptions傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. try {
  7. huks.deleteKeyItem(keyAlias, emptyOptions, function (error, data) {
  8. if (error) {
  9. console.error(`callback: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  10. } else {
  11. console.info(`callback: deleteKeyItem key success`);
  12. }
  13. });
  14. } catch (error) {
  15. console.error(`callback: deleteKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  16. }

huks.deleteKeyItem9+

deleteKeyItem(keyAlias: string, options: HuksOptions) : Promise<void>

刪除密鑰,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)為生成key時傳入的別名。

options

HuksOptions

空對象(此處傳空即可)。

示例:

  1. /* 此處options選擇emptyOptions傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. try {
  7. huks.deleteKeyItem(keyAlias, emptyOptions)
  8. .then ((data) => {
  9. console.info(`promise: deleteKeyItem key success`);
  10. })
  11. .catch(error => {
  12. console.error(`promise: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  13. });
  14. } catch (error) {
  15. console.error(`promise: deleteKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  16. }

huks.getSdkVersion

getSdkVersion(options: HuksOptions) : string

獲取當(dāng)前系統(tǒng)sdk版本。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

options

HuksOptions

空對象,用于存放sdk版本。

返回值:

類型

說明

string

返回sdk版本。

示例:

  1. /* 此處options選擇emptyOptions傳空 */
  2. let emptyOptions = {
  3. properties: []
  4. };
  5. let result = huks.getSdkVersion(emptyOptions);

huks.importKeyItem9+

importKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback<void>) : void

導(dǎo)入明文密鑰,使用Callback方式回調(diào)異步返回結(jié)果 。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名。

options

HuksOptions

用于導(dǎo)入時所需TAG和需要導(dǎo)入的密鑰。其中密鑰使用的算法、密鑰用途、密鑰長度為必選參數(shù)。

callback

AsyncCallback<void>

回調(diào)函數(shù)。不返回err值時表示接口使用成功,其他時為錯誤。

示例:

  1. /* 以導(dǎo)入AES256密鑰為例 */
  2. let plainTextSize32 = makeRandomArr(32);
  3. function makeRandomArr(size) {
  4. let arr = new Uint8Array(size);
  5. for (let i = 0; i < size; i++) {
  6. arr[i] = Math.floor(Math.random() * 10);
  7. }
  8. return arr;
  9. };
  10. let keyAlias = 'keyAlias';
  11. let properties = new Array();
  12. properties[0] = {
  13. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  14. value: huks.HuksKeyAlg.HUKS_ALG_AES
  15. };
  16. properties[1] = {
  17. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  18. value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
  19. };
  20. properties[2] = {
  21. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  22. value:
  23. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
  24. };
  25. properties[3] = {
  26. tag: huks.HuksTag.HUKS_TAG_PADDING,
  27. value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
  28. };
  29. properties[4] = {
  30. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  31. value: huks.HuksCipherMode.HUKS_MODE_CBC
  32. };
  33. let options = {
  34. properties: properties,
  35. inData: plainTextSize32
  36. };
  37. try {
  38. huks.importKeyItem(keyAlias, options, function (error, data) {
  39. if (error) {
  40. console.error(`callback: importKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  41. } else {
  42. console.info(`callback: importKeyItem success`);
  43. }
  44. });
  45. } catch (error) {
  46. console.error(`callback: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  47. }

huks.importKeyItem9+

importKeyItem(keyAlias: string, options: HuksOptions) : Promise<void>

導(dǎo)入明文密鑰,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名。

options

HuksOptions

用于導(dǎo)入時所需TAG和需要導(dǎo)入的密鑰。其中密鑰使用的算法、密鑰用途、密鑰長度為必選參數(shù)。

示例:

  1. /* 以導(dǎo)入AES128為例 */
  2. let plainTextSize32 = makeRandomArr(32);
  3. function makeRandomArr(size) {
  4. let arr = new Uint8Array(size);
  5. for (let i = 0; i < size; i++) {
  6. arr[i] = Math.floor(Math.random() * 10);
  7. }
  8. return arr;
  9. };
  10. /*第一步:生成密鑰*/
  11. let keyAlias = 'keyAlias';
  12. let properties = new Array();
  13. properties[0] = {
  14. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  15. value: huks.HuksKeyAlg.HUKS_ALG_AES
  16. };
  17. properties[1] = {
  18. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  19. value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128
  20. };
  21. properties[2] = {
  22. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  23. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
  24. };
  25. properties[3] = {
  26. tag: huks.HuksTag.HUKS_TAG_PADDING,
  27. value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
  28. };
  29. properties[4] = {
  30. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  31. value: huks.HuksCipherMode.HUKS_MODE_CBC
  32. };
  33. let huksoptions = {
  34. properties: properties,
  35. inData: plainTextSize32
  36. };
  37. try {
  38. huks.importKeyItem(keyAlias, huksoptions)
  39. .then ((data) => {
  40. console.info(`promise: importKeyItem success`);
  41. })
  42. .catch(error => {
  43. console.error(`promise: importKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  44. });
  45. } catch (error) {
  46. console.error(`promise: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  47. }

huks.attestKeyItem9+

attestKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksReturnResult>) : void

獲取密鑰證書,使用Callback方式回調(diào)異步返回結(jié)果 。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,存放待獲取證書密鑰的別名。

options

HuksOptions

用于獲取證書時指定所需參數(shù)與數(shù)據(jù)。

callback

AsyncCallback<void>

回調(diào)函數(shù)。不返回err值時表示接口使用成功,其他時為錯誤。

示例:

  1. let securityLevel = stringToUint8Array('sec_level');
  2. let challenge = stringToUint8Array('challenge_data');
  3. let versionInfo = stringToUint8Array('version_info');
  4. let keyAliasString = "key attest";
  5. function stringToUint8Array(str) {
  6. let arr = [];
  7. for (let i = 0, j = str.length; i < j; ++i) {
  8. arr.push(str.charCodeAt(i));
  9. }
  10. let tmpUint8Array = new Uint8Array(arr);
  11. return tmpUint8Array;
  12. }
  13. async function generateKey(alias) {
  14. let properties = new Array();
  15. properties[0] = {
  16. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  17. value: huks.HuksKeyAlg.HUKS_ALG_RSA
  18. };
  19. properties[1] = {
  20. tag: huks.HuksTag.HUKS_TAG_KEY_STORAGE_FLAG,
  21. value: huks.HuksKeyStorageType.HUKS_STORAGE_PERSISTENT
  22. };
  23. properties[2] = {
  24. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  25. value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
  26. };
  27. properties[3] = {
  28. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  29. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
  30. };
  31. properties[4] = {
  32. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  33. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  34. };
  35. properties[5] = {
  36. tag: huks.HuksTag.HUKS_TAG_PADDING,
  37. value: huks.HuksKeyPadding.HUKS_PADDING_PSS
  38. };
  39. properties[6] = {
  40. tag: huks.HuksTag.HUKS_TAG_KEY_GENERATE_TYPE,
  41. value: huks.HuksKeyGenerateType.HUKS_KEY_GENERATE_TYPE_DEFAULT
  42. };
  43. properties[7] = {
  44. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  45. value: huks.HuksCipherMode.HUKS_MODE_ECB
  46. };
  47. let options = {
  48. properties: properties
  49. };
  50. try {
  51. huks.generateKeyItem(alias, options, function (error, data) {
  52. if (error) {
  53. console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  54. } else {
  55. console.info(`callback: generateKeyItem success`);
  56. }
  57. });
  58. } catch (error) {
  59. console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  60. }
  61. }
  62. async function attestKey() {
  63. let aliasString = keyAliasString;
  64. let aliasUint8 = stringToUint8Array(aliasString);
  65. let properties = new Array();
  66. properties[0] = {
  67. tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO,
  68. value: securityLevel
  69. };
  70. properties[1] = {
  71. tag: huks.HuksTag.HUKS_TAG_ATTESTATION_CHALLENGE,
  72. value: challenge
  73. };
  74. properties[2] = {
  75. tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_VERSION_INFO,
  76. value: versionInfo
  77. };
  78. properties[3] = {
  79. tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_ALIAS,
  80. value: aliasUint8
  81. };
  82. let options = {
  83. properties: properties
  84. };
  85. await generateKey(aliasString);
  86. try {
  87. huks.attestKeyItem(aliasString, options, function (error, data) {
  88. if (error) {
  89. console.error(`callback: attestKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  90. } else {
  91. console.info(`callback: attestKeyItem success`);
  92. }
  93. });
  94. } catch (error) {
  95. console.error(`callback: attestKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  96. }
  97. }

huks.attestKeyItem9+

attestKeyItem(keyAlias: string, options: HuksOptions) : Promise<HuksReturnResult>

獲取密鑰證書,使用Promise方式異步返回結(jié)果 。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,存放待獲取證書密鑰的別名。

options

HuksOptions

用于獲取證書時指定所需參數(shù)與數(shù)據(jù)。

返回值:

類型

說明

Promise<HuksReturnResult>

Promise對象。不返回err值時表示接口使用成功,其他時為錯誤。

示例:

  1. let securityLevel = stringToUint8Array('sec_level');
  2. let challenge = stringToUint8Array('challenge_data');
  3. let versionInfo = stringToUint8Array('version_info');
  4. let keyAliasString = "key attest";
  5. function stringToUint8Array(str) {
  6. let arr = [];
  7. for (let i = 0, j = str.length; i < j; ++i) {
  8. arr.push(str.charCodeAt(i));
  9. }
  10. let tmpUint8Array = new Uint8Array(arr);
  11. return tmpUint8Array;
  12. }
  13. async function generateKey(alias) {
  14. let properties = new Array();
  15. properties[0] = {
  16. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  17. value: huks.HuksKeyAlg.HUKS_ALG_RSA
  18. };
  19. properties[1] = {
  20. tag: huks.HuksTag.HUKS_TAG_KEY_STORAGE_FLAG,
  21. value: huks.HuksKeyStorageType.HUKS_STORAGE_PERSISTENT
  22. };
  23. properties[2] = {
  24. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  25. value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
  26. };
  27. properties[3] = {
  28. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  29. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
  30. };
  31. properties[4] = {
  32. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  33. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  34. };
  35. properties[5] = {
  36. tag: huks.HuksTag.HUKS_TAG_PADDING,
  37. value: huks.HuksKeyPadding.HUKS_PADDING_PSS
  38. };
  39. properties[6] = {
  40. tag: huks.HuksTag.HUKS_TAG_KEY_GENERATE_TYPE,
  41. value: huks.HuksKeyGenerateType.HUKS_KEY_GENERATE_TYPE_DEFAULT
  42. };
  43. properties[7] = {
  44. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  45. value: huks.HuksCipherMode.HUKS_MODE_ECB
  46. };
  47. let options = {
  48. properties: properties
  49. };
  50. try {
  51. await huks.generateKeyItem(alias, options)
  52. .then((data) => {
  53. console.info(`promise: generateKeyItem success`);
  54. })
  55. .catch(error => {
  56. console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  57. });
  58. } catch (error) {
  59. console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  60. }
  61. }
  62. async function attestKey() {
  63. let aliasString = keyAliasString;
  64. let aliasUint8 = stringToUint8Array(aliasString);
  65. let properties = new Array();
  66. properties[0] = {
  67. tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO,
  68. value: securityLevel
  69. };
  70. properties[1] = {
  71. tag: huks.HuksTag.HUKS_TAG_ATTESTATION_CHALLENGE,
  72. value: challenge
  73. };
  74. properties[2] = {
  75. tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_VERSION_INFO,
  76. value: versionInfo
  77. };
  78. properties[3] = {
  79. tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_ALIAS,
  80. value: aliasUint8
  81. };
  82. let options = {
  83. properties: properties
  84. };
  85. await generateKey(aliasString);
  86. try {
  87. await huks.attestKeyItem(aliasString, options)
  88. .then ((data) => {
  89. console.info(`promise: attestKeyItem success`);
  90. })
  91. .catch(error => {
  92. console.error(`promise: attestKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  93. });
  94. } catch (error) {
  95. console.error(`promise: attestKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  96. }
  97. }

huks.importWrappedKeyItem9+

importWrappedKeyItem(keyAlias: string, wrappingKeyAlias: string, options: HuksOptions, callback: AsyncCallback<void>) : void

導(dǎo)入加密密鑰,使用Callback方式回調(diào)異步返回結(jié)果 。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,存放待導(dǎo)入密鑰的別名。

wrappingKeyAlias

string

密鑰別名,對應(yīng)密鑰用于解密加密的密鑰數(shù)據(jù)。

options

HuksOptions

用于導(dǎo)入時所需TAG和需要導(dǎo)入的加密的密鑰數(shù)據(jù)。其中密鑰使用的算法、密鑰用途、密鑰長度為必選參數(shù)。

callback

AsyncCallback<void>

回調(diào)函數(shù)。不返回err值時表示接口使用成功,其他時為錯誤。

示例:

  1. /*
  2. * 以下以SM2密鑰的Callback操作驗證為例
  3. */
  4. import huks from '@ohos.security.huks';
  5. /*
  6. * 確定密鑰別名
  7. */
  8. let importAlias = "importAlias";
  9. let wrapAlias = "wrappingKeyAlias";
  10. let exportKey;
  11. /*
  12. * 加密導(dǎo)入用途的密鑰材料原文:轉(zhuǎn)換成HUKS ECC-P-256密鑰對格式的密鑰材料
  13. */
  14. let inputEccPair = new Uint8Array([
  15. 0x02, 0x00, 0x00, 0x00, // 密鑰算法:huks.HuksKeyAlg.HUKS_ALG_ECC = 2
  16. 0x00, 0x01, 0x00, 0x00, // 密鑰大?。ū忍兀?56
  17. 0x20, 0x00, 0x00, 0x00, // 坐標(biāo)x長度(字節(jié)):32
  18. 0x20, 0x00, 0x00, 0x00, // 坐標(biāo)y長度(字節(jié)):32
  19. 0x20, 0x00, 0x00, 0x00, // 坐標(biāo)z長度(字節(jié)):32
  20. // 坐標(biāo)x
  21. 0xa5, 0xb8, 0xa3, 0x78, 0x1d, 0x6d, 0x76, 0xe0, 0xb3, 0xf5, 0x6f, 0x43, 0x9d, 0xcf, 0x60, 0xf6,
  22. 0x0b, 0x3f, 0x64, 0x45, 0xa8, 0x3f, 0x1a, 0x96, 0xf1, 0xa1, 0xa4, 0x5d, 0x3e, 0x2c, 0x3f, 0x13,
  23. // 坐標(biāo)y
  24. 0xd7, 0x81, 0xf7, 0x2a, 0xb5, 0x8d, 0x19, 0x3d, 0x9b, 0x96, 0xc7, 0x6a, 0x10, 0xf0, 0xaa, 0xbc,
  25. 0x91, 0x6f, 0x4d, 0xa7, 0x09, 0xb3, 0x57, 0x88, 0x19, 0x6f, 0x00, 0x4b, 0xad, 0xee, 0x34, 0x35,
  26. // 坐標(biāo)z
  27. 0xfb, 0x8b, 0x9f, 0x12, 0xa0, 0x83, 0x19, 0xbe, 0x6a, 0x6f, 0x63, 0x2a, 0x7c, 0x86, 0xba, 0xca,
  28. 0x64, 0x0b, 0x88, 0x96, 0xe2, 0xfa, 0x77, 0xbc, 0x71, 0xe3, 0x0f, 0x0f, 0x9e, 0x3c, 0xe5, 0xf9
  29. ]);
  30. /*
  31. * 封裝密鑰屬性參數(shù)集
  32. */
  33. // 生成加密導(dǎo)入用途的密鑰的屬性集
  34. let properties = new Array();
  35. properties[0] = {
  36. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  37. value: huks.HuksKeyAlg.HUKS_ALG_ECC
  38. };
  39. properties[1] = {
  40. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  41. value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
  42. };
  43. properties[2] = {
  44. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  45. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_UNWRAP
  46. };
  47. properties[3] = {
  48. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  49. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  50. };
  51. properties[4] = {
  52. tag: huks.HuksTag.HUKS_TAG_IMPORT_KEY_TYPE,
  53. value: huks.HuksImportKeyType.HUKS_KEY_TYPE_KEY_PAIR,
  54. };
  55. let huksOptions = {
  56. properties: properties,
  57. inData: inputEccPair
  58. };
  59. // 待導(dǎo)入密鑰的屬性集:AES256
  60. let importProperties = new Array();
  61. importProperties[0] = {
  62. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  63. value: huks.HuksKeyAlg.HUKS_ALG_AES
  64. };
  65. importProperties[1] = {
  66. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  67. value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
  68. };
  69. importProperties[2] = {
  70. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  71. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
  72. };
  73. importProperties[3] = {
  74. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  75. value: huks.HuksCipherMode.HUKS_MODE_CBC
  76. };
  77. importProperties[4] = {
  78. tag: huks.HuksTag.HUKS_TAG_PADDING,
  79. value: huks.HuksKeyPadding.HUKS_PADDING_NONE
  80. };
  81. importProperties[5] = {
  82. tag: huks.HuksTag.HUKS_TAG_UNWRAP_ALGORITHM_SUITE,
  83. value: huks.HuksUnwrapSuite.HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING // 使用“ECDH+AES256GCM”加密導(dǎo)入套件
  84. };
  85. let importOptions = {
  86. properties: importProperties,
  87. inData: new Uint8Array(new Array())
  88. };
  89. // 導(dǎo)出加密導(dǎo)入用途的公鑰
  90. function exportKeyItem(keyAlias:string, huksOptions:huks.HuksOptions, throwObject) : Promise<huks.HuksReturnResult> {
  91. return new Promise((resolve, reject) => {
  92. try {
  93. huks.exportKeyItem(keyAlias, huksOptions, function (error, data) {
  94. if (error) {
  95. reject(error);
  96. } else {
  97. resolve(data);
  98. }
  99. });
  100. } catch (error) {
  101. throwObject.isThrow = true;
  102. throw(error);
  103. }
  104. });
  105. }
  106. async function publicExportKeyFunc(keyAlias:string, huksOptions:huks.HuksOptions) {
  107. console.info(`enter callback export`);
  108. let throwObject = {isThrow: false};
  109. try {
  110. await exportKeyItem(keyAlias, huksOptions, throwObject)
  111. .then ((data) => {
  112. console.info(`callback: exportKeyItem success, data = ${JSON.stringify(data)}`);
  113. exportKey = data.outData;
  114. })
  115. .catch(error => {
  116. if (throwObject.isThrow) {
  117. throw(error);
  118. } else {
  119. console.error(`callback: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  120. }
  121. });
  122. } catch (error) {
  123. console.error(`callback: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  124. }
  125. }
  126. // 此處用導(dǎo)入密鑰來模擬“生成加密導(dǎo)入用途的密鑰”
  127. function importKeyItem(keyAlias:string, huksOptions:huks.HuksOptions, throwObject) {
  128. return new Promise((resolve, reject) => {
  129. try {
  130. huks.importKeyItem(keyAlias, huksOptions, function (error, data) {
  131. if (error) {
  132. reject(error);
  133. } else {
  134. resolve(data);
  135. }
  136. });
  137. } catch (error) {
  138. throwObject.isThrow = true;
  139. throw(error);
  140. }
  141. });
  142. }
  143. async function publicImportKeyFunc(keyAlias:string, huksOptions:huks.HuksOptions) {
  144. console.info(`enter promise importKeyItem`);
  145. let throwObject = {isThrow: false};
  146. try {
  147. await importKeyItem(keyAlias, huksOptions, throwObject)
  148. .then ((data) => {
  149. console.info(`callback: importKeyItem success, data = ${JSON.stringify(data)}`);
  150. })
  151. .catch(error => {
  152. if (throwObject.isThrow) {
  153. throw(error);
  154. } else {
  155. console.error(`callback: importKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  156. }
  157. });
  158. } catch (error) {
  159. console.error(`callback: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  160. }
  161. }
  162. // 執(zhí)行加密導(dǎo)入
  163. async function publicImportWrappedKey(keyAlias:string, wrappingKeyAlias:string, huksOptions:huks.HuksOptions) {
  164. console.info(`enter callback importWrappedKeyItem`);
  165. var throwObject = {isThrow: false};
  166. try {
  167. await importWrappedKeyItem(keyAlias, wrappingKeyAlias, huksOptions, throwObject)
  168. .then ((data) => {
  169. console.info(`callback: importWrappedKeyItem success, data = ${JSON.stringify(data)}`);
  170. })
  171. .catch(error => {
  172. if (throwObject.isThrow) {
  173. throw(error);
  174. } else {
  175. console.error(`callback: importWrappedKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  176. }
  177. });
  178. } catch (error) {
  179. console.error(`callback: importWrappedKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  180. }
  181. }
  182. function importWrappedKeyItem(keyAlias:string, wrappingKeyAlias:string, huksOptions:huks.HuksOptions, throwObject) {
  183. return new Promise((resolve, reject) => {
  184. try {
  185. huks.importWrappedKeyItem(keyAlias, wrappingKeyAlias, huksOptions, function (error, data) {
  186. if (error) {
  187. reject(error);
  188. } else {
  189. resolve(data);
  190. }
  191. });
  192. } catch (error) {
  193. throwObject.isThrow = true;
  194. throw(error);
  195. }
  196. });
  197. }
  198. // 刪除加密導(dǎo)入用途的密鑰
  199. function deleteKeyItem(keyAlias:string, huksOptions:huks.HuksOptions, throwObject) {
  200. return new Promise((resolve, reject) => {
  201. try {
  202. huks.deleteKeyItem(keyAlias, huksOptions, function (error, data) {
  203. if (error) {
  204. reject(error);
  205. } else {
  206. resolve(data);
  207. }
  208. });
  209. } catch (error) {
  210. throwObject.isThrow = true;
  211. throw(error);
  212. }
  213. });
  214. }
  215. async function publicDeleteKeyFunc(keyAlias:string, huksOptions:huks.HuksOptions) {
  216. console.info(`enter callback deleteKeyItem`);
  217. let throwObject = {isThrow: false};
  218. try {
  219. await deleteKeyItem(keyAlias, huksOptions, throwObject)
  220. .then ((data) => {
  221. console.info(`callback: deleteKeyItem key success, data = ${JSON.stringify(data)}`);
  222. })
  223. .catch(error => {
  224. if (throwObject.isThrow) {
  225. throw(error);
  226. } else {
  227. console.error(`callback: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  228. }
  229. });
  230. } catch (error) {
  231. console.error(`callback: deletKeeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  232. }
  233. }
  234. async function ImportWrappedKeyNormalTest() {
  235. console.info(`enter ImportWrapKey test`);
  236. /*
  237. * 生成加密導(dǎo)入用途的密鑰(此處使用導(dǎo)入進行模擬)
  238. */
  239. await publicImportKeyFunc(wrapAlias, huksOptions);
  240. /*
  241. * 導(dǎo)出加密導(dǎo)入用途密鑰的公鑰材料
  242. */
  243. await publicExportKeyFunc(wrapAlias, huksOptions);
  244. /*----------------------------------------------------------------------------------------------
  245. * 此處省略業(yè)務(wù)本地生成ECC密鑰對、業(yè)務(wù)本地ECDH密鑰協(xié)商、業(yè)務(wù)本地生成密鑰加密密鑰K3、業(yè)務(wù)本地加密K1'和K3的流程
  246. *----------------------------------------------------------------------------------------------*/
  247. /* 封裝加密導(dǎo)入密鑰材料:參考加密導(dǎo)入
  248. * 拼接importOptions.inData字段,滿足以下格式:
  249. * PK2長度(4字節(jié)) + PK2的數(shù)據(jù) + AAD2的長度(4字節(jié)) + AAD2的數(shù)據(jù) +
  250. * Nonce2的長度(4字節(jié))+ Nonce2的數(shù)據(jù) + AEAD2的長度(4字節(jié)) + AEAD2的數(shù)據(jù) +
  251. * K3密文的長度(4字節(jié)) + K3密文的數(shù)據(jù) + AAD3的長度(4字節(jié)) + AAD3的數(shù)據(jù) +
  252. * Nonce3的長度(4字節(jié)) + Nonce3的數(shù)據(jù) + AEAD3的長度(4字節(jié)) + AEAD3的數(shù)據(jù) +
  253. * K1'_size的長度(4字節(jié)) + K1'_size + K1'_enc的長度(4字節(jié)) + K1'_enc的數(shù)據(jù)
  254. */
  255. let inputKey = new Uint8Array([
  256. 0x5b, 0x00, 0x00, 0x00, // ECC-P-256 公鑰長度(X.509規(guī)范DER格式):91
  257. // ECC-P-256 公鑰
  258. 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a,
  259. 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xa5, 0xb8, 0xa3, 0x78, 0x1d,
  260. 0x6d, 0x76, 0xe0, 0xb3, 0xf5, 0x6f, 0x43, 0x9d, 0xcf, 0x60, 0xf6, 0x0b, 0x3f, 0x64, 0x45, 0xa8,
  261. 0x3f, 0x1a, 0x96, 0xf1, 0xa1, 0xa4, 0x5d, 0x3e, 0x2c, 0x3f, 0x13, 0xd7, 0x81, 0xf7, 0x2a, 0xb5,
  262. 0x8d, 0x19, 0x3d, 0x9b, 0x96, 0xc7, 0x6a, 0x10, 0xf0, 0xaa, 0xbc, 0x91, 0x6f, 0x4d, 0xa7, 0x09,
  263. 0xb3, 0x57, 0x88, 0x19, 0x6f, 0x00, 0x4b, 0xad, 0xee, 0x34, 0x35,
  264. 0x10, 0x00, 0x00, 0x00, // AAD2長度:16
  265. // AAD2
  266. 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x00,
  267. 0x0c, 0x00, 0x00, 0x00, // Nonce2長度:16
  268. // Nonce2
  269. 0x68, 0x61, 0x68, 0x61, 0x68, 0x61, 0x68, 0x61, 0x68, 0x61, 0x68, 0x00,
  270. 0x10, 0x00, 0x00, 0x00, // AEAD2長度:16
  271. // AEAD2
  272. 0x85, 0xfe, 0xff, 0x5b, 0x47, 0x30, 0xbe, 0x10, 0xea, 0x3c, 0x30, 0x94, 0x8a, 0x99, 0xc4, 0x86,
  273. 0x20, 0x00, 0x00, 0x00, // K3密文長度:32
  274. // K3密文
  275. 0xb4, 0xa9, 0x31, 0x5f, 0x28, 0x39, 0x53, 0x12, 0xa0, 0xfd, 0x8c, 0x9e, 0xfd, 0x36, 0xb8, 0xcb,
  276. 0x73, 0xb3, 0x08, 0xce, 0x16, 0xc9, 0x3b, 0xea, 0xd5, 0xca, 0x41, 0x85, 0xb8, 0x25, 0x7d, 0x1b,
  277. 0x10, 0x00, 0x00, 0x00, // AAD3長度:16
  278. // AAD3
  279. 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x62, 0x61, 0x00,
  280. 0x0c, 0x00, 0x00, 0x00, // Nonce3長度:16
  281. // Nonce3
  282. 0x68, 0x61, 0x68, 0x61, 0x68, 0x61, 0x68, 0x61, 0x68, 0x61, 0x68, 0x00,
  283. 0x10, 0x00, 0x00, 0x00, // AEAD3長度:16
  284. // AEAD3
  285. 0x23, 0xe2, 0xdb, 0xb5, 0x2e, 0xa7, 0xbb, 0x2d, 0xc5, 0x57, 0x05, 0xd8, 0x9d, 0x0e, 0xcf, 0x62,
  286. 0x04, 0x00, 0x00, 0x00, // “密鑰明文材料長度”的長度(字節(jié)):4
  287. // 密鑰明文材料的長度:32字節(jié)
  288. 0x20, 0x00, 0x00, 0x00,
  289. 0x20, 0x00, 0x00, 0x00, // 待導(dǎo)入密鑰密文長度(字節(jié)):32
  290. // 待導(dǎo)入密鑰密文
  291. 0xf4, 0x17, 0xbb, 0x90, 0x88, 0x62, 0x3d, 0x6e, 0xd8, 0x5f, 0x03, 0x51, 0x7f, 0xf5, 0x8b, 0x97,
  292. 0x8a, 0x41, 0x33, 0x64, 0xf5, 0x6f, 0x61, 0x16, 0xf9, 0x3c, 0x7a, 0x0b, 0xee, 0x3d, 0x92, 0xbb,
  293. ]);
  294. importOptions.inData = inputKey;
  295. /*
  296. * 導(dǎo)入封裝的加密密鑰材料
  297. */
  298. await publicImportWrappedKey(importAlias, wrapAlias, importOptions);
  299. /*
  300. * 刪除用于加密導(dǎo)入的密鑰
  301. */
  302. await publicDeleteKeyFunc(wrapAlias, huksOptions);
  303. }

huks.importWrappedKeyItem9+

importWrappedKeyItem(keyAlias: string, wrappingKeyAlias: string, options: HuksOptions) : Promise<void>

導(dǎo)入加密密鑰,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,存放待導(dǎo)入密鑰的別名。

wrappingKeyAlias

string

密鑰別名,對應(yīng)密鑰用于解密加密的密鑰數(shù)據(jù)。

options

HuksOptions

用于導(dǎo)入時所需TAG和需要導(dǎo)入的加密的密鑰數(shù)據(jù)。其中密鑰使用的算法、密鑰用途、密鑰長度為必選參數(shù)。

示例:

  1. /* 處理流程與callback類似,主要差異點為如下函數(shù): */
  2. async function TestImportWrappedFunc(alias, wrappingAlias, options) {
  3. try {
  4. await huks.importWrappedKeyItem(alias, wrappingAlias, options)
  5. .then ((data) => {
  6. console.info(`promise: importWrappedKeyItem success`);
  7. })
  8. .catch(error => {
  9. console.error(`promise: importWrappedKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  10. });
  11. } catch (error) {
  12. console.error(`promise: importWrappedKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  13. }
  14. }

huks.exportKeyItem9+

exportKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksReturnResult>) : void

導(dǎo)出密鑰,使用Callback方式回調(diào)異步返回的結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)與所用密鑰生成時使用的別名相同。

options

HuksOptions

空對象(此處傳空即可)。

callback

AsyncCallback<HuksReturnResult>

回調(diào)函數(shù)。不返回err值時表示接口使用成功,其他時為錯誤。outData:返回從密鑰中導(dǎo)出的公鑰。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. try {
  7. huks.exportKeyItem(keyAlias, emptyOptions, function (error, data) {
  8. if (error) {
  9. console.error(`callback: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  10. } else {
  11. console.info(`callback: exportKeyItem success, data = ${JSON.stringify(data)}`);
  12. }
  13. });
  14. } catch (error) {
  15. console.error(`callback: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  16. }

huks.exportKeyItem9+

exportKeyItem(keyAlias: string, options: HuksOptions) : Promise<HuksReturnResult>

導(dǎo)出密鑰,使用Promise方式回調(diào)異步返回的結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)與所用密鑰生成時使用的別名相同。

options

HuksOptions

空對象(此處傳空即可)。

返回值:

類型

說明

Promise<HuksReturnResult>

Promise對象。不返回err值時表示接口使用成功,其他時為錯誤。outData:返回從密鑰中導(dǎo)出的公鑰。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. try {
  7. huks.exportKeyItem(keyAlias, emptyOptions)
  8. .then ((data) => {
  9. console.info(`promise: exportKeyItem success, data = ${JSON.stringify(data)}`);
  10. })
  11. .catch(error => {
  12. console.error(`promise: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  13. });
  14. } catch (error) {
  15. console.error(`promise: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  16. }

huks.getKeyItemProperties9+

getKeyItemProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksReturnResult>) : void

獲取密鑰屬性,使用Callback回調(diào)異步返回結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)與所用密鑰生成時使用的別名相同。

options

HuksOptions

空對象(此處傳空即可)。

callback

AsyncCallback<HuksReturnResult>

回調(diào)函數(shù)。不返回err值時表示接口使用成功,其他時為錯誤。properties:返回值為生成密鑰時所需參數(shù)。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. try {
  7. huks.getKeyItemProperties(keyAlias, emptyOptions, function (error, data) {
  8. if (error) {
  9. console.error(`callback: getKeyItemProperties failed, code: ${error.code}, msg: ${error.message}`);
  10. } else {
  11. console.info(`callback: getKeyItemProperties success, data = ${JSON.stringify(data)}`);
  12. }
  13. });
  14. } catch (error) {
  15. console.error(`callback: getKeyItemProperties input arg invalid, code: ${error.code}, msg: ${error.message}`);
  16. }

huks.getKeyItemProperties9+

getKeyItemProperties(keyAlias: string, options: HuksOptions) : Promise<HuksReturnResult>

獲取密鑰屬性,使用Promise回調(diào)異步返回結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)與所用密鑰生成時使用的別名相同。

options

HuksOptions

空對象(此處傳空即可)。

返回值:

類型

說明

Promise<HuksReturnResult>

Promise對象。不返回err值時表示接口使用成功,其他時為錯誤。properties:返回值為生成密鑰時所需參數(shù)。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. try {
  7. huks.getKeyItemProperties(keyAlias, emptyOptions)
  8. .then ((data) => {
  9. console.info(`promise: getKeyItemProperties success, data = ${JSON.stringify(data)}`);
  10. })
  11. .catch(error => {
  12. console.error(`promise: getKeyItemProperties failed, code: ${error.code}, msg: ${error.message}`);
  13. });
  14. } catch (error) {
  15. console.error(`promise: getKeyItemProperties input arg invalid, code: ${error.code}, msg: ${error.message}`);
  16. }

huks.isKeyItemExist9+

isKeyItemExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback<boolean>) : void

判斷密鑰是否存在,使用Callback回調(diào)異步返回結(jié)果 。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

所需查找的密鑰的別名。

options

HuksOptions

空對象(此處傳空即可)。

callback

AsyncCallback<boolean>

回調(diào)函數(shù)。若密鑰存在,data為true,若密鑰不存在,則error中會輸出密鑰不存在的error code。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. huks.isKeyItemExist(keyAlias, emptyOptions, function (error, data) {
  7. if (data) {
  8. promptAction.showToast({
  9. message: "keyAlias: " + keyAlias +"is existed!",
  10. duration: 2500,
  11. })
  12. } else {
  13. promptAction.showToast({
  14. message: "find key failed,error code: " + error.code + " error msg: " + error.message,
  15. duration: 2500,
  16. })
  17. }
  18. });

huks.isKeyItemExist9+

isKeyItemExist(keyAlias: string, options: HuksOptions) : Promise<boolean>

判斷密鑰是否存在,使用Promise回調(diào)異步返回結(jié)果 。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

所需查找的密鑰的別名。

options

HuksOptions

空對象(此處傳空即可)。

返回值:

類型

說明

Promise<boolean>

Promise對象。密鑰存在時,可通過then進行密鑰存在后的相關(guān)處理,若不存在,可通過error處理密鑰不存在后的相關(guān)業(yè)務(wù)操作。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. await huks.isKeyItemExist(keyAlias, emptyOptions).then((data) => {
  7. promptAction.showToast({
  8. message: "keyAlias: " + keyAlias +"is existed!",
  9. duration: 500,
  10. })
  11. }).catch((err)=>{
  12. promptAction.showToast({
  13. message: "find key failed, error code: " + err.code + " error message: " + err.message,
  14. duration: 6500,
  15. })
  16. })

huks.initSession9+

initSession(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksSessionHandle>) : void

initSession操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

initSession操作密鑰的別名。

options

HuksOptions

initSession操作的參數(shù)集合。

callback

AsyncCallback<HuksSessionHandle>

回調(diào)函數(shù)。將initSession操作返回的handle添加到密鑰管理系統(tǒng)的回調(diào)。

huks.initSession9+

initSession(keyAlias: string, options: HuksOptions) : Promise<HuksSessionHandle>

initSession操作密鑰接口,使用Promise方式異步返回結(jié)果。huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

initSession操作密鑰的別名。

options

HuksOptions

initSession參數(shù)集合。

返回值

類型

說明

Promise<HuksSessionHandle>

Promise對象。將initSession操作返回的handle添加到密鑰管理系統(tǒng)的回調(diào)。

huks.updateSession9+

updateSession(handle: number, options: HuksOptions, callback: AsyncCallback<HuksReturnResult>) : void

updateSession操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

updateSession操作的handle。

options

HuksOptions

updateSession的參數(shù)集合。

callback

AsyncCallback<HuksReturnResult>

回調(diào)函數(shù)。將updateSession操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.updateSession9+

updateSession(handle: number, options: HuksOptions, token: Uint8Array, callback: AsyncCallback<HuksReturnResult>) : void

updateSession操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

updateSession操作的handle。

options

HuksOptions

updateSession操作的參數(shù)集合。

token

Uint8Array

updateSession操作的token。

callback

AsyncCallback<HuksReturnResult>

回調(diào)函數(shù)。將updateSession操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.updateSession9+

updateSession(handle: number, options: HuksOptions, token?: Uint8Array) : Promise<HuksReturnResult>

updateSession操作密鑰接口,使用Promise方式異步返回結(jié)果。huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

updateSession操作的handle。

options

HuksOptions

updateSession操作的參數(shù)集合。

token

Uint8Array

updateSession操作的token。

返回值

類型

說明

Promise<HuksReturnResult>

Promise對象。將updateSession操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.finishSession9+

finishSession(handle: number, options: HuksOptions, callback: AsyncCallback<HuksReturnResult>) : void

finishSession操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

finishSession操作的handle。

options

HuksOptions

finishSession的參數(shù)集合。

callback

AsyncCallback<HuksReturnResult>

回調(diào)函數(shù)。將finishSession操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.finishSession9+

finishSession(handle: number, options: HuksOptions, token: Uint8Array, callback: AsyncCallback<HuksReturnResult>) : void

finishSession操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

finishSession操作的handle。

options

HuksOptions

finishSession的參數(shù)集合。

token

Uint8Array

finishSession操作的token。

callback

AsyncCallback<HuksReturnResult>

回調(diào)函數(shù)。將finishSession操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.finishSession9+

finishSession(handle: number, options: HuksOptions, token?: Uint8Array) : Promise<HuksReturnResult>

finishSession操作密鑰接口,使用Promise方式異步返回結(jié)果。huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

finishSession操作的handle。

options

HuksOptions

finishSession操作的參數(shù)集合。

token

Uint8Array

finishSession操作的token。

返回值

類型

說明

Promise<HuksReturnResult>

Promise對象,用于獲取異步返回結(jié)果。

huks.abortSession9+

abortSession(handle: number, options: HuksOptions, callback: AsyncCallback<void>) : void

abortSession操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果 。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

abortSession操作的handle。

options

HuksOptions

abortSession操作的參數(shù)集合。

callback

AsyncCallback<void>

回調(diào)函數(shù)。將abortSession操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

示例:

  1. /* huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用,當(dāng)
  2. * huks.initSession和huks.updateSession
  3. * 以及huks.finishSession操作中的任一階段發(fā)生錯誤時,
  4. * 都需要調(diào)用huks.abortSession來終止密鑰的使用。
  5. *
  6. * 以下以RSA2048密鑰的callback功能使用為例
  7. */
  8. function stringToUint8Array(str) {
  9. let arr = [];
  10. for (let i = 0, j = str.length; i < j; ++i) {
  11. arr.push(str.charCodeAt(i));
  12. }
  13. let tmpUint8Array = new Uint8Array(arr);
  14. return tmpUint8Array;
  15. }
  16. let keyAlias = "HuksDemoRSA";
  17. let properties = new Array();
  18. let options = {
  19. properties: properties,
  20. inData: new Uint8Array(0)
  21. };
  22. let handle;
  23. async function generateKey() {
  24. properties[0] = {
  25. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  26. value: huks.HuksKeyAlg.HUKS_ALG_RSA
  27. };
  28. properties[1] = {
  29. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  30. value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
  31. };
  32. properties[2] = {
  33. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  34. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
  35. };
  36. properties[3] = {
  37. tag: huks.HuksTag.HUKS_TAG_PADDING,
  38. value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5
  39. };
  40. properties[4] = {
  41. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  42. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  43. };
  44. properties[5] = {
  45. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  46. value: huks.HuksCipherMode.HUKS_MODE_ECB,
  47. }
  48. try {
  49. await huks.generateKeyItem(keyAlias, options, function (error, data) {
  50. if (error) {
  51. console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  52. } else {
  53. console.info(`callback: generateKeyItem success`);
  54. }
  55. });
  56. } catch (error) {
  57. console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  58. }
  59. }
  60. async function huksInit() {
  61. console.log('enter huksInit');
  62. try {
  63. huks.initSession(keyAlias, options, function (error, data) {
  64. if (error) {
  65. console.error(`callback: initSession failed, code: ${error.code}, msg: ${error.message}`);
  66. } else {
  67. console.info(`callback: initSession success, data = ${JSON.stringify(data)}`);
  68. handle = data.handle;
  69. }
  70. });
  71. } catch (error) {
  72. console.error(`callback: initSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
  73. }
  74. }
  75. async function huksUpdate() {
  76. console.log('enter huksUpdate');
  77. options.inData = stringToUint8Array("huksHmacTest");
  78. try {
  79. huks.updateSession(handle, options, function (error, data) {
  80. if (error) {
  81. console.error(`callback: updateSession failed, code: ${error.code}, msg: ${error.message}`);
  82. } else {
  83. console.info(`callback: updateSession success, data = ${JSON.stringify(data)}`);
  84. }
  85. });
  86. } catch (error) {
  87. console.error(`callback: updateSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
  88. }
  89. }
  90. async function huksFinish() {
  91. console.log('enter huksFinish');
  92. options.inData = new Uint8Array(0);
  93. try {
  94. huks.finishSession(handle, options, function (error, data) {
  95. if (error) {
  96. console.error(`callback: finishSession failed, code: ${error.code}, msg: ${error.message}`);
  97. } else {
  98. console.info(`callback: finishSession success, data = ${JSON.stringify(data)}`);
  99. }
  100. });
  101. } catch (error) {
  102. console.error(`callback: finishSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
  103. }
  104. }
  105. async function huksAbort() {
  106. console.log('enter huksAbort');
  107. try {
  108. huks.abortSession(handle, options, function (error, data) {
  109. if (error) {
  110. console.error(`callback: abortSession failed, code: ${error.code}, msg: ${error.message}`);
  111. } else {
  112. console.info(`callback: abortSession success`);
  113. }
  114. });
  115. } catch (error) {
  116. console.error(`callback: abortSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
  117. }
  118. }

huks.abortSession9+

abortSession(handle: number, options: HuksOptions) : Promise<void>;

abortSession操作密鑰接口,使用Promise方式異步返回結(jié)果。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

abortSession操作的handle。

options

HuksOptions

abortSession操作的參數(shù)集合。

返回值

類型

說明

Promise<void>

Promise對象。將abortSession操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

示例:

  1. /* huks.initSession, huks.updateSession, huks.finishSession為三段式接口,需要一起使用,當(dāng)
  2. * huks.initSession和huks.updateSession
  3. * 以及huks.finishSession操作中的任一階段發(fā)生錯誤時,
  4. * 都需要調(diào)用huks.abortSession來終止密鑰的使用。
  5. *
  6. * 以下以RSA2048密鑰的callback功能使用為例
  7. */
  8. function stringToUint8Array(str) {
  9. let arr = [];
  10. for (let i = 0, j = str.length; i < j; ++i) {
  11. arr.push(str.charCodeAt(i));
  12. }
  13. let tmpUint8Array = new Uint8Array(arr);
  14. return tmpUint8Array;
  15. }
  16. let keyAlias = "HuksDemoRSA";
  17. let properties = new Array();
  18. let options = {
  19. properties: properties,
  20. inData: new Uint8Array(0)
  21. };
  22. let handle;
  23. async function generateKey() {
  24. properties[0] = {
  25. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  26. value: huks.HuksKeyAlg.HUKS_ALG_RSA
  27. };
  28. properties[1] = {
  29. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  30. value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
  31. };
  32. properties[2] = {
  33. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  34. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
  35. };
  36. properties[3] = {
  37. tag: huks.HuksTag.HUKS_TAG_PADDING,
  38. value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5
  39. };
  40. properties[4] = {
  41. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  42. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  43. };
  44. properties[5] = {
  45. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  46. value: huks.HuksCipherMode.HUKS_MODE_ECB,
  47. }
  48. try {
  49. await huks.generateKeyItem(keyAlias, options)
  50. .then((data) => {
  51. console.info(`promise: generateKeyItem success`);
  52. })
  53. .catch(error => {
  54. console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  55. });
  56. } catch (error) {
  57. console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`);
  58. }
  59. }
  60. async function huksInit() {
  61. console.log('enter huksInit');
  62. try {
  63. await huks.initSession(keyAlias, options)
  64. .then ((data) => {
  65. console.info(`promise: initSession success, data = ${JSON.stringify(data)}`);
  66. handle = data.handle;
  67. })
  68. .catch(error => {
  69. console.error(`promise: initSession key failed, code: ${error.code}, msg: ${error.message}`);
  70. });
  71. } catch (error) {
  72. console.error(`promise: initSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
  73. }
  74. }
  75. async function huksUpdate() {
  76. console.log('enter huksUpdate');
  77. options.inData = stringToUint8Array("huksHmacTest");
  78. try {
  79. await huks.updateSession(handle, options)
  80. .then ((data) => {
  81. console.info(`promise: updateSession success, data = ${JSON.stringify(data)}`);
  82. })
  83. .catch(error => {
  84. console.error(`promise: updateSession failed, code: ${error.code}, msg: ${error.message}`);
  85. });
  86. } catch (error) {
  87. console.error(`promise: updateSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
  88. }
  89. }
  90. async function huksFinish() {
  91. console.log('enter huksFinish');
  92. options.inData = new Uint8Array(0);
  93. try {
  94. await huks.finishSession(handle, options)
  95. .then ((data) => {
  96. console.info(`promise: finishSession success, data = ${JSON.stringify(data)}`);
  97. })
  98. .catch(error => {
  99. console.error(`promise: finishSession failed, code: ${error.code}, msg: ${error.message}`);
  100. });
  101. } catch (error) {
  102. console.error(`promise: finishSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
  103. }
  104. }
  105. async function huksAbort() {
  106. console.log('enter huksAbort');
  107. try {
  108. await huks.abortSession(handle, options)
  109. .then ((data) => {
  110. console.info(`promise: abortSession success`);
  111. })
  112. .catch(error => {
  113. console.error(`promise: abortSession failed, code: ${error.code}, msg: ${error.message}`);
  114. });
  115. } catch (error) {
  116. console.error(`promise: abortSession input arg invalid, code: ${error.code}, msg: ${error.message}`);
  117. }
  118. }

HuksExceptionErrCode9+

表示錯誤碼的枚舉以及對應(yīng)的錯誤信息, 錯誤碼表示錯誤類型,錯誤信息展示錯誤詳情。

關(guān)于錯誤碼的具體信息,可在錯誤碼參考文檔中查看。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_ERR_CODE_PERMISSION_FAIL

201

權(quán)限錯誤導(dǎo)致失敗。

HUKS_ERR_CODE_ILLEGAL_ARGUMENT

401

參數(shù)錯誤導(dǎo)致失敗。

HUKS_ERR_CODE_NOT_SUPPORTED_API

801

不支持的API。

HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED

12000001

不支持的功能/特性。

HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT

12000002

缺少密鑰算法參數(shù)。

HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT

12000003

無效密鑰算法參數(shù)。

HUKS_ERR_CODE_FILE_OPERATION_FAIL

12000004

文件操作失敗。

HUKS_ERR_CODE_COMMUNICATION_FAIL

12000005

通信失敗。

HUKS_ERR_CODE_CRYPTO_FAIL

12000006

算法庫操作失敗。

HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED

12000007

密鑰訪問失敗-密鑰訪問失效。

HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED

12000008

密鑰訪問失敗-密鑰認(rèn)證失敗。

HUKS_ERR_CODE_KEY_AUTH_TIME_OUT

12000009

密鑰訪問失敗-密鑰訪問超時。

HUKS_ERR_CODE_SESSION_LIMIT

12000010

密鑰操作會話數(shù)已達上限。

HUKS_ERR_CODE_ITEM_NOT_EXIST

12000011

目標(biāo)對象不存在。

HUKS_ERR_CODE_EXTERNAL_ERROR

12000012

外部錯誤。

HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST

12000013

缺失所需憑據(jù)。

HUKS_ERR_CODE_INSUFFICIENT_MEMORY

12000014

內(nèi)存不足。

HUKS_ERR_CODE_CALL_SERVICE_FAILED

12000015

調(diào)用其他系統(tǒng)服務(wù)失敗。

HuksKeyPurpose

表示密鑰用途。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_KEY_PURPOSE_ENCRYPT

1

表示密鑰用于對明文進行加密操作。

HUKS_KEY_PURPOSE_DECRYPT

2

表示密鑰用于對密文進行解密操作。

HUKS_KEY_PURPOSE_SIGN

4

表示密鑰用于對數(shù)據(jù)進行簽名。

HUKS_KEY_PURPOSE_VERIFY

8

表示密鑰用于驗證簽名后的數(shù)據(jù)。

HUKS_KEY_PURPOSE_DERIVE

16

表示密鑰用于派生密鑰。

HUKS_KEY_PURPOSE_WRAP

32

表示密鑰用于加密導(dǎo)出。

HUKS_KEY_PURPOSE_UNWRAP

64

表示密鑰加密導(dǎo)入。

HUKS_KEY_PURPOSE_MAC

128

表示密鑰用于生成mac消息驗證碼。

HUKS_KEY_PURPOSE_AGREE

256

表示密鑰用于進行密鑰協(xié)商。

HuksKeyDigest

表示摘要算法。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_DIGEST_NONE

0

表示無摘要算法。

HUKS_DIGEST_MD5

1

表示MD5摘要算法。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_DIGEST_SM39+

2

表示SM3摘要算法。

HUKS_DIGEST_SHA1

10

表示SHA1摘要算法。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_DIGEST_SHA224

11

表示SHA224摘要算法。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_DIGEST_SHA256

12

表示SHA256摘要算法。

HUKS_DIGEST_SHA384

13

表示SHA384摘要算法。

HUKS_DIGEST_SHA512

14

表示SHA512摘要算法。

HuksKeyPadding

表示補齊算法。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_PADDING_NONE

0

表示不使用補齊算法。

HUKS_PADDING_OAEP

1

表示使用OAEP補齊算法。

HUKS_PADDING_PSS

2

表示使用PSS補齊算法。

HUKS_PADDING_PKCS1_V1_5

3

表示使用PKCS1_V1_5補齊算法。

HUKS_PADDING_PKCS5

4

表示使用PKCS5補齊算法。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_PADDING_PKCS7

5

表示使用PKCS7補齊算法。

HuksCipherMode

表示加密模式。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_MODE_ECB

1

表示使用ECB加密模式。

HUKS_MODE_CBC

2

表示使用CBC加密模式。

HUKS_MODE_CTR

3

表示使用CTR加密模式。

HUKS_MODE_OFB

4

表示使用OFB加密模式。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_MODE_CCM

31

表示使用CCM加密模式。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_MODE_GCM

32

表示使用GCM加密模式。

HuksKeySize

表示密鑰長度。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_RSA_KEY_SIZE_512

512

表示使用RSA算法的密鑰長度為512bit。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_RSA_KEY_SIZE_768

768

表示使用RSA算法的密鑰長度為768bit。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_RSA_KEY_SIZE_1024

1024

表示使用RSA算法的密鑰長度為1024bit。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_RSA_KEY_SIZE_2048

2048

表示使用RSA算法的密鑰長度為2048bit。

HUKS_RSA_KEY_SIZE_3072

3072

表示使用RSA算法的密鑰長度為3072bit。

HUKS_RSA_KEY_SIZE_4096

4096

表示使用RSA算法的密鑰長度為4096bit。

HUKS_ECC_KEY_SIZE_224

224

表示使用ECC算法的密鑰長度為224bit。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_ECC_KEY_SIZE_256

256

表示使用ECC算法的密鑰長度為256bit。

HUKS_ECC_KEY_SIZE_384

384

表示使用ECC算法的密鑰長度為384bit。

HUKS_ECC_KEY_SIZE_521

521

表示使用ECC算法的密鑰長度為521bit。

HUKS_AES_KEY_SIZE_128

128

表示使用AES算法的密鑰長度為128bit。

HUKS_AES_KEY_SIZE_192

192

表示使用AES算法的密鑰長度為192bit。

HUKS_AES_KEY_SIZE_256

256

表示使用AES算法的密鑰長度為256bit。

HUKS_AES_KEY_SIZE_512

512

表示使用AES算法的密鑰長度為512bit。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_CURVE25519_KEY_SIZE_256

256

表示使用CURVE25519算法的密鑰長度為256bit。

HUKS_DH_KEY_SIZE_2048

2048

表示使用DH算法的密鑰長度為2048bit。

HUKS_DH_KEY_SIZE_3072

3072

表示使用DH算法的密鑰長度為3072bit。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_DH_KEY_SIZE_4096

4096

表示使用DH算法的密鑰長度為4096bit。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_SM2_KEY_SIZE_2569+

256

表示SM2算法的密鑰長度為256bit。

HUKS_SM4_KEY_SIZE_1289+

128

表示SM4算法的密鑰長度為128bit。

HuksKeyAlg

表示密鑰使用的算法。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_ALG_RSA

1

表示使用RSA算法。

HUKS_ALG_ECC

2

表示使用ECC算法。

HUKS_ALG_DSA

3

表示使用DSA算法。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回12000003錯誤碼。

HUKS_ALG_AES

20

表示使用AES算法。

HUKS_ALG_HMAC

50

表示使用HMAC算法。

HUKS_ALG_HKDF

51

表示使用HKDF算法。

HUKS_ALG_PBKDF2

52

表示使用PBKDF2算法。

HUKS_ALG_ECDH

100

表示使用ECDH算法。

HUKS_ALG_X25519

101

表示使用X25519算法。

HUKS_ALG_ED25519

102

表示使用ED25519算法。

HUKS_ALG_DH

103

表示使用DH算法。

HUKS_ALG_SM29+

150

表示使用SM2算法。

HUKS_ALG_SM39+

151

表示使用SM3算法。

HUKS_ALG_SM49+

152

表示使用SM4算法。

HuksKeyGenerateType

表示生成密鑰的類型。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_KEY_GENERATE_TYPE_DEFAULT

0

默認(rèn)生成的密鑰。

HUKS_KEY_GENERATE_TYPE_DERIVE

1

派生生成的密鑰。

HUKS_KEY_GENERATE_TYPE_AGREE

2

協(xié)商生成的密鑰。

HuksKeyFlag

表示密鑰的產(chǎn)生方式。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_KEY_FLAG_IMPORT_KEY

1

表示通過導(dǎo)入公鑰接口導(dǎo)入的密鑰。

HUKS_KEY_FLAG_GENERATE_KEY

2

表示通過生成密鑰接口生成的密鑰。

HUKS_KEY_FLAG_AGREE_KEY

3

表示通過生成密鑰協(xié)商接口生成的密鑰。

HUKS_KEY_FLAG_DERIVE_KEY

4

表示通過生成密鑰派生接口生成的密鑰。

HuksKeyStorageType

表示密鑰存儲方式。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_STORAGE_TEMP

0

表示通過本地直接管理密鑰。

HUKS_STORAGE_PERSISTENT

1

表示通過HUKS service管理密鑰。

HuksSendType

表示發(fā)送Tag的方式。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_SEND_TYPE_ASYNC

0

表示異步發(fā)送TAG。

HUKS_SEND_TYPE_SYNC

1

表示同步發(fā)送TAG。

HuksUnwrapSuite9+

表示導(dǎo)入加密密鑰的算法套件。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_UNWRAP_SUITE_X25519_AES_256_GCM_NOPADDING

1

導(dǎo)入加密密鑰時,X25519密鑰協(xié)商后使用AES-256 GCM加密。

HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING

2

導(dǎo)入加密密鑰時,ECDH密鑰協(xié)商后使用AES-256 GCM加密。

HuksImportKeyType9+

表示導(dǎo)入密鑰的密鑰類型,默認(rèn)為導(dǎo)入公鑰,導(dǎo)入對稱密鑰時不需要該字段。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_KEY_TYPE_PUBLIC_KEY

0

表示導(dǎo)入的密鑰類型為公鑰。

HUKS_KEY_TYPE_PRIVATE_KEY

1

表示導(dǎo)入的密鑰類型為私鑰。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回401錯誤碼。

HUKS_KEY_TYPE_KEY_PAIR

2

表示導(dǎo)入的密鑰類型為公私鑰對。

HuksUserAuthType9+

表示用戶認(rèn)證類型。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_USER_AUTH_TYPE_FINGERPRINT

1 << 0

表示用戶認(rèn)證類型為指紋。

HUKS_USER_AUTH_TYPE_FACE

1 << 1

表示用戶認(rèn)證類型為人臉 。

HUKS_USER_AUTH_TYPE_PIN

1 << 2

表示用戶認(rèn)證類型為PIN碼。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回801錯誤碼。

HuksAuthAccessType9+

表示安全訪問控制類型。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_AUTH_ACCESS_INVALID_CLEAR_PASSWORD

1 << 0

表示安全訪問控制類型為清除密碼后密鑰無效。

HUKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL

1 << 1

表示安全訪問控制類型為新錄入生物特征后密鑰無效。

HuksChallengeType9+

表示密鑰使用時生成challenge的類型。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_CHALLENGE_TYPE_NORMAL

0

表示challenge為普通類型,默認(rèn)32字節(jié)。

HUKS_CHALLENGE_TYPE_CUSTOM

1

表示challenge為用戶自定義類型。支持使用多個密鑰僅一次認(rèn)證。

HUKS_CHALLENGE_TYPE_NONE

2

表示免challenge類型。

HuksChallengePosition9+

表示challenge類型為用戶自定義類型時,生成的challenge有效長度僅為8字節(jié)連續(xù)的數(shù)據(jù),且僅支持4種位置 。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_CHALLENGE_POS_0

0

表示0~7字節(jié)為當(dāng)前密鑰的有效challenge。

HUKS_CHALLENGE_POS_1

1

表示8~15字節(jié)為當(dāng)前密鑰的有效challenge。

HUKS_CHALLENGE_POS_2

2

表示16~23字節(jié)為當(dāng)前密鑰的有效challenge。

HUKS_CHALLENGE_POS_3

3

表示24~31字節(jié)為當(dāng)前密鑰的有效challenge。

HuksSecureSignType9+

表示生成或?qū)朊荑€時,指定該密鑰的簽名類型。

說明

當(dāng)前HarmonyOS設(shè)備均不支持該接口,應(yīng)用調(diào)用時將返回801錯誤碼。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_SECURE_SIGN_WITH_AUTHINFO

1

表示簽名類型為攜帶認(rèn)證信息。生成或?qū)朊荑€時指定該字段,則在使用密鑰進行簽名時,對待簽名的數(shù)據(jù)添加認(rèn)證信息后進行簽名。

HuksTagType

表示Tag的數(shù)據(jù)類型。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_TAG_TYPE_INVALID

0 << 28

表示非法的Tag類型。

HUKS_TAG_TYPE_INT

1 << 28

表示該Tag的數(shù)據(jù)類型為int類型的number。

HUKS_TAG_TYPE_UINT

2 << 28

表示該Tag的數(shù)據(jù)類型為uint類型的number。

HUKS_TAG_TYPE_ULONG

3 << 28

表示該Tag的數(shù)據(jù)類型為bigint。

HUKS_TAG_TYPE_BOOL

4 << 28

表示該Tag的數(shù)據(jù)類型為boolean。

HUKS_TAG_TYPE_BYTES

5 << 28

表示該Tag的數(shù)據(jù)類型為Uint8Array。

HuksTag

表示調(diào)用參數(shù)的Tag。

系統(tǒng)能力:SystemCapability.Security.Huks

名稱

說明

HUKS_TAG_INVALID

HuksTagType.HUKS_TAG_TYPE_INVALID | 0

表示非法的Tag。

HUKS_TAG_ALGORITHM

HuksTagType.HUKS_TAG_TYPE_UINT | 1

表示算法的Tag。

HUKS_TAG_PURPOSE

HuksTagType.HUKS_TAG_TYPE_UINT | 2

表示密鑰用途的Tag。

HUKS_TAG_KEY_SIZE

HuksTagType.HUKS_TAG_TYPE_UINT | 3

表示密鑰長度的Tag。

HUKS_TAG_DIGEST

HuksTagType.HUKS_TAG_TYPE_UINT | 4

表示摘要算法的Tag。

HUKS_TAG_PADDING

HuksTagType.HUKS_TAG_TYPE_UINT | 5

表示補齊算法的Tag。

HUKS_TAG_BLOCK_MODE

HuksTagType.HUKS_TAG_TYPE_UINT | 6

表示加密模式的Tag。

HUKS_TAG_KEY_TYPE

HuksTagType.HUKS_TAG_TYPE_UINT | 7

表示密鑰類型的Tag。

HUKS_TAG_ASSOCIATED_DATA

HuksTagType.HUKS_TAG_TYPE_BYTES | 8

表示附加身份驗證數(shù)據(jù)的Tag。

HUKS_TAG_NONCE

HuksTagType.HUKS_TAG_TYPE_BYTES | 9

表示密鑰加解密的字段。

HUKS_TAG_IV

HuksTagType.HUKS_TAG_TYPE_BYTES | 10

表示密鑰初始化的向量。

HUKS_TAG_INFO

HuksTagType.HUKS_TAG_TYPE_BYTES | 11

表示密鑰派生時的info。

HUKS_TAG_SALT

HuksTagType.HUKS_TAG_TYPE_BYTES | 12

表示密鑰派生時的鹽值。

HUKS_TAG_PWD

HuksTagType.HUKS_TAG_TYPE_BYTES | 13

表示密鑰派生時的password。

HUKS_TAG_ITERATION

HuksTagType.HUKS_TAG_TYPE_UINT | 14

表示密鑰派生時的迭代次數(shù)。

HUKS_TAG_KEY_GENERATE_TYPE

HuksTagType.HUKS_TAG_TYPE_UINT | 15

表示生成密鑰類型的Tag。

HUKS_TAG_DERIVE_MAIN_KEY

HuksTagType.HUKS_TAG_TYPE_BYTES | 16

表示密鑰派生時的主密鑰。

HUKS_TAG_DERIVE_FACTOR

HuksTagType.HUKS_TAG_TYPE_BYTES | 17

表示密鑰派生時的派生因子。

HUKS_TAG_DERIVE_ALG

HuksTagType.HUKS_TAG_TYPE_UINT | 18

表示密鑰派生時的算法類型。

HUKS_TAG_AGREE_ALG

HuksTagType.HUKS_TAG_TYPE_UINT | 19

表示密鑰協(xié)商時的算法類型。

HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS

HuksTagType.HUKS_TAG_TYPE_BOOL | 20

表示密鑰協(xié)商時的公鑰別名。

HUKS_TAG_AGREE_PRIVATE_KEY_ALIAS

HuksTagType.HUKS_TAG_TYPE_BYTES | 21

表示密鑰協(xié)商時的私鑰別名。

HUKS_TAG_AGREE_PUBLIC_KEY

HuksTagType.HUKS_TAG_TYPE_BYTES | 22

表示密鑰協(xié)商時的公鑰。

HUKS_TAG_KEY_ALIAS

HuksTagType.HUKS_TAG_TYPE_BYTES | 23

表示密鑰別名。

HUKS_TAG_DERIVE_KEY_SIZE

HuksTagType.HUKS_TAG_TYPE_UINT | 24

表示派生密鑰的大小。

HUKS_TAG_IMPORT_KEY_TYPE9+

HuksTagType.HUKS_TAG_TYPE_UINT | 25

表示導(dǎo)入的密鑰類型。

HUKS_TAG_UNWRAP_ALGORITHM_SUITE9+

HuksTagType.HUKS_TAG_TYPE_UINT | 26

表示導(dǎo)入加密密鑰的套件。

HUKS_TAG_ACTIVE_DATETIME(deprecated)

HuksTagType.HUKS_TAG_TYPE_ULONG | 201

原為證書業(yè)務(wù)預(yù)留字段,當(dāng)前證書管理已獨立,此字段廢棄,不再預(yù)留。

HUKS_TAG_ORIGINATION_EXPIRE_DATETIME(deprecated)

HuksTagType.HUKS_TAG_TYPE_ULONG | 202

原為證書業(yè)務(wù)預(yù)留字段,當(dāng)前證書管理已獨立,此字段廢棄,不再預(yù)留。

HUKS_TAG_USAGE_EXPIRE_DATETIME(deprecated)

HuksTagType.HUKS_TAG_TYPE_ULONG | 203

原為證書業(yè)務(wù)預(yù)留字段,當(dāng)前證書管理已獨立,此字段廢棄,不再預(yù)留。

HUKS_TAG_CREATION_DATETIME(deprecated)

HuksTagType.HUKS_TAG_TYPE_ULONG | 204

原為證書業(yè)務(wù)預(yù)留字段,當(dāng)前證書管理已獨立,此字段廢棄,不再預(yù)留。

HUKS_TAG_ALL_USERS

HuksTagType.HUKS_TAG_TYPE_BOOL | 301

預(yù)留字段。

HUKS_TAG_USER_ID

HuksTagType.HUKS_TAG_TYPE_UINT | 302

表示當(dāng)前密鑰屬于哪個userID。

HUKS_TAG_NO_AUTH_REQUIRED

HuksTagType.HUKS_TAG_TYPE_BOOL | 303

預(yù)留字段。

HUKS_TAG_USER_AUTH_TYPE

HuksTagType.HUKS_TAG_TYPE_UINT | 304

表示用戶認(rèn)證類型。從HuksUserAuthType中選擇,需要與安全訪問控制類型同時設(shè)置。支持同時指定兩種用戶認(rèn)證類型,如:安全訪問控制類型指定為HUKS_SECURE_ACCESS_INVALID_NEW_BIO_ENROLL時,密鑰訪問認(rèn)證類型可以指定以下三種: HUKS_USER_AUTH_TYPE_FACE 、HUKS_USER_AUTH_TYPE_FINGERPRINT、HUKS_USER_AUTH_TYPE_FACE | HUKS_USER_AUTH_TYPE_FINGERPRINT

HUKS_TAG_AUTH_TIMEOUT

HuksTagType.HUKS_TAG_TYPE_UINT | 305

表示authtoken單次有效期。

HUKS_TAG_AUTH_TOKEN

HuksTagType.HUKS_TAG_TYPE_BYTES | 306

用于傳入authToken的字段。

HUKS_TAG_KEY_AUTH_ACCESS_TYPE9+

HuksTagType.HUKS_TAG_TYPE_UINT | 307

表示安全訪問控制類型。從HuksAuthAccessType中選擇,需要和用戶認(rèn)證類型同時設(shè)置。

HUKS_TAG_KEY_SECURE_SIGN_TYPE9+

HuksTagType.HUKS_TAG_TYPE_UINT | 308

表示生成或?qū)朊荑€時,指定該密鑰的簽名類型。

HUKS_TAG_CHALLENGE_TYPE9+

HuksTagType.HUKS_TAG_TYPE_UINT | 309

表示密鑰使用時生成的challenge類型。從HuksChallengeType中選擇

HUKS_TAG_CHALLENGE_POS9+

HuksTagType.HUKS_TAG_TYPE_UINT | 310

表示challenge類型為用戶自定義類型時,huks產(chǎn)生的challenge有效長度僅為8字節(jié)連續(xù)的數(shù)據(jù)。從HuksChallengePosition中選擇。

HUKS_TAG_ATTESTATION_CHALLENGE

HuksTagType.HUKS_TAG_TYPE_BYTES | 501

表示attestation時的挑戰(zhàn)值。

HUKS_TAG_ATTESTATION_APPLICATION_ID

HuksTagType.HUKS_TAG_TYPE_BYTES | 502

表示attestation時擁有該密鑰的application的Id。

HUKS_TAG_ATTESTATION_ID_BRAND

HuksTagType.HUKS_TAG_TYPE_BYTES | 503

表示設(shè)備的品牌。

HUKS_TAG_ATTESTATION_ID_DEVICE

HuksTagType.HUKS_TAG_TYPE_BYTES | 504

表示設(shè)備的設(shè)備ID。

HUKS_TAG_ATTESTATION_ID_PRODUCT

HuksTagType.HUKS_TAG_TYPE_BYTES | 505

表示設(shè)備的產(chǎn)品名。

HUKS_TAG_ATTESTATION_ID_SERIAL

HuksTagType.HUKS_TAG_TYPE_BYTES | 506

表示設(shè)備的SN號。

HUKS_TAG_ATTESTATION_ID_IMEI

HuksTagType.HUKS_TAG_TYPE_BYTES | 507

表示設(shè)備的IMEI號。

HUKS_TAG_ATTESTATION_ID_MEID

HuksTagType.HUKS_TAG_TYPE_BYTES | 508

表示設(shè)備的MEID號。

HUKS_TAG_ATTESTATION_ID_MANUFACTURER

HuksTagType.HUKS_TAG_TYPE_BYTES | 509

表示設(shè)備的制造商。

HUKS_TAG_ATTESTATION_ID_MODEL

HuksTagType.HUKS_TAG_TYPE_BYTES | 510

表示設(shè)備的型號。

HUKS_TAG_ATTESTATION_ID_ALIAS

HuksTagType.HUKS_TAG_TYPE_BYTES | 511

表示attestation時的密鑰別名。

HUKS_TAG_ATTESTATION_ID_SOCID

HuksTagType.HUKS_TAG_TYPE_BYTES | 512

表示設(shè)備的SOCID。

HUKS_TAG_ATTESTATION_ID_UDID

HuksTagType.HUKS_TAG_TYPE_BYTES | 513

表示設(shè)備的UDID。

HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO

HuksTagType.HUKS_TAG_TYPE_BYTES | 514

表示attestation時的安全憑據(jù)。

HUKS_TAG_ATTESTATION_ID_VERSION_INFO

HuksTagType.HUKS_TAG_TYPE_BYTES | 515

表示attestation時的版本號。

HUKS_TAG_IS_KEY_ALIAS

HuksTagType.HUKS_TAG_TYPE_BOOL | 1001

表示是否使用生成key時傳入的別名的Tag。

HUKS_TAG_KEY_STORAGE_FLAG

HuksTagType.HUKS_TAG_TYPE_UINT | 1002

表示密鑰存儲方式的Tag。

HUKS_TAG_IS_ALLOWED_WRAP

HuksTagType.HUKS_TAG_TYPE_BOOL | 1003

預(yù)留字段。

HUKS_TAG_KEY_WRAP_TYPE

HuksTagType.HUKS_TAG_TYPE_UINT | 1004

預(yù)留字段。

HUKS_TAG_KEY_AUTH_ID

HuksTagType.HUKS_TAG_TYPE_BYTES | 1005

預(yù)留字段。

HUKS_TAG_KEY_ROLE

HuksTagType.HUKS_TAG_TYPE_UINT | 1006

預(yù)留字段。

HUKS_TAG_KEY_FLAG

HuksTagType.HUKS_TAG_TYPE_UINT | 1007

表示密鑰標(biāo)志的Tag。

HUKS_TAG_IS_ASYNCHRONIZED

HuksTagType.HUKS_TAG_TYPE_UINT | 1008

預(yù)留字段。

HUKS_TAG_SECURE_KEY_ALIAS

HuksTagType.HUKS_TAG_TYPE_BOOL | 1009

用于傳入GCM模式中的AEAD數(shù)據(jù)的字段。

HUKS_TAG_SECURE_KEY_UUID

HuksTagType.HUKS_TAG_TYPE_BYTES | 1010

預(yù)留字段。

HUKS_TAG_KEY_DOMAIN

HuksTagType.HUKS_TAG_TYPE_UINT | 1011

預(yù)留字段。

HUKS_TAG_PROCESS_NAME

HuksTagType.HUKS_TAG_TYPE_BYTES | 10001

表示進程名稱的Tag。

HUKS_TAG_PACKAGE_NAME

HuksTagType.HUKS_TAG_TYPE_BYTES | 10002

預(yù)留字段。

HUKS_TAG_ACCESS_TIME

HuksTagType.HUKS_TAG_TYPE_UINT | 10003

預(yù)留字段。

HUKS_TAG_USES_TIME

HuksTagType.HUKS_TAG_TYPE_UINT | 10004

預(yù)留字段。

HUKS_TAG_CRYPTO_CTX

HuksTagType.HUKS_TAG_TYPE_ULONG | 10005

預(yù)留字段。

HUKS_TAG_KEY

HuksTagType.HUKS_TAG_TYPE_BYTES | 10006

預(yù)留字段。

HUKS_TAG_KEY_VERSION

HuksTagType.HUKS_TAG_TYPE_UINT | 10007

表示密鑰版本的Tag。

HUKS_TAG_PAYLOAD_LEN

HuksTagType.HUKS_TAG_TYPE_UINT | 10008

預(yù)留字段。

HUKS_TAG_AE_TAG

HuksTagType.HUKS_TAG_TYPE_BYTES | 10009

預(yù)留字段。

HUKS_TAG_IS_KEY_HANDLE

HuksTagType.HUKS_TAG_TYPE_ULONG | 10010

預(yù)留字段。

HUKS_TAG_OS_VERSION

HuksTagType.HUKS_TAG_TYPE_UINT | 10101

表示操作系統(tǒng)版本的Tag。

HUKS_TAG_OS_PATCHLEVEL

HuksTagType.HUKS_TAG_TYPE_UINT | 10102

表示操作系統(tǒng)補丁級別的Tag。

HUKS_TAG_SYMMETRIC_KEY_DATA

HuksTagType.HUKS_TAG_TYPE_BYTES | 20001

預(yù)留字段。

HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA

HuksTagType.HUKS_TAG_TYPE_BYTES | 20002

預(yù)留字段。

HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA

HuksTagType.HUKS_TAG_TYPE_BYTES | 20003

預(yù)留字段。

huks.generateKey(deprecated)

generateKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void

生成密鑰,使用Callback回調(diào)異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.generateKeyItem替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

別名。

options

HuksOptions

用于存放生成key所需TAG。

callback

AsyncCallback<HuksResult>

回調(diào)函數(shù)。返回HUKS_SUCCESS時表示接口使用成功,其余結(jié)果請參考HuksResult進行錯誤碼查詢。

示例:

  1. /* 以生成RSA2048密鑰為例 */
  2. let keyAlias = 'keyAlias';
  3. let properties = new Array();
  4. properties[0] = {
  5. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  6. value: huks.HuksKeyAlg.HUKS_ALG_RSA
  7. };
  8. properties[1] = {
  9. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  10. value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
  11. };
  12. properties[2] = {
  13. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  14. value:
  15. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT |
  16. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
  17. };
  18. properties[3] = {
  19. tag: huks.HuksTag.HUKS_TAG_PADDING,
  20. value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
  21. };
  22. properties[4] = {
  23. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  24. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  25. };
  26. let options = {
  27. properties: properties
  28. };
  29. huks.generateKey(keyAlias, options, function (err, data){});

huks.generateKey(deprecated)

generateKey(keyAlias: string, options: HuksOptions) : Promise<HuksResult>

生成密鑰,使用Promise方式異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.generateKeyItem替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名。

options

HuksOptions

用于存放生成key所需TAG。

返回值

類型

說明

Promise<HuksResult>

Promise對象。返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。

示例:

  1. /* 以生成ECC256密鑰為例 */
  2. let keyAlias = 'keyAlias';
  3. let properties = new Array();
  4. properties[0] = {
  5. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  6. value: huks.HuksKeyAlg.HUKS_ALG_ECC
  7. };
  8. properties[1] = {
  9. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  10. value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256
  11. };
  12. properties[2] = {
  13. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  14. value:
  15. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
  16. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
  17. };
  18. properties[3] = {
  19. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  20. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  21. };
  22. let options = {
  23. properties: properties
  24. };
  25. let result = huks.generateKey(keyAlias, options);

huks.deleteKey(deprecated)

deleteKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void

刪除密鑰,使用Callback回調(diào)異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.deleteKeyItem替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)為生成key時傳入的別名。

options

HuksOptions

空對象(此處傳空即可)。

callback

AsyncCallback<HuksResult>

回調(diào)函數(shù)。返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。

示例:

  1. /* 此處options選擇emptyOptions傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. huks.deleteKey(keyAlias, emptyOptions, function (err, data) {});

huks.deleteKey(deprecated)

deleteKey(keyAlias: string, options: HuksOptions) : Promise<HuksResult>

刪除密鑰,使用Promise方式異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.deleteKeyItem替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)為生成key時傳入的別名。

options

HuksOptions

空對象(此處傳空即可)。

返回值:

類型

說明

Promise<HuksResult>

Promise對象。返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。

示例:

  1. /* 此處options選擇emptyOptions傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. let result = huks.deleteKey(keyAlias, emptyOptions);

huks.importKey(deprecated)

importKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void

導(dǎo)入明文密鑰,使用Callback方式回調(diào)異步返回結(jié)果 。

說明

從API Version 9開始廢棄,建議使用huks.importKeyItem替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名。

options

HuksOptions

用于導(dǎo)入時所需TAG和需要導(dǎo)入的密鑰。

callback

AsyncCallback<HuksResult>

回調(diào)函數(shù)。返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。

示例:

  1. /* 以導(dǎo)入AES256密鑰為例 */
  2. let plainTextSize32 = makeRandomArr(32);
  3. function makeRandomArr(size) {
  4. let arr = new Uint8Array(size);
  5. for (let i = 0; i < size; i++) {
  6. arr[i] = Math.floor(Math.random() * 10);
  7. }
  8. return arr;
  9. };
  10. let keyAlias = 'keyAlias';
  11. let properties = new Array();
  12. properties[0] = {
  13. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  14. value: huks.HuksKeyAlg.HUKS_ALG_AES
  15. };
  16. properties[1] = {
  17. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  18. value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
  19. };
  20. properties[2] = {
  21. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  22. value:
  23. huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
  24. };
  25. properties[3] = {
  26. tag: huks.HuksTag.HUKS_TAG_PADDING,
  27. value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
  28. };
  29. properties[4] = {
  30. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  31. value: huks.HuksCipherMode.HUKS_MODE_CBC
  32. };
  33. let options = {
  34. properties: properties,
  35. inData: plainTextSize32
  36. };
  37. huks.importKey(keyAlias, options, function (err, data){});

huks.importKey(deprecated)

importKey(keyAlias: string, options: HuksOptions) : Promise<HuksResult>

導(dǎo)入明文密鑰,使用Promise方式異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.importKeyItem替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名。

options

HuksOptions

用于導(dǎo)入時所需TAG和需要導(dǎo)入的密鑰。

返回值:

類型

說明

Promise<HuksResult>

Promise對象。返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。

示例:

  1. /* 以導(dǎo)入AES128為例 */
  2. let plainTextSize32 = makeRandomArr(32);
  3. function makeRandomArr(size) {
  4. let arr = new Uint8Array(size);
  5. for (let i = 0; i < size; i++) {
  6. arr[i] = Math.floor(Math.random() * 10);
  7. }
  8. return arr;
  9. };
  10. /*第一步:生成密鑰*/
  11. let keyAlias = 'keyAlias';
  12. let properties = new Array();
  13. properties[0] = {
  14. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  15. value: huks.HuksKeyAlg.HUKS_ALG_AES
  16. };
  17. properties[1] = {
  18. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  19. value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128
  20. };
  21. properties[2] = {
  22. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  23. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT
  24. };
  25. properties[3] = {
  26. tag: huks.HuksTag.HUKS_TAG_PADDING,
  27. value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7
  28. };
  29. properties[4] = {
  30. tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE,
  31. value: huks.HuksCipherMode.HUKS_MODE_CBC
  32. };
  33. let huksoptions = {
  34. properties: properties,
  35. inData: plainTextSize32
  36. };
  37. let result = huks.importKey(keyAlias, huksoptions);

huks.exportKey(deprecated)

exportKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void

導(dǎo)出密鑰,使用Callback方式回調(diào)異步返回的結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.exportKeyItem替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)與所用密鑰生成時使用的別名相同。

options

HuksOptions

空對象(此處傳空即可)。

callback

AsyncCallback<HuksResult>

回調(diào)函數(shù)。返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。outData:返回從密鑰中導(dǎo)出的公鑰。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. huks.exportKey(keyAlias, emptyOptions, function (err, data){});

huks.exportKey(deprecated)

exportKey(keyAlias: string, options: HuksOptions) : Promise<HuksResult>

導(dǎo)出密鑰,使用Promise方式回調(diào)異步返回的結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.exportKeyItem替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)與所用密鑰生成時使用的別名相同。

options

HuksOptions

空對象(此處傳空即可)。

返回值:

類型

說明

Promise<HuksResult>

Promise對象。返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。outData:返回從密鑰中導(dǎo)出的公鑰。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. let result = huks.exportKey(keyAlias, emptyOptions);

huks.getKeyProperties(deprecated)

getKeyProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void

獲取密鑰屬性,使用Callback回調(diào)異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.getKeyItemProperties替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)與所用密鑰生成時使用的別名相同。

options

HuksOptions

空對象(此處傳空即可)。

callback

AsyncCallback<HuksResult>

回調(diào)函數(shù)。errorCode:返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. huks.getKeyProperties(keyAlias, emptyOptions, function (err, data){});

huks.getKeyProperties(deprecated)

getKeyProperties(keyAlias: string, options: HuksOptions) : Promise<HuksResult>

獲取密鑰屬性,使用Promise回調(diào)異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.getKeyItemProperties替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

密鑰別名,應(yīng)與所用密鑰生成時使用的別名相同。

options

HuksOptions

空對象(此處傳空即可)。

返回值:

類型

說明

Promise<HuksResult>

Promise對象。errorCode:返回HUKS_SUCCESS時表示接口使用成功,其他時為錯誤。properties:返回值為生成密鑰時所需參數(shù)。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. let result = huks.getKeyProperties(keyAlias, emptyOptions);

huks.isKeyExist(deprecated)

isKeyExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback<boolean>) : void

判斷密鑰是否存在,使用Callback回調(diào)異步返回結(jié)果 。

說明

從API Version 9開始廢棄,建議使用huks.isKeyItemExist替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

所需查找的密鑰的別名。

options

HuksOptions

空對象(此處傳空即可)。

callback

AsyncCallback<boolean>

回調(diào)函數(shù)。FALSE代表密鑰不存在,TRUE代表密鑰存在。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. huks.isKeyExist(keyAlias, emptyOptions, function (err, data){});

huks.isKeyExist(deprecated)

isKeyExist(keyAlias: string, options: HuksOptions) : Promise<boolean>

判斷密鑰是否存在,使用Promise回調(diào)異步返回結(jié)果 。

說明

從API Version 9開始廢棄,建議使用huks.isKeyItemExist替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

所需查找的密鑰的別名。

options

HuksOptions

空對象(此處傳空即可)。

返回值:

類型

說明

Promise<boolean>

Promise對象。FALSE代表密鑰不存在,TRUE代表密鑰存在。

示例:

  1. /* 此處options選擇emptyOptions來傳空 */
  2. let keyAlias = 'keyAlias';
  3. let emptyOptions = {
  4. properties: []
  5. };
  6. let result = huks.isKeyExist(keyAlias, emptyOptions);

huks.init(deprecated)

init(keyAlias: string, options: HuksOptions, callback: AsyncCallback<HuksHandle>) : void

init操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。huks.init, huks.update, huks.finish為三段式接口,需要一起使用。

說明

從API Version 9開始廢棄,建議使用huks.initSession替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

Init操作密鑰的別名。

options

HuksOptions

Init操作的參數(shù)集合。

callback

AsyncCallback<HuksHandle>

回調(diào)函數(shù)。將Init操作操作返回的handle添加到密鑰管理系統(tǒng)的回調(diào)。

huks.init(deprecated)

init(keyAlias: string, options: HuksOptions) : Promise<HuksHandle>

init操作密鑰接口,使用Promise方式異步返回結(jié)果。huks.init, huks.update, huks.finish為三段式接口,需要一起使用。

說明

從API Version 9開始廢棄,建議使用huks.initSession替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

keyAlias

string

Init操作密鑰的別名。

options

HuksOptions

Init參數(shù)集合。

返回值

類型

說明

Promise<HuksHandle>

Promise對象。將Init操作返回的handle添加到密鑰管理系統(tǒng)的回調(diào)。

huks.update(deprecated)

update(handle: number, token?: Uint8Array, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void

update操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。huks.init, huks.update, huks.finish為三段式接口,需要一起使用。

說明

從API Version 9開始廢棄,建議使用huks.updateSession替代。

系統(tǒng)能力: SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

Update操作的handle。

token

Uint8Array

Update操作的token。

options

HuksOptions

Update操作的參數(shù)集合。

callback

AsyncCallback<HuksResult>

回調(diào)函數(shù)。將Update操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.update(deprecated)

update(handle: number, token?: Uint8Array, options: HuksOptions) : Promise<HuksResult>;

update操作密鑰接口,使用Promise方式異步返回結(jié)果。huks.init, huks.update, huks.finish為三段式接口,需要一起使用。

說明

從API Version 9開始廢棄,建議使用huks.updateSession替代。

系統(tǒng)能力: SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

Update操作的handle。

token

Uint8Array

Update操作的token。

options

HuksOptions

Update操作的參數(shù)集合。

返回值

類型

說明

Promise<HuksResult>

Promise對象。將Update操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.finish(deprecated)

finish(handle: number, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void

finish操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。huks.init, huks.update, huks.finish為三段式接口,需要一起使用。

說明

從API Version 9開始廢棄,建議使用huks.finishSession替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

Finish操作的handle。

options

HuksOptions

Finish的參數(shù)集合。

callback

AsyncCallback<HuksResult>

回調(diào)函數(shù)。將Finish操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

huks.finish(deprecated)

finish(handle: number, options: HuksOptions) : Promise<HuksResult>

finish操作密鑰接口,使用Promise方式異步返回結(jié)果。huks.init, huks.update, huks.finish為三段式接口,需要一起使用。

說明

從API Version 9開始廢棄,建議使用huks.finishSession替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

Finish操作的handle。

options

HuksOptions

Finish操作的參數(shù)集合。

返回值

類型

說明

Promise<HuksResult>

Promise對象,用于獲取異步返回結(jié)果。

huks.abort(deprecated)

abort(handle: number, options: HuksOptions, callback: AsyncCallback<HuksResult>) : void

abort操作密鑰接口,使用Callback回調(diào)異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.abortSession替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

Abort操作的handle。

options

HuksOptions

Abort操作的參數(shù)集合。

callback

AsyncCallback<HuksResult>

回調(diào)函數(shù)。將Abort操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

示例:

  1. /* huks.init, huks.update, huks.finish為三段式接口,需要一起使用,當(dāng)huks.init和huks.update
  2. * 以及huks.finish操作中的任一階段發(fā)生錯誤時,都需要調(diào)用huks.abort來終止密鑰的使用。
  3. *
  4. * 以下以RSA2048密鑰的callback操作使用為例
  5. */
  6. let keyalias = "HuksDemoRSA";
  7. let properties = new Array();
  8. let options = {
  9. properties: properties,
  10. inData: new Uint8Array(0)
  11. };
  12. let handle;
  13. let resultMessage = "";
  14. async function generateKey() {
  15. properties[0] = {
  16. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  17. value: huks.HuksKeyAlg.HUKS_ALG_RSA
  18. };
  19. properties[1] = {
  20. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  21. value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
  22. };
  23. properties[2] = {
  24. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  25. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
  26. };
  27. properties[3] = {
  28. tag: huks.HuksTag.HUKS_TAG_PADDING,
  29. value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
  30. };
  31. properties[4] = {
  32. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  33. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  34. };
  35. huks.generateKey(keyalias, options);
  36. }
  37. function stringToUint8Array(str) {
  38. let arr = [];
  39. for (let i = 0, j = str.length; i < j; ++i) {
  40. arr.push(str.charCodeAt(i));
  41. }
  42. let tmpUint8Array = new Uint8Array(arr);
  43. return tmpUint8Array;
  44. }
  45. async function huksInit() {
  46. await huks.init(keyalias, options).then((data) => {
  47. console.log(`test init data: ${JSON.stringify(data)}`);
  48. handle = data.handle;
  49. }).catch((err) => {
  50. console.log("test init err information: " + JSON.stringify(err))
  51. })
  52. }
  53. async function huksUpdate() {
  54. options.inData = stringToUint8Array("huksHmacTest");
  55. await huks.update(handle, options).then((data) => {
  56. if (data.errorCode === 0) {
  57. resultMessage += "update success!";
  58. } else {
  59. resultMessage += "update fail!";
  60. }
  61. });
  62. console.log(resultMessage);
  63. }
  64. function huksFinish() {
  65. options.inData = stringToUint8Array("HuksDemoHMAC");
  66. huks.finish(handle, options).then((data) => {
  67. if (data.errorCode === 0) {
  68. resultMessage = "finish success!";
  69. } else {
  70. resultMessage = "finish fail errorCode: " + data.errorCode;
  71. }
  72. }).catch((err) => {
  73. resultMessage = "finish fail, catch errorMessage:" + JSON.stringify(err)
  74. });
  75. console.log(resultMessage);
  76. }
  77. async function huksAbort() {
  78. huks.abort(handle, options).then((data) => {
  79. if (data.errorCode === 0) {
  80. resultMessage = "abort success!";
  81. } else {
  82. resultMessage = "abort fail errorCode: " + data.errorCode;
  83. }
  84. }).catch((err) => {
  85. resultMessage = "abort fail, catch errorMessage:" + JSON.stringify(err)
  86. });
  87. console.log(resultMessage);
  88. }

huks.abort(deprecated)

abort(handle: number, options: HuksOptions) : Promise<HuksResult>;

abort操作密鑰接口,使用Promise方式異步返回結(jié)果。

說明

從API Version 9開始廢棄,建議使用huks.abortSession替代。

系統(tǒng)能力:SystemCapability.Security.Huks

參數(shù):

參數(shù)名

類型

必填

說明

handle

number

Abort操作的handle。

options

HuksOptions

Abort操作的參數(shù)集合。

返回值

類型

說明

Promise<HuksResult>

Promise對象。將Abort操作的結(jié)果添加到密鑰管理系統(tǒng)的回調(diào)。

示例:

  1. /* huks.init, huks.update, huks.finish為三段式接口,需要一起使用,當(dāng)huks.init和huks.update
  2. * 以及huks.finish操作中的任一階段發(fā)生錯誤時,都需要調(diào)用huks.abort來終止密鑰的使用。
  3. *
  4. * 以下以RSA2048密鑰的promise操作使用為例
  5. */
  6. let keyalias = "HuksDemoRSA";
  7. let properties = new Array();
  8. let options = {
  9. properties: properties,
  10. inData: new Uint8Array(0)
  11. };
  12. let handle;
  13. let resultMessage = "";
  14. function stringToUint8Array(str) {
  15. let arr = [];
  16. for (let i = 0, j = str.length; i < j; ++i) {
  17. arr.push(str.charCodeAt(i));
  18. }
  19. let tmpUint8Array = new Uint8Array(arr);
  20. return tmpUint8Array;
  21. }
  22. async function generateKey() {
  23. properties[0] = {
  24. tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
  25. value: huks.HuksKeyAlg.HUKS_ALG_RSA
  26. };
  27. properties[1] = {
  28. tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
  29. value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
  30. };
  31. properties[2] = {
  32. tag: huks.HuksTag.HUKS_TAG_PURPOSE,
  33. value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT
  34. };
  35. properties[3] = {
  36. tag: huks.HuksTag.HUKS_TAG_PADDING,
  37. value: huks.HuksKeyPadding.HUKS_PADDING_OAEP
  38. };
  39. properties[4] = {
  40. tag: huks.HuksTag.HUKS_TAG_DIGEST,
  41. value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
  42. };
  43. huks.generateKey(keyalias, options, function (err, data) { });
  44. }
  45. async function huksInit() {
  46. return new Promise((resolve, reject) => {
  47. huks.init(keyalias, options, async function (err, data) {
  48. if (data.errorCode === 0) {
  49. resultMessage = "init success!"
  50. handle = data.handle;
  51. } else {
  52. resultMessage = "init fail errorCode: " + data.errorCode
  53. }
  54. });
  55. });
  56. }
  57. async function huksUpdate() {
  58. options.inData = stringToUint8Array("huksHmacTest");
  59. new Promise((resolve, reject) => {
  60. huks.update(handle, options, function (err, data) {
  61. if (data.errorCode === 0) {
  62. resultMessage += "update success!";
  63. } else {
  64. resultMessage += "update fail!";
  65. }
  66. });
  67. });
  68. console.log(resultMessage);
  69. }
  70. async function huksFinish() {
  71. options.inData = stringToUint8Array("0");
  72. new Promise((resolve, reject) => {
  73. huks.finish(handle, options, function (err, data) {
  74. if (data.errorCode === 0) {
  75. resultMessage = "finish success!";
  76. } else {
  77. resultMessage = "finish fail errorCode: " + data.errorCode;
  78. }
  79. });
  80. });
  81. }
  82. function huksAbort() {
  83. new Promise((resolve, reject) => {
  84. huks.abort(handle, options, function (err, data) {
  85. console.log(`Huks_Demo hmac huksAbort1 data ${JSON.stringify(data)}`);
  86. console.log(`Huks_Demo hmac huksAbort1 err ${JSON.stringify(err)}`);
  87. });
  88. });
  89. }

HuksHandle(deprecated)

huks Handle結(jié)構(gòu)體。

系統(tǒng)能力:SystemCapability.Security.Huks

說明

從API Version 9開始廢棄,建議使用HuksSessionHandle9+替代。

名稱

類型

必填

說明

errorCode

number

表示錯誤碼。

handle

number

表示handle值。

token

Uint8Array

表示init操作之后獲取到的challenge信息。

HuksResult(deprecated)

調(diào)用接口返回的result。

系統(tǒng)能力:SystemCapability.Security.Huks

說明

從API Version 9開始廢棄,建議使用HuksReturnResult9+替代。

名稱

類型

必填

說明

errorCode

number

表示錯誤碼。

outData

Uint8Array

表示輸出數(shù)據(jù)。

properties

Array<HuksParam>

表示屬性信息。

certChains

Array<string>

表示證書鏈數(shù)據(jù)。

HuksErrorCode(deprecated)

表示錯誤碼的枚舉。

系統(tǒng)能力:SystemCapability.Security.Huks

說明

從API Version 9開始廢棄,建議使用HuksExceptionErrCode9+替代。

名稱

說明

HUKS_SUCCESS

0

表示成功。

HUKS_FAILURE

-1

表示失敗。

HUKS_ERROR_BAD_STATE

-2

表示錯誤的狀態(tài)。

HUKS_ERROR_INVALID_ARGUMENT

-3

表示無效的數(shù)據(jù)。

HUKS_ERROR_NOT_SUPPORTED

-4

表示不支持。

HUKS_ERROR_NO_PERMISSION

-5

表示沒有許可。

HUKS_ERROR_INSUFFICIENT_DATA

-6

表示數(shù)據(jù)不足。

HUKS_ERROR_BUFFER_TOO_SMALL

-7

表示緩沖區(qū)太小。

HUKS_ERROR_INSUFFICIENT_MEMORY

-8

表示內(nèi)存不足。

HUKS_ERROR_COMMUNICATION_FAILURE

-9

表示通訊失敗。

HUKS_ERROR_STORAGE_FAILURE

-10

表示存儲故障。

HUKS_ERROR_HARDWARE_FAILURE

-11

表示硬件故障。

HUKS_ERROR_ALREADY_EXISTS

-12

表示已經(jīng)存在。

HUKS_ERROR_NOT_EXIST

-13

表示不存在。

HUKS_ERROR_NULL_POINTER

-14

表示空指針。

HUKS_ERROR_FILE_SIZE_FAIL

-15

表示文件大小失敗。

HUKS_ERROR_READ_FILE_FAIL

-16

表示讀取文件失敗。

HUKS_ERROR_INVALID_PUBLIC_KEY

-17

表示無效的公鑰。

HUKS_ERROR_INVALID_PRIVATE_KEY

-18

表示無效的私鑰。

HUKS_ERROR_INVALID_KEY_INFO

-19

表示無效的密鑰信息。

HUKS_ERROR_HASH_NOT_EQUAL

-20

表示哈希不相等。

HUKS_ERROR_MALLOC_FAIL

-21

表示MALLOC 失敗。

HUKS_ERROR_WRITE_FILE_FAIL

-22

表示寫文件失敗。

HUKS_ERROR_REMOVE_FILE_FAIL

-23

表示刪除文件失敗。

HUKS_ERROR_OPEN_FILE_FAIL

-24

表示打開文件失敗。

HUKS_ERROR_CLOSE_FILE_FAIL

-25

表示關(guān)閉文件失敗。

HUKS_ERROR_MAKE_DIR_FAIL

-26

表示創(chuàng)建目錄失敗。

HUKS_ERROR_INVALID_KEY_FILE

-27

表示無效的密鑰文件。

HUKS_ERROR_IPC_MSG_FAIL

-28

表示IPC 信息失敗。

HUKS_ERROR_REQUEST_OVERFLOWS

-29

表示請求溢出。

HUKS_ERROR_PARAM_NOT_EXIST

-30

表示參數(shù)不存在。

HUKS_ERROR_CRYPTO_ENGINE_ERROR

-31

表示CRYPTO ENGINE錯誤。

HUKS_ERROR_COMMUNICATION_TIMEOUT

-32

表示通訊超時。

HUKS_ERROR_IPC_INIT_FAIL

-33

表示IPC 初始化失敗。

HUKS_ERROR_IPC_DLOPEN_FAIL

-34

表示IPC DLOPEN 失敗。

HUKS_ERROR_EFUSE_READ_FAIL

-35

表示EFUSE 讀取失敗。

HUKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST

-36

表示存在新的根密鑰材料。

HUKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL

-37

表示更新根密鑰材料失敗。

HUKS_ERROR_VERIFICATION_FAILED

-38

表示驗證證書鏈?zhǔn) ?/p>

HUKS_ERROR_CHECK_GET_ALG_FAIL

-100

表示檢查獲取 ALG 失敗。

HUKS_ERROR_CHECK_GET_KEY_SIZE_FAIL

-101

表示檢查獲取密鑰大小失敗。

HUKS_ERROR_CHECK_GET_PADDING_FAIL

-102

表示檢查獲取填充失敗。

HUKS_ERROR_CHECK_GET_PURPOSE_FAIL

-103

表示檢查獲取目的失敗。

HUKS_ERROR_CHECK_GET_DIGEST_FAIL

-104

表示檢查獲取摘要失敗。

HUKS_ERROR_CHECK_GET_MODE_FAIL

-105

表示檢查獲取模式失敗。

HUKS_ERROR_CHECK_GET_NONCE_FAIL

-106

表示檢查獲取隨機數(shù)失敗。

HUKS_ERROR_CHECK_GET_AAD_FAIL

-107

表示檢查獲取 AAD 失敗。

HUKS_ERROR_CHECK_GET_IV_FAIL

-108

表示檢查 GET IV 失敗。

HUKS_ERROR_CHECK_GET_AE_TAG_FAIL

-109

表示檢查獲取 AE 標(biāo)記失敗。

HUKS_ERROR_CHECK_GET_SALT_FAIL

-110

表示檢查獲取SALT失敗。

HUKS_ERROR_CHECK_GET_ITERATION_FAIL

-111

表示檢查獲取迭代失敗。

HUKS_ERROR_INVALID_ALGORITHM

-112

表示無效的算法。

HUKS_ERROR_INVALID_KEY_SIZE

-113

表示無效的密鑰大小。

HUKS_ERROR_INVALID_PADDING

-114

表示無效的填充。

HUKS_ERROR_INVALID_PURPOSE

-115

表示無效的目的。

HUKS_ERROR_INVALID_MODE

-116

表示無效模式。

HUKS_ERROR_INVALID_DIGEST

-117

表示無效的摘要。

HUKS_ERROR_INVALID_SIGNATURE_SIZE

-118

表示簽名大小無效。

HUKS_ERROR_INVALID_IV

-119

表示無效的 IV。

HUKS_ERROR_INVALID_AAD

-120

表示無效的 AAD。

HUKS_ERROR_INVALID_NONCE

-121

表示無效的隨機數(shù)。

HUKS_ERROR_INVALID_AE_TAG

-122

表示無效的 AE 標(biāo)簽。

HUKS_ERROR_INVALID_SALT

-123

表示無效SALT。

HUKS_ERROR_INVALID_ITERATION

-124

表示無效的迭代。

HUKS_ERROR_INVALID_OPERATION

-125

表示無效操作。

HUKS_ERROR_INTERNAL_ERROR

-999

表示內(nèi)部錯誤。

HUKS_ERROR_UNKNOWN_ERROR

-1000

表示未知錯誤。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號