1e41f4b71Sopenharmony_ci# Generating a Key (ArkTS) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ciThis topic walks you through on how to randomly generate a DH key. For details about the scenarios and supported algorithms, see [Supported Algorithms](huks-key-generation-overview.md#supported-algorithms). 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci> **NOTE**<br> 7e41f4b71Sopenharmony_ci> Key aliases must not contain sensitive information, such as personal data. 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci## How to Develop 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci1. Set the alias (**keyAlias**) of the key to generate. 12e41f4b71Sopenharmony_ci - The key alias cannot exceed 128 bytes. 13e41f4b71Sopenharmony_ci - For the keys generated for different services, HUKS isolates the storage paths based on the service identity information to prevent conflicts caused by the same key alias. 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci2. Initialize the key property set. Encapsulate key properties in [HuksParam](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksparam) and use a **HuksParam** array to assign values to the **properties** field of [HuksOptions](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksoptions). 16e41f4b71Sopenharmony_ci The key property set must contain [HuksKeyAlg](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeyalg), [HuksKeySize](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeysize), and [HuksKeyPurpose](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeypurpose). That is, **TAG**, **HUKS_TAG_ALGORITHM**, **HUKS_TAG_PURPOSE**, and **HUKS_TAG_KEY_SIZE** are mandatory. 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci3. Use [huks.generateKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksgeneratekeyitem9) to generate a key based on the key alias and key properties specified. 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ci> **NOTE**<br> 21e41f4b71Sopenharmony_ci> If the service uses the same key alias to call the HUKS API to generate a key again, HUKS will generate a new key and overwrite the historical key file. 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci```ts 25e41f4b71Sopenharmony_ci/* Generate a DH key. */ 26e41f4b71Sopenharmony_ciimport { huks } from '@kit.UniversalKeystoreKit'; 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci/* 1. Set the key alias. */ 29e41f4b71Sopenharmony_cilet keyAlias = 'dh_key'; 30e41f4b71Sopenharmony_ci/* 2. Initialize the key property set. */ 31e41f4b71Sopenharmony_cilet properties1: Array<huks.HuksParam> = [ 32e41f4b71Sopenharmony_ci { 33e41f4b71Sopenharmony_ci tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 34e41f4b71Sopenharmony_ci value: huks.HuksKeyAlg.HUKS_ALG_DH 35e41f4b71Sopenharmony_ci }, 36e41f4b71Sopenharmony_ci { 37e41f4b71Sopenharmony_ci tag: huks.HuksTag.HUKS_TAG_PURPOSE, 38e41f4b71Sopenharmony_ci value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 39e41f4b71Sopenharmony_ci }, 40e41f4b71Sopenharmony_ci { 41e41f4b71Sopenharmony_ci tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 42e41f4b71Sopenharmony_ci value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048 43e41f4b71Sopenharmony_ci } 44e41f4b71Sopenharmony_ci]; 45e41f4b71Sopenharmony_cilet huksOptions: huks.HuksOptions = { 46e41f4b71Sopenharmony_ci properties: properties1, 47e41f4b71Sopenharmony_ci inData: new Uint8Array(new Array()) 48e41f4b71Sopenharmony_ci} 49e41f4b71Sopenharmony_ci 50e41f4b71Sopenharmony_ci/* 3. Generate a key. */ 51e41f4b71Sopenharmony_cifunction generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions) { 52e41f4b71Sopenharmony_ci return new Promise<void>((resolve, reject) => { 53e41f4b71Sopenharmony_ci try { 54e41f4b71Sopenharmony_ci huks.generateKeyItem(keyAlias, huksOptions, (error, data) => { 55e41f4b71Sopenharmony_ci if (error) { 56e41f4b71Sopenharmony_ci reject(error); 57e41f4b71Sopenharmony_ci } else { 58e41f4b71Sopenharmony_ci resolve(data); 59e41f4b71Sopenharmony_ci } 60e41f4b71Sopenharmony_ci }); 61e41f4b71Sopenharmony_ci } catch (error) { 62e41f4b71Sopenharmony_ci throw (error as Error); 63e41f4b71Sopenharmony_ci } 64e41f4b71Sopenharmony_ci }); 65e41f4b71Sopenharmony_ci} 66e41f4b71Sopenharmony_ci 67e41f4b71Sopenharmony_ciasync function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions) { 68e41f4b71Sopenharmony_ci console.info(`enter promise generateKeyItem`); 69e41f4b71Sopenharmony_ci try { 70e41f4b71Sopenharmony_ci await generateKeyItem(keyAlias, huksOptions) 71e41f4b71Sopenharmony_ci .then((data) => { 72e41f4b71Sopenharmony_ci console.info(`promise: generateKeyItem success, data = ${JSON.stringify(data)}`); 73e41f4b71Sopenharmony_ci }) 74e41f4b71Sopenharmony_ci .catch((error: Error) => { 75e41f4b71Sopenharmony_ci console.error(`promise: generateKeyItem failed, ${JSON.stringify(error)}`); 76e41f4b71Sopenharmony_ci }); 77e41f4b71Sopenharmony_ci } catch (error) { 78e41f4b71Sopenharmony_ci console.error(`promise: generateKeyItem input arg invalid, ` + JSON.stringify(error)); 79e41f4b71Sopenharmony_ci } 80e41f4b71Sopenharmony_ci} 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ciasync function TestGenKey() { 83e41f4b71Sopenharmony_ci await publicGenKeyFunc(keyAlias, huksOptions); 84e41f4b71Sopenharmony_ci} 85e41f4b71Sopenharmony_ci``` 86