# @ohos.security.huks (HUKS) The **HUKS** module provides KeyStore (KS) capabilities for applications, including key management and key cryptography operations. The keys managed by OpenHarmony Universal KeyStore (HUKS) can be imported by applications or generated by calling the HUKS APIs. > **NOTE** > > The initial APIs of this module are supported since API version 8. Newly added APIs will be marked with a superscript to indicate their earliest API version. ## Modules to Import ```js import huks from '@ohos.security.huks' ``` ## HuksParam Defines the **param** in the **properties** array of **options** used in the APIs. **System capability**: SystemCapability.Security.Huks | Name| Type | Mandatory| Description | | ------ | ----------------------------------- | ---- | ------------ | | tag | [HuksTag](#hukstag) | Yes | Tag. | | value | boolean\|number\|bigint\|Uint8Array | Yes | Value of the tag.| ## HuksOptions Defines the **options** used in the APIs. **System capability**: SystemCapability.Security.Huks | Name | Type | Mandatory| Description | | ---------- | ----------------- | ---- | ------------------------ | | properties | Array\<[HuksParam](#huksparam)> | No | Properties used to hold the **HuksParam** array.| | inData | Uint8Array | No | Input data. | ## HuksSessionHandle9+ Defines the HUKS handle structure. **System capability**: SystemCapability.Security.Huks | Name | Type | Mandatory| Description | | --------- | ---------- | ---- | ---------------------------------------------------- | | handle | number | Yes | Value of the handle. | | challenge | Uint8Array | No | Challenge obtained after the [initSession](#huksinitsession9) operation.| ## HuksReturnResult9+ Defines the **HuksResult** structure. **System capability**: SystemCapability.Security.Huks | Name | Type | Mandatory| Description | | ---------- | ------------------------------- | ---- | ---------------- | | outData | Uint8Array | No | Output data. | | properties | Array\<[HuksParam](#huksparam)> | No | Property information. | | certChains | Array\ | No | Certificate chain information.| ## huks.generateKeyItem9+ generateKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Generates a key. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | --------------------------------------------- | | keyAlias | string | Yes | Alias of the key. | | options | [HuksOptions](#huksoptions) | Yes | Tags required for generating the key. The algorithm, key purpose, and key length are mandatory.| | callback | AsyncCallback\ | Yes | Callback invoked to return the result. If no error is captured, the key is successfully generated. In this case, the API does not return the key content because the key is always protected in a TEE. If an error is captured, an exception occurs in the generation process.| **Example** ```js /* Generate an ECC key of 256 bits. */ let keyAlias = 'keyAlias'; let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_ECC }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; let options = { properties: properties }; try { huks.generateKeyItem(keyAlias, options, function (error, data) { if (error) { console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: generateKeyItem key success`); } }); } catch (error) { console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.generateKeyItem9+ generateKeyItem(keyAlias: string, options: HuksOptions) : Promise\ Generates a key. This API uses a promise to return the result. Because the key is always protected in an trusted environment (such as a TEE), the promise does not return the key content. It returns only the information indicating whether the API is successfully called. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | ------------------------ | | keyAlias | string | Yes | Alias of the key. | | options | [HuksOptions](#huksoptions) | Yes | Tags required for generating the key. The algorithm, key purpose, and key length are mandatory.| **Example** ```js /* Generate an ECC key of 256 bits. */ let keyAlias = 'keyAlias'; let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_ECC }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; let options = { properties: properties }; try { huks.generateKeyItem(keyAlias, options) .then((data) => { console.info(`promise: generateKeyItem success`); }) .catch(error => { console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.deleteKeyItem9+ deleteKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Deletes a key. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | --------------------------------------------- | | keyAlias | string | Yes | Key alias passed in when the key was generated. | | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | | callback | AsyncCallback\ | Yes | Callback invoked to return the result. If the operation is successful, no **err** value is returned; otherwise, an error code is returned.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; try { huks.deleteKeyItem(keyAlias, emptyOptions, function (error, data) { if (error) { console.error(`callback: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: deleteKeyItem key success`); } }); } catch (error) { console.error(`callback: deleteKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.deleteKeyItem9+ deleteKeyItem(keyAlias: string, options: HuksOptions) : Promise\ Deletes a key. This API uses a promise to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | ----------------------------------- | | keyAlias | string | Yes | Key alias passed in when the key was generated.| | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; try { huks.deleteKeyItem(keyAlias, emptyOptions) .then ((data) => { console.info(`promise: deleteKeyItem key success`); }) .catch(error => { console.error(`promise: deleteKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: deleteKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.getSdkVersion getSdkVersion(options: HuksOptions) : string Obtains the SDK version of the current system. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | ------- | ---------- | ---- | ------------------------- | | options | [HuksOptions](#huksoptions) | Yes | Empty object, which is used to hold the SDK version.| **Return value** | Type | Description | | ------ | ------------- | | string | SDK version obtained.| **Example** ```js /* Set options to emptyOptions. */ let emptyOptions = { properties: [] }; let result = huks.getSdkVersion(emptyOptions); ``` ## huks.importKeyItem9+ importKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Imports a key in plaintext. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | --------------------------------------------- | | keyAlias | string | Yes | Alias of the key. | | options | [HuksOptions](#huksoptions) | Yes | Tags required for the import and key to import. The algorithm, key purpose, and key length are mandatory.| | callback | AsyncCallback\ | Yes | Callback invoked to return the result. If the operation is successful, no **err** value is returned; otherwise, an error code is returned.| **Example** ```js /* Import an AES key of 256 bits. */ let plainTextSize32 = makeRandomArr(32); function makeRandomArr(size) { let arr = new Uint8Array(size); for (let i = 0; i < size; i++) { arr[i] = Math.floor(Math.random() * 10); } return arr; }; let keyAlias = 'keyAlias'; let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_AES }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_ECB }; let options = { properties: properties, inData: plainTextSize32 }; try { huks.importKeyItem(keyAlias, options, function (error, data) { if (error) { console.error(`callback: importKeyItem failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: importKeyItem success`); } }); } catch (error) { console.error(`callback: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.importKeyItem9+ importKeyItem(keyAlias: string, options: HuksOptions) : Promise\ Imports a key in plaintext. This API uses a promise to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | ----------------------------------- | | keyAlias | string | Yes | Alias of the key. | | options | [HuksOptions](#huksoptions) | Yes | Tags required for the import and key to import. The algorithm, key purpose, and key length are mandatory.| **Example** ```js /* Import an AES key of 128 bits. */ let plainTextSize32 = makeRandomArr(32); function makeRandomArr(size) { let arr = new Uint8Array(size); for (let i = 0; i < size; i++) { arr[i] = Math.floor(Math.random() * 10); } return arr; }; /* Step 1 Generate a key. */ let keyAlias = 'keyAlias'; let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_AES }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_ECB }; let huksoptions = { properties: properties, inData: plainTextSize32 }; try { huks.importKeyItem(keyAlias, huksoptions) .then ((data) => { console.info(`promise: importKeyItem success`); }) .catch(error => { console.error(`promise: importKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: importKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.attestKeyItem9+ attestKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Obtains the certificate used to verify a key. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------------------------------------- | ---- | --------------------------------------------- | | keyAlias | string | Yes | Alias of the key. The certificate to be obtained stores the key. | | options | [HuksOptions](#huksoptions) | Yes | Parameters and data required for obtaining the certificate. | | callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | Yes | Callback invoked to return the result. If the operation is successful, no **err** value is returned; otherwise, an error code is returned.| **Example** ```js let securityLevel = stringToUint8Array('sec_level'); let challenge = stringToUint8Array('challenge_data'); let versionInfo = stringToUint8Array('version_info'); let keyAliasString = "key attest"; function stringToUint8Array(str) { let arr = []; for (let i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } let tmpUint8Array = new Uint8Array(arr); return tmpUint8Array; } async function generateKey(alias) { let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_RSA }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_STORAGE_FLAG, value: huks.HuksKeyStorageType.HUKS_STORAGE_PERSISTENT }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048 }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; properties[5] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_PSS }; properties[6] = { tag: huks.HuksTag.HUKS_TAG_KEY_GENERATE_TYPE, value: huks.HuksKeyGenerateType.HUKS_KEY_GENERATE_TYPE_DEFAULT }; properties[7] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_ECB }; let options = { properties: properties }; try { huks.generateKeyItem(alias, options, function (error, data) { if (error) { console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: generateKeyItem success`); } }); } catch (error) { console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function attestKey() { let aliasString = keyAliasString; let aliasUint8 = stringToUint8Array(aliasString); let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO, value: securityLevel }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_ATTESTATION_CHALLENGE, value: challenge }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_VERSION_INFO, value: versionInfo }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_ALIAS, value: aliasUint8 }; let options = { properties: properties }; await generateKey(aliasString); try { huks.attestKeyItem(aliasString, options, function (error, data) { if (error) { console.error(`callback: attestKeyItem failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: attestKeyItem success`); } }); } catch (error) { console.error(`callback: attestKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } ``` ## huks.attestKeyItem9+ attestKeyItem(keyAlias: string, options: HuksOptions) : Promise\ Obtains the certificate used to verify a key. This API uses a promise to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | ------------------------------------ | | keyAlias | string | Yes | Alias of the key. The certificate to be obtained stores the key.| | options | [HuksOptions](#huksoptions) | Yes | Parameters and data required for obtaining the certificate. | **Return value** | Type | Description | | ---------------------------------------------- | --------------------------------------------- | | Promise<[HuksReturnResult](#huksreturnresult9)> | Promise used to return the result. If the operation is successful, no **err** value is returned; otherwise, an error code is returned.| **Example** ```js let securityLevel = stringToUint8Array('sec_level'); let challenge = stringToUint8Array('challenge_data'); let versionInfo = stringToUint8Array('version_info'); let keyAliasString = "key attest"; function stringToUint8Array(str) { let arr = []; for (let i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } let tmpUint8Array = new Uint8Array(arr); return tmpUint8Array; } async function generateKey(alias) { let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_RSA }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_STORAGE_FLAG, value: huks.HuksKeyStorageType.HUKS_STORAGE_PERSISTENT }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048 }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; properties[5] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_PSS }; properties[6] = { tag: huks.HuksTag.HUKS_TAG_KEY_GENERATE_TYPE, value: huks.HuksKeyGenerateType.HUKS_KEY_GENERATE_TYPE_DEFAULT }; properties[7] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_ECB }; let options = { properties: properties }; try { await huks.generateKeyItem(alias, options) .then((data) => { console.info(`promise: generateKeyItem success`); }) .catch(error => { console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function attestKey() { let aliasString = keyAliasString; let aliasUint8 = stringToUint8Array(aliasString); let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO, value: securityLevel }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_ATTESTATION_CHALLENGE, value: challenge }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_VERSION_INFO, value: versionInfo }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_ATTESTATION_ID_ALIAS, value: aliasUint8 }; let options = { properties: properties }; await generateKey(aliasString); try { await huks.attestKeyItem(aliasString, options) .then ((data) => { console.info(`promise: attestKeyItem success`); }) .catch(error => { console.error(`promise: attestKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: attestKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } ``` ## huks.importWrappedKeyItem9+ importWrappedKeyItem(keyAlias: string, wrappingKeyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Imports a wrapped key. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | ---------------- | --------------------------- | ---- | --------------------------------------------- | | keyAlias | string | Yes | Alias of the wrapped key to import. | | wrappingKeyAlias | string | Yes | Alias of the data used to unwrap the key imported. | | options | [HuksOptions](#huksoptions) | Yes | Tags required for the import and the wrapped key to import. The algorithm, key purpose, and key length are mandatory.| | callback | AsyncCallback\ | Yes | Callback invoked to return the result. If the operation is successful, no **err** value is returned; otherwise, an error code is returned.| **Example** ```js import huks from '@ohos.security.huks'; let exportWrappingKey; let alias1 = "importAlias"; let alias2 = "wrappingKeyAlias"; async function TestGenFunc(alias, options) { try { await genKey(alias, options) .then((data) => { console.info(`callback: generateKeyItem success`); }) .catch(error => { console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } function genKey(alias, options) { return new Promise((resolve, reject) => { try { huks.generateKeyItem(alias, options, function (error, data) { if (error) { reject(error); } else { resolve(data); } }); } catch (error) { throw(error); } }); } async function TestExportFunc(alias, options) { try { await exportKey(alias, options) .then ((data) => { console.info(`callback: exportKeyItem success, data = ${JSON.stringify(data)}`); exportWrappingKey = data.outData; }) .catch(error => { console.error(`callback: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`callback: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } function exportKey(alias, options) : Promise { return new Promise((resolve, reject) => { try { huks.exportKeyItem(alias, options, function (error, data) { if (error) { reject(error); } else { resolve(data); } }); } catch (error) { throw(error); } }); } async function TestImportWrappedFunc(alias, wrappingAlias, options) { try { await importWrappedKey(alias, wrappingAlias, options) .then ((data) => { console.info(`callback: importWrappedKeyItem success`); }) .catch(error => { console.error(`callback: importWrappedKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`callback: importWrappedKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } function importWrappedKey(alias, wrappingAlias, options) { return new Promise((resolve, reject) => { try { huks.importWrappedKeyItem(alias, wrappingAlias, options, function (error, data) { if (error) { reject(error); } else { resolve(data); } }); } catch (error) { throw(error); } }); } async function TestImportWrappedKeyFunc( alias, wrappingAlias, genOptions, importOptions ) { await TestGenFunc(wrappingAlias, genOptions); await TestExportFunc(wrappingAlias, genOptions); /*The following operations do not invoke the HUKS APIs, and the specific implementation is not provided here. * For example, import **keyA**. * 1. Use ECC to generate a public and private key pair **keyB**. The public key is **keyB_pub**, and the private key is **keyB_pri**. * 2. Use **keyB_pri** and the public key obtained from **wrappingAlias** to negotiate the shared key **share_key**. * 3. Randomly generate a key **kek** and use it to encrypt **keyA** with AES-GCM. During the encryption, record **nonce1**, **aad1**, ciphertext **keyA_enc**, and encrypted **tag1**. * 4. Use **share_key** to encrypt **kek** with AES-GCM. During the encryption, record **nonce2**, **aad2**, ciphertext **kek_enc**, and encrypted **tag2**. * 5. Generate the **importOptions.inData** field in the following format: * keyB_pub length (4 bytes) + keyB_pub + aad2 length (4 bytes) + aad2 + * nonce2 length (4 bytes) + nonce2 + tag2 length (4 bytes) + tag2 + * kek_enc length (4 bytes) + kek_enc + aad1 length (4 bytes) + aad1 + * nonce1 length (4 bytes) + nonce1 + tag1 length (4 bytes) + tag1 + * Memory occupied by the keyA length (4 bytes) + keyA length + keyA_enc length (4 bytes) + keyA_enc */ let inputKey = new Uint8Array([0x02, 0x00, 0x00, 0x00]); importOptions.inData = inputKey; await TestImportWrappedFunc(alias, wrappingAlias, importOptions); } function makeGenerateOptions() { let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_ECC }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_UNWRAP }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_IMPORT_KEY_TYPE, value: huks.HuksImportKeyType.HUKS_KEY_TYPE_KEY_PAIR, }; let options = { properties: properties }; return options; }; function makeImportOptions() { let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_AES }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_CBC }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_NONE }; properties[5] = { tag: huks.HuksTag.HUKS_TAG_UNWRAP_ALGORITHM_SUITE, value: huks.HuksUnwrapSuite.HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING }; let options = { properties: properties }; return options; }; function huksImportWrappedKey() { let genOptions = makeGenerateOptions(); let importOptions = makeImportOptions(); TestImportWrappedKeyFunc( alias1, alias2, genOptions, importOptions ); } ``` ## huks.importWrappedKeyItem9+ importWrappedKeyItem(keyAlias: string, wrappingKeyAlias: string, options: HuksOptions) : Promise\ Imports a wrapped key. This API uses a promise to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | ---------------- | --------------------------- | ---- | --------------------------------------------- | | keyAlias | string | Yes | Alias of the wrapped key to import. | | wrappingKeyAlias | string | Yes | Alias of the data used to unwrap the key imported. | | options | [HuksOptions](#huksoptions) | Yes | Tags required for the import and the wrapped key to import. The algorithm, key purpose, and key length are mandatory.| **Example** ```js /* The process is similar as if a callback is used, except the following:*/ async function TestImportWrappedFunc(alias, wrappingAlias, options) { try { await huks.importWrappedKeyItem(alias, wrappingAlias, options) .then ((data) => { console.info(`promise: importWrappedKeyItem success`); }) .catch(error => { console.error(`promise: importWrappedKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: importWrappedKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } ``` ## huks.exportKeyItem9+ exportKeyItem(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Exports a key. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | | keyAlias | string | Yes | Key alias, which must be the same as the alias used when the key was generated. | | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | | callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | Yes | Callback invoked to return the result. If the operation is successful, no **err** value is returned; otherwise, an error code is returned. **outData** contains the public key exported.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; try { huks.exportKeyItem(keyAlias, emptyOptions, function (error, data) { if (error) { console.error(`callback: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: exportKeyItem success, data = ${JSON.stringify(data)}`); } }); } catch (error) { console.error(`callback: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.exportKeyItem9+ exportKeyItem(keyAlias: string, options: HuksOptions) : Promise\ Exports a key. This API uses a promise to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | -------------------------------------------- | | keyAlias | string | Yes | Key alias, which must be the same as the alias used when the key was generated.| | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | **Return value** | Type | Description | | ---------------------------------------------- | ------------------------------------------------------------ | | Promise<[HuksReturnResult](#huksreturnresult9)> | Promise used to return the result. If the operation is successful, no **err** value is returned and **outData** contains the public key exported. If the operation fails, an error code is returned. | **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; try { huks.exportKeyItem(keyAlias, emptyOptions) .then ((data) => { console.info(`promise: exportKeyItem success, data = ${JSON.stringify(data)}`); }) .catch(error => { console.error(`promise: exportKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: exportKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.getKeyItemProperties9+ getKeyItemProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Obtains key properties. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | | keyAlias | string | Yes | Key alias, which must be the same as the alias used when the key was generated. | | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | | callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | Yes | Callback invoked to return the result. If the operation is successful, no **err** value is returned and **properties** contains the parameters required for generating the key. If the operation fails, an error code is returned. | **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; try { huks.getKeyItemProperties(keyAlias, emptyOptions, function (error, data) { if (error) { console.error(`callback: getKeyItemProperties failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: getKeyItemProperties success, data = ${JSON.stringify(data)}`); } }); } catch (error) { console.error(`callback: getKeyItemProperties input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.getKeyItemProperties9+ getKeyItemProperties(keyAlias: string, options: HuksOptions) : Promise\ Obtains key properties. This API uses a promise to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | -------------------------------------------- | | keyAlias | string | Yes | Key alias, which must be the same as the alias used when the key was generated.| | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | **Return value** | Type | Description | | ----------------------------------------------- | ------------------------------------------------------------ | | Promise\<[HuksReturnResult](#huksreturnresult9)> | Promise used to return the result. If the operation is successful, no **err** value is returned and **properties** contains the parameters required for generating the key. If the operation fails, an error code is returned. | **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; try { huks.getKeyItemProperties(keyAlias, emptyOptions) .then ((data) => { console.info(`promise: getKeyItemProperties success, data = ${JSON.stringify(data)}`); }) .catch(error => { console.error(`promise: getKeyItemProperties failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: getKeyItemProperties input arg invalid, code: ${error.code}, msg: ${error.message}`); } ``` ## huks.isKeyItemExist9+ isKeyItemExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Checks whether a key exists. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | --------------------------------------- | | keyAlias | string | Yes | Alias of the key to check. | | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | | callback | AsyncCallback\ | Yes | Callback invoked to return the result. If the key exists, **data** is **true**. If the key does not exist, **error** is the error code.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; huks.isKeyItemExist(keyAlias, emptyOptions, function (error, data) { if (data) { promptAction.showToast({ message: "keyAlias: " + keyAlias +"is existed! ", duration: 2500, }) } else { promptAction.showToast({ message: "find key failed, error code: " + error.code + " error msg: " + error.message, duration: 2500, }) } }); ``` ## huks.isKeyItemExist9+ isKeyItemExist(keyAlias: string, options: HuksOptions) : Promise\ Checks whether a key exists. This API uses a promise to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | ------------------------ | | keyAlias | string | Yes | Alias of the key to check. | | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty).| **Return value** | Type | Description | | ----------------- | --------------------------------------- | | Promise\ | Promise used to return the result. If the key exists, then() performs subsequent operations. If the key does not exist, error() performs the related service operations.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; await huks.isKeyItemExist(keyAlias, emptyOptions).then((data) => { promptAction.showToast({ message: "keyAlias: " + keyAlias +"is existed! ", duration: 500, }) }).catch((err)=>{ promptAction.showToast({ message: "find key failed, error code: " + err.code + " error message: " + err.message, duration: 6500, }) }) ``` ## huks.initSession9+ initSession(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Initializes the data for a key operation. This API uses an asynchronous callback to return the result. **huks.initSession**, **huks.updateSession**, and **huks.finishSession** must be used together. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ------------------------------------------------------- | ---- | ---------------------------------------------------- | | keyAlias | string | Yes | Alias of the key involved in the **initSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **initSession** operation. | | callback | AsyncCallback\<[HuksSessionHandle](#hukssessionhandle9)> | Yes | Callback invoked to return a session handle for subsequent operations.| ## huks.initSession9+ initSession(keyAlias: string, options: HuksOptions) : Promise\ Initializes the data for a key operation. This API uses a promise to return the result. **huks.initSession**, **huks.updateSession**, and **huks.finishSession** must be used together. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ------------------------------------------------- | ---- | ------------------------------------------------ | | keyAlias | string | Yes | Alias of the key involved in the **initSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **initSession** operation. | **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksSessionHandle](#hukssessionhandle9)> | Promise used to return a session handle for subsequent operations.| ## huks.updateSession9+ updateSession(handle: number, options: HuksOptions, callback: AsyncCallback\) : void Updates the key operation by segment. This API uses an asynchronous callback to return the result. **huks.initSession**, **huks.updateSession**, and **huks.finishSession** must be used together. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------------------------------------- | ---- | -------------------------------------------- | | handle | number | Yes | Handle for the **updateSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **updateSession** operation. | | callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | Yes | Callback invoked to return the **updateSession** operation result.| ## huks.updateSession9+ updateSession(handle: number, options: HuksOptions, token: Uint8Array, callback: AsyncCallback\) : void Updates the key operation by segment. This API uses an asynchronous callback to return the result. **huks.initSession**, **huks.updateSession**, and **huks.finishSession** must be used together. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------------------------------------- | ---- | -------------------------------------------- | | handle | number | Yes | Handle for the **updateSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **updateSession** operation. | | token | Uint8Array | Yes | Token of the **updateSession** operation. | | callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | Yes | Callback invoked to return the **updateSession** operation result.| ## huks.updateSession9+ updateSession(handle: number, options: HuksOptions, token?: Uint8Array) : Promise\ Updates the key operation by segment. This API uses a promise to return the result. **huks.initSession**, **huks.updateSession**, and **huks.finishSession** must be used together. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | ------- | ---------------------------------------------- | ---- | -------------------------------------------- | | handle | number | Yes | Handle for the **updateSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **updateSession** operation. | | token | Uint8Array | No | Token of the **updateSession** operation. | **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise<[HuksReturnResult](#huksreturnresult9)> | Promise used to return the **updateSession** operation result.| ## huks.finishSession9+ finishSession(handle: number, options: HuksOptions, callback: AsyncCallback\) : void Completes the key operation and releases resources. This API uses an asynchronous callback to return the result. **huks.initSession**, **huks.updateSession**, and **huks.finishSession** must be used together. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------------------------------------- | ---- | -------------------------------------------- | | handle | number | Yes | Handle for the **finishSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **finishSession** operation. | | token | Uint8Array | Yes | Token of the **finishSession** operation. | | callback | AsyncCallback<[HuksReturnResult](#huksreturnresult9)> | Yes | Callback invoked to return the **finishSession** operation result.| ## huks.finishSession9+ finishSession(handle: number, options: HuksOptions, token: Uint8Array, callback: AsyncCallback\) : void Completes the key operation and releases resources. This API uses an asynchronous callback to return the result. **huks.initSession**, **huks.updateSession**, and **huks.finishSession** must be used together. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------------------- | ---- | -------------------------------------------- | | handle | number | Yes | Handle for the **finishSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **finishSession** operation. | | token | Uint8Array | Yes | Token of the **finishSession** operation. | | callback | AsyncCallback\<[HuksReturnResult](#huksreturnresult9)> | Yes | Callback invoked to return the **finishSession** operation result.| ## huks.finishSession9+ finishSession(handle: number, options: HuksOptions, token?: Uint8Array) : Promise\ Completes the key operation and releases resources. This API uses a promise to return the result. **huks.initSession**, **huks.updateSession**, and **huks.finishSession** must be used together. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | ------- | ----------------------------------------------- | ---- | ----------------------------------- | | handle | number | Yes | Handle for the **finishSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **finishSession** operation. | | token | Uint8Array | No | Token of the **finishSession** operation. | **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksReturnResult](#huksreturnresult9)> | Promise used to return the result.| ## huks.abortSession9+ abortSession(handle: number, options: HuksOptions, callback: AsyncCallback\) : void Aborts a key operation. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | ------------------------------------------- | | handle | number | Yes | Handle for the **abortSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **abortSession** operation. | | callback | AsyncCallback\ | Yes | Callback that returns no value. | **Example** ```js /* huks.initSession, huks.updateSession, and huks.finishSession must be used together. * If an error occurs in any of huks.initSession, huks.updateSession, * and huks.finishSession operations, * huks.abortSession must be called to terminate the use of the key. * * The following uses the callback of an RSA1024 key as an example. */ function stringToUint8Array(str) { let arr = []; for (let i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } let tmpUint8Array = new Uint8Array(arr); return tmpUint8Array; } let keyAlias = "HuksDemoRSA"; let properties = new Array(); let options = { properties: properties, inData: new Uint8Array(0) }; let handle; async function generateKey() { properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_RSA }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5 }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; properties[5] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_ECB, } try { await huks.generateKeyItem(keyAlias, options, function (error, data) { if (error) { console.error(`callback: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: generateKeyItem success`); } }); } catch (error) { console.error(`callback: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function huksInit() { console.log('enter huksInit'); try { huks.initSession(keyAlias, options, function (error, data) { if (error) { console.error(`callback: initSession failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: initSession success, data = ${JSON.stringify(data)}`); handle = data.handle; } }); } catch (error) { console.error(`callback: initSession input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function huksUpdate() { console.log('enter huksUpdate'); options.inData = stringToUint8Array("huksHmacTest"); try { huks.updateSession(handle, options, function (error, data) { if (error) { console.error(`callback: updateSession failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: updateSession success, data = ${JSON.stringify(data)}`); } }); } catch (error) { console.error(`callback: updateSession input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function huksFinish() { console.log('enter huksFinish'); options.inData = new Uint8Array(0); try { huks.finishSession(handle, options, function (error, data) { if (error) { console.error(`callback: finishSession failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: finishSession success, data = ${JSON.stringify(data)}`); } }); } catch (error) { console.error(`callback: finishSession input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function huksAbort() { console.log('enter huksAbort'); try { huks.abortSession(handle, options, function (error, data) { if (error) { console.error(`callback: abortSession failed, code: ${error.code}, msg: ${error.message}`); } else { console.info(`callback: abortSession success`); } }); } catch (error) { console.error(`callback: abortSession input arg invalid, code: ${error.code}, msg: ${error.message}`); } } ``` ## huks.abortSession9+ abortSession(handle: number, options: HuksOptions) : Promise\; Aborts a key operation. This API uses a promise to return the result. **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | ------- | --------------------------- | ---- | ------------------------------------------- | | handle | number | Yes | Handle for the **abortSession** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **abortSession** operation. | **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\ | Promise used to return the **abortSession** operation result.| **Example** ```js /* huks.initSession, huks.updateSession, and huks.finishSession must be used together. * If an error occurs in any of huks.initSession, huks.updateSession, * and huks.finishSession operations, * huks.abortSession must be called to terminate the use of the key. * * The following uses the callback of an RSA1024 key as an example. */ function stringToUint8Array(str) { let arr = []; for (let i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } let tmpUint8Array = new Uint8Array(arr); return tmpUint8Array; } let keyAlias = "HuksDemoRSA"; let properties = new Array(); let options = { properties: properties, inData: new Uint8Array(0) }; let handle; async function generateKey() { properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_RSA }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5 }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; properties[5] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_ECB, } try { await huks.generateKeyItem(keyAlias, options) .then((data) => { console.info(`promise: generateKeyItem success`); }) .catch(error => { console.error(`promise: generateKeyItem failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: generateKeyItem input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function huksInit() { console.log('enter huksInit'); try { await huks.initSession(keyAlias, options) .then ((data) => { console.info(`promise: initSession success, data = ${JSON.stringify(data)}`); handle = data.handle; }) .catch(error => { console.error(`promise: initSession key failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: initSession input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function huksUpdate() { console.log('enter huksUpdate'); options.inData = stringToUint8Array("huksHmacTest"); try { await huks.updateSession(handle, options) .then ((data) => { console.info(`promise: updateSession success, data = ${JSON.stringify(data)}`); }) .catch(error => { console.error(`promise: updateSession failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: updateSession input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function huksFinish() { console.log('enter huksFinish'); options.inData = new Uint8Array(0); try { await huks.finishSession(handle, options) .then ((data) => { console.info(`promise: finishSession success, data = ${JSON.stringify(data)}`); }) .catch(error => { console.error(`promise: finishSession failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: finishSession input arg invalid, code: ${error.code}, msg: ${error.message}`); } } async function huksAbort() { console.log('enter huksAbort'); try { await huks.abortSession(handle, options) .then ((data) => { console.info(`promise: abortSession success`); }) .catch(error => { console.error(`promise: abortSession failed, code: ${error.code}, msg: ${error.message}`); }); } catch (error) { console.error(`promise: abortSession input arg invalid, code: ${error.code}, msg: ${error.message}`); } } ``` ## HuksExceptionErrCode9+ Enumerates the error codes. For details about the error codes, see [KUKS Error Codes](../errorcodes/errorcode-huks.md). **System capability**: SystemCapability.Security.Huks | Name | Value| Description | | ---------------------------------------------- | -------- |--------------------------- | | HUKS_ERR_CODE_PERMISSION_FAIL | 201 | Permission verification failed. | | HUKS_ERR_CODE_ILLEGAL_ARGUMENT | 401 | Invalid parameters are detected. | | HUKS_ERR_CODE_NOT_SUPPORTED_API | 801 | The API is not supported. | | HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED | 12000001 | The feature is not supported. | | HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT | 12000002 | Key algorithm parameters are missing. | | HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT | 12000003 | Invalid key algorithm parameters are detected. | | HUKS_ERR_CODE_FILE_OPERATION_FAIL | 12000004 | The file operation failed. | | HUKS_ERR_CODE_COMMUNICATION_FAIL | 12000005 | The communication failed. | | HUKS_ERR_CODE_CRYPTO_FAIL | 12000006 | Failed to operate the algorithm library. | | HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED | 12000007 | Failed to access the key because the key has expired.| | HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED | 12000008 | Failed to access the key because the authentication has failed.| | HUKS_ERR_CODE_KEY_AUTH_TIME_OUT | 12000009 | Key access timed out.| | HUKS_ERR_CODE_SESSION_LIMIT | 12000010 | The number of key operation sessions has reached the limit. | | HUKS_ERR_CODE_ITEM_NOT_EXIST | 12000011 | The target object does not exist. | | HUKS_ERR_CODE_EXTERNAL_ERROR | 12000012 | An external error occurs. | | HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST | 12000013 | The credential does not exist. | | HUKS_ERR_CODE_INSUFFICIENT_MEMORY | 12000014 | The memory is insufficient. | | HUKS_ERR_CODE_CALL_SERVICE_FAILED | 12000015 | Failed to call other system services. | ## HuksKeyPurpose Enumerates the key purposes. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------------------ | ---- | -------------------------------- | | HUKS_KEY_PURPOSE_ENCRYPT | 1 | Used to encrypt the plaintext.| | HUKS_KEY_PURPOSE_DECRYPT | 2 | Used to decrypt the cipher text.| | HUKS_KEY_PURPOSE_SIGN | 4 | Used for signing. | | HUKS_KEY_PURPOSE_VERIFY | 8 | Used to verify the signature. | | HUKS_KEY_PURPOSE_DERIVE | 16 | Used to derive a key. | | HUKS_KEY_PURPOSE_WRAP | 32 | Used for an encrypted export. | | HUKS_KEY_PURPOSE_UNWRAP | 64 | Used for an encrypted import. | | HUKS_KEY_PURPOSE_MAC | 128 | Used to generate a message authentication code (MAC). | | HUKS_KEY_PURPOSE_AGREE | 256 | Used for key agreement. | ## HuksKeyDigest Enumerates the digest algorithms. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ---------------------- | ---- | ---------------------------------------- | | HUKS_DIGEST_NONE | 0 | No digest algorithm| | HUKS_DIGEST_MD5 | 1 | MD5| | HUKS_DIGEST_SM39+ | 2 | SM3| | HUKS_DIGEST_SHA1 | 10 | SHA-1| | HUKS_DIGEST_SHA224 | 11 | SHA-224| | HUKS_DIGEST_SHA256 | 12 | SHA-256| | HUKS_DIGEST_SHA384 | 13 | SHA-384| | HUKS_DIGEST_SHA512 | 14 | SHA-512| ## HuksKeyPadding Enumerates the padding algorithms. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ---------------------- | ---- | ---------------------------------------- | | HUKS_PADDING_NONE | 0 | No padding algorithm| | HUKS_PADDING_OAEP | 1 | Optimal Asymmetric Encryption Padding (OAEP)| | HUKS_PADDING_PSS | 2 | Probabilistic Signature Scheme (PSS)| | HUKS_PADDING_PKCS1_V1_5 | 3 | Public Key Cryptography Standards (PKCS) #1 v1.5| | HUKS_PADDING_PKCS5 | 4 | PKCS #5| | HUKS_PADDING_PKCS7 | 5 | PKCS #7| ## HuksCipherMode Enumerates the cipher modes. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------- | ---- | --------------------- | | HUKS_MODE_ECB | 1 | Electronic Code Block (ECB) mode| | HUKS_MODE_CBC | 2 | Cipher Block Chaining (CBC) mode| | HUKS_MODE_CTR | 3 | Counter (CTR) mode| | HUKS_MODE_OFB | 4 | Output Feedback (OFB) mode| | HUKS_MODE_CCM | 31 | Counter with CBC-MAC (CCM) mode| | HUKS_MODE_GCM | 32 | Galois/Counter (GCM) mode| ## HuksKeySize Enumerates the key sizes. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ---------------------------------- | ---- | ------------------------------------------ | | HUKS_RSA_KEY_SIZE_512 | 512 | Rivest-Shamir-Adleman (RSA) key of 512 bits | | HUKS_RSA_KEY_SIZE_768 | 768 | RSA key of 768 bits | | HUKS_RSA_KEY_SIZE_1024 | 1024 | RSA key of 1024 bits | | HUKS_RSA_KEY_SIZE_2048 | 2048 | RSA key of 2048 bits | | HUKS_RSA_KEY_SIZE_3072 | 3072 | RSA key of 3072 bits | | HUKS_RSA_KEY_SIZE_4096 | 4096 | RSA key of 4096 bits | | HUKS_ECC_KEY_SIZE_224 | 224 | Elliptic Curve Cryptography (ECC) key of 224 bits | | HUKS_ECC_KEY_SIZE_256 | 256 | ECC key of 256 bits | | HUKS_ECC_KEY_SIZE_384 | 384 | ECC key of 384 bits | | HUKS_ECC_KEY_SIZE_521 | 521 | ECC key of 521 bits | | HUKS_AES_KEY_SIZE_128 | 128 | Advanced Encryption Standard (AES) key of 128 bits | | HUKS_AES_KEY_SIZE_192 | 192 | AES key of 192 bits | | HUKS_AES_KEY_SIZE_256 | 256 | AES key of 256 bits | | HUKS_AES_KEY_SIZE_512 | 512 | AES key of 512 bits | | HUKS_CURVE25519_KEY_SIZE_256 | 256 | Curve25519 key of 256 bits| | HUKS_DH_KEY_SIZE_2048 | 2048 | Diffie-Hellman (DH) key of 2048 bits | | HUKS_DH_KEY_SIZE_3072 | 3072 | DH key of 3072 bits | | HUKS_DH_KEY_SIZE_4096 | 4096 | DH key of 4096 bits | | HUKS_SM2_KEY_SIZE_2569+ | 256 | ShangMi2 (SM2) key of 256 bits | | HUKS_SM4_KEY_SIZE_1289+ | 128 | ShangMi4 (SM4) key of 128 bits | ## HuksKeyAlg Enumerates the key algorithms. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------------------- | ---- | --------------------- | | HUKS_ALG_RSA | 1 | RSA | | HUKS_ALG_ECC | 2 | ECC | | HUKS_ALG_DSA | 3 | DSA | | HUKS_ALG_AES | 20 | AES | | HUKS_ALG_HMAC | 50 | HMAC | | HUKS_ALG_HKDF | 51 | HKDF | | HUKS_ALG_PBKDF2 | 52 | PBKDF2 | | HUKS_ALG_ECDH | 100 | ECDH | | HUKS_ALG_X25519 | 101 | X25519 | | HUKS_ALG_ED25519 | 102 | ED25519| | HUKS_ALG_DH | 103 | DH | | HUKS_ALG_SM29+ | 150 | SM2 | | HUKS_ALG_SM39+ | 151 | SM3 | | HUKS_ALG_SM49+ | 152 | SM4 | ## HuksKeyGenerateType Enumerates the key generation types. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------------------------ | ---- | ---------------- | | HUKS_KEY_GENERATE_TYPE_DEFAULT | 0 | Key generated by default.| | HUKS_KEY_GENERATE_TYPE_DERIVE | 1 | Derived key.| | HUKS_KEY_GENERATE_TYPE_AGREE | 2 | Key generated by agreement.| ## HuksKeyFlag Enumerates the key generation modes. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | -------------------------- | ---- | ------------------------------------ | | HUKS_KEY_FLAG_IMPORT_KEY | 1 | Import a key using an API. | | HUKS_KEY_FLAG_GENERATE_KEY | 2 | Generate a key by using an API. | | HUKS_KEY_FLAG_AGREE_KEY | 3 | Generate a key by using a key agreement API.| | HUKS_KEY_FLAG_DERIVE_KEY | 4 | Derive a key by using an API.| ## HuksKeyStorageType Enumerates the key storage modes. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ----------------------- | ---- | ------------------------------ | | HUKS_STORAGE_TEMP | 0 | The key is managed locally. | | HUKS_STORAGE_PERSISTENT | 1 | The key is managed by the HUKS service.| ## HuksSendType Enumerates the tag transfer modes. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | -------------------- | ---- | ----------------- | | HUKS_SEND_TYPE_ASYNC | 0 | The tag is sent asynchronously.| | HUKS_SEND_TYPE_SYNC | 1 | The tag is sent synchronously.| ## HuksUnwrapSuite9+ Enumerates the algorithm suites used for importing an encrypted key. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ---------------------------------------------- | ---- | ----------------------------------------------------- | | HUKS_UNWRAP_SUITE_X25519_AES_256_GCM_NOPADDING | 1 | Use X25519 for key agreement and then use AES-256 GCM to encrypt the key.| | HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING | 2 | Use ECDH for key agreement and then use AES-256 GCM to encrypt the key. | ## HuksImportKeyType9+ Enumerates the types of keys to import. By default, a public key is imported. This field is not required when a symmetric key is imported. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------------------- | ---- | ------------------------------ | | HUKS_KEY_TYPE_PUBLIC_KEY | 0 | Public key | | HUKS_KEY_TYPE_PRIVATE_KEY | 1 | Private key | | HUKS_KEY_TYPE_KEY_PAIR | 2 | Public and private key pair| ## HuksUserAuthType9+ Enumerates the user authentication types. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------------------------- | ---- | ------------------------- | | HUKS_USER_AUTH_TYPE_FINGERPRINT | 1 << 0 | Fingerprint authentication. | | HUKS_USER_AUTH_TYPE_FACE | 1 << 1 | Facial authentication.| | HUKS_USER_AUTH_TYPE_PIN | 1 << 2 | PIN authentication.| ## HuksAuthAccessType9+ Enumerates the access control types. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | --------------------------------------- | ---- | ------------------------------------------------ | | HUKS_AUTH_ACCESS_INVALID_CLEAR_PASSWORD | 1 << 0 | The key becomes invalid after the password is cleared. | | HUKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL | 1 << 1 | The key becomes invalid after a new biometric feature is added.| ## HuksChallengeType9+ Enumerates the types of the challenges generated when a key is used. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------------------------- | ---- | ------------------------------ | | HUKS_CHALLENGE_TYPE_NORMAL | 0 | Normal challenge, which is of 32 bytes by default.| | HUKS_CHALLENGE_TYPE_CUSTOM | 1 | Custom challenge, which supports only one authentication for multiple keys.| | HUKS_CHALLENGE_TYPE_NONE | 2 | Challenge is not required.| ## HuksChallengePosition9+ Enumerates the positions of the 8-byte valid value in a custom challenge generated. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------------------------- | ---- | ------------------------------ | | HUKS_CHALLENGE_POS_0 | 0 | Bytes 0 to 7.| | HUKS_CHALLENGE_POS_1 | 1 | Bytes 8 to 15.| | HUKS_CHALLENGE_POS_2 | 2 | Bytes 16 to 23.| | HUKS_CHALLENGE_POS_3 | 3 | Bytes 24 to 31.| ## HuksSecureSignType9+ Defines the signature type of the key generated or imported. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | ------------------------------ | ---- | ------------------------------------------------------------ | | HUKS_SECURE_SIGN_WITH_AUTHINFO | 1 | The signature carries authentication information. This field is specified when a key is generated or imported. When the key is used for signing, the data will be added with the authentication information and then be signed.| ## HuksTagType Enumerates the tag data types. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | --------------------- | ------- | --------------------------------------- | | HUKS_TAG_TYPE_INVALID | 0 << 28 | Invalid tag type. | | HUKS_TAG_TYPE_INT | 1 << 28 | Number of the int type. | | HUKS_TAG_TYPE_UINT | 2 << 28 | Number of the uint type.| | HUKS_TAG_TYPE_ULONG | 3 << 28 | BigInt. | | HUKS_TAG_TYPE_BOOL | 4 << 28 | Boolean. | | HUKS_TAG_TYPE_BYTES | 5 << 28 | Uint8Array. | ## HuksTag Enumerates the tags used to invoke parameters. **System capability**: SystemCapability.Security.Huks | Name | Value | Description | | -------------------------------------------- | ---------------------------------------- | -------------------------------------- | | HUKS_TAG_INVALID | HuksTagType.HUKS_TAG_TYPE_INVALID \| 0 | Invalid tag. | | HUKS_TAG_ALGORITHM | HuksTagType.HUKS_TAG_TYPE_UINT \| 1 | Algorithm. | | HUKS_TAG_PURPOSE | HuksTagType.HUKS_TAG_TYPE_UINT \| 2 | Purpose of the key. | | HUKS_TAG_KEY_SIZE | HuksTagType.HUKS_TAG_TYPE_UINT \| 3 | Key size. | | HUKS_TAG_DIGEST | HuksTagType.HUKS_TAG_TYPE_UINT \| 4 | Digest algorithm. | | HUKS_TAG_PADDING | HuksTagType.HUKS_TAG_TYPE_UINT \| 5 | Padding algorithm. | | HUKS_TAG_BLOCK_MODE | HuksTagType.HUKS_TAG_TYPE_UINT \| 6 | Cipher mode. | | HUKS_TAG_KEY_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 7 | Key type. | | HUKS_TAG_ASSOCIATED_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 8 | Associated authentication data. | | HUKS_TAG_NONCE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 9 | Field for key encryption and decryption. | | HUKS_TAG_IV | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10 | IV. | | HUKS_TAG_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 11 | Information generated during key derivation. | | HUKS_TAG_SALT | HuksTagType.HUKS_TAG_TYPE_BYTES \| 12 | Salt value used for key derivation. | | HUKS_TAG_PWD | HuksTagType.HUKS_TAG_TYPE_BYTES \| 13 | Password used for key derivation. | | HUKS_TAG_ITERATION | HuksTagType.HUKS_TAG_TYPE_UINT \| 14 | Number of iterations for key derivation. | | HUKS_TAG_KEY_GENERATE_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 15 | Key generation type. | | HUKS_TAG_DERIVE_MAIN_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 16 | Main key for key derivation. | | HUKS_TAG_DERIVE_FACTOR | HuksTagType.HUKS_TAG_TYPE_BYTES \| 17 | Factor for key derivation. | | HUKS_TAG_DERIVE_ALG | HuksTagType.HUKS_TAG_TYPE_UINT \| 18 | Type of the algorithm used for key derivation. | | HUKS_TAG_AGREE_ALG | HuksTagType.HUKS_TAG_TYPE_UINT \| 19 | Type of the algorithm used for key agreement. | | HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 20 | Public key alias used in key agreement. | | HUKS_TAG_AGREE_PRIVATE_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 21 | Private key alias used in key agreement. | | HUKS_TAG_AGREE_PUBLIC_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 22 | Public key used in key agreement. | | HUKS_TAG_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 23 | Key alias. | | HUKS_TAG_DERIVE_KEY_SIZE | HuksTagType.HUKS_TAG_TYPE_UINT \| 24 | Size of the derived key. | | HUKS_TAG_IMPORT_KEY_TYPE9+ | HuksTagType.HUKS_TAG_TYPE_UINT \| 25 | Type of the imported key. | | HUKS_TAG_UNWRAP_ALGORITHM_SUITE9+ | HuksTagType.HUKS_TAG_TYPE_UINT \| 26 | Algorithm suite required for encrypted imports. | | HUKS_TAG_ACTIVE_DATETIME(deprecated) | HuksTagType.HUKS_TAG_TYPE_ULONG \| 201 | Parameter originally reserved for certificate management. It is deprecated because certificate management is no longer implemented in this module. | | HUKS_TAG_ORIGINATION_EXPIRE_DATETIME(deprecated) | HuksTagType.HUKS_TAG_TYPE_ULONG \| 202 | Parameter originally reserved for certificate management. It is deprecated because certificate management is no longer implemented in this module. | | HUKS_TAG_USAGE_EXPIRE_DATETIME(deprecated) | HuksTagType.HUKS_TAG_TYPE_ULONG \| 203 | Parameter originally reserved for certificate management. It is deprecated because certificate management is no longer implemented in this module. | | HUKS_TAG_CREATION_DATETIME(deprecated) | HuksTagType.HUKS_TAG_TYPE_ULONG \| 204 | Parameter originally reserved for certificate management. It is deprecated because certificate management is no longer implemented in this module. | | HUKS_TAG_ALL_USERS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 301 | Reserved. | | HUKS_TAG_USER_ID | HuksTagType.HUKS_TAG_TYPE_UINT \| 302 | ID of the user to which the key belongs. | | HUKS_TAG_NO_AUTH_REQUIRED | HuksTagType.HUKS_TAG_TYPE_BOOL \| 303 | Reserved. | | HUKS_TAG_USER_AUTH_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 304 | User authentication type. For details, see [HuksUserAuthType](#huksuserauthtype9). This parameter must be set together with [HuksAuthAccessType](#huksauthaccesstype9). You can set a maximum of two user authentication types at a time. For example, if **HuksAuthAccessType** is **HKS_SECURE_ACCESS_INVALID_NEW_BIO_ENROLL**, you can set two of **HKS_USER_AUTH_TYPE_FACE**, **HKS_USER_AUTH_TYPE_FINGERPRINT**, and **HKS_USER_AUTH_TYPE_FACE\**.| HKS_USER_AUTH_TYPE_FINGERPRINT | | HUKS_TAG_AUTH_TIMEOUT | HuksTagType.HUKS_TAG_TYPE_UINT \| 305 | Timeout period of an authentication token. | | HUKS_TAG_AUTH_TOKEN | HuksTagType.HUKS_TAG_TYPE_BYTES \| 306 | Used to pass in the authentication token. | | HUKS_TAG_KEY_AUTH_ACCESS_TYPE9+ | HuksTagType.HUKS_TAG_TYPE_UINT \| 307 | Access control type. For details, see [HuksAuthAccessType](#huksauthaccesstype9). This parameter must be set together with [HuksUserAuthType](#huksuserauthtype9).| | HUKS_TAG_KEY_SECURE_SIGN_TYPE9+ | HuksTagType.HUKS_TAG_TYPE_UINT \| 308 | Signature type of the key generated or imported.| | HUKS_TAG_CHALLENGE_TYPE9+ | HuksTagType.HUKS_TAG_TYPE_UINT \| 309 | Type of the challenge generated for a key. For details, see [HuksChallengeType](#hukschallengetype9).| | HUKS_TAG_CHALLENGE_POS9+ | HuksTagType.HUKS_TAG_TYPE_UINT \| 310 | Position of the 8-byte valid value in a custom challenge. For details, see [HuksChallengePosition](#hukschallengeposition9).| | HUKS_TAG_ATTESTATION_CHALLENGE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 501 | Challenge value used in the attestation. | | HUKS_TAG_ATTESTATION_APPLICATION_ID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 502 | Application ID used in the attestation. | | HUKS_TAG_ATTESTATION_ID_BRAND | HuksTagType.HUKS_TAG_TYPE_BYTES \| 503 | Brand of the device. | | HUKS_TAG_ATTESTATION_ID_DEVICE | HuksTagType.HUKS_TAG_TYPE_BYTES \| 504 | ID of the device. | | HUKS_TAG_ATTESTATION_ID_PRODUCT | HuksTagType.HUKS_TAG_TYPE_BYTES \| 505 | Product name of the device. | | HUKS_TAG_ATTESTATION_ID_SERIAL | HuksTagType.HUKS_TAG_TYPE_BYTES \| 506 | SN of the device. | | HUKS_TAG_ATTESTATION_ID_IMEI | HuksTagType.HUKS_TAG_TYPE_BYTES \| 507 | International mobile equipment identity (IMEI) of the device. | | HUKS_TAG_ATTESTATION_ID_MEID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 508 | Mobile equipment identity (MEID) of the device. | | HUKS_TAG_ATTESTATION_ID_MANUFACTURER | HuksTagType.HUKS_TAG_TYPE_BYTES \| 509 | Manufacturer of the device. | | HUKS_TAG_ATTESTATION_ID_MODEL | HuksTagType.HUKS_TAG_TYPE_BYTES \| 510 | Device model. | | HUKS_TAG_ATTESTATION_ID_ALIAS | HuksTagType.HUKS_TAG_TYPE_BYTES \| 511 | Key alias used in the attestation. | | HUKS_TAG_ATTESTATION_ID_SOCID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 512 | System-on-a-chip (SoCID) of the device. | | HUKS_TAG_ATTESTATION_ID_UDID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 513 | Unique device identifier (UDID) of the device. | | HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 514 | Security level used in the attestation. | | HUKS_TAG_ATTESTATION_ID_VERSION_INFO | HuksTagType.HUKS_TAG_TYPE_BYTES \| 515 | Version information used in the attestation. | | HUKS_TAG_IS_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1001 | Whether to use the alias passed in during key generation.| | HUKS_TAG_KEY_STORAGE_FLAG | HuksTagType.HUKS_TAG_TYPE_UINT \| 1002 | Key storage mode. | | HUKS_TAG_IS_ALLOWED_WRAP | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1003 | Reserved. | | HUKS_TAG_KEY_WRAP_TYPE | HuksTagType.HUKS_TAG_TYPE_UINT \| 1004 | Reserved. | | HUKS_TAG_KEY_AUTH_ID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1005 | Reserved. | | HUKS_TAG_KEY_ROLE | HuksTagType.HUKS_TAG_TYPE_UINT \| 1006 | Reserved. | | HUKS_TAG_KEY_FLAG | HuksTagType.HUKS_TAG_TYPE_UINT \| 1007 | Flag of the key. | | HUKS_TAG_IS_ASYNCHRONIZED | HuksTagType.HUKS_TAG_TYPE_UINT \| 1008 | Reserved. | | HUKS_TAG_SECURE_KEY_ALIAS | HuksTagType.HUKS_TAG_TYPE_BOOL \| 1009 | Reserved. | | HUKS_TAG_SECURE_KEY_UUID | HuksTagType.HUKS_TAG_TYPE_BYTES \| 1010 | Reserved. | | HUKS_TAG_KEY_DOMAIN | HuksTagType.HUKS_TAG_TYPE_UINT \| 1011 | Reserved. | | HUKS_TAG_PROCESS_NAME | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10001 | Process name. | | HUKS_TAG_PACKAGE_NAME | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10002 | Reserved. | | HUKS_TAG_ACCESS_TIME | HuksTagType.HUKS_TAG_TYPE_UINT \| 10003 | Reserved. | | HUKS_TAG_USES_TIME | HuksTagType.HUKS_TAG_TYPE_UINT \| 10004 | Reserved. | | HUKS_TAG_CRYPTO_CTX | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10005 | Reserved. | | HUKS_TAG_KEY | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10006 | Reserved. | | HUKS_TAG_KEY_VERSION | HuksTagType.HUKS_TAG_TYPE_UINT \| 10007 | Key version. | | HUKS_TAG_PAYLOAD_LEN | HuksTagType.HUKS_TAG_TYPE_UINT \| 10008 | Reserved. | | HUKS_TAG_AE_TAG | HuksTagType.HUKS_TAG_TYPE_BYTES \| 10009 | Used to pass in the AEAD in GCM mode. | | HUKS_TAG_IS_KEY_HANDLE | HuksTagType.HUKS_TAG_TYPE_ULONG \| 10010 | Reserved. | | HUKS_TAG_OS_VERSION | HuksTagType.HUKS_TAG_TYPE_UINT \| 10101 | OS version. | | HUKS_TAG_OS_PATCHLEVEL | HuksTagType.HUKS_TAG_TYPE_UINT \| 10102 | OS patch level. | | HUKS_TAG_SYMMETRIC_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20001 | Reserved. | | HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20002 | Reserved. | | HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA | HuksTagType.HUKS_TAG_TYPE_BYTES \| 20003 | Reserved. | ## huks.generateKey(deprecated) generateKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Generates a key. This API uses an asynchronous callback to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.generateKeyItem9+](#huksgeneratekeyitem9). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | keyAlias | string | Yes | Alias of the key. | | options | [HuksOptions](#huksoptions) | Yes | Tags required for generating the key. | | callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | Yes | Callback invoked to return the result. If the operation is successful, **HUKS_SUCCESS** is returned; otherwise, an error code defined in **HuksResult** is returned.| **Example** ```js /* Generate an RSA key of 512 bits. */ let keyAlias = 'keyAlias'; let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_RSA }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_512 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_OAEP }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; let options = { properties: properties }; huks.generateKey(keyAlias, options, function (err, data){}); ``` ## huks.generateKey(deprecated) generateKey(keyAlias: string, options: HuksOptions) : Promise\ Generates a key. This API uses a promise to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.generateKeyItem9+](#huksgeneratekeyitem9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | --------------------------- | ---- | ------------------------ | | keyAlias | string | Yes | Alias of the key. | | options | [HuksOptions](#huksoptions) | Yes | Tags required for generating the key.| **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksResult](#huksresultdeprecated)> | Promise used to return the result. If the operation is successful, **HUKS_SUCCESS** is returned; otherwise, an error code is returned.| **Example** ```js /* Generate an ECC key of 256 bits. */ let keyAlias = 'keyAlias'; let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_ECC }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; let options = { properties: properties }; let result = huks.generateKey(keyAlias, options); ``` ## huks.deleteKey(deprecated) deleteKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Deletes a key. This API uses an asynchronous callback to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.deleteKeyItem9+](#huksdeletekeyitem9). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------- | ---- | -------------------------------------------------- | | keyAlias | string | Yes | Key alias passed in when the key was generated. | | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | | callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | Yes | Callback invoked to return the result. If the operation is successful, **HUKS_SUCCESS** is returned; otherwise, an error code is returned.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; huks.deleteKey(keyAlias, emptyOptions, function (err, data) {}); ``` ## huks.deleteKey(deprecated) deleteKey(keyAlias: string, options: HuksOptions) : Promise\ Deletes a key. This API uses a promise to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.deleteKeyItem9+](#huksdeletekeyitem9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------- | ---- | ----------------------------------------------------- | | keyAlias | string | Yes | Key alias passed in when the key was generated.| | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty).| **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksResult](#huksresultdeprecated)> | Promise used to return the result. If the operation is successful, **HUKS_SUCCESS** is returned; otherwise, an error code is returned.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; let result = huks.deleteKey(keyAlias, emptyOptions); ``` ## huks.importKey(deprecated) importKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Imports a key in plaintext. This API uses an asynchronous callback to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.importKeyItem9+](#huksimportkeyitem9). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ------------------------ | ---- | ------------------------------------------------- | | keyAlias | string | Yes | Alias of the key.| | options | [HuksOptions](#huksoptions) | Yes | Tags required for the import and key to import.| | callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | Yes | Callback invoked to return the result. If the operation is successful, **HUKS_SUCCESS** is returned; otherwise, an error code is returned.| **Example** ```js /* Import an AES key of 256 bits. */ let plainTextSize32 = makeRandomArr(32); function makeRandomArr(size) { let arr = new Uint8Array(size); for (let i = 0; i < size; i++) { arr[i] = Math.floor(Math.random() * 10); } return arr; }; let keyAlias = 'keyAlias'; let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_AES }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_ECB }; let options = { properties: properties, inData: plainTextSize32 }; huks.importKey(keyAlias, options, function (err, data){}); ``` ## huks.importKey(deprecated) importKey(keyAlias: string, options: HuksOptions) : Promise\ Imports a key in plaintext. This API uses a promise to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.importKeyItem9+](#huksimportkeyitem9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------- | ---- | ------------------------------------ | | keyAlias | string | Yes | Alias of the key.| | options | [HuksOptions](#huksoptions) | Yes | Tags required for the import and key to import.| **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksResult](#huksresultdeprecated)> | Promise used to return the result. If the operation is successful, **HUKS_SUCCESS** is returned; otherwise, an error code is returned.| **Example** ```js /* Import an AES key of 128 bits. */ let plainTextSize32 = makeRandomArr(32); function makeRandomArr(size) { let arr = new Uint8Array(size); for (let i = 0; i < size; i++) { arr[i] = Math.floor(Math.random() * 10); } return arr; }; /* Step 1 Generate a key. */ let keyAlias = 'keyAlias'; let properties = new Array(); properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_AES }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_128 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value:huks.HuksKeyPadding.HUKS_PADDING_PKCS7 }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, value: huks.HuksCipherMode.HUKS_MODE_ECB }; let huksoptions = { properties: properties, inData: plainTextSize32 }; let result = huks.importKey(keyAlias, huksoptions); ``` ## huks.exportKey(deprecated) exportKey(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Exports a key. This API uses an asynchronous callback to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.exportKeyItem9+](#huksexportkeyitem9). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | keyAlias | string | Yes | Key alias, which must be the same as the alias used when the key was generated. | | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | | callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | Yes | Callback invoked to return the result. If the operation is successful, **HUKS_SUCCESS** is returned and **outData** contains the public key exported. If the operation fails, an error code is returned.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; huks.exportKey(keyAlias, emptyOptions, function (err, data){}); ``` ## huks.exportKey(deprecated) exportKey(keyAlias: string, options: HuksOptions) : Promise\ Exports a key. This API uses a promise to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.exportKeyItem9+](#huksexportkeyitem9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------- | ---- | ------------------------------------------------------------ | | keyAlias | string | Yes | Key alias, which must be the same as the alias used when the key was generated.| | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty).| **Return value** | Type | Description | | ----------------------------------- | ------------------------------------------------------------ | | Promise\<[HuksResult](#huksresultdeprecated)> | Promise used to return the result. If the operation is successful, **HUKS_SUCCESS** is returned and **outData** contains the public key exported. If the operation fails, an error code is returned.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; let result = huks.exportKey(keyAlias, emptyOptions); ``` ## huks.getKeyProperties(deprecated) getKeyProperties(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Obtains key properties. This API uses an asynchronous callback to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.getKeyItemProperties9+](#huksgetkeyitemproperties9). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | keyAlias | string | Yes | Key alias, which must be the same as the alias used when the key was generated. | | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty). | | callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | Yes | Callback invoked to return the result. If the operation is successful, **errorCode** is **HUKS_SUCCESS**; otherwise, an error code is returned.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; huks.getKeyProperties(keyAlias, emptyOptions, function (err, data){}); ``` ## huks.getKeyProperties(deprecated) getKeyProperties(keyAlias: string, options: HuksOptions) : Promise\ Obtains key properties. This API uses a promise to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.getKeyItemProperties9+](#huksgetkeyitemproperties9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------- | ---- | ------------------------------------------------------------ | | keyAlias | string | Yes | Key alias, which must be the same as the alias used when the key was generated.| | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty).| **Return value** | Type | Description | | ------------------ | ------------------------------------------------------------ | | Promise\<[HuksResult](#huksoptions)> | Promise used to return the result. If the operation is successful, **errorCode** is **HUKS_SUCCESS** and **properties** contains the parameters required for generating the key. If the operation fails, an error code is returned. | **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; let result = huks.getKeyProperties(keyAlias, emptyOptions); ``` ## huks.isKeyExist(deprecated) isKeyExist(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Checks whether a key exists. This API uses an asynchronous callback to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.isKeyItemExist9+](#huksiskeyitemexist9). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------- | ---- | ------------------------------------- | | keyAlias | string | Yes | Alias of the key to check.| | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty).| | callback | AsyncCallback\ | Yes | Callback invoked to return the result. The value **TRUE** means that the key exists; **FALSE** means the opposite.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; huks.isKeyExist(keyAlias, emptyOptions, function (err, data){}); ``` ## huks.isKeyExist(deprecated) isKeyExist(keyAlias: string, options: HuksOptions) : Promise\ Checks whether a key exists. This API uses a promise to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.isKeyItemExist9+](#huksiskeyitemexist9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------- | ---- | -------------------------------- | | keyAlias | string | Yes | Alias of the key to check.| | options | [HuksOptions](#huksoptions) | Yes | Empty object (leave this parameter empty).| **Return value** | Type | Description | | ----------------- | --------------------------------------- | | Promise\ | Promise used to return the result. The value **TRUE** means that the key exists; **FALSE** means the opposite.| **Example** ```js /* Set options to emptyOptions. */ let keyAlias = 'keyAlias'; let emptyOptions = { properties: [] }; let result = huks.isKeyExist(keyAlias, emptyOptions); ``` ## huks.init(deprecated) init(keyAlias: string, options: HuksOptions, callback: AsyncCallback\) : void Initializes the data for a key operation. This API uses an asynchronous callback to return the result. **huks.init**, **huks.update**, and **huks.finish** must be used together. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.initSession9+](#huksinitsession9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------- | ---- | ------------------------------------- | | keyAlias | string | Yes | Alias of the target key.| | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **init** operation.| | callback | AsyncCallback\<[HuksHandle](#hukshandledeprecated)> | Yes | Callback invoked to return a session handle for subsequent operations.| ## huks.init(deprecated) init(keyAlias: string, options: HuksOptions) : Promise\ Initializes the data for a key operation. This API uses a promise to return the result. **huks.init**, **huks.update**, and **huks.finish** must be used together. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.initSession9+](#huksinitsession9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------- | ---- | ------------------------------------- | | keyAlias | string | Yes | Alias of the target key.| | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **init** operation.| **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksHandle](#hukshandledeprecated)> | Promise used to return a session handle for subsequent operations.| ## huks.update(deprecated) update(handle: number, token?: Uint8Array, options: HuksOptions, callback: AsyncCallback\) : void Updates the key operation by segment. This API uses an asynchronous callback to return the result. **huks.init**, **huks.update**, and **huks.finish** must be used together. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.updateSession9+](#huksupdatesession9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------- | ---- | -------------------------------------------- | | handle | number | Yes | Handle for the **update** operation. | | token | Uint8Array | No | Token of the **update** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **update** operation. | | callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | Yes | Callback invoked to return the **update** operation result.| ## huks.update(deprecated) update(handle: number, token?: Uint8Array, options: HuksOptions) : Promise\; Updates the key operation by segment. This API uses a promise to return the result. **huks.init**, **huks.update**, and **huks.finish** must be used together. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.updateSession9+](#huksupdatesession9-2). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | ------- | ----------------------------------- | ---- | -------------------------------------------- | | handle | number | Yes | Handle for the **update** operation. | | token | Uint8Array | No | Token of the **update** operation. | | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **update** operation. | **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksResult](#huksresultdeprecated)> | Promise used to return the **update** operation result.| ## huks.finish(deprecated) finish(handle: number, options: HuksOptions, callback: AsyncCallback\) : void Completes the key operation and releases resources. This API uses an asynchronous callback to return the result. **huks.init**, **huks.update**, and **huks.finish** must be used together. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.finishSession9+](#huksfinishsession9). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------- | ---- | ------------------------------------- | | handle | number | Yes | Handle for the **finish** operation.| | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **finish** operation.| | callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | Yes| Callback invoked to return the **finish** operation result.| ## huks.finish(deprecated) finish(handle: number, options: HuksOptions) : Promise\ Completes the key operation and releases resources. This API uses a promise to return the result. **huks.init**, **huks.update**, and **huks.finish** must be used together. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.finishSession9+](#huksfinishsession9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------- | ---- | ------------------------------------- | | handle | number | Yes | Handle for the **finish** operation.| | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **finish** operation.| **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksResult](#huksresultdeprecated)> | Promise used to return the result.| ## huks.abort(deprecated) abort(handle: number, options: HuksOptions, callback: AsyncCallback\) : void Aborts the use of the key. This API uses an asynchronous callback to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.abortSession9+](#huksabortsession9). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------- | ---- | ------------------------------------- | | handle | number | Yes | Handle for the **abort** operation.| | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **abort** operation.| | callback | AsyncCallback\<[HuksResult](#huksresultdeprecated)> | Yes| Callback invoked to return the **abort** operation result.| **Example** ```js /* huks.init, huks.update, and huks.finish must be used together. * If an error occurs in any of them, huks.abort must be called to terminate the use of the key. * * The following uses the callback of an RSA 1024 key as an example. */ let keyalias = "HuksDemoRSA"; let properties = new Array(); let options = { properties: properties, inData: new Uint8Array(0) }; let handle; let resultMessage = ""; async function generateKey() { properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_RSA }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_OAEP }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; huks.generateKey(keyalias, options); } function stringToUint8Array(str) { let arr = []; for (let i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } let tmpUint8Array = new Uint8Array(arr); return tmpUint8Array; } async function huksInit() { await huks.init(keyalias, options).then((data) => { console.log(`test init data: ${JSON.stringify(data)}`); handle = data.handle; }).catch((err) => { console.log("test init err information: " + JSON.stringify(err)) }) } async function huksUpdate() { options.inData = stringToUint8Array("huksHmacTest"); await huks.update(handle, options).then((data) => { if (data.errorCode === 0) { resultMessage += "update success!"; } else { resultMessage += "update fail!"; } }); console.log(resultMessage); } function huksFinish() { options.inData = stringToUint8Array("HuksDemoHMAC"); huks.finish(handle, options).then((data) => { if (data.errorCode === 0) { resultMessage = "finish success!"; } else { resultMessage = "finish fail errorCode: " + data.errorCode; } }).catch((err) => { resultMessage = "Failed to complete the key operation. catch errorMessage:" + JSON.stringify(err) }); console.log(resultMessage); } async function huksAbort() { huks.abort(handle, options).then((data) => { if (data.errorCode === 0) { resultMessage = "abort success!"; } else { resultMessage = "abort fail errorCode: " + data.errorCode; } }).catch((err) => { resultMessage = "Failed to abort the use of the key. catch errorMessage:" + JSON.stringify(err) }); console.log(resultMessage); } ``` ## huks.abort(deprecated) abort(handle: number, options: HuksOptions) : Promise\; Aborts the use of the key. This API uses a promise to return the result. > **NOTE**
This API is deprecated since API version 9. You are advised to use [huks.abortSession9+](#huksabortsession9-1). **System capability**: SystemCapability.Security.Huks **Parameters** | Name | Type | Mandatory| Description | | -------- | ---------------------- | ---- | ------------------------------------- | | handle | number | Yes | Handle for the **abort** operation.| | options | [HuksOptions](#huksoptions) | Yes | Parameter set used for the **abort** operation.| **Return value** | Type | Description | | ----------------------------------- | -------------------------------------------------- | | Promise\<[HuksResult](#huksresultdeprecated)> | Promise used to return the **abort** operation result.| **Example** ```js /* huks.init, huks.update, and huks.finish must be used together. * If an error occurs in any of them, huks.abort must be called to terminate the use of the key. * * The following uses the promise of an RSA 1024-bit key as an example. */ let keyalias = "HuksDemoRSA"; let properties = new Array(); let options = { properties: properties, inData: new Uint8Array(0) }; let handle; let resultMessage = ""; function stringToUint8Array(str) { let arr = []; for (let i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } let tmpUint8Array = new Uint8Array(arr); return tmpUint8Array; } async function generateKey() { properties[0] = { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_RSA }; properties[1] = { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_1024 }; properties[2] = { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT }; properties[3] = { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_OAEP }; properties[4] = { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }; huks.generateKey(keyalias, options, function (err, data) { }); } async function huksInit() { return new Promise((resolve, reject) => { huks.init(keyalias, options, async function (err, data) { if (data.errorCode === 0) { resultMessage = "init success!" handle = data.handle; } else { resultMessage = "init fail errorCode: " + data.errorCode } }); }); } async function huksUpdate() { options.inData = stringToUint8Array("huksHmacTest"); new Promise((resolve, reject) => { huks.update(handle, options, function (err, data) { if (data.errorCode === 0) { resultMessage += "update success!"; } else { resultMessage += "update fail!"; } }); }); console.log(resultMessage); } async function huksFinish() { options.inData = stringToUint8Array("0"); new Promise((resolve, reject) => { huks.finish(handle, options, function (err, data) { if (data.errorCode === 0) { resultMessage = "finish success!"; } else { resultMessage = "finish fail errorCode: " + data.errorCode; } }); }); } function huksAbort() { new Promise((resolve, reject) => { huks.abort(handle, options, function (err, data) { console.log(`Huks_Demo hmac huksAbort1 data ${JSON.stringify(data)}`); console.log(`Huks_Demo hmac huksAbort1 err ${JSON.stringify(err)}`); }); }); } ``` ## HuksHandle(deprecated) Defines the HUKS handle structure. **System capability**: SystemCapability.Security.Huks > **NOTE**
This API is deprecated since API version 9. You are advised to use [HuksSessionHandle9+](#hukssessionhandle9). | Name | Type | Mandatory| Description | | ---------- | ---------------- | ---- | -------- | | errorCode | number | Yes | Error code.| | handle | number | Yes| Value of the handle.| | token | Uint8Array | No| Challenge obtained after the [init](#huksinitdeprecated) operation.| ## HuksResult(deprecated) Defines the **HuksResult** structure. **System capability**: SystemCapability.Security.Huks > **NOTE**
This API is deprecated since API version 9. You are advised to use [HuksReturnResult9+](#huksreturnresult9). | Name | Type | Mandatory| Description | | ---------- | ------------------------------- | ---- | ---------------- | | errorCode | number | Yes | Error code. | | outData | Uint8Array | No | Output data. | | properties | Array\<[HuksParam](#huksparam)> | No | Property information. | | certChains | Array\ | No | Certificate chain information.| ## HuksErrorCode(deprecated) Enumerates the error codes. **System capability**: SystemCapability.Security.Huks > **NOTE**
This API is deprecated since API version 9. You are advised to use HuksExceptionErrCode9+](#huksexceptionerrcode9). | Name | Value | Description| | -------------------------- | ----- | ---- | | HUKS_SUCCESS | 0 |Success.| | HUKS_FAILURE | -1 |Failure.| | HUKS_ERROR_BAD_STATE | -2 |Incorrect state.| | HUKS_ERROR_INVALID_ARGUMENT | -3 |Invalid argument.| | HUKS_ERROR_NOT_SUPPORTED | -4 |Not supported.| | HUKS_ERROR_NO_PERMISSION | -5 |No permission.| | HUKS_ERROR_INSUFFICIENT_DATA | -6 |Insufficient data.| | HUKS_ERROR_BUFFER_TOO_SMALL | -7 |Insufficient buffer.| | HUKS_ERROR_INSUFFICIENT_MEMORY | -8 |Insufficient memory.| | HUKS_ERROR_COMMUNICATION_FAILURE | -9 |Communication failure.| | HUKS_ERROR_STORAGE_FAILURE | -10 |Insufficient storage space.| | HUKS_ERROR_HARDWARE_FAILURE | -11 |Hardware fault.| | HUKS_ERROR_ALREADY_EXISTS | -12 |The object already exists.| | HUKS_ERROR_NOT_EXIST | -13 |The object does not exist.| | HUKS_ERROR_NULL_POINTER | -14 |Null pointer.| | HUKS_ERROR_FILE_SIZE_FAIL | -15 |Incorrect file size.| | HUKS_ERROR_READ_FILE_FAIL | -16 |Failed to read the file.| | HUKS_ERROR_INVALID_PUBLIC_KEY | -17 |Invalid public key.| | HUKS_ERROR_INVALID_PRIVATE_KEY | -18 |Invalid private key.| | HUKS_ERROR_INVALID_KEY_INFO | -19 |Invalid key information.| | HUKS_ERROR_HASH_NOT_EQUAL | -20 |The hash values are not equal.| | HUKS_ERROR_MALLOC_FAIL | -21 |MALLOC failed.| | HUKS_ERROR_WRITE_FILE_FAIL | -22 |Failed to write the file.| | HUKS_ERROR_REMOVE_FILE_FAIL | -23 |Failed to delete the file.| | HUKS_ERROR_OPEN_FILE_FAIL | -24 |Failed to open the file.| | HUKS_ERROR_CLOSE_FILE_FAIL | -25 |Failed to close the file.| | HUKS_ERROR_MAKE_DIR_FAIL | -26 |Failed to create the directory.| | HUKS_ERROR_INVALID_KEY_FILE | -27 |Invalid key file.| | HUKS_ERROR_IPC_MSG_FAIL | -28 |Incorrect IPC information.| | HUKS_ERROR_REQUEST_OVERFLOWS | -29 |Request overflows.| | HUKS_ERROR_PARAM_NOT_EXIST | -30 |The parameter does not exist.| | HUKS_ERROR_CRYPTO_ENGINE_ERROR | -31 |CRYPTO ENGINE error.| | HUKS_ERROR_COMMUNICATION_TIMEOUT | -32 |Communication timed out.| | HUKS_ERROR_IPC_INIT_FAIL | -33 |IPC initialization failed.| | HUKS_ERROR_IPC_DLOPEN_FAIL | -34 |IPC DLOPEN failed.| | HUKS_ERROR_EFUSE_READ_FAIL | -35 |Failed to read eFUSE.| | HUKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST | -36 |New root key material exists.| | HUKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL | -37 |Failed to update the root key material.| | HUKS_ERROR_VERIFICATION_FAILED | -38 |Failed to verify the certificate chain.| | HUKS_ERROR_CHECK_GET_ALG_FAIL | -100 |Failed to obtain the ALG. | | HUKS_ERROR_CHECK_GET_KEY_SIZE_FAIL | -101 |Failed to obtain the key size.| | HUKS_ERROR_CHECK_GET_PADDING_FAIL | -102 |Failed to obtain the padding algorithm.| | HUKS_ERROR_CHECK_GET_PURPOSE_FAIL | -103 |Failed to obtain the key purpose.| | HUKS_ERROR_CHECK_GET_DIGEST_FAIL | -104 |Failed to obtain the digest algorithm.| | HUKS_ERROR_CHECK_GET_MODE_FAIL | -105 |Failed to obtain the cipher mode.| | HUKS_ERROR_CHECK_GET_NONCE_FAIL | -106 |Failed to obtain the nonce.| | HUKS_ERROR_CHECK_GET_AAD_FAIL | -107 |Failed to obtain the AAD.| | HUKS_ERROR_CHECK_GET_IV_FAIL | -108 |Failed to obtain the initialization vector (IV).| | HUKS_ERROR_CHECK_GET_AE_TAG_FAIL | -109 |Failed to obtain the AE flag.| | HUKS_ERROR_CHECK_GET_SALT_FAIL | -110 |Failed to obtain the salt value.| | HUKS_ERROR_CHECK_GET_ITERATION_FAIL | -111 |Failed to obtain the number of iterations.| | HUKS_ERROR_INVALID_ALGORITHM | -112 |Invalid algorithm.| | HUKS_ERROR_INVALID_KEY_SIZE | -113 |Invalid key size.| | HUKS_ERROR_INVALID_PADDING | -114 |Invalid padding algorithm.| | HUKS_ERROR_INVALID_PURPOSE | -115 |Invalid key purpose.| | HUKS_ERROR_INVALID_MODE | -116 |Invalid cipher mode.| | HUKS_ERROR_INVALID_DIGEST | -117 |Invalid digest algorithm.| | HUKS_ERROR_INVALID_SIGNATURE_SIZE | -118 |Invalid signature size.| | HUKS_ERROR_INVALID_IV | -119 |Invalid IV.| | HUKS_ERROR_INVALID_AAD | -120 |Invalid AAD.| | HUKS_ERROR_INVALID_NONCE | -121 |Invalid nonce.| | HUKS_ERROR_INVALID_AE_TAG | -122 |Invalid AE tag.| | HUKS_ERROR_INVALID_SALT | -123 |Invalid salt value.| | HUKS_ERROR_INVALID_ITERATION | -124 |Invalid iteration count.| | HUKS_ERROR_INVALID_OPERATION | -125 |Invalid operation.| | HUKS_ERROR_INTERNAL_ERROR | -999 |Internal error.| | HUKS_ERROR_UNKNOWN_ERROR | -1000 |Unknown error.|